diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 3f8855c86..65233dc84 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.4](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/cli@2.3.3...@jscad/cli@2.3.4) (2024-11-10) + +**Note:** Version bump only for package @jscad/cli + + + + + ## [2.3.3](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/cli@2.3.2...@jscad/cli@2.3.3) (2024-10-06) **Note:** Version bump only for package @jscad/cli diff --git a/packages/cli/package.json b/packages/cli/package.json index 438d961dc..479e53780 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/cli", - "version": "2.3.3", + "version": "2.3.4", "description": "Command Line Interface (CLI) for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -36,9 +36,9 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/core": "2.6.10", - "@jscad/io": "2.4.9", - "@jscad/modeling": "2.12.3", + "@jscad/core": "2.6.11", + "@jscad/io": "2.4.10", + "@jscad/modeling": "2.12.4", "jszip": "^3.10.1" }, "devDependencies": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index a10e10832..b1b9480c1 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.6.11](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/core@2.6.10...@jscad/core@2.6.11) (2024-11-10) + +**Note:** Version bump only for package @jscad/core + + + + + ## [2.6.10](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/core@2.6.9...@jscad/core@2.6.10) (2024-10-06) **Note:** Version bump only for package @jscad/core diff --git a/packages/core/dist/jscad-core.min.js b/packages/core/dist/jscad-core.min.js index 89bb09c48..0362e1288 100644 --- a/packages/core/dist/jscad-core.min.js +++ b/packages/core/dist/jscad-core.min.js @@ -26,7 +26,7 @@ var cachedSetTimeout,cachedClearTimeout,process=module.exports={};function defau },{}],8:[function(require,module,exports){ module.exports={ "name": "@jscad/core", - "version": "2.6.10", + "version": "2.6.11", "description": "Core functionality for JSCAD Applications", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -62,9 +62,9 @@ module.exports={ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/io": "2.4.9", - "@jscad/io-utils": "2.0.28", - "@jscad/modeling": "2.12.3", + "@jscad/io": "2.4.10", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "json5": "2.2.3", "strip-bom": "4.0.0" }, @@ -88,19 +88,19 @@ module.exports={rebuildGeometry:require("./rebuildGeometry"),rebuildGeometryCli: },{"./rebuildGeometry":11,"./rebuildGeometryCli":12,"./rebuildGeometryWorker":13,"./serializeSolids":14}],10:[function(require,module,exports){ const isGeom2=require("@jscad/modeling").geometries.geom2.isA,isGeom3=require("@jscad/modeling").geometries.geom3.isA,isPath2=require("@jscad/modeling").geometries.path2.isA,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),serializeSolids=require("./serializeSolids"),isResultGeometry=e=>!!(Array.isArray(e)&&e.length>0)&&e.reduce((e,i)=>e||isGeom3(i)||isGeom2(i)||isPath2(i),!1),instanciateDesign=(e,i,r)=>{const{serialize:s}=r;let t;const o=flatten(toArray(e.main(i)));if(isResultGeometry(o))return{solids:t=s?serializeSolids(o):o};throw new Error("bad output from script: expected geom3/geom2/path2 objects")};module.exports=instanciateDesign; -},{"./serializeSolids":14,"@jscad/array-utils":532,"@jscad/modeling":216}],11:[function(require,module,exports){ +},{"./serializeSolids":14,"@jscad/array-utils":533,"@jscad/modeling":217}],11:[function(require,module,exports){ const loadDesign=require("../code-loading/loadDesign"),instanciateDesign=require("./instanciateDesign"),applyParameterDefinitions=require("../parameters/applyParameterDefinitions"),rebuildSolids=(e,a)=>{let{mainPath:i,apiMainPath:n,serialize:s,lookup:o,lookupCounts:r,parameterValues:l}=Object.assign({},{mainPath:"",apiMainPath:"@jscad/modeling",serialize:!1,lookup:null,lookupCounts:null,parameterValues:{}},e);try{const t=e.filesAndFolders,u=loadDesign(i,n,t,l);a(null,{type:"params",parameterDefaults:u.parameterValues,parameterDefinitions:u.parameterDefinitions}),l=applyParameterDefinitions(l,u.parameterDefinitions),l=Object.assign({},u.parameterValues,l);const m={lookup:o,lookupCounts:r,serialize:s},p=instanciateDesign(u.rootModule,l,m);a(null,{type:"solids",solids:p.solids,lookup:p.lookup,lookupCounts:p.lookupCounts})}catch(e){a({type:"errors",name:e.name?e.name:"Error",message:e.message?e.message:e.toString(),description:e.description?e.description:"",number:e.number?e.number:"",fileName:e.fileName?e.fileName:"",lineNumber:e.lineNumber?e.lineNumber:"",columnNumber:e.columnNumber?e.columnNumber:"",stack:e.stack?e.stack:""},null)}};module.exports=rebuildSolids; },{"../code-loading/loadDesign":16,"../parameters/applyParameterDefinitions":27,"./instanciateDesign":10}],12:[function(require,module,exports){ const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),requireDesignFromModule=require("../code-loading/requireDesignFromModule"),getAllParameterDefintionsAndValues=require("../parameters/getParameterDefinitionsAndValues"),makeWebRequire=require("../code-loading/webRequire"),rebuildSolids=e=>{let{apiMainPath:r,mainPath:a,parameterValues:i,useFakeFs:t}=Object.assign({},{apiMainPath:"@jscad/modeling"},e),s=require;if(t){const i=path.parse(a),t=`${i.name}.js`,u=`/${i.name}.js`,n=[{ext:"js",fullPath:u,name:t,source:e.source}];s=makeWebRequire(n,{apiMainPath:r}),a=u}const u=requireDesignFromModule(a,s),n=getAllParameterDefintionsAndValues(u,i);return toArray(u.main(n.parameterValues))};module.exports=rebuildSolids; -},{"../code-loading/requireDesignFromModule":19,"../code-loading/webRequire":23,"../parameters/getParameterDefinitionsAndValues":28,"@jscad/array-utils":532,"path":4}],13:[function(require,module,exports){ +},{"../code-loading/requireDesignFromModule":19,"../code-loading/webRequire":23,"../parameters/getParameterDefinitionsAndValues":28,"@jscad/array-utils":533,"path":4}],13:[function(require,module,exports){ const rebuildGeometryWorker=e=>{const o=require("./rebuildGeometry");e.onmessage=function(t){if(t.data instanceof Object){const{data:r}=t;"generate"===r.cmd&&o(r,(o,t)=>{t&&e.postMessage(t),o&&e.postMessage(o)})}}};module.exports=rebuildGeometryWorker; },{"./rebuildGeometry":11}],14:[function(require,module,exports){ const{geom2:geom2,geom3:geom3,path2:path2}=require("@jscad/modeling").geometries,serializeSolids=e=>e=e.map(e=>(geom2.isA(e)&&geom2.toSides(e),geom3.isA(e)&&geom3.toPolygons(e),path2.isA(e)&&path2.toPoints(e),e));module.exports=serializeSolids; -},{"@jscad/modeling":216}],15:[function(require,module,exports){ +},{"@jscad/modeling":217}],15:[function(require,module,exports){ module.exports={makeFakeFs:require("./makeFakeFs.js"),requireDesignUtilsFs:require("./requireDesignUtilsFs")}; },{"./makeFakeFs.js":17,"./requireDesignUtilsFs":20}],16:[function(require,module,exports){ @@ -118,25 +118,25 @@ const validateDesignModule=require("./validateDesignModule"),normalizeDesignModu },{"./normalizeDesignModule":18,"./validateDesignModule":22}],20:[function(require,module,exports){ const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/,splitPath=e=>splitPathRe.exec(e).slice(1),parsePath=e=>{assertPath(e);const t=splitPath(e);if(!t||4!==t.length)throw new TypeError("Invalid path '"+e+"'");return t[1]=t[1]||"",t[2]=t[2]||"",t[3]=t[3]||"",{root:t[0],dir:t[0]+t[1].slice(0,t[1].length-1),base:t[2],ext:t[3],name:t[2].slice(0,t[2].length-t[3].length)}},assertPath=e=>{if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+e)},getDesignEntryPoint=(e,t)=>{if(!t)return;const a=toArray(t)[0];let r;const n=e.statSync(a);if(n.isFile())return a;if(n.isDirectory()){const t=path.join(a,"package.json");if(e.existsSync(t)){const r=JSON.parse(e.readFileSync(t)).main;if(r)return path.join(a,r)}const n=e.readdirSync(a),i=["main","index",parsePath(path.basename(a)).name],s=i.map(e=>e+".js"),o=i.map(e=>e+".jscad"),c=n.filter(e=>s.concat(o).includes(e));return c.length>0&&(r=path.join(a,c[0])),r}return a},packageNameFromDir=(e,t,a)=>{const r=path.join(t,"package.json");if(e.existsSync(r)){const t=JSON.parse(e.readFileSync(r)).name;if(t)return t}return a?parsePath(path.basename(a)).name:path.basename(t)},getDesignName=(e,t)=>{if(!t)return"undefined";const a=toArray(t)[0],r=e.statSync(a);if(r.isFile()){const t=path.dirname(a);return packageNameFromDir(e,t,a)}return r.isDirectory()?packageNameFromDir(e,a):void 0};module.exports={getDesignEntryPoint:getDesignEntryPoint,getDesignName:getDesignName}; -},{"@jscad/array-utils":532,"path":4}],21:[function(require,module,exports){ +},{"@jscad/array-utils":533,"path":4}],21:[function(require,module,exports){ const{deserializers:deserializers}=require("@jscad/io"),modulifyTransform=(e,r)=>Object.assign({},r,{source:r.source}),createJscadEntry=(e,r)=>{const s=e.name.substring(0,e.name.lastIndexOf(".")+1)+"jscad",t="/"+s;return Object.assign({},e,{ext:"jscad",name:s,fullPath:t,source:r})},transformSources=(e,r)=>{if(r&&r.length>1)return r;const s={js:[modulifyTransform],jscad:[modulifyTransform]};return r&&(r=r.map(r=>(r=>{if(r.source&&r.ext){const t=Object.assign({},e,{filename:r.name,output:"script"});if(r.ext in deserializers){const e=(0,deserializers[r.ext])(t,r.source);return createJscadEntry(r,e)}if(r.ext in s)return s[r.ext].reduce((e,r)=>r(t,e),r)}return r})(r))),r};module.exports=transformSources; -},{"@jscad/io":74}],22:[function(require,module,exports){ +},{"@jscad/io":75}],22:[function(require,module,exports){ const validateDesignModule=n=>{if(!n)throw new Error("undefined root module passed !");if("function"==typeof n&&console.warn("please use named exports for your main() function ! auto updating"),!("main"in n))throw new Error("no main() function found in the input script")};module.exports=validateDesignModule; },{}],23:[function(require,module,exports){ const path=require("path"),posix=path.posix?path.posix:path,getFileExtensionFromString=require("../utils/getFileExtensionFromString"),{combineParameterDefinitions:combineParameterDefinitions,getParameterDefinitionsFromSource:getParameterDefinitionsFromSource}=require("../parameters/getParameterDefinitionsFromSource"),findMatch=(e,t)=>{for(let r=0;r{const r=require("strip-bom");t.extensions[".js"]=((t,n)=>{const i=e.readFileSync(n,"utf8");t._compile(r(i),n)})},registerJsonExtension=(e,t)=>{t.extensions[".json"]=((t,r)=>{const n=e.readFileSync(r,"utf8");t.exports=JSON.parse(n)})},makeWebRequire=(e,t)=>{const r={apiMainPath:"@jscad/modeling",fakeFs:require("./makeFakeFs")(e)},{apiMainPath:n,fakeFs:i}=Object.assign({},r,t),s="@jscad/modeling"===n?require("@jscad/modeling"):require(n),o={"@jscad/io":{exports:require("@jscad/io")},"@jscad/array-utils":{exports:require("@jscad/array-utils")},"@jscad/modeling":{exports:s},fs:{exports:i}},a={},l={},u=(t,r)=>{const n=o[r];if(n)return n.exports;t&&!r.startsWith("/")||(t="/");const i=t=>{let r=getFileExtensionFromString(t);r||(r="js",t+=".js"),r="."+r;const n=findMatch(t,e);if(!n)return null;if(n.children)return null;if(a[r]){if(l[t])return l[t];const e={exports:{},_compile:(t,r)=>{try{new Function("require","module",t)(u.bind(null,n.fullPath),e)}catch(e){const t=e.message;r=r.replace("/","");const n=e.lineNumber?e.lineNumber-2:0,i=e.columnNumber?e.columnNumber:0;throw e.stack.startsWith("Object")?e.stack=`${e.stack}\nObject. (${r}:${n}:${i})`:((e=new SyntaxError(t,r,n)).columnNumber=i,e.stack=`Object. (${r}:${n}:${i})`),e}const i=t.includes("@jscad-params")?getParameterDefinitionsFromSource(t,r):[],s=e.exports.getParameterDefinitions;e.exports.getParameterDefinitions=(()=>combineParameterDefinitions(i,s&&s()||[]))}};return a[r](e,n.fullPath),l[t]=e.exports,l[t]}return null},s=t=>{if(!findMatch(t,e))return null;"/"===t&&(t="");let r=t+"/index.js",n=i(r);return n||((n=i(r=t+"/index.json"))||null)},c=t=>{let r,n=findMatch(t,e);if(!n)return null;if(!n.children)return null;if(n=findMatch(t+"/package.json",e)){const e=JSON.parse(n.source).main;if(e){const n=posix.normalize(t+"/"+e);return(r=i(n))?r:(r=s(n))||null}}return(r=s(t))||null};if(r.startsWith("./")||r.startsWith("/")||r.startsWith("../")){r=posix.normalize(posix.dirname(t)+posix.sep+r);let e=i(r);if(e)return e;if(e=c(r))return e;throw new Error(`Cannot find relative path to module ${r}`)}const m=((e,t)=>{const r=(e=>{const t=e.split("/"),r=[];for(let e=t.length-1;e>0;e--){if("node_modules"===t[e])continue;const n=posix.sep+posix.join(...t.slice(1,e+1),"node_modules");r.push(n)}return r})(t);for(let t=0;t{}),registerJsExtension(i,c),registerJsonExtension(i,c),c};module.exports=makeWebRequire; -},{"../parameters/getParameterDefinitionsFromSource":29,"../utils/getFileExtensionFromString":33,"./makeFakeFs":17,"@jscad/array-utils":532,"@jscad/io":74,"@jscad/modeling":216,"path":4,"strip-bom":7}],24:[function(require,module,exports){ +},{"../parameters/getParameterDefinitionsFromSource":29,"../utils/getFileExtensionFromString":33,"./makeFakeFs":17,"@jscad/array-utils":533,"@jscad/io":75,"@jscad/modeling":217,"path":4,"strip-bom":7}],24:[function(require,module,exports){ module.exports={evaluation:require("./code-evaluation"),io:require("./io"),loading:require("./code-loading"),parameters:require("./parameters"),utils:require("./utils"),web:require("./web")}; },{"./code-evaluation":9,"./code-loading":15,"./io":25,"./parameters":32,"./utils":34,"./web":36}],25:[function(require,module,exports){ module.exports={registerAllExtensions:require("./registerExtensions").registerAllExtensions,unRegisterAllExtensions:require("./registerExtensions").unRegisterAllExtensions}; },{"./registerExtensions":26}],26:[function(require,module,exports){ -const{deserializers:deserializers}=require("@jscad/io"),registerJscadExtension=(e,s)=>{const i=require("strip-bom");s.extensions[".jscad"]=((s,r)=>{const t=e.readFileSync(r,"utf8");s._compile(i(t),r)})},unRegisterJscadExtension=(e,s)=>{delete s.extensions[".jscad"]},registerDeserializer=(e,s,i)=>{const r=deserializers[e],t="."+e;i.extensions[t]=((e,i)=>{const t=s.readFileSync(i,"utf8"),n=r({filename:i,output:"geometry"},t);e.exports=n})},unregisterDeserializer=(e,s,i)=>{const r="."+e;delete i.extensions[r]},registerAllExtensions=(e,s)=>{registerJscadExtension(e,s);for(const i of Object.keys(deserializers))registerDeserializer(i,e,s)},unRegisterAllExtensions=(e,s)=>{unRegisterJscadExtension(0,s);for(const e of Object.keys(deserializers))unregisterDeserializer(e,0,s)};module.exports={registerAllExtensions:registerAllExtensions,unRegisterAllExtensions:unRegisterAllExtensions}; +const{deserializers:deserializers}=require("@jscad/io"),registerJscadExtension=(e,s)=>{const i=require("strip-bom");s.extensions[".jscad"]=((s,r)=>{const t=e.readFileSync(r,"utf8");s._compile(i(t),r)})},unRegisterJscadExtension=(e,s)=>{delete s.extensions[".jscad"]},registerDeserializer=(e,s,i)=>{const r=deserializers[e],t="."+e;i.extensions[t]=((e,i)=>{const t=s.readFileSync(i),n=t.buffer?t.buffer.slice(t.byteOffset,t.byteOffset+t.length):t,o=r({filename:i,output:"geometry"},n);e.exports=o})},unregisterDeserializer=(e,s,i)=>{const r="."+e;delete i.extensions[r]},registerAllExtensions=(e,s)=>{registerJscadExtension(e,s);for(const i of Object.keys(deserializers))registerDeserializer(i,e,s)},unRegisterAllExtensions=(e,s)=>{unRegisterJscadExtension(0,s);for(const e of Object.keys(deserializers))unregisterDeserializer(e,0,s)};module.exports={registerAllExtensions:registerAllExtensions,unRegisterAllExtensions:unRegisterAllExtensions}; -},{"@jscad/io":74,"strip-bom":7}],27:[function(require,module,exports){ +},{"@jscad/io":75,"strip-bom":7}],27:[function(require,module,exports){ const applyParameterDefinitions=(e,a,r=!1)=>{return Object.keys(e).reduce((t,i)=>{let s=e[i];const n=a.filter(e=>e.name===i),o=n.length>0?n[0]:{type:"unknown"};switch(o.type){case"choice":s=valueForChoices(s,o);break;case"float":case"number":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseFloat(s);break;case"int":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseInt(s);break;case"checkbox":s=!!s;break;case"radio":s=valueForChoices(s,o);break;case"slider":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseFloat(s);break;default:if(r)throw new Error(`Parameter (${i}) has no matching definition`)}return t[i]=s,t},{})},isNumber=e=>!isNaN(parseFloat(e))&&isFinite(e),valueForChoices=(e,a)=>{let r=e;const t=a.captions?a.captions.indexOf(r):a.values.indexOf(r);return r=t>-1&&a.values.length>=t?a.values[t]:r,r=a.values.length>0&&isNumber(a.values[0])?parseFloat(r):r,r=a.values.length>0&&"boolean"==typeof r?!!r:r};module.exports=applyParameterDefinitions; },{}],28:[function(require,module,exports){ @@ -169,7 +169,7 @@ module.exports={walkFileTree:require("./walkFileTree")}; },{"./walkFileTree":37}],37:[function(require,module,exports){ const{flatten:flatten}=require("@jscad/array-utils"),{formats:formats}=require("@jscad/io/formats"),getFileExtensionFromString=require("../utils/getFileExtensionFromString"),binaryMimetypes={bmp:"image/bmp",gif:"image/gif",jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",tif:"image/tiff",tiff:"image/tiff",otc:"font/otf",otf:"font/otf",ttc:"font/ttf",ttf:"font/ttf",woff:"font/woff",woff2:"font/woff",stl:"application/sla"},readFileAsync=(e,t)=>{const r=e.fullPath?e.fullPath:t.fullPath?t.fullPath:"",i=getFileExtensionFromString(e.name),n=e.mimetype;return new Promise((t,s)=>{const o=new FileReader;o.onload=(s=>{const o=s.target.result;o.byteLength?t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o}):"string"==typeof o&&t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o})}),o.onerror=(e=>{s(new Error(`Failed to load file: ${r} [${o.error}]`))}),binaryMimetypes[i]?o.readAsArrayBuffer(e):o.readAsText(e)})},isSupportedFormat=e=>{const t=getFileExtensionFromString(e.name),r=formats[t]?formats[t].mimetype:binaryMimetypes[t];return e.mimetype=e.type&&e.type.length?e.type:r,e.mimetype&&e.mimetype.length},pseudoArraytoArray=e=>{const t=[];for(let r=0;rnull!=e,processEntries=e=>{const t=pseudoArraytoArray(e.filter(isEmpty)).filter(isEmpty).reduce((e,t)=>{if(t.name.startsWith("."))return e;if(t.isFile)e.push(processFile(t));else if(t.isDirectory)e.push(processDirectory(t));else if(t instanceof File){const r=t.webkitRelativePath?t.webkitRelativePath:void 0,i=isSupportedFormat(t)?readFileAsync(t,{fullPath:r}):void 0;if(!i)throw new Error("Unsuported format (or folder in Safari)!");e.push(i)}return e},[]);return Promise.all(t).then(e=>e.filter(e=>null!=e))},processFile=e=>{return new Promise((t,r)=>{e.file(r=>{isSupportedFormat(r)?t(readFileAsync(r,e)):t(void 0)},t=>{const i=`${t.message} (${t.code})`;r(new Error(`Failed to load file: ${e.fullPath} [${i}]`))})})},processDirectory=e=>{return new Promise((t,r)=>{if(e.entries)e.entries.length?processEntries(e.entries).then(t):t([]);else{e.createReader().readEntries(e=>{e.length?processEntries(e).then(t):t([])},r)}}).then(flatten).then(t=>({children:t=t.map(t=>(t.fullPath.startsWith("/")||(t.fullPath=e.fullPath+"/"+t.name),t)),fullPath:e.fullPath,name:e.name}))},transformFileList=e=>{const t=require("path");if(1===e.length){const r=e[0],i=r.webkitRelativePath?r.webkitRelativePath:r.name;if(i.split(t.sep).length<2){const e=t.sep,n={fullPath:e,name:e,isDirectory:!0,entries:[]};return r.fullPath=t.normalize(e+i),n.entries.push(r),[n]}}let r;const i=new Map,n=(e,n)=>{if(!i.has(e)){const s={fullPath:e,name:n,isDirectory:!0,entries:[]};r||(r=s),i.set(e,s);const o=e.split(t.sep);if(o.length>1){const e=t.sep+t.join(...o.slice(0,-1)),r=i.get(e);r&&r.entries.push(s)}}};for(let r=0;re||t.startsWith("."),!1))continue;if(!isSupportedFormat(s))continue;const l=o.slice(0,-1);for(let e=0;e{let t=e;return e.length&&e[0]instanceof File&&(t=transformFileList(e)),processEntries(t)};module.exports=walkFileTree; -},{"../utils/getFileExtensionFromString":33,"@jscad/array-utils":532,"@jscad/io/formats":73,"path":4}],38:[function(require,module,exports){ +},{"../utils/getFileExtensionFromString":33,"@jscad/array-utils":533,"@jscad/io/formats":74,"path":4}],38:[function(require,module,exports){ "use strict";var node_worker_1=require("./node-worker.cjs"),u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(t,n){for(var e=new u16(31),r=0;r<31;++r)e[r]=n+=1<>>1|(21845&i)<<1;x=(61680&(x=(52428&x)>>>2|(13107&x)<<2))>>>4|(3855&x)<<4,rev[i]=((65280&x)>>>8|(255&x)<<8)>>>1}var hMap=function(t,n,e){for(var r=t.length,i=0,s=new u16(n);i>>f]=u}else for(o=new u16(r),i=0;i>>15-t[i]);return o},flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;for(i=144;i<256;++i)flt[i]=9;for(i=256;i<280;++i)flt[i]=7;for(i=280;i<288;++i)flt[i]=8;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(t){for(var n=t[0],e=1;en&&(n=t[e]);return n},bits=function(t,n,e){var r=n/8|0;return(t[r]|t[r+1]<<8)>>(7&n)&e},bits16=function(t,n){var e=n/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(7&n)},shft=function(t){return(t+7)/8|0},slc=function(t,n,e){(null==n||n<0)&&(n=0),(null==e||e>t.length)&&(e=t.length);var r=new(2==t.BYTES_PER_ELEMENT?u16:4==t.BYTES_PER_ELEMENT?u32:u8)(e-n);return r.set(t.subarray(n,e)),r};exports.FlateErrorCode={UnexpectedEOF:0,InvalidBlockType:1,InvalidLengthLiteral:2,InvalidDistance:3,StreamFinished:4,NoStreamHandler:5,InvalidHeader:6,NoCallback:7,InvalidUTF8:8,ExtraFieldTooLong:9,InvalidDate:10,FilenameTooLong:11,StreamFinishing:12,InvalidZipData:13,UnknownCompressionMethod:14};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],err=function(t,n,e){var r=new Error(n||ec[t]);if(r.code=t,Error.captureStackTrace&&Error.captureStackTrace(r,err),!e)throw r;return r},inflt=function(t,n,e){var r=t.length;if(!r||e&&e.f&&!e.l)return n||new u8(0);var i=!n||e,s=!e||e.i;e||(e={}),n||(n=new u8(3*r));var o=function(t){var e=n.length;if(t>e){var r=new u8(Math.max(2*e,t));r.set(n),n=r}},a=e.f||0,f=e.p||0,u=e.b||0,l=e.l,c=e.d,h=e.m,p=e.n,v=8*r;do{if(!l){a=bits(t,f,1);var d=bits(t,f+1,3);if(f+=3,!d){var b=t[(A=shft(f)+4)-4]|t[A-3]<<8,y=A+b;if(y>r){s&&err(0);break}i&&o(u+b),n.set(t.subarray(A,y),u),e.b=u+=b,e.p=f=8*y,e.f=a;continue}if(1==d)l=flrm,c=fdrm,h=9,p=5;else if(2==d){var g=bits(t,f,31)+257,m=bits(t,f+10,15)+4,z=g+bits(t,f+5,31)+1;f+=14;for(var w=new u8(z),x=new u8(19),S=0;S>>4)<16)w[S++]=A;else{var I=0,M=0;for(16==A?(M=3+bits(t,f,3),f+=2,I=w[S-1]):17==A?(M=3+bits(t,f,7),f+=3):18==A&&(M=11+bits(t,f,127),f+=7);M--;)w[S++]=I}}var Z=w.subarray(0,g),C=w.subarray(g);h=max(Z),p=max(C),l=hMap(Z,h,1),c=hMap(C,p,1)}else err(1);if(f>v){s&&err(0);break}}i&&o(u+131072);for(var G=(1<>>4;if((f+=15&I)>v){s&&err(0);break}if(I||err(2),_<256)n[u++]=_;else{if(256==_){F=f,l=null;break}var P=_-254;if(_>264){var O=fleb[S=_-257];P=bits(t,f,(1<>>4;L||err(3),f+=15&L;C=fd[N];if(N>3){O=fdeb[N];C+=bits16(t,f)&(1<v){s&&err(0);break}i&&o(u+131072);for(var q=u+P;u>>8},wbits16=function(t,n,e){e<<=7&n;var r=n/8|0;t[r]|=e,t[r+1]|=e>>>8,t[r+2]|=e>>>16},hTree=function(t,n){for(var e=[],r=0;rh&&(h=s[r].s);var p=new u16(h+1),v=ln(e[l-1],p,0);if(v>n){r=0;var d=0,b=v-n,y=1<n))break;d+=y-(1<>>=b;d>0;){var m=s[r].s;p[m]=0&&d;--r){var z=s[r].s;p[z]==n&&(--p[z],++d)}v=n}return[new u8(p),v]},ln=function(t,n,e){return-1==t.s?Math.max(ln(t.l,n,e+1),ln(t.r,n,e+1)):n[t.s]=e},lc=function(t){for(var n=t.length;n&&!t[--n];);for(var e=new u16(++n),r=0,i=t[0],s=1,o=function(t){e[r++]=t},a=1;a<=n;++a)if(t[a]==i&&a!=n)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return[e.subarray(0,r),n]},clen=function(t,n){for(var e=0,r=0;r>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s4&&!T[clim[k-1]];--k);var I,M,Z,C,G=u+5<<3,E=clen(i,flt)+clen(s,fdt)+o,F=clen(i,h)+clen(s,d)+o+14+3*k+clen(S,T)+(2*S[16]+3*S[17]+7*S[18]);if(G<=E&&G<=F)return wfblk(n,l,t.subarray(f,f+u));if(wbits(n,l,1+(F15&&(wbits(n,l,L[U]>>>5&127),l+=L[U]>>>12)}}}else I=flm,M=flt,Z=fdm,C=fdt;for(U=0;U255){N=r[U]>>>18&31;wbits16(n,l,I[N+257]),l+=M[N+257],N>7&&(wbits(n,l,r[U]>>>23&31),l+=fleb[N]);var q=31&r[U];wbits16(n,l,Z[q]),l+=C[q],q>3&&(wbits16(n,l,r[U]>>>5&8191),l+=fdeb[q])}else wbits16(n,l,I[r[U]]),l+=M[r[U]];return wbits16(n,l,I[256]),l+M[256]},deo=new u32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),et=new u8(0),dflt=function(t,n,e,r,i,s){var o=t.length,a=new u8(r+o+5*(1+Math.ceil(o/7e3))+i),f=a.subarray(r,a.length-i),u=0;if(!n||o<8)for(var l=0;l<=o;l+=65535){var c=l+65535;c>=o&&(f[u>>3]=s),u=wfblk(f,u+1,t.subarray(l,c))}else{for(var h=deo[n-1],p=h>>>13,v=8191&h,d=(1<7e3||T>24576)&&C>423){u=wblk(t,f,0,w,x,S,D,T,k,l-k,u),T=U=D=0,k=l;for(var G=0;G<286;++G)x[G]=0;for(G=0;G<30;++G)S[G]=0}var E=2,F=0,_=v,P=M-Z&32767;if(C>2&&I==z(l-P))for(var O=Math.min(p,C)-1,L=Math.min(32767,l),N=Math.min(258,C);P<=L&&--_&&M!=Z;){if(t[l+E]==t[l+E-P]){for(var q=0;qE){if(E=q,F=P,q>O)break;var B=Math.min(P,q-2),H=0;for(G=0;GH&&(H=j,Z=Y)}}}P+=(M=Z)-(Z=b[M])+32768&32767}if(F){w[T++]=268435456|revfl[E]<<18|revfd[F];var R=31&revfl[E],J=31&revfd[F];D+=fleb[R]+fdeb[J],++x[257+R],++S[J],A=l+E,++U}else w[T++]=t[l],++x[t[l]]}}u=wblk(t,f,s,w,x,S,D,T,k,l-k,u),!s&&7&u&&(u=wfblk(f,u+1,et))}return slc(a,0,r+shft(u)+i)},crct=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var e=n,r=9;--r;)e=(1&e&&-306674912)^e>>>1;t[n]=e}return t}(),crc=function(){var t=-1;return{p:function(n){for(var e=t,r=0;r>>8;t=e},d:function(){return~t}}},adler=function(){var t=1,n=0;return{p:function(e){for(var r=t,i=n,s=0|e.length,o=0;o!=s;){for(var a=Math.min(o+2655,s);o>16),i=(65535&i)+15*(i>>16)}t=r,n=i},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(n%=65521))<<8|n>>>8}}},dopt=function(t,n,e,r,i){return dflt(t,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):12+n.mem,e,r,!i)},mrg=function(t,n){var e={};for(var r in t)e[r]=t[r];for(var r in n)e[r]=n[r];return e},wcln=function(t,n,e){for(var r=t(),i=t.toString(),s=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o>>0},b8=function(t,n){return b4(t,n)+4294967296*b4(t,n+4)},wbytes=function(t,n,e){for(;e;++n)t[n]=e,e>>>=8},gzh=function(t,n){var e=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&wbytes(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){t[3]=8;for(var r=0;r<=e.length;++r)t[r+10]=e.charCodeAt(r)}},gzs=function(t){31==t[0]&&139==t[1]&&8==t[2]||err(6,"invalid gzip data");var n=t[3],e=10;4&n&&(e+=t[10]|2+(t[11]<<8));for(var r=(n>>3&1)+(n>>4&1);r>0;r-=!t[e++]);return e+(2&n)},gzl=function(t){var n=t.length;return(t[n-4]|t[n-3]<<8|t[n-2]<<16|t[n-1]<<24)>>>0},gzhl=function(t){return 10+(t.filename&&t.filename.length+1||0)},zlh=function(t,n){var e=n.level,r=0==e?0:e<6?1:9==e?3:2;t[0]=120,t[1]=r<<6|(r?32-2*r:1)},zlv=function(t){(8!=(15&t[0])||t[0]>>>4>7||(t[0]<<8|t[1])%31)&&err(6,"invalid zlib data"),32&t[1]&&err(6,"invalid zlib data: preset dictionaries not supported")};function AsyncCmpStrm(t,n){return n||"function"!=typeof t||(n=t,t={}),this.ondata=n,t}var Deflate=function(){function t(t,n){n||"function"!=typeof t||(n=t,t={}),this.ondata=n,this.o=t||{}}return t.prototype.p=function(t,n){this.ondata(dopt(t,this.o,0,0,!n),n)},t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.d=n,this.p(t,n||!1)},t}();exports.Deflate=Deflate;var AsyncDeflate=function(){return function(t,n){astrmify([bDflt,function(){return[astrm,Deflate]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Deflate(t.data);onmessage=astrm(n)},6)}}();function deflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt],function(t){return pbf(deflateSync(t.data[0],t.data[1]))},0,e)}function deflateSync(t,n){return dopt(t,n||{},0,0)}exports.AsyncDeflate=AsyncDeflate,exports.deflate=deflate,exports.deflateSync=deflateSync;var Inflate=function(){function t(t){this.s={},this.p=new u8(0),this.ondata=t}return t.prototype.e=function(t){this.ondata||err(5),this.d&&err(4);var n=this.p.length,e=new u8(n+t.length);e.set(this.p),e.set(t,n),this.p=e},t.prototype.c=function(t){this.d=this.s.i=t||!1;var n=this.s.b,e=inflt(this.p,this.o,this.s);this.ondata(slc(e,n,this.s.b),this.d),this.o=slc(e,this.s.b-32768),this.s.b=this.o.length,this.p=slc(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(t,n){this.e(t),this.c(n)},t}();exports.Inflate=Inflate;var AsyncInflate=function(){return function(t){this.ondata=t,astrmify([bInflt,function(){return[astrm,Inflate]}],this,0,function(){var t=new Inflate;onmessage=astrm(t)},7)}}();function inflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt],function(t){return pbf(inflateSync(t.data[0],gu8(t.data[1])))},1,e)}function inflateSync(t,n){return inflt(t,n)}exports.AsyncInflate=AsyncInflate,exports.inflate=inflate,exports.inflateSync=inflateSync;var Gzip=function(){function t(t,n){this.c=crc(),this.l=0,this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t),this.l+=t.length;var e=dopt(t,this.o,this.v&&gzhl(this.o),n&&8,!n);this.v&&(gzh(e,this.o),this.v=0),n&&(wbytes(e,e.length-8,this.c.d()),wbytes(e,e.length-4,this.l)),this.ondata(e,n)},t}();exports.Gzip=Gzip,exports.Compress=Gzip;var AsyncGzip=function(){return function(t,n){astrmify([bDflt,gze,function(){return[astrm,Deflate,Gzip]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Gzip(t.data);onmessage=astrm(n)},8)}}();function gzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,gze,function(){return[gzipSync]}],function(t){return pbf(gzipSync(t.data[0],t.data[1]))},2,e)}function gzipSync(t,n){n||(n={});var e=crc(),r=t.length;e.p(t);var i=dopt(t,n,gzhl(n),8),s=i.length;return gzh(i,n),wbytes(i,s-8,e.d()),wbytes(i,s-4,r),i}exports.AsyncGzip=AsyncGzip,exports.AsyncCompress=AsyncGzip,exports.gzip=gzip,exports.compress=gzip,exports.gzipSync=gzipSync,exports.compressSync=gzipSync;var Gunzip=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){var e=this.p.length>3?gzs(this.p):4;if(e>=this.p.length&&!n)return;this.p=this.p.subarray(e),this.v=0}n&&(this.p.length<8&&err(6,"invalid gzip data"),this.p=this.p.subarray(0,-8)),Inflate.prototype.c.call(this,n)},t}();exports.Gunzip=Gunzip;var AsyncGunzip=function(){return function(t){this.ondata=t,astrmify([bInflt,guze,function(){return[astrm,Inflate,Gunzip]}],this,0,function(){var t=new Gunzip;onmessage=astrm(t)},9)}}();function gunzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,guze,function(){return[gunzipSync]}],function(t){return pbf(gunzipSync(t.data[0]))},3,e)}function gunzipSync(t,n){return inflt(t.subarray(gzs(t),-8),n||new u8(gzl(t)))}exports.AsyncGunzip=AsyncGunzip,exports.gunzip=gunzip,exports.gunzipSync=gunzipSync;var Zlib=function(){function t(t,n){this.c=adler(),this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t);var e=dopt(t,this.o,this.v&&2,n&&4,!n);this.v&&(zlh(e,this.o),this.v=0),n&&wbytes(e,e.length-4,this.c.d()),this.ondata(e,n)},t}();exports.Zlib=Zlib;var AsyncZlib=function(){return function(t,n){astrmify([bDflt,zle,function(){return[astrm,Deflate,Zlib]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Zlib(t.data);onmessage=astrm(n)},10)}}();function zlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,zle,function(){return[zlibSync]}],function(t){return pbf(zlibSync(t.data[0],t.data[1]))},4,e)}function zlibSync(t,n){n||(n={});var e=adler();e.p(t);var r=dopt(t,n,2,4);return zlh(r,n),wbytes(r,r.length-4,e.d()),r}exports.AsyncZlib=AsyncZlib,exports.zlib=zlib,exports.zlibSync=zlibSync;var Unzlib=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){if(this.p.length<2&&!n)return;this.p=this.p.subarray(2),this.v=0}n&&(this.p.length<4&&err(6,"invalid zlib data"),this.p=this.p.subarray(0,-4)),Inflate.prototype.c.call(this,n)},t}();exports.Unzlib=Unzlib;var AsyncUnzlib=function(){return function(t){this.ondata=t,astrmify([bInflt,zule,function(){return[astrm,Inflate,Unzlib]}],this,0,function(){var t=new Unzlib;onmessage=astrm(t)},11)}}();function unzlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,zule,function(){return[unzlibSync]}],function(t){return pbf(unzlibSync(t.data[0],gu8(t.data[1])))},5,e)}function unzlibSync(t,n){return inflt((zlv(t),t.subarray(2,-4)),n)}exports.AsyncUnzlib=AsyncUnzlib,exports.unzlib=unzlib,exports.unzlibSync=unzlibSync;var Decompress=function(){function t(t){this.G=Gunzip,this.I=Inflate,this.Z=Unzlib,this.ondata=t}return t.prototype.push=function(t,n){if(this.ondata||err(5),this.s)this.s.push(t,n);else{if(this.p&&this.p.length){var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length)}else this.p=t;if(this.p.length>2){var r=this,i=function(){r.ondata.apply(r,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(i):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]<<8|this.p[1])%31?new this.I(i):new this.Z(i),this.s.push(this.p,n),this.p=null}}},t}();exports.Decompress=Decompress;var AsyncDecompress=function(){function t(t){this.G=AsyncGunzip,this.I=AsyncInflate,this.Z=AsyncUnzlib,this.ondata=t}return t.prototype.push=function(t,n){Decompress.prototype.push.call(this,t,n)},t}();function decompress(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),31==t[0]&&139==t[1]&&8==t[2]?gunzip(t,n,e):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflate(t,n,e):unzlib(t,n,e)}function decompressSync(t,n){return 31==t[0]&&139==t[1]&&8==t[2]?gunzipSync(t,n):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflateSync(t,n):unzlibSync(t,n)}exports.AsyncDecompress=AsyncDecompress,exports.decompress=decompress,exports.decompressSync=decompressSync;var fltn=function(t,n,e,r){for(var i in t){var s=t[i],o=n+i,a=r;Array.isArray(s)&&(a=mrg(r,s[1]),s=s[0]),s instanceof u8?e[o]=[s,a]:(e[o+="/"]=[new u8(0),a],fltn(s,o,e,r))}},te="undefined"!=typeof TextEncoder&&new TextEncoder,td="undefined"!=typeof TextDecoder&&new TextDecoder,tds=0;try{td.decode(et,{stream:!0}),tds=1}catch(t){}var dutf8=function(t){for(var n="",e=0;;){var r=t[e++],i=(r>127)+(r>223)+(r>239);if(e+i>t.length)return[n,slc(t,e-1)];i?3==i?(r=((15&r)<<18|(63&t[e++])<<12|(63&t[e++])<<6|63&t[e++])-65536,n+=String.fromCharCode(55296|r>>10,56320|1023&r)):n+=1&i?String.fromCharCode((31&r)<<6|63&t[e++]):String.fromCharCode((15&r)<<12|(63&t[e++])<<6|63&t[e++]):n+=String.fromCharCode(r)}},DecodeUTF8=function(){function t(t){this.ondata=t,tds?this.t=new TextDecoder:this.p=et}return t.prototype.push=function(t,n){if(this.ondata||err(5),n=!!n,this.t)return this.ondata(this.t.decode(t,{stream:!0}),n),void(n&&(this.t.decode().length&&err(8),this.t=null));this.p||err(4);var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length);var r=dutf8(e),i=r[0],s=r[1];n?(s.length&&err(8),this.p=null):this.p=s,this.ondata(i,n)},t}();exports.DecodeUTF8=DecodeUTF8;var EncodeUTF8=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.ondata(strToU8(t),this.d=n||!1)},t}();function strToU8(t,n){if(n){for(var e=new u8(t.length),r=0;r>1)),o=0,a=function(t){s[o++]=t};for(r=0;rs.length){var f=new u8(o+8+(i-r<<1));f.set(s),s=f}var u=t.charCodeAt(r);u<128||n?a(u):u<2048?(a(192|u>>6),a(128|63&u)):u>55295&&u<57344?(a(240|(u=65536+(1047552&u)|1023&t.charCodeAt(++r))>>18),a(128|u>>12&63),a(128|u>>6&63),a(128|63&u)):(a(224|u>>12),a(128|u>>6&63),a(128|63&u))}return slc(s,0,o)}function strFromU8(t,n){if(n){for(var e="",r=0;r65535&&err(9),n+=r+4}return n},wzh=function(t,n,e,r,i,s,o,a){var f=r.length,u=e.extra,l=a&&a.length,c=exfl(u);wbytes(t,n,null!=o?33639248:67324752),n+=4,null!=o&&(t[n++]=20,t[n++]=e.os),t[n]=20,n+=2,t[n++]=e.flag<<1|(null==s&&8),t[n++]=i&&8,t[n++]=255&e.compression,t[n++]=e.compression>>8;var h=new Date(null==e.mtime?Date.now():e.mtime),p=h.getFullYear()-1980;if((p<0||p>119)&&err(10),wbytes(t,n,p<<25|h.getMonth()+1<<21|h.getDate()<<16|h.getHours()<<11|h.getMinutes()<<5|h.getSeconds()>>>1),n+=4,null!=s&&(wbytes(t,n,e.crc),wbytes(t,n+4,s),wbytes(t,n+8,e.size)),wbytes(t,n+12,f),wbytes(t,n+14,c),n+=16,null!=o&&(wbytes(t,n,l),wbytes(t,n+6,e.attrs),wbytes(t,n+10,o),n+=14),t.set(r,n),n+=f,c)for(var v in u){var d=u[v],b=d.length;wbytes(t,n,+v),wbytes(t,n+2,b),t.set(d,n+4),n+=4+b}return l&&(t.set(a,n),n+=l),n},wzf=function(t,n,e,r,i){wbytes(t,n,101010256),wbytes(t,n+8,e),wbytes(t,n+10,e),wbytes(t,n+12,r),wbytes(t,n+16,i)},ZipPassThrough=function(){function t(t){this.filename=t,this.c=crc(),this.size=0,this.compression=0}return t.prototype.process=function(t,n){this.ondata(null,t,n)},t.prototype.push=function(t,n){this.ondata||err(5),this.c.p(t),this.size+=t.length,n&&(this.crc=this.c.d()),this.process(t,n||!1)},t}();exports.ZipPassThrough=ZipPassThrough;var ZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new Deflate(n,function(t,n){e.ondata(null,t,n)}),this.compression=8,this.flag=dbf(n.level)}return t.prototype.process=function(t,n){try{this.d.push(t,n)}catch(t){this.ondata(t,null,n)}},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.ZipDeflate=ZipDeflate;var AsyncZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new AsyncDeflate(n,function(t,n,r){e.ondata(t,n,r)}),this.compression=8,this.flag=dbf(n.level),this.terminate=this.d.terminate}return t.prototype.process=function(t,n){this.d.push(t,n)},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.AsyncZipDeflate=AsyncZipDeflate;var Zip=function(){function t(t){this.ondata=t,this.u=[],this.d=1}return t.prototype.add=function(t){var n=this;if(this.ondata||err(5),2&this.d)this.ondata(err(4+8*(1&this.d),0,1),null,!1);else{var e=strToU8(t.filename),r=e.length,i=t.comment,s=i&&strToU8(i),o=r!=t.filename.length||s&&i.length!=s.length,a=r+exfl(t.extra)+30;r>65535&&this.ondata(err(11,0,1),null,!1);var f=new u8(a);wzh(f,0,t,e,o);var u=[f],l=function(){for(var t=0,e=u;t65535&&U(err(11,0,1),null),S)if(b<16e4)try{U(null,deflateSync(f,v))}catch(t){U(t,null)}else l.push(deflate(f,v,U));else U(null,f)},d=0;d65535&&err(11);var b=l?deflateSync(f,u):f,y=b.length,g=crc();g.p(f),r.push(mrg(u,{size:f.length,crc:g.d(),c:b,f:S,m:p,u:c!=o.length||p&&h.length!=v,o:i,compression:l})),i+=30+c+d+y,s+=76+2*(c+d)+(v||0)+y}for(var m=new u8(s+22),z=i,w=s-i,x=0;x0){var r=Math.min(this.c,t.length),i=t.subarray(0,r);if(this.c-=r,this.d?this.d.push(i,!this.c):this.k[0].push(i),(t=t.subarray(r)).length)return this.push(t,n)}else{var s=0,o=0,a=void 0,f=void 0;this.p.length?t.length?((f=new u8(this.p.length+t.length)).set(this.p),f.set(t,this.p.length)):f=this.p:f=t;for(var u=f.length,l=this.c,c=l&&this.d,h=function(){var t,n=b4(f,o);if(67324752==n){s=1,a=o,p.d=null,p.c=0;var r=b2(f,o+6),i=b2(f,o+8),c=2048&r,h=8&r,v=b2(f,o+26),d=b2(f,o+28);if(u>o+30+v+d){var b=[];p.k.unshift(b),s=2;var y,g=b4(f,o+18),m=b4(f,o+22),z=strFromU8(f.subarray(o+30,o+=30+v),!c);4294967295==g?(t=h?[-2]:z64e(f,o),g=t[0],m=t[1]):h&&(g=-1),o+=d,p.c=g;var w={name:z,compression:i,start:function(){if(w.ondata||err(5),g){var t=e.o[i];t||w.ondata(err(14,"unknown compression type "+i,1),null,!1),(y=g<0?new t(z):new t(z,g,m)).ondata=function(t,n,e){w.ondata(t,n,e)};for(var n=0,r=b;n=0&&(w.size=g,w.originalSize=m),p.onfile(w)}return"break"}if(l){if(134695760==n)return a=o+=12+(-2==l&&8),s=3,p.c=0,"break";if(33639248==n)return a=o-=4,s=3,p.c=0,"break"}},p=this;o65558)return o(err(13,0,1),null),i;var f=b2(t,a+8);if(f){var u=f,l=b4(t,a+16),c=4294967295==l;if(c){if(a=b4(t,a-12),101075792!=b4(t,a))return o(err(13,0,1),null),i;u=f=b4(t,a+32),l=b4(t,a+48)}for(var h=n&&n.filter,p=function(n){var e=zh(t,l,c),a=e[0],u=e[1],p=e[2],v=e[3],d=e[4],b=e[5],y=slzh(t,b);l=d;var g=function(t,n){t?(i(),o(t,null)):(n&&(s[v]=n),--f||o(null,s))};if(!h||h({name:v,size:u,originalSize:p,compression:a}))if(a)if(8==a){var m=t.subarray(y,y+u);if(u<32e4)try{g(null,inflateSync(m,new u8(p)))}catch(t){g(t,null)}else r.push(inflate(m,{size:p},g))}else g(err(14,"unknown compression type "+a,1),null);else g(null,slc(t,y,y+u));else g(null,null)},v=0;v65558)&&err(13);var i=b2(t,r+8);if(!i)return{};var s=b4(t,r+16),o=4294967295==s;o&&(r=b4(t,r-12),101075792!=b4(t,r)&&err(13),i=b4(t,r+32),s=b4(t,r+48));for(var a=n&&n.filter,f=0;f0&&(e="\n",r=indenter(t)),function n(t){var i,o,c;return o="",c=!0,t.some(function(t,r,u){if(0===r)return i="<"+t,1===u.length||void 0;if(1===r){if(isObject(t))return Object.keys(t).forEach(function(n){i+=" "+n+'="'+t[n]+'"'}),2===u.length||void(i+=">");i+=">"}switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(o+=t+e)}c=!1,o+=n(t)})?i+"/>"+e:c?i+clean(o)+""+e:i+e+r(o)+""+e}(n)}module.exports=stringify; },{}],41:[function(require,module,exports){ -const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,stringify=require("onml/lib/stringify"),{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="model/3mf",fileExtension="3mf",serialize=(e,...t)=>{e=Object.assign({},{unit:"millimeter",metadata:!0,defaultcolor:[1,160/255,0,1],compress:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to 3MF");t.length!==o.length&&console.warn("some objects could not be serialized to 3MF"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},o));const r=["model",{unit:e.unit,"xml:lang":"und"},["metadata",{name:"Application"},"JSCAD"]];e.metadata&&r.push(["metadata",{name:"CreationDate"},(new Date).toISOString()]),r.push(translateResources(t,e)),r.push(translateBuild(t,e));const n=`\n${stringify(r,2)}`;if(e.compress){const e={"3D":{"3dmodel.model":strToU8(n)},_rels:{".rels":strToU8(rels)},"[Content_Types].xml":strToU8(contenttype)};return[zipSync(e,{comment:"created by JSCAD"}).buffer]}return[n]},contenttype='\n\n \n \n \n \n',rels='\n\n \n \n',translateResources=(e,t)=>{let o=["resources",{},translateMaterials(e,t)];return o=o.concat(translateObjects(e,t))},translateMaterials=(e,t)=>{let o=["basematerials",{id:"0"}];const r=[];return e.forEach((e,o)=>{let n=colors.rgbToHex(t.defaultcolor).toUpperCase();e.color&&(n=colors.rgbToHex(e.color).toUpperCase()),r.push(["base",{name:`mat${o}`,displaycolor:n}])}),o=o.concat(r)},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{if(geometries.geom3.isA(e)){geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}}),o},translateBuild=(e,t)=>{let o=["build",{}];const r=[];return e.forEach((e,t)=>{r.push(["item",{objectid:`${t+1}`}])}),o=o.concat(r)},convertToObject=(e,t)=>{const o=e.name?e.name:`Part ${t.id}`;return["object",{id:`${t.id+1}`,type:"model",pid:"0",pindex:`${t.id}`,name:o},convertToMesh(e,t)]},convertToMesh=(e,t)=>{return["mesh",{},convertToVertices(e,t),convertToVolumes(e,t)]},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{x:e[0],y:e[1],z:e[2]}]},convertToVolumes=(e,t)=>{let o=0;const r=geometries.geom3.toPolygons(e);let n=["triangles",{}];return r.forEach(e=>{if(e.vertices.length<3)return;const t=convertToTriangles(e,o);n=n.concat(t),o+=e.vertices.length}),n},convertToTriangles=(e,t)=>{const o=[];for(let r=0;r{e=Object.assign({},{unit:"millimeter",metadata:!0,defaultcolor:[1,160/255,0,1],compress:!0},e);const o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to 3MF");t.length!==o.length&&console.warn("some objects could not be serialized to 3MF"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},o));const r=["model",{unit:e.unit,"xml:lang":"und"},["metadata",{name:"Application"},"JSCAD"]];e.metadata&&r.push(["metadata",{name:"CreationDate"},(new Date).toISOString()]),r.push(translateResources(t,e)),r.push(translateBuild(t,e));const n=`\n${stringify(r,2)}`;if(e.compress){const e={"3D":{"3dmodel.model":strToU8(n)},_rels:{".rels":strToU8(rels)},"[Content_Types].xml":strToU8(contenttype)};return[zipSync(e,{comment:"created by JSCAD"}).buffer]}return[n]},contenttype='\n\n \n \n \n \n',rels='\n\n \n \n',translateResources=(e,t)=>{let o=["resources",{},translateMaterials(e,t)];return o=o.concat(translateObjects(e,t))},translateMaterials=(e,t)=>{let o=["basematerials",{id:"0"}];const r=[];return e.forEach((e,o)=>{let n=colors.rgbToHex(t.defaultcolor).toUpperCase();e.color&&(n=colors.rgbToHex(e.color).toUpperCase()),r.push(["base",{name:`mat${o}`,displaycolor:n}])}),o=o.concat(r)},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{if(geometries.geom3.isA(e)){geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}}),o},translateBuild=(e,t)=>{let o=["build",{}];const r=[];return e.forEach((e,t)=>{r.push(["item",{objectid:`${t+1}`}])}),o=o.concat(r)},convertToObject=(e,t)=>{const o=e.name?e.name:`Part ${t.id}`;return["object",{id:`${t.id+1}`,type:"model",pid:"0",pindex:`${t.id}`,name:o},convertToMesh(e,t)]},convertToMesh=(e,t)=>{return["mesh",{},convertToVertices(e,t),convertToVolumes(e,t)]},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{x:e[0],y:e[1],z:e[2]}]},convertToVolumes=(e,t)=>{let o=0;const r=geometries.geom3.toPolygons(e);let n=["triangles",{}];return r.forEach(e=>{if(e.vertices.length<3)return;const t=convertToTriangles(e,o);n=n.concat(t),o+=e.vertices.length}),n},convertToTriangles=(e,t)=>{const o=[];for(let r=0;r=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; },{}],43:[function(require,module,exports){ @@ -196,7 +196,7 @@ const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,string },{"xmlchars/xml/1.0/ed5":42,"xmlchars/xml/1.1/ed2":43,"xmlchars/xmlns/1.0/ed3":44}],46:[function(require,module,exports){ module.exports={ "name": "@jscad/amf-deserializer", - "version": "2.3.8", + "version": "2.3.9", "description": "AMF Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -227,7 +227,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -247,12 +248,12 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),instantia const amfMesh=a=>{const e={type:"mesh",objects:[]};return e},amfVertices=a=>{const e={type:"vertices",objects:[]};return e},amfCoordinates=a=>{const e={type:"coordinates",objects:[]};return e},amfNormal=a=>{const e={type:"normal",objects:[]};return e},amfX=a=>({type:"x",value:"0"}),amfY=a=>({type:"y",value:"0"}),amfZ=a=>({type:"z",value:"0"}),amfVolume=a=>{const e={type:"volume"};return a.materialid&&(e.materialid=a.materialid),e.objects=[],e},amfTriangle=a=>{const e={type:"triangle",objects:[]};return e},amfV1=a=>({type:"v1",value:"0"}),amfV2=a=>({type:"v2",value:"0"}),amfV3=a=>({type:"v3",value:"0"}),amfVertex=a=>{const e={type:"vertex",objects:[]};return e},amfEdge=a=>{const e={type:"edge",objects:[]};return e},amfMetadata=a=>{const e={type:"metadata"};return a.type&&(e.mtype=a.type),a.id&&(e.id=a.id),e},amfMaterial=a=>{const e={type:"material"};return a.id&&(e.id=a.id),e.objects=[],e},amfColor=a=>{const e={type:"color",objects:[]};return e},amfR=a=>({type:"r",value:"1"}),amfG=a=>({type:"g",value:"1"}),amfB=a=>({type:"b",value:"1"}),amfA=a=>({type:"a",value:"1"}),amfMap=a=>{const e={type:"map"};return a.gtexid&&(e.gtexid=a.gtexid),a.btexid&&(e.btexid=a.btexid),a.rtexid&&(e.rtexid=a.rtexid),e.objects=[],e},amfU1=a=>({type:"u1",value:"0"}),amfU2=a=>({type:"u2",value:"0"}),amfU3=a=>({type:"u3",value:"0"});module.exports={amfMesh:amfMesh,amfVertices:amfVertices,amfCoordinates:amfCoordinates,amfX:amfX,amfY:amfY,amfZ:amfZ,amfNormal:amfNormal,amfVolume:amfVolume,amfTriangle:amfTriangle,amfV1:amfV1,amfV2:amfV2,amfV3:amfV3,amfVertex:amfVertex,amfEdge:amfEdge,amfMetadata:amfMetadata,amfMaterial:amfMaterial,amfColor:amfColor,amfR:amfR,amfG:amfG,amfB:amfB,amfA:amfA,amfMap:amfMap,amfU1:amfU1,amfU2:amfU2,amfU3:amfU3}; },{}],50:[function(require,module,exports){ -const version=require("../package.json").version,translate=require("./translate"),instantiate=require("./deserialize"),deserialize=(e,t)=>{const a={filename:"amf",output:"script",version:version,addMetaData:!0};return"script"===(e=Object.assign({},a,e)).output?translate(e,t):instantiate(e,t)},extension="amf";module.exports={deserialize:deserialize,extension:"amf"}; +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,translate=require("./translate"),instantiate=require("./deserialize"),deserialize=(e,i)=>{const t={filename:"amf",output:"script",version:version,addMetaData:!0};return e=Object.assign({},t,e),i=ensureString(i),"script"===e.output?translate(e,i):instantiate(e,i)},extension="amf";module.exports={deserialize:deserialize,extension:"amf"}; -},{"../package.json":46,"./deserialize":48,"./translate":53}],51:[function(require,module,exports){ +},{"../package.json":46,"./deserialize":48,"./translate":53,"@jscad/io-utils":71}],51:[function(require,module,exports){ const{maths:maths,geometries:geometries}=require("@jscad/modeling");let lastmaterial;const findMaterial=(e,t)=>{if(lastmaterial&&lastmaterial.id===t)return lastmaterial;for(let o=0;o{for(let o=0;o{for(let t=0;t{const o=findMaterial(e,t);return o?getColor(o.objects):null},createObject=(e,t,o,s)=>{const l=[],a=[],r=[],n=o.amfMaterials,c=(e,t)=>{if("coordinates"===e.type){const t=parseFloat(getValue(e.objects,"x")),o=parseFloat(getValue(e.objects,"y")),s=parseFloat(getValue(e.objects,"z"));l.push([t,o,s])}},i=(e,t)=>{"vertex"===e.type&&e.objects.forEach(c)},g=(e,t)=>{if("triangle"===e.type){const t=parseInt(getValue(e.objects,"v1")),o=parseInt(getValue(e.objects,"v2")),s=parseInt(getValue(e.objects,"v3"));a.push([t,o,s]);const l=getColor(e.objects);l?r.push(l):r.push(u)}};let u=null;const p=(e,t)=>{switch(e.type){case"vertices":e.objects.forEach(i);break;case"volume":u=getColor(e.objects),e.materialid&&(u=findColorByMaterial(n,e.materialid)),e.objects.forEach(g)}},h=(e,t)=>{"mesh"===e.type&&e.objects.forEach(p)};if(!0===s.instantiate){const t=s.amf.scale,o=1!==t?([e,o,s])=>maths.vec3.fromValues(e*t,o*t,s*t):e=>maths.vec3.clone(e);e.objects.forEach(h);const n=getColor(e.objects),c=a.length,i=l.length,g=[];for(let e=0;e=i||t.push(o(l[a[e][s]]));const s=geometries.poly3.fromPoints(t),n=r[e]?r[e]:void 0;n&&(s.color=n),g.push(s)}let u=geometries.geom3.create(g);return n&&(u=u.color=n),u}let m="";if(e.objects.length>0){e.objects.forEach(h);const t=getColor(e.objects),o=a.length,n=l.length;m+=`\n// Object ${e.id}\n// faces : ${o}\n// vertices: ${n}\nconst createObject${e.id} = () => {\n let polygons = []\n let polygon\n`;for(let e=0;e=n||(m+=` [${l[a[e][t]]}],\n`);m+=" ])\n";const t=r[e];t&&(m+=` polygon.color = [${t}]\n`),m+=" polygons.push(polygon)\n"}m+=" let shape = geometries.geom3.create(polygons)\n";const c=s.scale?s.scale:1;1!==c&&(m+=` shape = transforms.scale([${c},${c},${c}], shape)\n`),t&&(m+=` shape = colors.colorize([${t}], shape)\n`),m+=" return shape\n}\n"}return m};module.exports=createObject; -},{"@jscad/modeling":216}],52:[function(require,module,exports){ +},{"@jscad/modeling":217}],52:[function(require,module,exports){ const saxes=require("saxes"),{amfMesh:amfMesh,amfVertices:amfVertices,amfCoordinates:amfCoordinates,amfX:amfX,amfY:amfY,amfZ:amfZ,amfNormal:amfNormal,amfVolume:amfVolume,amfTriangle:amfTriangle,amfV1:amfV1,amfV2:amfV2,amfV3:amfV3,amfVertex:amfVertex,amfEdge:amfEdge,amfMetadata:amfMetadata,amfMaterial:amfMaterial,amfColor:amfColor,amfR:amfR,amfG:amfG,amfB:amfB,amfA:amfA,amfMap:amfMap,amfU1:amfU1,amfU2:amfU2,amfU3:amfU3}=require("./helpers"),{inchMM:inchMM}=require("./constants");let amfLast=null,amfDefinition=0;const amfObjects=[],amfMaterials=[],amfTextures=[],amfConstels=[];let amfObj=null;const amfAmf=a=>{const e={type:"amf",unit:"mm",scale:1};switch(a.unit&&(e.unit=a.unit.toLowerCase()),e.unit.toLowerCase()){case"inch":e.scale=inchMM;break;case"foot":e.scale=12*inchMM;break;case"meter":e.scale=1e3;break;case"micron":e.scale=.001}return e.objects=[],e},amfObject=a=>{const e={type:"object",id:`JSCAD${amfObjects.length}`};return a.id&&(e.id=a.id),e.objects=[],e},createAmfParser=(a,e)=>{const f=new saxes.SaxesParser;f.on("error",a=>{console.log(`ERROR: AMF file line ${a.line}, column ${a.column}, bad character [${a.c}]`)}),f.on("opentag",a=>{const e={AMF:amfAmf,OBJECT:a=>{const e=amfObject(a);return 0===amfDefinition&&(amfDefinition=1),e},MESH:amfMesh,VERTICES:amfVertices,VERTEX:amfVertex,EDGE:amfEdge,VOLUME:amfVolume,MATERIAL:a=>{const e=amfMaterial(a);return 0===amfDefinition&&(amfDefinition=2),e},TEXTURE:a=>{0===amfDefinition&&(amfDefinition=3)},CONSTELLATION:a=>{0===amfDefinition&&(amfDefinition=4)},METADATA:a=>{const e=amfMetadata(a);return 0===amfDefinition&&(amfDefinition=5),e},COORDINATES:amfCoordinates,NORMAL:amfNormal,NX:amfX,X:amfX,NY:amfY,Y:amfY,NZ:amfZ,Z:amfZ,TRIANGLE:amfTriangle,V1:amfV1,VTEX1:amfV1,V2:amfV2,VTEX2:amfV2,V3:amfV3,VTEX3:amfV3,COLOR:amfColor,R:amfR,G:amfG,B:amfB,A:amfA,MAP:amfMap,TEXMAP:amfMap,U1:amfU1,UTEX1:amfU1,WTEX1:amfU1,U2:amfU2,UTEX2:amfU2,WTEX2:amfU2,U3:amfU3,UTEX3:amfU3,WTEX3:amfU3,COMPOSITE:()=>void 0,undefined:()=>console.log(`WARNING: unsupported AMF element: ${a.name}`)},f=a.name.toUpperCase(),m=e[f]?e[f](a.attributes,{amfObjects:amfObjects}):null;if(m){switch(amfDefinition){case 0:"objects"in m&&amfObjects.push(m);break;case 1:if(amfObjects.length>0){const a=amfObjects.pop();"objects"in a&&a.objects.push(m),amfObjects.push(a),"objects"in m&&amfObjects.push(m)}break;case 2:if("material"===m.type)amfMaterials.push(m);else if(amfMaterials.length>0){const a=amfMaterials.pop();"objects"in a&&a.objects.push(m),amfMaterials.push(a),"objects"in m&&amfMaterials.push(m)}break;case 3:case 4:case 5:break;default:console.log("WARNING: invalid AMF definition")}amfLast=m}}),f.on("closetag",a=>{switch(a.name.toUpperCase()){case"AMF":case"OBJECT":case"MESH":case"VERTICES":case"VERTEX":case"EDGE":case"COORDINATES":case"NORMAL":case"VOLUME":case"TRIANGLE":case"MATERIAL":case"COLOR":case"MAP":case"TEXMAP":break;case"TEXTURE":return void(3===amfDefinition&&(amfDefinition=0));case"CONSTELLATION":return void(4===amfDefinition&&(amfDefinition=0));case"METADATA":return void(5===amfDefinition&&(amfDefinition=0));default:return}let e=null;switch(amfDefinition){case 0:case 1:amfObjects.length>0&&"object"===(e=amfObjects.pop()).type&&(amfDefinition=0),0===amfObjects.length&&(amfObj=e);break;case 2:amfMaterials.length>0&&"material"===(e=amfMaterials.pop()).type&&(amfMaterials.push(e),amfDefinition=0);break;case 3:case 4:case 5:amfDefinition=0}}),f.on("text",a=>{null!==a&&(a=a.trim()).length>0&&amfLast&&0!==amfDefinition&&(amfLast.value=a,amfLast=null)}),f.on("end",()=>{}),f.write(a).close()},parse=(a,e)=>(createAmfParser(a),{amfObj:amfObj,amfMaterials:amfMaterials,amfTextures:amfTextures,amfConstels:amfConstels});module.exports=parse; },{"./constants":47,"./helpers":49,"saxes":45}],53:[function(require,module,exports){ @@ -261,7 +262,7 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),translate },{"./constants":47,"./objectBuilder":51,"./parse":52}],54:[function(require,module,exports){ const stringify=require("onml/lib/stringify"),{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/amf+xml",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,unit:"millimeter"},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to AMF");t.length!==o.length&&console.warn("some objects could not be serialized to AMF"),o=toArray(modifiers.generalize({snap:!0,triangulate:!0},o)),e.statusCallback&&e.statusCallback({progress:0});let r=["amf",{unit:e.unit,version:"1.1"},["metadata",{type:"author"},"Created by JSCAD"]];r=r.concat(translateObjects(o,e));const n=`\n${stringify(r,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[n]},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}),o},convertToObject=(e,t)=>{return["object",{id:t.id},convertToMesh(e,t)]},convertToMesh=(e,t)=>{let o=["mesh",{},convertToVertices(e,t)];return o=o.concat(convertToVolumes(e,t))},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{},convertToCoordinates(e,t)]},convertToCoordinates=(e,t)=>{return["coordinates",{},["x",{},e[0]],["y",{},e[1]],["z",{},e[2]]]},convertToVolumes=(e,t)=>{const o=convertColor(e.color),r=geometries.geom3.toPolygons(e),n=[];let s=["volume",{}];o&&s.push(o);let l=0;return r.forEach(e=>{if(e.vertices.length<3)return;const o=convertToTriangles(e,l,t);s=s.concat(o),l+=e.vertices.length}),n.push(s),n},convertColor=e=>e?(e.length<4&&e.push(1),["color",{},["r",{},e[0]],["g",{},e[1]],["b",{},e[2]],["a",{},e[3]]]):null,convertToColor=(e,t)=>{const o=e.color;return convertColor(o)},convertToTriangles=(e,t,o)=>{const r=convertToColor(e),n=[];for(let o=0;ot&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; },{}],56:[function(require,module,exports){ @@ -277,15 +278,15 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255 const{BYBLOCK:BYBLOCK,BYLAYER:BYLAYER}=require("./autocad"),findLayer=(r,o)=>{const e=r.lnam||"0";for(const r of o)if(r.name===e)return r;return null},getColorNumber=(r,o)=>{let e=r.cnmb||-1;if(e===BYLAYER){e=-1;const n=findLayer(r,o);null!==n&&(e=n.cnmb||-1)}return e},mod=(r,o)=>{const e=r%o;return Math.floor(e>=0?e:e+o)},getColor=(r,o)=>{if(r<1)return null;const e=o[r=mod(r,o.length)];return[e[0]/255,e[1]/255,e[2]/255,e[3]/255]};module.exports={findLayer:findLayer,getColor:getColor,getColorNumber:getColorNumber}; },{"./autocad":57}],60:[function(require,module,exports){ -const version=require("./package.json").version,{BYLAYER:BYLAYER,getTLA:getTLA}=require("./autocad"),colorIndex=require("./colorindex2017"),dxf=require("./DxfReader"),{instantiateAsciiDxf:instantiateAsciiDxf}=require("./instantiate"),translateAsciiDxf=require("./translate"),handleError=(e,t)=>{if(!0===e.options.strict)throw t;console.log(`error: line ${t.line}, column ${t.column}, bad character [${t.c}]`)},handleStart=(e,t)=>{},handleEnd=(e,t)=>{},handleEntity=(e,t,a)=>{let s=null;switch(a){case"LAYER":(s={type:"layer"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(67)]=0,e.objstack.push(s);break;case"LINE":(s={type:"line"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=0,e.objstack.push(s);break;case"LWPOLYLINE":(s={type:"lwpolyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(38)]=0,s[getTLA(39)]=0,s[getTLA(43)]=0,s[getTLA(70)]=0,s[getTLA(90)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"MESH":(s={type:"mesh"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(91)]=0,s[getTLA(92)]=0,s[getTLA(93)]=0,s[getTLA(94)]=0,s[getTLA(95)]=0,s.state=0,e.objstack.push(s);break;case"POLYLINE":(s={type:"polyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(39)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,s[getTLA(75)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ARC":(s={type:"arc"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"CIRCLE":(s={type:"circle"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ELLIPSE":(s={type:"ellipse"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"VERTEX":(s={type:"vertex"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(42)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,e.objstack.push(s);break;case"3DFACE":(s={type:"3dface"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(70)]=0,e.objstack.push(s);break;case"SEQEND":s={type:"seqend"},e.objstack.push(s);break;default:s={},e.objstack.push(s)}},handleVariable=(e,t,a)=>{const s={type:"variable",name:a};e.objstack.push(s)},handleInt=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleDouble=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleXcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type?(void 0===s.pptxs&&(s.pptxs=[],s.bulgs=[]),s.pptxs.push(parseFloat(a)),s.bulgs.push(0)):"mesh"===s.type?(void 0===s.pptxs&&(s.pptxs=[]),s.pptxs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleYcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type||"mesh"===s.type?(void 0===s.pptys&&(s.pptys=[]),s.pptys.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleZcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("mesh"===s.type?(void 0===s.pptzs&&(s.pptzs=[]),s.pptzs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleBulge=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("lwpolyline"===s.type){const e=s.bulgs;if(void 0!==e){s.pptxs.length===e.length&&(e[e.length-1]=parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleLen=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){const e=s.state;switch(t){case 91:s[getTLA(t)]=parseFloat(a),s.state=1;break;case 92:1===e?(s.vlen=parseFloat(a),s.state=2):(s.plen=parseFloat(a),s.state=6);break;case 93:s[getTLA(t)]=parseFloat(a),s.state=3;break;case 94:s[getTLA(t)]=parseFloat(a),s.state=4;break;case 95:s[getTLA(t)]=parseFloat(a),s.state=5;break;default:s.state=7}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleValue=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){switch(s.state){case 3:void 0===s.fvals&&(s.fvals=[]),s.fvals.push(parseFloat(a));break;case 4:void 0===s.evals&&(s.evals=[]),s.evals.push(parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleString=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=a),e.objstack.push(s)},handleName=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&void 0===s[getTLA(t)]&&(s[getTLA(t)]=a),e.objstack.push(s)},createReader=(e,t)=>{const a=dxf.reader(t);return a.on("error",handleError),a.on("start",handleStart),a.on("end",handleEnd),a.absorb(0,handleEntity),a.absorb(1,handleString),a.absorb(2,handleName),a.absorb(3,handleName),a.absorb(6,handleString),a.absorb(7,handleString),a.absorb(8,handleString),a.absorb(9,handleVariable),a.absorb(10,handleXcoord),a.absorb(11,handleDouble),a.absorb(12,handleDouble),a.absorb(13,handleDouble),a.absorb(20,handleYcoord),a.absorb(21,handleDouble),a.absorb(22,handleDouble),a.absorb(23,handleDouble),a.absorb(30,handleZcoord),a.absorb(31,handleDouble),a.absorb(32,handleDouble),a.absorb(33,handleDouble),a.absorb(39,handleDouble),a.absorb(40,handleDouble),a.absorb(41,handleDouble),a.absorb(42,handleBulge),a.absorb(50,handleDouble),a.absorb(51,handleDouble),a.absorb(62,handleInt),a.absorb(70,handleInt),a.absorb(71,handleInt),a.absorb(72,handleInt),a.absorb(73,handleInt),a.absorb(74,handleInt),a.absorb(75,handleInt),a.absorb(90,handleValue),a.absorb(91,handleLen),a.absorb(92,handleLen),a.absorb(93,handleLen),a.absorb(94,handleLen),a.absorb(95,handleLen),a.absorb(210,handleInt),a.absorb(220,handleInt),a.absorb(230,handleInt),a.objstack=[],a.objstack.push({type:"dxf"}),a.write(e).close(),a},instantiate=(e,t)=>{const a=createReader(e,t);return instantiateAsciiDxf(a,t)},translate=(e,t)=>{const a=createReader(e,t);let s=`// Produced by JSCAD IO Library : DXF Deserializer (${t.version})\n\n`;return s+=translateAsciiDxf(a,t)},deserialize=(e,t)=>{const a={filename:"dxf",version:version,output:"script",strict:!0,colorindex:colorIndex,dxf:{angdir:0,insunits:4,pfacevmax:4}};return"script"===(e=Object.assign({},a,e)).output?translate(t,e):instantiate(t,e)},extension="dxf";module.exports={deserialize:deserialize,extension:"dxf"}; +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,{BYLAYER:BYLAYER,getTLA:getTLA}=require("./autocad"),colorIndex=require("./colorindex2017"),dxf=require("./DxfReader"),{instantiateAsciiDxf:instantiateAsciiDxf}=require("./instantiate"),translateAsciiDxf=require("./translate"),handleError=(e,t)=>{if(!0===e.options.strict)throw t;console.log(`error: line ${t.line}, column ${t.column}, bad character [${t.c}]`)},handleStart=(e,t)=>{},handleEnd=(e,t)=>{},handleEntity=(e,t,a)=>{let s=null;switch(a){case"LAYER":(s={type:"layer"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(67)]=0,e.objstack.push(s);break;case"LINE":(s={type:"line"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=0,e.objstack.push(s);break;case"LWPOLYLINE":(s={type:"lwpolyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(38)]=0,s[getTLA(39)]=0,s[getTLA(43)]=0,s[getTLA(70)]=0,s[getTLA(90)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"MESH":(s={type:"mesh"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(91)]=0,s[getTLA(92)]=0,s[getTLA(93)]=0,s[getTLA(94)]=0,s[getTLA(95)]=0,s.state=0,e.objstack.push(s);break;case"POLYLINE":(s={type:"polyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(39)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,s[getTLA(75)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ARC":(s={type:"arc"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"CIRCLE":(s={type:"circle"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ELLIPSE":(s={type:"ellipse"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"VERTEX":(s={type:"vertex"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(42)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,e.objstack.push(s);break;case"3DFACE":(s={type:"3dface"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(70)]=0,e.objstack.push(s);break;case"SEQEND":s={type:"seqend"},e.objstack.push(s);break;default:s={},e.objstack.push(s)}},handleVariable=(e,t,a)=>{const s={type:"variable",name:a};e.objstack.push(s)},handleInt=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleDouble=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleXcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type?(void 0===s.pptxs&&(s.pptxs=[],s.bulgs=[]),s.pptxs.push(parseFloat(a)),s.bulgs.push(0)):"mesh"===s.type?(void 0===s.pptxs&&(s.pptxs=[]),s.pptxs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleYcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type||"mesh"===s.type?(void 0===s.pptys&&(s.pptys=[]),s.pptys.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleZcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("mesh"===s.type?(void 0===s.pptzs&&(s.pptzs=[]),s.pptzs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleBulge=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("lwpolyline"===s.type){const e=s.bulgs;if(void 0!==e){s.pptxs.length===e.length&&(e[e.length-1]=parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleLen=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){const e=s.state;switch(t){case 91:s[getTLA(t)]=parseFloat(a),s.state=1;break;case 92:1===e?(s.vlen=parseFloat(a),s.state=2):(s.plen=parseFloat(a),s.state=6);break;case 93:s[getTLA(t)]=parseFloat(a),s.state=3;break;case 94:s[getTLA(t)]=parseFloat(a),s.state=4;break;case 95:s[getTLA(t)]=parseFloat(a),s.state=5;break;default:s.state=7}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleValue=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){switch(s.state){case 3:void 0===s.fvals&&(s.fvals=[]),s.fvals.push(parseFloat(a));break;case 4:void 0===s.evals&&(s.evals=[]),s.evals.push(parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleString=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=a),e.objstack.push(s)},handleName=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&void 0===s[getTLA(t)]&&(s[getTLA(t)]=a),e.objstack.push(s)},createReader=(e,t)=>{const a=dxf.reader(t);return a.on("error",handleError),a.on("start",handleStart),a.on("end",handleEnd),a.absorb(0,handleEntity),a.absorb(1,handleString),a.absorb(2,handleName),a.absorb(3,handleName),a.absorb(6,handleString),a.absorb(7,handleString),a.absorb(8,handleString),a.absorb(9,handleVariable),a.absorb(10,handleXcoord),a.absorb(11,handleDouble),a.absorb(12,handleDouble),a.absorb(13,handleDouble),a.absorb(20,handleYcoord),a.absorb(21,handleDouble),a.absorb(22,handleDouble),a.absorb(23,handleDouble),a.absorb(30,handleZcoord),a.absorb(31,handleDouble),a.absorb(32,handleDouble),a.absorb(33,handleDouble),a.absorb(39,handleDouble),a.absorb(40,handleDouble),a.absorb(41,handleDouble),a.absorb(42,handleBulge),a.absorb(50,handleDouble),a.absorb(51,handleDouble),a.absorb(62,handleInt),a.absorb(70,handleInt),a.absorb(71,handleInt),a.absorb(72,handleInt),a.absorb(73,handleInt),a.absorb(74,handleInt),a.absorb(75,handleInt),a.absorb(90,handleValue),a.absorb(91,handleLen),a.absorb(92,handleLen),a.absorb(93,handleLen),a.absorb(94,handleLen),a.absorb(95,handleLen),a.absorb(210,handleInt),a.absorb(220,handleInt),a.absorb(230,handleInt),a.objstack=[],a.objstack.push({type:"dxf"}),a.write(e).close(),a},instantiate=(e,t)=>{const a=createReader(e,t);return instantiateAsciiDxf(a,t)},translate=(e,t)=>{const a=createReader(e,t);let s=`// Produced by JSCAD IO Library : DXF Deserializer (${t.version})\n\n`;return s+=translateAsciiDxf(a,t)},deserialize=(e,t)=>{const a={filename:"dxf",version:version,output:"script",strict:!0,colorindex:colorIndex,dxf:{angdir:0,insunits:4,pfacevmax:4}};return e=Object.assign({},a,e),t=ensureString(t),"script"===e.output?translate(t,e):instantiate(t,e)},extension="dxf";module.exports={deserialize:deserialize,extension:"dxf"}; -},{"./DxfReader":56,"./autocad":57,"./colorindex2017":58,"./instantiate":61,"./package.json":62,"./translate":63}],61:[function(require,module,exports){ +},{"./DxfReader":56,"./autocad":57,"./colorindex2017":58,"./instantiate":61,"./package.json":62,"./translate":63,"@jscad/io-utils":71}],61:[function(require,module,exports){ const{geometries:geometries,maths:maths,primitives:primitives}=require("@jscad/modeling"),EPS=1e-5,{getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),instantiatePolygon=(e,t,s)=>{const n=[];if(n.push(maths.vec3.fromValues(e.pptx,e.ppty,e.pptz)),n.push(maths.vec3.fromValues(e.sptx,e.spty,e.sptz)),n.push(maths.vec3.fromValues(e.tptx,e.tpty,e.tptz)),e.fptx){let t=!1;e.tptx!==e.fptx&&(t=!0),e.tpty!==e.fpty&&(t=!0),e.tptz!==e.fptz&&(t=!0),t&&n.push(maths.vec3.fromValues(e.fptx,e.fpty,e.fptz))}const r=getColorNumber(e,t),a=getColor(r,s.colorindex),o=geometries.poly3.create(n);return a&&(o.color=a),o},instantiateLine=(e,t,s)=>{if(e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),s=maths.vec2.fromValues(e.sptx,e.spty);return primitives.line([t,s])}const n=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),r=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);return primitives.line([n,r])},instantiateVector=e=>{const t=parseInt("00000000000100000",2),s=parseInt("00000000001000000",2),n=parseInt("00000000010000000",2),r=e.lflg,a={};return(r&t)===t?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&s)===s?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&n)===n?(a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),a.fvia=e.fvia,a.fvib=e.fvib,a.fvic=e.fvic,a.fvid=e.fvid):(a.vec=maths.vec2.fromValues(e.pptx,e.ppty),a.bulg=e.bulg),a},addSection=(e,t,s,n)=>{if(0===n)e=geometries.path2.appendPoints([[t,s]],e);else{const r=geometries.path2.toPoints(e),a=r[r.length-1],o=maths.vec2.fromValues(t,s),i=maths.vec2.distance(a,o)*((1+Math.pow(n,2))/(4*n)),p=n<0,l=!1,c=4*Math.atan(n),m=16;e=geometries.path2.appendArc({endpoint:[t,s],radius:[i,i],xaxisrotation:c,clockwise:p,large:l,segments:m},e)}return e},instantiatePath2D=(e,t,s)=>{const n=parseInt("00000000000000001",2),r=e.vlen,a=e.pptxs,o=e.pptys,i=e.bulgs,p=e.lflg;let l=geometries.path2.create();const c=(p&n)===n;return r!==a.length||r!==o.length||r!==i.length?l:(a.forEach((e,t,s)=>{let n=0;t>0&&(n=i[t-1]),l=addSection(l,a[t],o[t],n)}),c&&!l.isClosed&&(l=addSection(l,a[0],o[0],i[r-1]),l=geometries.path2.close(l)),l)},instantiateArc=(e,t,s)=>{e.lthk;const n=e.pptx,r=e.ppty,a=e.swid;let o=e.ang0;o*=.017453292519943295;let i=e.ang1;i*=.017453292519943295;return primitives.arc({center:[n,r],radius:a,startAngle:o,endAngle:i,segments:16})},instantiateCircle=(e,t,s)=>{const n=e.lthk,r=e.pptx,a=e.ppty,o=e.swid,i=getColorNumber(e,t),p=getColor(i,s.colorindex);if(0===n){const e=primitives.circle({center:[r,a],radius:o,segments:16});return p&&(e.color=p),e}const l=primitives.circle({center:[r,a],radius:o,segments:16}).extrude({offset:[0,0,n]});return p&&(l.color=p),l},instantiateEllipse=(e,t,s)=>{const n=e.pptx,r=e.ppty,a=e.pptz,o=e.sptx,i=e.spty,p=e.sptz,l=e.swid;if(0===a&&0===p){const e=maths.vec2.fromValues(0,0),t=maths.vec2.fromValues(o,i),s=maths.vec2.distance(e,t),a=s*l;let p=180*Math.atan2(i,o)/Math.PI;p{const t=[];let s=0;for(;s0;)r.push(e[s++]),n--;t.push(r)}return t},instantiatePoints=(e,t,s)=>{const n=[];let r=0;for(;r{const n=e.vlen,r=e.pptxs,a=e.pptys,o=e.pptzs,i=e.flen,p=e.fvals,l=getColorNumber(e,t),c=getColor(l,s.colorindex),m=[];if(n===r.length&&n===a.length&&n===o.length&&i===p.length){const e=instantiateFaces(p),t=instantiatePoints(r,a,o);let n=0;for(;n{const t=parseInt("00000000000000001",2),s=parseInt("00000000000001000",2),n=parseInt("00000000000010000",2),r=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),o=e.lflg;let i=null;return(o&s)===s?i=null:(o&n)===n?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(o&a)===a?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(i=geometries.path2.create()).closedM=(o&t)===t,"cnmb"in e&&(i.cnmb=e.cnmb),i},completeCurrent=(e,t,s,n,r)=>{if(geometries.path2.isA(t)){const s=n.map(e=>e.vec);e.push(geometries.path2.fromPoints({closed:t.closed},s))}return geometries.geom3.isA(t)&&e.push(geometries.geom3.create(s)),null},instantiateAsciiDxf=(e,t)=>{const s=[];let n=null;const r=[],a=[],o=[];let i=null;for(const p of e.objstack)if(i=null,"type"in p){switch(p.type){case"dxf":break;case"layer":n=completeCurrent(a,n,r,o),s.push(p);break;case"variable":n=completeCurrent(a,n,r,o);break;case"3dface":i=instantiatePolygon(p,s,t),null===n&&(n=geometries.geom3.create());break;case"mesh":n=completeCurrent(a,n,r,o),a.push(instantiateMesh(p,s,t));break;case"arc":n=completeCurrent(a,n,r,o),a.push(instantiateArc(p));break;case"circle":n=completeCurrent(a,n,r,o),a.push(instantiateCircle(p,s,t));break;case"ellipse":n=completeCurrent(a,n,r,o),a.push(instantiateEllipse(p));break;case"line":n=completeCurrent(a,n,r,o),a.push(instantiateLine(p));break;case"polyline":null===(n=completeCurrent(a,n,r,o))&&(n=getPolyType(p));break;case"vertex":i=instantiateVector(p);break;case"seqend":n=completeCurrent(a,n,r,o);break;case"lwpolyline":n=completeCurrent(a,n,r,o),a.push(instantiatePath2D(p))}geometries.poly3.isA(i)&&r.push(i),i&&"vec"in i&&3===i.vec.length&&o.push(i),i&&"vec"in i&&2===i.vec.length&&o.push(i)}return n=completeCurrent(a,n,r,o),a};module.exports={instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector,instantiateAsciiDxf:instantiateAsciiDxf}; -},{"./helpers":59,"@jscad/modeling":216}],62:[function(require,module,exports){ +},{"./helpers":59,"@jscad/modeling":217}],62:[function(require,module,exports){ module.exports={ "name": "@jscad/dxf-deserializer", - "version": "2.3.25", + "version": "2.3.26", "description": "DXF Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -313,7 +314,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", @@ -325,7 +327,7 @@ module.exports={ },{}],63:[function(require,module,exports){ const{maths:maths,geometries:geometries}=require("@jscad/modeling"),{instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector}=require("./instantiate"),{findLayer:findLayer,getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),translateVector2D=e=>{return`${e[0]},${e[1]}`},translateVector3D=e=>{return`${e[0]},${e[1]},${e[2]}`},translatePolygon=e=>{const t=geometries.poly3.toPoints(e);let n="createPolygon([";return t.forEach(e=>{n+=`[${translateVector3D(e)}],`}),n+=`],${translateColor(e)})`},translateColor=e=>{let t="null";if("color"in e){const n=e.color;t=`[${n[0]},${n[1]},${n[2]},${n[3]}]`}return t},translateLine=(e,t,n)=>{const r=e.name,s=getColorNumber(e,t),a=getColor(s,n.colorindex);let l="";if(!e.pptz||e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),n=maths.vec2.fromValues(e.sptx,e.spty);l=` let ${r} = primitives.line([[${translateVector2D(t)}],[${translateVector2D(n)}]])\n`}else{const t=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),n=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);l=` let ${r} = primitives.line([[${translateVector3D(t)}],[${translateVector3D(n)}]])\n`}a&&(l+=` ${r} = colors.colorize([${a[0]}, ${a[1]}, ${a[2]}, 1], ${r})\n`),e.script=l,addToLayer(e,t)},translateSection=(e,t,n,r,s,a)=>{if(0===r)return`geometries.path2.appendPoints([[${t},${n}]], ${e})\n`;const l=maths.vec2.fromValues(s,a),o=maths.vec2.fromValues(t,n),i=maths.vec2.distance(l,o)*((1+Math.pow(r,2))/(4*r)),c=r<0;return`geometries.path2.appendArc({endpoint: [${t},${n}],radius: [${i},${i}],xaxisrotation: ${4*Math.atan(r)},clockwise: ${c},large: false,segments: 16}, ${e})\n`},translatePath2D=(e,t,n)=>{const r=parseInt("00000000000000001",2),s=e.vlen,a=e.pptxs,l=e.pptys,o=e.bulgs,i=e.lflg,c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);let $=` let ${c} = geometries.path2.create()\n`;const u=(i&r)===r;if(s===a.length&&s===l.length&&s===o.length){$+=` ${c} = geometries.path2.appendPoints([[${a[0]}, ${l[0]}]], ${c})\n`;for(let e=0;e{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid;let o=e.ang0,i=e.ang1;const c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);o*=.017453292519943295,i*=.017453292519943295;if(0===r){let n=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;return m&&(n+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=n,void addToLayer(e,t)}let $=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;m&&($+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=$,addToLayer(e,t)},translateCircle=(e,t,n)=>{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid,o=e.name,i=getColorNumber(e,t),c=getColor(i,n.colorindex);if(0===r){let n=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16})\n`;return c&&(n+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=n,void addToLayer(e,t)}let p=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16}).extrude({offset: [0,0,${r}]}))\n`;c&&(p+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=p,addToLayer(e,t)},translateEllipse=(e,t,n)=>{const r=e.pptx,s=e.ppty,a=e.pptz,l=e.sptx,o=e.spty,i=e.sptz,c=e.swid,p=e.name,m=getColorNumber(e,t),$=getColor(m,n.colorindex);if(0===a&&0===i){const n=maths.vec2.fromValues(0,0),a=maths.vec2.fromValues(l,o),i=maths.vec2.distance(n,a);let m=` let ${p} = primitives.ellipse({center: [0, 0, 0], radius: [${i}, ${i*c}], segments: 16})\n let ${p}matrix = maths.mat4.multiply(maths.mat4.create(), maths.mat4.fromTranslation(maths.mat4.create(), [${r}, ${s}, 0]), maths.mat4.fromZRotation(maths.mat4.create(), ${Math.atan2(o,l)}))\n ${p} = geometries.geom2.transform(${p}matrix, ${p})\n`;$&&(m+=` ${p} = colors.colorize([${$[0]}, ${$[1]}, ${$[2]}, 1], ${p})\n`),e.script=m,addToLayer(e,t)}},instantiateFaces=e=>{const t=[];let n=0;for(;n0;)s.push(e[n++]),r--;t.push(s)}return t},instantiatePoints=(e,t,n)=>{const r=[];let s=0;for(;s{const r=e.vlen,s=e.pptxs,a=e.pptys,l=e.pptzs,o=e.flen,i=e.fvals,c=getColorNumber(e,t),p=getColor(c,n.colorindex),m=[];if(r===s.length&&r===a.length&&r===l.length)if(o===i.length){const e=instantiateFaces(i),t=instantiatePoints(s,a,l);let r=0;for(;r{for(const t of e)if("0"===t.name)return t;const t={type:"layer",lnam:"layer0",name:"0",lscl:1,visb:0,spac:0,objects:[]};return e.push(t),t},addToLayer=(e,t)=>{let n=findLayer(e,t);null===n&&(n=findLayer0(t)),"objects"in n||(n.objects=[]),n.objects.push(e)},getPolyType=e=>{const t=parseInt("00000000000000001",2),n=parseInt("00000000000001000",2),r=parseInt("00000000000010000",2),s=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),l=e.lflg;let o=null;if((l&n)===n){o={type:"3dline",isclosed:(l&t)===t}}else if((l&r)===r)(o={type:"3dpolymesh"}).fvia=e.fvia,o.fvib=e.fvib,o.closedM=(l&t)===t,o.closedN=(l&s)===s;else if((l&a)===a)(o={type:"3dpolyfaces"}).fvia=e.fvia,o.fvib=e.fvib;else{o={type:"2dline",isclosed:(l&t)===t}}return"cnmb"in e&&(o.cnmb=e.cnmb),"lnam"in e&&(o.lnam=e.lnam),o},instantiateFacets=(e,t,n,r,s)=>{const a=(e,r)=>{return n[(e-1)*t+(r-1)].vec},l=[];if(e*t!==n.length)return l;if(e<2|t<2)return l;let o=1;for(;o{const a=[];if(e+t!==n.length)return a;let l=e;for(;l0&&(e=n[t[0]-1],r.push(e.vec),t[1]>0&&(e=n[t[1]-1],r.push(e.vec),t[2]>0&&(e=n[t[2]-1],r.push(e.vec),t[3]>0&&(e=n[t[3]-1],r.push(e.vec))))),r.length>2){1===s.dxf.angdir&&(r=r.reverse());const e=geometries.poly3.create(r);a.push(e)}l++}return a},translateAs2Dline=(e,t,n,r)=>{e.vlen=n.length,e.pptxs=[],e.pptys=[],e.bulgs=[];for(const t of n)e.pptxs.push(t.vec[0]),e.pptys.push(t.vec[1]),e.bulgs.push(t.bulg);return e.isclosed?e.lflg=parseInt("00000000000000001",2):e.lflg=0,translatePath2D(e,t,r),null},translateCurrent=(e,t,n,r)=>{if(null===e)return null;const s=e.type,a=getColorNumber(e,t),l=getColor(a,r.colorindex);if("2dline"===s)return translateAs2Dline(e,t,n,r);if("3dline"===s)return null;if("3dpolymesh"===s){const t=e.fvia,s=e.fvib;n=instantiateFacets(t,s,n,l,r)}if("3dpolyfaces"===s&&"fvia"in e){const t=e.fvia,s=e.fvib;n=instantiatePolyFaces(t,s,n,0,r)}const o=e.name;let i=` const ${o}_polygons = [\n`;for(const e of n)i+=" "+translatePolygon(e)+",\n";return i+=` ]\n let ${o} = geometries.geom3.create(${o}_polygons)\n`,l&&(i+=` ${o}.color = [${l}]\n`),e.script=i,addToLayer(e,t),null},translateLayer=e=>{let t=`function ${e.lnam||"Unknown"}() {\n`;for(const n of e.objects)t+=n.script;t+=" return [";for(const n of e.objects)t+=n.name+",";return t+="]\n}\n"},saveVariable=(e,t)=>{switch(e.name||"Unknown"){case"$ANGDIR":"lflg"in e&&(t.dxf.angdir=e.lflg)}},translateAsciiDxf=(e,t)=>{const n=[];let r=null,s=[],a=0,l=null;for(const o of e.objstack)if(l=null,"type"in o){if("name"in o){let e=o.name;e=(e=(e=e.replace(/ /g,"_")).replace(/-/g,"_")).replace(/\./g,"_"),o.name=e}else o.name="jscad"+a,a+=1;switch(o.type){case"dxf":break;case"layer":r=translateCurrent(r,n,s,t),s=[],o.objects=[],o.lnam="layer"+n.length,n.push(o);break;case"variable":r=translateCurrent(r,n,s,t),s=[],saveVariable(o,t);break;case"3dface":l=instantiatePolygon(o,n,t),null===r&&((r={type:"3dfaces"}).name="jscad"+a,a+=1);break;case"mesh":r=translateCurrent(r,n,s,t),s=[],translateMesh(o,n,t);break;case"arc":r=translateCurrent(r,n,s,t),s=[],translateArc(o,n,t);break;case"circle":r=translateCurrent(r,n,s,t),s=[],translateCircle(o,n,t);break;case"ellipse":r=translateCurrent(r,n,s,t),s=[],translateEllipse(o,n,t);break;case"line":r=translateCurrent(r,n,s,t),s=[],translateLine(o,n,t);break;case"polyline":r=translateCurrent(r,n,s,t),s=[],null===r&&((r=getPolyType(o)).name="jscad"+a,a+=1);break;case"vertex":l=instantiateVector(o);break;case"seqend":r=translateCurrent(r,n,s,t),s=[];break;case"lwpolyline":r=translateCurrent(r,n,s,t),s=[],translatePath2D(o,n,t)}geometries.poly3.isA(l)&&s.push(l),l&&"vec"in l&&3===l.vec.length&&s.push(l),l&&"vec"in l&&2===l.vec.length&&s.push(l)}r=translateCurrent(r,n,s,t);let o="const {colors, geometries, maths, primitives, transforms} = require('@jscad/modeling')\n\nconst main = () => {\n let layers = []\n return layers.concat(";return n.forEach(e=>{const t=e.lnam||"Unknown";o+=`${t}(),`}),o+="[])\n}\n",o+="\nfunction createPolygon(listofpoints, color) {\n let polygon = geometries.poly3.fromPoints(listofpoints)\n if (color) polygon.color = color\n return polygon\n}\n",n.forEach(e=>{o+=translateLayer(e)}),o+="module.exports = {main}\n"};module.exports=translateAsciiDxf; -},{"./helpers":59,"./instantiate":61,"@jscad/modeling":216}],64:[function(require,module,exports){ +},{"./helpers":59,"./instantiate":61,"@jscad/modeling":217}],64:[function(require,module,exports){ const dxfHeaders=function(){return" 0\nSECTION\n 2\nHEADER\n 9\n$ACADVER\n 1\nAC1027\n 9\n$ACADMAINTVER\n 70\n8\n 9\n$DWGCODEPAGE\n 3\nANSI_1252\n 9\n$LASTSAVEDBY\n 1\nunknown\n 9\n$REQUIREDVERSIONS\n160\n0\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n 10\n1e+20\n 20\n1e+20\n 30\n1e+20\n 9\n$EXTMAX\n 10\n-1e+20\n 20\n-1e+20\n 30\n-1e+20\n 9\n$LIMMIN\n 10\n0.0\n 20\n0.0\n 9\n$LIMMAX\n 10\n12.0\n 20\n9.0\n 9\n$ORTHOMODE\n 70\n0\n 9\n$REGENMODE\n 70\n1\n 9\n$FILLMODE\n 70\n1\n 9\n$QTEXTMODE\n 70\n0\n 9\n$MIRRTEXT\n 70\n0\n 9\n$LTSCALE\n 40\n1.0\n 9\n$ATTMODE\n 70\n1\n 9\n$TEXTSIZE\n 40\n0.2\n 9\n$TRACEWID\n 40\n0.05\n 9\n$TEXTSTYLE\n 7\nNotes\n 9\n$CLAYER\n 8\n0\n 9\n$CELTYPE\n 6\nByLayer\n 9\n$CECOLOR\n 62\n256\n 9\n$CELTSCALE\n 40\n1.0\n 9\n$DISPSILH\n 70\n0\n 9\n$DIMSCALE\n 40\n1.0\n 9\n$DIMASZ\n 40\n3.0\n 9\n$DIMEXO\n 40\n1.5\n 9\n$DIMDLI\n 40\n6.0\n 9\n$DIMRND\n 40\n0.0\n 9\n$DIMDLE\n 40\n0.0\n 9\n$DIMEXE\n 40\n3.0\n 9\n$DIMTP\n 40\n0.0\n 9\n$DIMTM\n 40\n0.0\n 9\n$DIMTXT\n 40\n3.0\n 9\n$DIMCEN\n 40\n3.0\n 9\n$DIMTSZ\n 40\n0.0\n 9\n$DIMTOL\n 70\n0\n 9\n$DIMLIM\n 70\n0\n 9\n$DIMTIH\n 70\n0\n 9\n$DIMTOH\n 70\n0\n 9\n$DIMSE1\n 70\n0\n 9\n$DIMSE2\n 70\n0\n 9\n$DIMTAD\n 70\n1\n 9\n$DIMZIN\n 70\n3\n 9\n$DIMBLK\n 1\n\n 9\n$DIMASO\n 70\n1\n 9\n$DIMSHO\n 70\n1\n 9\n$DIMPOST\n 1\n\n 9\n$DIMAPOST\n 1\n\n 9\n$DIMALT\n 70\n0\n 9\n$DIMALTD\n 70\n2\n 9\n$DIMALTF\n 40\n25.4\n 9\n$DIMLFAC\n 40\n1.0\n 9\n$DIMTOFL\n 70\n0\n 9\n$DIMTVP\n 40\n0.0\n 9\n$DIMTIX\n 70\n0\n 9\n$DIMSOXD\n 70\n0\n 9\n$DIMSAH\n 70\n0\n 9\n$DIMBLK1\n 1\n\n 9\n$DIMBLK2\n 1\n\n 9\n$DIMSTYLE\n 2\nCivil-Metric\n 9\n$DIMCLRD\n 70\n0\n 9\n$DIMCLRE\n 70\n0\n 9\n$DIMCLRT\n 70\n0\n 9\n$DIMTFAC\n 40\n1.0\n 9\n$DIMGAP\n 40\n2.0\n 9\n$DIMJUST\n 70\n0\n 9\n$DIMSD1\n 70\n0\n 9\n$DIMSD2\n 70\n0\n 9\n$DIMTOLJ\n 70\n1\n 9\n$DIMTZIN\n 70\n0\n 9\n$DIMALTZ\n 70\n0\n 9\n$DIMALTTZ\n 70\n0\n 9\n$DIMUPT\n 70\n0\n 9\n$DIMDEC\n 70\n2\n 9\n$DIMTDEC\n 70\n2\n 9\n$DIMALTU\n 70\n2\n 9\n$DIMALTTD\n 70\n2\n 9\n$DIMTXSTY\n 7\nStandard\n 9\n$DIMAUNIT\n 70\n0\n 9\n$DIMADEC\n 70\n2\n 9\n$DIMALTRND\n 40\n0.0\n 9\n$DIMAZIN\n 70\n2\n 9\n$DIMDSEP\n 70\n46\n 9\n$DIMATFIT\n 70\n3\n 9\n$DIMFRAC\n 70\n1\n 9\n$DIMLDRBLK\n 1\n\n 9\n$DIMLUNIT\n 70\n2\n 9\n$DIMLWD\n 70\n-2\n 9\n$DIMLWE\n 70\n-2\n 9\n$DIMTMOVE\n 70\n0\n 9\n$DIMFXL\n 40\n1.0\n 9\n$DIMFXLON\n 70\n0\n 9\n$DIMJOGANG\n 40\n0.785398163397\n 9\n$DIMTFILL\n 70\n0\n 9\n$DIMTFILLCLR\n 70\n0\n 9\n$DIMARCSYM\n 70\n0\n 9\n$DIMLTYPE\n 6\n\n 9\n$DIMLTEX1\n 6\n\n 9\n$DIMLTEX2\n 6\n\n 9\n$DIMTXTDIRECTION\n 70\n0\n 9\n$LUNITS\n 70\n2\n 9\n$LUPREC\n 70\n4\n 9\n$SKETCHINC\n 40\n0.1\n 9\n$FILLETRAD\n 40\n0.0\n 9\n$AUNITS\n 70\n4\n 9\n$AUPREC\n 70\n5\n 9\n$MENU\n 1\n.\n 9\n$ELEVATION\n 40\n0.0\n 9\n$PELEVATION\n 40\n0.0\n 9\n$THICKNESS\n 40\n0.0\n 9\n$LIMCHECK\n 70\n0\n 9\n$CHAMFERA\n 40\n0.0\n 9\n$CHAMFERB\n 40\n0.0\n 9\n$CHAMFERC\n 40\n0.0\n 9\n$CHAMFERD\n 40\n0.0\n 9\n$SKPOLY\n 70\n0\n 9\n$TDCREATE\n 40\n2457986.69756\n 9\n$TDUCREATE\n 40\n2455631.2632\n 9\n$TDUPDATE\n 40\n2457986.69756\n 9\n$TDUUPDATE\n 40\n2456436.43179\n 9\n$TDINDWG\n 40\n0.0003490741\n 9\n$TDUSRTIMER\n 40\n0.0003487153\n 9\n$USRTIMER\n 70\n1\n 9\n$ANGBASE\n 50\n0.0\n 9\n$ANGDIR\n 70\n0\n 9\n$PDMODE\n 70\n0\n 9\n$PDSIZE\n 40\n0.0\n 9\n$PLINEWID\n 40\n0.0\n 9\n$SPLFRAME\n 70\n0\n 9\n$SPLINETYPE\n 70\n6\n 9\n$SPLINESEGS\n 70\n8\n 9\n$HANDSEED\n 5\n5C7\n 9\n$SURFTAB1\n 70\n6\n 9\n$SURFTAB2\n 70\n6\n 9\n$SURFTYPE\n 70\n6\n 9\n$SURFU\n 70\n6\n 9\n$SURFV\n 70\n6\n 9\n$UCSBASE\n 2\n\n 9\n$UCSNAME\n 2\n\n 9\n$UCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$UCSORTHOREF\n 2\n\n 9\n$UCSORTHOVIEW\n 70\n0\n 9\n$UCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSBASE\n 2\n\n 9\n$PUCSNAME\n 2\n\n 9\n$PUCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$PUCSORTHOREF\n 2\n\n 9\n$PUCSORTHOVIEW\n 70\n0\n 9\n$PUCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$USERI1\n 70\n0\n 9\n$USERI2\n 70\n0\n 9\n$USERI3\n 70\n0\n 9\n$USERI4\n 70\n0\n 9\n$USERI5\n 70\n0\n 9\n$USERR1\n 40\n0.0\n 9\n$USERR2\n 40\n0.0\n 9\n$USERR3\n 40\n0.0\n 9\n$USERR4\n 40\n0.0\n 9\n$USERR5\n 40\n0.0\n 9\n$WORLDVIEW\n 70\n1\n 9\n$SHADEDGE\n 70\n3\n 9\n$SHADEDIF\n 70\n70\n 9\n$TILEMODE\n 70\n1\n 9\n$MAXACTVP\n 70\n64\n 9\n$PINSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PLIMCHECK\n 70\n0\n 9\n$PEXTMIN\n 10\n0.628866766397\n 20\n0.799999952316\n 30\n0.0\n 9\n$PEXTMAX\n 10\n9.02886638493\n 20\n7.19999957085\n 30\n0.0\n 9\n$PLIMMIN\n 10\n-0.700541819174\n 20\n-0.228100386192\n 9\n$PLIMMAX\n 10\n10.2994579405\n 20\n8.27189937351\n 9\n$UNITMODE\n 70\n0\n 9\n$VISRETAIN\n 70\n1\n 9\n$PLINEGEN\n 70\n0\n 9\n$PSLTSCALE\n 70\n1\n 9\n$TREEDEPTH\n 70\n3020\n 9\n$CMLSTYLE\n 2\nStandard\n 9\n$CMLJUST\n 70\n0\n 9\n$CMLSCALE\n 40\n1.0\n 9\n$PROXYGRAPHICS\n 70\n1\n 9\n$MEASUREMENT\n 70\n1\n 9\n$CELWEIGHT\n370\n-1\n 9\n$ENDCAPS\n280\n0\n 9\n$JOINSTYLE\n280\n0\n 9\n$LWDISPLAY\n290\n0\n 9\n$INSUNITS\n 70\n4\n 9\n$HYPERLINKBASE\n 1\n\n 9\n$STYLESHEET\n 1\n\n 9\n$XEDIT\n290\n1\n 9\n$CEPSNTYPE\n380\n0\n 9\n$PSTYLEMODE\n290\n1\n 9\n$FINGERPRINTGUID\n 2\n{39DB1BDD-BC6C-46D3-A333-DFCC0DC4782D}\n 9\n$VERSIONGUID\n 2\n{69EEBB2D-7039-498F-9366-3F994E4A07E7}\n 9\n$EXTNAMES\n290\n1\n 9\n$PSVPSCALE\n 40\n0.0\n 9\n$OLESTARTUP\n290\n0\n 9\n$SORTENTS\n280\n127\n 9\n$INDEXCTL\n280\n0\n 9\n$HIDETEXT\n280\n1\n 9\n$XCLIPFRAME\n280\n0\n 9\n$HALOGAP\n280\n0\n 9\n$OBSCOLOR\n 70\n257\n 9\n$OBSLTYPE\n280\n0\n 9\n$INTERSECTIONDISPLAY\n280\n0\n 9\n$INTERSECTIONCOLOR\n 70\n257\n 9\n$DIMASSOC\n280\n2\n 9\n$PROJECTNAME\n 1\n\n 9\n$CAMERADISPLAY\n290\n0\n 9\n$LENSLENGTH\n 40\n50.0\n 9\n$CAMERAHEIGHT\n 40\n0.0\n 9\n$STEPSPERSEC\n 40\n2.0\n 9\n$STEPSIZE\n 40\n6.0\n 9\n$3DDWFPREC\n 40\n2.0\n 9\n$PSOLWIDTH\n 40\n0.25\n 9\n$PSOLHEIGHT\n 40\n4.0\n 9\n$LOFTANG1\n 40\n1.57079632679\n 9\n$LOFTANG2\n 40\n1.57079632679\n 9\n$LOFTMAG1\n 40\n0.0\n 9\n$LOFTMAG2\n 40\n0.0\n 9\n$LOFTPARAM\n 70\n7\n 9\n$LOFTNORMALS\n280\n1\n 9\n$LATITUDE\n 40\n37.795\n 9\n$LONGITUDE\n 40\n-122.394\n 9\n$NORTHDIRECTION\n 40\n0.0\n 9\n$TIMEZONE\n 70\n-8000\n 9\n$LIGHTGLYPHDISPLAY\n280\n1\n 9\n$TILEMODELIGHTSYNCH\n280\n1\n 9\n$CMATERIAL\n347\n96\n 9\n$SOLIDHIST\n280\n1\n 9\n$SHOWHIST\n280\n1\n 9\n$DWFFRAME\n280\n2\n 9\n$DGNFRAME\n280\n0\n 9\n$REALWORLDSCALE\n290\n1\n 9\n$INTERFERECOLOR\n 62\n1\n 9\n$INTERFEREOBJVS\n345\nA3\n 9\n$INTERFEREVPVS\n346\nA0\n 9\n$CSHADOW\n280\n0\n 9\n$SHADOWPLANELOCATION\n 40\n0.0\n 0\nENDSEC"},dxfClasses=function(){return' 0\nSECTION\n 2\nCLASSES\n 0\nCLASS\n 1\nACDBDICTIONARYWDFLT\n 2\nAcDbDictionaryWithDefault\n 3\nObjectDBX Classes\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nDICTIONARYVAR\n 2\nAcDbDictionaryVar\n 3\nObjectDBX Classes\n 90\n0\n 91\n15\n280\n0\n281\n0\n 0\nCLASS\n 1\nTABLESTYLE\n 2\nAcDbTableStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nMATERIAL\n 2\nAcDbMaterial\n 3\nObjectDBX Classes\n 90\n1153\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nVISUALSTYLE\n 2\nAcDbVisualStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n26\n280\n0\n281\n0\n 0\nCLASS\n 1\nSCALE\n 2\nAcDbScale\n 3\nObjectDBX Classes\n 90\n1153\n 91\n17\n280\n0\n281\n0\n 0\nCLASS\n 1\nMLEADERSTYLE\n 2\nAcDbMLeaderStyle\n 3\nACDB_MLEADERSTYLE_CLASS\n 90\n4095\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nCELLSTYLEMAP\n 2\nAcDbCellStyleMap\n 3\nObjectDBX Classes\n 90\n1152\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nEXACXREFPANELOBJECT\n 2\nExAcXREFPanelObject\n 3\nEXAC_ESW\n 90\n1025\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nNPOCOLLECTION\n 2\nAcDbImpNonPersistentObjectsCollection\n 3\nObjectDBX Classes\n 90\n1153\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nLAYER_INDEX\n 2\nAcDbLayerIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nSPATIAL_INDEX\n 2\nAcDbSpatialIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nIDBUFFER\n 2\nAcDbIdBuffer\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nDIMASSOC\n 2\nAcDbDimAssoc\n 3\n"AcDbDimAssoc|Product Desc: AcDim ARX App For Dimension|Company: Autodesk, Inc.|WEB Address: www.autodesk.com"\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBSECTIONVIEWSTYLE\n 2\nAcDbSectionViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBDETAILVIEWSTYLE\n 2\nAcDbDetailViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF\n 2\nAcDbRasterImageDef\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nRASTERVARIABLES\n 2\nAcDbRasterVariables\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF_REACTOR\n 2\nAcDbRasterImageDefReactor\n 3\nISM\n 90\n1\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGE\n 2\nAcDbRasterImage\n 3\nISM\n 90\n2175\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nPDFDEFINITION\n 2\nAcDbPdfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nPDFUNDERLAY\n 2\nAcDbPdfReference\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDWFDEFINITION\n 2\nAcDbDwfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDWFUNDERLAY\n 2\nAcDbDwfReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDGNDEFINITION\n 2\nAcDbDgnDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDGNUNDERLAY\n 2\nAcDbDgnReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nENDSEC'},dxfTables=function(){return" 0\nSECTION\n 2\nTABLES\n 0\nTABLE\n 2\nVPORT\n 5\n8\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLTYPE\n 5\n5F\n330\n0\n100\nAcDbSymbolTable\n 70\n7\n 0\nLTYPE\n 5\n14\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByBlock\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n15\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByLayer\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n16\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nContinuous\n 70\n0\n 3\nSolid line\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n1B1\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nCENTER\n 70\n0\n 3\nCenter ____ _ ____ _ ____ _ ____ _ ____ _ ____\n 72\n65\n 73\n4\n 40\n2.0\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B2\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nDASHED\n 70\n0\n 3\nDashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\n 72\n65\n 73\n2\n 40\n0.75\n 49\n0.5\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B3\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nPHANTOM\n 70\n0\n 3\nPhantom ______ __ __ ______ __ __ ______\n 72\n65\n 73\n6\n 40\n2.5\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n39E\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nHIDDEN\n 70\n0\n 3\nHidden __ __ __ __ __ __ __ __ __ __ __ __ __ __\n 72\n65\n 73\n2\n 40\n9.525\n 49\n6.35\n 74\n0\n 49\n-3.175\n 74\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLAYER\n 5\n2\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nLAYER\n 5\n10\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n0\n 70\n0\n 6\nContinuous\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n1B4\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nView Port\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n21D\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nDefpoints\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nSTYLE\n 5\n3\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nSTYLE\n 5\n11\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nStandard\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\nDC\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\n178\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nNotes\n 70\n0\n 40\n3.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nENDTAB\n 0\nTABLE\n 2\nVIEW\n 5\n6\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nUCS\n 5\n7\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nAPPID\n 5\n9\n330\n0\n100\nAcDbSymbolTable\n 70\n12\n 0\nAPPID\n 5\n12\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD\n 70\n0\n 0\nAPPID\n 5\nDD\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnoPO\n 70\n0\n 0\nAPPID\n 5\nDE\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnotative\n 70\n0\n 0\nAPPID\n 5\nDF\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMJAG\n 70\n0\n 0\nAPPID\n 5\nE0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMTALN\n 70\n0\n 0\nAPPID\n 5\n107\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_MLEADERVER\n 70\n0\n 0\nAPPID\n 5\n1B5\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcAecLayerStandard\n 70\n0\n 0\nAPPID\n 5\n1BA\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_EXEMPT_FROM_CAD_STANDARDS\n 70\n0\n 0\nAPPID\n 5\n237\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMBREAK\n 70\n0\n 0\nAPPID\n 5\n28E\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_PSEXT\n 70\n0\n 0\nAPPID\n 5\n4B0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_NAV_VCDISPLAY\n 70\n0\n 0\nAPPID\n 5\n4E3\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nHATCHBACKGROUNDCOLOR\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nDIMSTYLE\n 5\nA\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n100\nAcDbDimStyleTable\n 71\n3\n340\n242\n340\n27\n340\nE1\n 0\nDIMSTYLE\n105\n27\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nStandard\n 70\n0\n 41\n3.0\n 42\n2.0\n 43\n9.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\nE1\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n3.0\n 42\n2.5\n 43\n10.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nAcadAnnotative\n1000\nAnnotativeData\n1002\n{\n1070\n1\n1070\n1\n1002\n}\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\n242\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nCivil-Metric\n 70\n0\n 41\n3.0\n 42\n1.5\n 43\n6.0\n 44\n3.0\n 73\n0\n 74\n0\n 77\n1\n 78\n3\n 79\n2\n140\n3.0\n141\n3.0\n147\n2.0\n179\n2\n271\n2\n272\n2\n276\n1\n340\n11\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n3.0\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nBLOCK_RECORD\n 5\n1\n330\n0\n100\nAcDbSymbolTable\n 70\n4\n 0\nBLOCK_RECORD\n 5\n1F\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Model_Space\n340\n530\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n58\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Paper_Space\n340\n531\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n238\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_ArchTick\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n23C\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_Open30\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nENDTAB\n 0\nENDSEC"},dxfBlocks=function(){return" 0\nSECTION\n 2\nBLOCKS\n 0\nBLOCK\n 5\n23A\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_ArchTick\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_ArchTick\n 1\n\n 0\nENDBLK\n 5\n23B\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n20\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Model_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Model_Space\n 1\n\n 0\nENDBLK\n 5\n21\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n5A\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Paper_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Paper_Space\n 1\n\n 0\nENDBLK\n 5\n5B\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n240\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_Open30\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_Open30\n 1\n\n 0\nENDBLK\n 5\n241\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nENDSEC"},dxfObjects=function(){return" 0\nSECTION\n 2\nOBJECTS\n 0\nDICTIONARY\n 5\nC\n330\n0\n100\nAcDbDictionary\n281\n1\n 3\nACAD_COLOR\n350\n524\n 3\nACAD_GROUP\n350\n525\n 3\nACAD_LAYOUT\n350\n526\n 3\nACAD_MATERIAL\n350\n527\n 3\nACAD_MLEADERSTYLE\n350\n528\n 3\nACAD_MLINESTYLE\n350\n529\n 3\nACAD_PLOTSETTINGS\n350\n52A\n 3\nACAD_PLOTSTYLENAME\n350\n52C\n 3\nACAD_SCALELIST\n350\n52D\n 3\nACAD_TABLESTYLE\n350\n52E\n 3\nACAD_VISUALSTYLE\n350\n52F\n 0\nDICTIONARY\n 5\n524\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n525\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n526\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nModel\n350\n530\n 3\nLayout1\n350\n531\n 0\nDICTIONARY\n 5\n527\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n528\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n529\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52A\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nACDBPLACEHOLDER\n 5\n52B\n330\n52C\n 0\nACDBDICTIONARYWDFLT\n 5\n52C\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nNormal\n350\n52B\n100\nAcDbDictionaryWithDefault\n340\n52B\n 0\nDICTIONARY\n 5\n52D\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52E\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52F\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nLAYOUT\n 5\n530\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n14.53\n 70\n11952\n 72\n0\n 73\n1\n 74\n0\n 7\n\n 75\n0\n147\n0.069\n148\n114.98\n149\n300.29\n100\nAcDbLayout\n 1\nModel\n 70\n1\n 71\n0\n 10\n0.0\n 20\n0.0\n 11\n12.0\n 21\n9.0\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.0\n 24\n0.0\n 34\n0.0\n 15\n0.0\n 25\n0.0\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n1F\n 0\nLAYOUT\n 5\n531\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n1.0\n 70\n688\n 72\n0\n 73\n1\n 74\n5\n 7\nacad.ctb\n 75\n16\n147\n1.0\n148\n0.0\n149\n0.0\n100\nAcDbLayout\n 1\nLayout1\n 70\n1\n 71\n1\n 10\n-0.7\n 20\n-0.23\n 11\n10.3\n 21\n8.27\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.63\n 24\n0.8\n 34\n0.0\n 15\n9.0\n 25\n7.2\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n58\n 0\nENDSEC"};module.exports={dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects}; },{}],65:[function(require,module,exports){ @@ -334,7 +336,7 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255 },{}],66:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom3:geom3,geom2:geom2,path2:path2}=geometries,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects}=require("./autocad_AC2017"),colorindex2017=require("./colorindex2017"),mimeType="application/dxf",serialize=(n,...e)=>{const t={geom2To:"lwpolyline",geom3To:"3dface",pathTo:"lwpolyline",statusCallback:null,colorIndex:colorindex2017};if((n=Object.assign({},t,n)).entityId=0,0===(e=(e=flatten(e)).filter(n=>geom3.isA(n)||geom2.isA(n)||path2.isA(n))).length)throw new Error("only JSCAD geometries can be serialized to DXF");return e=toArray(modifiers.generalize({snap:!0,triangulate:!0},e)),[`999\nCreated by JSCAD\n${dxfHeaders(n)}\n${dxfClasses(n)}\n${dxfTables(n)}\n${dxfBlocks(n)}\n${dxfEntities(e,n)}\n${dxfObjects(n)}\n 0\nEOF\n`]},dxfEntities=(n,e)=>{const t=n.map((n,t)=>{if(geom2.isA(n)){const t=n.color,o=n.name,s=geom2.toOutlines(n).map(n=>({closed:!0,points:n,color:t,name:o}));return"polyline"===e.geom2To?PathsToPolyine(s,e):PathsToLwpolyline(s,e)}if(geom3.isA(n))return"polyline"===e.geom3To?PolygonsToPolyline(n,e):PolygonsTo3DFaces(n,e);if(path2.isA(n)){const t=n.color,o=n.name,s={closed:n.isClosed,points:path2.toPoints(n),color:t,name:o};return PathsToLwpolyline([s],e)}return""});let o=" 0\nSECTION\n 2\nENTITIES\n";return t.forEach(n=>{n&&(o+=n)}),o+=" 0\nENDSEC"},PathsToLwpolyline=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{if(o.points.length<1)return;const l=o.points.length+(o.closed?1:0);t+=` 0\nLWPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 67\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDbPolyline\n 90\n${l}\n 70\n${o.closed?1:0}\n`;for(let n=0;n=o.points.length&&(e-=o.points.length);const s=o.points[e];t+=` 10\n${s[0]}\n 20\n${s[1]}\n`}e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PathsToPolyine=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{const l=o.points.length+(o.closed?1:0);t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDb2dPolyline\n`;for(let n=0;n=o.points.length&&(s-=o.points.length);const l=o.points[s];t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb2dVertex\n 10\n${l[0]}\n 20\n${l[1]}\n`}t+=` 0\nSEQEND\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n`,e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PolygonsTo3DFaces=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";const o=geom3.toPolygons(n),s=getColorNumber(n,e);return o.forEach((n,o)=>{const l=n.color?getColorNumber(n,e):s;polygonToTriangles(n).forEach((n,o)=>{t+=triangleTo3DFaces(n,e,l)})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},polygonToTriangles=n=>{const e=n.vertices.length-2;if(e<1)return[];const t=n.vertices[0],o=[];for(let s=0;s{const o=n[0],s=n[1],l=n[2],r=n[2];return` 0\n3DFACE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 62\n${t}\n 100\nAcDbFace\n 70\n0\n 10\n${o[0]}\n 20\n${o[1]}\n 30\n${o[2]}\n 11\n${s[0]}\n 21\n${s[1]}\n 31\n${s[2]}\n 12\n${l[0]}\n 22\n${l[1]}\n 32\n${l[2]}\n 13\n${r[0]}\n 23\n${r[1]}\n 33\n${r[2]}\n`},PolygonsToPolyline=(n,e)=>{let t="";const o=polygons2polyfaces(geom3.toPolygons(n));return o.faces.length>0&&(t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(n,e)}\n 8\n0\n 62\n${getColorNumber(n,e)}\n 100\nAcDb3dPolyline\n 70\n64\n 71\n${o.vertices.length}\n 72\n${o.faces.length}\n`,o.vertices.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n${n[0]}\n 20\n${n[1]}\n 30\n${n[2]}\n 70\n192\n`}),o.faces.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n0\n 20\n0\n 30\n0\n 70\n128\n 71\n${n[0]}\n 72\n${n[1]}\n 73\n${n[2]}\n 74\n${n[3]}\n`})),[t]},polygons2polyfaces=n=>{const e=[],t=[];for(let o=0;o{n.entityId++;const e="00000"+n.entityId.toString(16).toUpperCase();return"CAD"+e.substr(e.length-5)},getName=(n,e)=>{if(n.name)return n.name;const t="00000"+e.entityId.toString(16).toUpperCase();return"CAD"+t.substr(t.length-5)},getColorNumber=(n,e)=>{let t=256;if(n.color){const o=Math.floor(255*n.color[0]),s=Math.floor(255*n.color[1]),l=Math.floor(255*n.color[2]),r=e.colorIndex;let a=765;for(let n=1;n>3;this._checkSize(r);const i=Math.pow(2,e-1)-1,h=this._readBits(t+e,1,s),d=this._readBits(t,e,s);let o=0,n=2,_=0,a=0;do{const e=this._readByte(++_,s);let r=1<<(a=t%8||8);for(;r>>=1;)e&r&&(o+=1/n),n*=2}while(t-=a);return this._pos+=s,d===1+(i<<1)?o?NaN:h?-1/0:1/0:(1+-2*h)*(d||o?d?Math.pow(2,d-i)*(1+o):Math.pow(2,1-i)*o:0)}_decodeInt(t,e){const r=this._readBits(0,t,t/8),s=Math.pow(2,t),i=e&&r>=s/2?r-s:r;return this._pos+=t/8,i}_shl(t,e){for(++e;--e;t=1073741824==(1073741824&(t%=2147483648))?2*t:2*(t-1073741824)+2147483647+1);return t}_readByte(t,e){return 255&this._buffer.charCodeAt(this._pos+e-t-1)}_readBits(t,e,r){const s=(t+e)%8,i=t%8,h=r-(t>>3)-1;let d=r+(-(t+e)>>3),o=h-d,n=this._readByte(h,r)>>i&(1<<(o?8-i:e))-1;for(o&&s&&(n+=(this._readByte(d++,r)&(1<{const{data:e,mimeType:l}=o;return new Blob(e,{type:l})};module.exports=convertToBlob; -},{"./makeBlob":71}],70:[function(require,module,exports){ -module.exports={convertToBlob:require("./convertToBlob"),makeBlob:require("./makeBlob"),BinaryReader:require("./BinaryReader"),Blob:require("./Blob")}; +},{"./makeBlob":72}],70:[function(require,module,exports){ +const ensureString=(e,n="utf-8")=>"string"==typeof e?e:new TextDecoder(n).decode(new Uint8Array(e));module.exports=ensureString; -},{"./BinaryReader":67,"./Blob":68,"./convertToBlob":69,"./makeBlob":71}],71:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ +module.exports={convertToBlob:require("./convertToBlob"),makeBlob:require("./makeBlob"),BinaryReader:require("./BinaryReader"),Blob:require("./Blob"),ensureString:require("./ensureString")}; + +},{"./BinaryReader":67,"./Blob":68,"./convertToBlob":69,"./ensureString":70,"./makeBlob":72}],72:[function(require,module,exports){ const nodeBlob=require("./Blob.js"),makeBlob=()=>{return"undefined"!=typeof window?window.Blob:nodeBlob};module.exports=makeBlob; -},{"./Blob.js":68}],72:[function(require,module,exports){ +},{"./Blob.js":68}],73:[function(require,module,exports){ const amfDeSerializer=require("@jscad/amf-deserializer"),dxfDeSerializer=require("@jscad/dxf-deserializer"),jsonDeSerializer=require("@jscad/json-deserializer"),objDeSerializer=require("@jscad/obj-deserializer"),stlDeSerializer=require("@jscad/stl-deserializer"),svgDeSerializer=require("@jscad/svg-deserializer"),x3dDeSerializer=require("@jscad/x3d-deserializer"),deserializers={};deserializers[amfDeSerializer.extension]=amfDeSerializer.deserialize,deserializers[dxfDeSerializer.extension]=dxfDeSerializer.deserialize,deserializers[jsonDeSerializer.extension]=jsonDeSerializer.deserialize,deserializers[objDeSerializer.extension]=objDeSerializer.deserialize,deserializers[stlDeSerializer.extension]=stlDeSerializer.deserialize,deserializers[svgDeSerializer.extension]=svgDeSerializer.deserialize,deserializers[x3dDeSerializer.extension]=x3dDeSerializer.deserialize,module.exports=deserializers; -},{"@jscad/amf-deserializer":50,"@jscad/dxf-deserializer":60,"@jscad/json-deserializer":76,"@jscad/obj-deserializer":79,"@jscad/stl-deserializer":82,"@jscad/svg-deserializer":94,"@jscad/x3d-deserializer":109}],73:[function(require,module,exports){ +},{"@jscad/amf-deserializer":50,"@jscad/dxf-deserializer":60,"@jscad/json-deserializer":77,"@jscad/obj-deserializer":80,"@jscad/stl-deserializer":83,"@jscad/svg-deserializer":95,"@jscad/x3d-deserializer":110}],74:[function(require,module,exports){ const{geometries:geometries}=require("@jscad/modeling"),formats={stl:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!0,convertGeom3:!1,convertGeom2:!1},stla:{displayName:"STL (ASCII)",description:"STereoLithography, ASCII",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},stlb:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},amf:{displayName:"AMF (experimental)",description:"Additive Manufacturing File Format",extension:"amf",mimetype:"application/amf+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!1},dxf:{displayName:"DXF (ASCII)",description:"AutoCAD Drawing Exchange Format",extension:"dxf",mimetype:"application/dxf",deserializable:!0,convertGeom3:!0,convertGeom2:!0},jscad:{displayName:"JSCAD",description:"JSCAD Design Source",extension:"jscad",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},json:{displayName:"json",description:"JavaScript Object Notation Format",extension:"json",mimetype:"application/json",deserializable:!0,convertGeom3:!0,convertGeom2:!0},js:{displayName:"js",description:"JavaScript Source",extension:"js",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},obj:{displayName:"OBJ",description:"Wavefront OBJ File",extension:"obj",mimetype:"text/plain",deserializable:!0,convertGeom3:!0,convertGeom2:!1},svg:{displayName:"SVG",description:"Scalable Vector Graphics Format",extension:"svg",mimetype:"image/svg+xml",deserializable:!0,convertGeom3:!1,convertGeom2:!0},x3d:{displayName:"X3D",description:"X3D File Format",extension:"x3d",mimetype:"model/x3d+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!0},"3mf":{displayName:"3MF",description:"3D Manufacturing Format",extension:"3mf",mimetype:"model/3mf",deserializable:!1,convertGeom3:!0,convertGeom2:!1}},conversionFormats=["amf","js","jscad","obj","scad","stl","dxf","svg","ttf","woff"],supportedFormatsForObjects=e=>{const o=[];let t=!1,s=!1;for(let o=0;o{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.indexOf(formats[o].extension)<0&&e.push(formats[o].extension);return e},supportedOutputFormats=()=>{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.push(o);return e},supportedInputExtensions=()=>{const e=[];for(const o in formats)!0===formats[o].deserializable&&e.push(formats[o].extension);return e};module.exports={formats:formats,conversionFormats:conversionFormats,supportedInputExtensions:supportedInputExtensions,supportedOutputExtensions:supportedOutputExtensions,supportedOutputFormats:supportedOutputFormats,supportedFormatsForObjects:supportedFormatsForObjects}; -},{"@jscad/modeling":216}],74:[function(require,module,exports){ +},{"@jscad/modeling":217}],75:[function(require,module,exports){ const{makeBlob:makeBlob,convertToBlob:convertToBlob}=require("@jscad/io-utils"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=require("./prepareOutput"),deserializers=require("./deserializers"),solidsAsBlob=(e,r)=>convertToBlob(prepareOutput(e,r));module.exports={makeBlob:makeBlob,solidsAsBlob:solidsAsBlob,amfSerializer:amfSerializer,dxfSerializer:dxfSerializer,jsonSerializer:jsonSerializer,objSerializer:objSerializer,stlSerializer:stlSerializer,svgSerializer:svgSerializer,x3dSerializer:x3dSerializer,m3fSerializer:m3fSerializer,deserializers:deserializers}; -},{"./deserializers":72,"./prepareOutput":75,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/dxf-serializer":66,"@jscad/io-utils":70,"@jscad/json-serializer":78,"@jscad/obj-serializer":81,"@jscad/stl-serializer":86,"@jscad/svg-serializer":98,"@jscad/x3d-serializer":124}],75:[function(require,module,exports){ +},{"./deserializers":73,"./prepareOutput":76,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/dxf-serializer":66,"@jscad/io-utils":71,"@jscad/json-serializer":79,"@jscad/obj-serializer":82,"@jscad/stl-serializer":87,"@jscad/svg-serializer":99,"@jscad/x3d-serializer":125}],76:[function(require,module,exports){ const{toArray:toArray}=require("@jscad/array-utils"),{formats:formats}=require("./formats"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=(e,r)=>{const i={format:void 0,version:"0.0.0"},{format:a,version:s}=Object.assign({},i,r),l={producer:"JSCAD "+s,date:new Date,version:s},t={amf:amfSerializer,stl:stlSerializer,stla:{mimeType:stlSerializer.mimeType,serialize:(e,r)=>stlSerializer.serialize(Object.assign({},{binary:!1},e),r)},stlb:stlSerializer,dxf:dxfSerializer,obj:objSerializer,svg:svgSerializer,x3d:x3dSerializer,"3mf":m3fSerializer,json:jsonSerializer,js:{mimeType:formats.js.mimetype,serialize:(e,r)=>toArray(r)},jscad:{mimeType:formats.jscad.mimetype,serialize:(e,r)=>toArray(r)},undefined:()=>{throw new Error("Not supported : only jscad, stl, amf, dxf, svg or json as output format")}},o=Object.assign({},l,r);return{data:t[a].serialize(o,e),mimeType:t[a].mimeType}};module.exports=prepareOutput; -},{"./formats":73,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/array-utils":532,"@jscad/dxf-serializer":66,"@jscad/json-serializer":78,"@jscad/obj-serializer":81,"@jscad/stl-serializer":86,"@jscad/svg-serializer":98,"@jscad/x3d-serializer":124}],76:[function(require,module,exports){ -const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"json",output:"script",version:version,addMetaData:!0};e=Object.assign({},n,e);let r=JSON.parse(t);return r=flatten(toArray(r)),"script"===e.output?translate(e,r):r},translate=(e,t)=>{const{addMetaData:n,filename:r,version:s}=e;let a=n?`//\n// Produced by JSCAD IO Library : JSON Deserializer (${s})\n// date: ${new Date}\n// source: ${r}\n//\n`:"";return a+=`\nconst { geometries } = require('@jscad/modeling')\n\nconst main = () => {\n const objects = [${translateToList(t)} ]\n return objects\n}\n\n${translateToObjects(t)}\n\nmodule.exports = { main }\n`},translateToList=e=>e.reduce((e,t,n)=>e+` json${n},`,""),translateToObjects=e=>e.reduce((e,t,n)=>e+translateToObject(t,n),""),translateToObject=(e,t)=>`const json${t} = ${JSON.stringify(e)}\n`,extension="json";module.exports={deserialize:deserialize,extension:"json"}; +},{"./formats":74,"@jscad/3mf-serializer":41,"@jscad/amf-serializer":54,"@jscad/array-utils":533,"@jscad/dxf-serializer":66,"@jscad/json-serializer":79,"@jscad/obj-serializer":82,"@jscad/stl-serializer":87,"@jscad/svg-serializer":99,"@jscad/x3d-serializer":125}],77:[function(require,module,exports){ +const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"json",output:"script",version:version,addMetaData:!0};e=Object.assign({},n,e),t=ensureString(t);let r=JSON.parse(t);return r=flatten(toArray(r)),"script"===e.output?translate(e,r):r},translate=(e,t)=>{const{addMetaData:n,filename:r,version:s}=e;let a=n?`//\n// Produced by JSCAD IO Library : JSON Deserializer (${s})\n// date: ${new Date}\n// source: ${r}\n//\n`:"";return a+=`\nconst { geometries } = require('@jscad/modeling')\n\nconst main = () => {\n const objects = [${translateToList(t)} ]\n return objects\n}\n\n${translateToObjects(t)}\n\nmodule.exports = { main }\n`},translateToList=e=>e.reduce((e,t,n)=>e+` json${n},`,""),translateToObjects=e=>e.reduce((e,t,n)=>e+translateToObject(t,n),""),translateToObject=(e,t)=>`const json${t} = ${JSON.stringify(e)}\n`,extension="json";module.exports={deserialize:deserialize,extension:"json"}; -},{"./package.json":77,"@jscad/array-utils":532}],77:[function(require,module,exports){ +},{"./package.json":78,"@jscad/array-utils":533,"@jscad/io-utils":71}],78:[function(require,module,exports){ module.exports={ "name": "@jscad/json-deserializer", - "version": "2.0.29", + "version": "2.0.30", "description": "JSON Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -397,26 +402,27 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/array-utils": "2.1.4" + "@jscad/array-utils": "2.1.4", + "@jscad/io-utils": "2.0.29" }, "devDependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "ava": "3.15.0", "nyc": "15.1.0" }, "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],78:[function(require,module,exports){ +},{}],79:[function(require,module,exports){ const{utils:utils}=require("@jscad/modeling"),replacer=(r,s)=>{switch(r){case"transforms":case"plane":return Array.from(s);case"points":case"vertices":return s.map(r=>Array.from(r));case"sides":return s.map(r=>[Array.from(r[0]),Array.from(r[1])])}return s},serialize=(r,...s)=>{r=Object.assign({},{statusCallback:null},r),s=utils.flatten(s),r.statusCallback&&r.statusCallback({progress:0});const e=JSON.stringify(s,replacer);return r.statusCallback&&r.statusCallback({progress:100}),[e]},mimeType="application/json";module.exports={serialize:serialize,mimeType:mimeType}; -},{"@jscad/modeling":216}],79:[function(require,module,exports){ -const{colors:colors,primitives:primitives}=require("@jscad/modeling"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"obj",output:"script",orientation:"outward",version:version,addMetaData:!0};e=Object.assign({},n,e);const{output:s}=e;e&&e.statusCallback&&e.statusCallback({progress:0});const{positions:o,groups:r}=getGroups(t,e),a="script"===s?stringify(o,r,e):objectify(o,r,e);return e&&e.statusCallback&&e.statusCallback({progress:100}),a},getGroups=(e,t)=>{let n=[];const s=[];let o=null;n.push({faces:[],colors:[],name:"default",line:0});const r=(e,t)=>{const s={faces:[],colors:[],name:""};t&&t.length>0&&(s.name=t.join(" ")),n.push(s)},a=(e,t)=>{const n=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]);s.push([n,o,r])},l=(e,t)=>{const r=t.map(e=>{const t=e.match(/[0-9+\-eE]+/g);let n=parseInt(t[0]);return n<0?n=s.length+n:n--,n}),a=n.pop();a.faces.push(r),a.colors.push(o),n.push(a)},i=(e,t)=>{if(o=null,t&&t.length>0){const e=colors.colorNameToRgb(t[0]);e&&(o=[e[0],e[1],e[2],1])}},c=e.split(/\n/);for(let e=0;e0){let e=t.match(/\S+/g);if(e){const t=e[0];switch(e=e.slice(1),t){case"g":r(0,e);break;case"v":a(0,e);break;case"f":l(0,e);break;case"usemtl":i(0,e)}}}}return n=n.filter(e=>e.faces.length>0),{positions:s,groups:n}},objectify=(e,t,n)=>{return t.map(t=>primitives.polyhedron({orientation:n.orientation,points:e,faces:t.faces,colors:t.colors}))},translatePoints=e=>{let t=" let points = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateFaces=e=>{let t=" let faces = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateColors=e=>{let t=" let colors = [\n";return e.forEach(e=>{t+=e?` [${e}],\n`:" null,\n"}),t+=" ]"},translateGroupsToCalls=e=>{let t="";return e.forEach((e,n)=>t+=` group${n}(points), // ${e.name}\n`),t},translateGroupsToFunctions=(e,t)=>{let n="";return e.forEach((e,s)=>{const o=e.faces,r=e.colors;n+=`\n// group : ${e.name}\n// faces: ${o.length}\n`,n+=`const group${s} = (points) => {\n${translateFaces(o)}\n${translateColors(r)}\n return primitives.polyhedron({ orientation: '${t.orientation}', points, faces, colors })\n}\n`}),n},stringify=(e,t,n)=>{const{filename:s,addMetaData:o,version:r}=n;let a=o?`//\n// Produced by JSCAD IO Library : OBJ Deserializer (${r})\n// date: ${new Date}\n// source: ${s}\n//\n `:"";return a+=`const {primitives} = require('@jscad/modeling')\n\n// groups: ${t.length}\n// points: ${e.length}\nconst main = () => {\n // points are common to all geometries\n${translatePoints(e)}\n\n let geometries = [\n${translateGroupsToCalls(t)} ]\n return geometries\n}\n\n${translateGroupsToFunctions(t,n)}\nmodule.exports = {main}\n`},extension="obj";module.exports={deserialize:deserialize,extension:"obj"}; +},{"@jscad/modeling":217}],80:[function(require,module,exports){ +const{colors:colors,primitives:primitives}=require("@jscad/modeling"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"obj",output:"script",orientation:"outward",version:version,addMetaData:!0};e=Object.assign({},n,e);const{output:s}=e;t=ensureString(t),e&&e.statusCallback&&e.statusCallback({progress:0});const{positions:o,groups:r}=getGroups(t,e),a="script"===s?stringify(o,r,e):objectify(o,r,e);return e&&e.statusCallback&&e.statusCallback({progress:100}),a},getGroups=(e,t)=>{let n=[];const s=[];let o=null;n.push({faces:[],colors:[],name:"default",line:0});const r=(e,t)=>{const s={faces:[],colors:[],name:""};t&&t.length>0&&(s.name=t.join(" ")),n.push(s)},a=(e,t)=>{const n=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]);s.push([n,o,r])},i=(e,t)=>{const r=t.map(e=>{const t=e.match(/[0-9+\-eE]+/g);let n=parseInt(t[0]);return n<0?n=s.length+n:n--,n}),a=n.pop();a.faces.push(r),a.colors.push(o),n.push(a)},l=(e,t)=>{if(o=null,t&&t.length>0){const e=colors.colorNameToRgb(t[0]);e&&(o=[e[0],e[1],e[2],1])}},c=e.split(/\n/);for(let e=0;e0){let e=t.match(/\S+/g);if(e){const t=e[0];switch(e=e.slice(1),t){case"g":r(0,e);break;case"v":a(0,e);break;case"f":i(0,e);break;case"usemtl":l(0,e)}}}}return n=n.filter(e=>e.faces.length>0),{positions:s,groups:n}},objectify=(e,t,n)=>{return t.map(t=>primitives.polyhedron({orientation:n.orientation,points:e,faces:t.faces,colors:t.colors}))},translatePoints=e=>{let t=" let points = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateFaces=e=>{let t=" let faces = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateColors=e=>{let t=" let colors = [\n";return e.forEach(e=>{t+=e?` [${e}],\n`:" null,\n"}),t+=" ]"},translateGroupsToCalls=e=>{let t="";return e.forEach((e,n)=>t+=` group${n}(points), // ${e.name}\n`),t},translateGroupsToFunctions=(e,t)=>{let n="";return e.forEach((e,s)=>{const o=e.faces,r=e.colors;n+=`\n// group : ${e.name}\n// faces: ${o.length}\n`,n+=`const group${s} = (points) => {\n${translateFaces(o)}\n${translateColors(r)}\n return primitives.polyhedron({ orientation: '${t.orientation}', points, faces, colors })\n}\n`}),n},stringify=(e,t,n)=>{const{filename:s,addMetaData:o,version:r}=n;let a=o?`//\n// Produced by JSCAD IO Library : OBJ Deserializer (${r})\n// date: ${new Date}\n// source: ${s}\n//\n `:"";return a+=`const {primitives} = require('@jscad/modeling')\n\n// groups: ${t.length}\n// points: ${e.length}\nconst main = () => {\n // points are common to all geometries\n${translatePoints(e)}\n\n let geometries = [\n${translateGroupsToCalls(t)} ]\n return geometries\n}\n\n${translateGroupsToFunctions(t,n)}\nmodule.exports = {main}\n`},extension="obj";module.exports={deserialize:deserialize,extension:"obj"}; -},{"./package.json":80,"@jscad/modeling":216}],80:[function(require,module,exports){ +},{"./package.json":81,"@jscad/io-utils":71,"@jscad/modeling":217}],81:[function(require,module,exports){ module.exports={ "name": "@jscad/obj-deserializer", - "version": "2.0.28", + "version": "2.0.29", "description": "OBJ Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -448,7 +454,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", @@ -457,16 +464,16 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],81:[function(require,module,exports){ +},{}],82:[function(require,module,exports){ const{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/object",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,triangulate:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to OBJ");t.length!==o.length&&console.warn("some objects could not be serialized to OBJ"),o=toArray(modifiers.generalize({snap:!0,triangulate:e.triangulate},o)),e.statusCallback&&e.statusCallback({progress:0});let r="# Wavefront OBJ file generated by JSCAD\n";const s=[];let a="default";return o.forEach((t,l)=>{e.statusCallback&&e.statusCallback({progress:100*l/o.length}),r+="\n";const i=getColorName(t),n=geometries.geom3.toPolygons(t).filter(e=>e.vertices.length>=3);n.forEach(e=>{e.vertices.forEach(e=>{const t=convertVertex(e);s.indexOf(t)<0&&(s.push(t),r+=`${t}\n`)})}),r+="\n",n.forEach(e=>{const t=e.vertices.map(e=>s.indexOf(convertVertex(e))+1),o=getColorName(e)||i||"default";o!==a&&(r+=`usemtl ${o}\n`,a=o),r+=`f ${t.join(" ")}\n`})}),e.statusCallback&&e.statusCallback({progress:100}),[r]},convertVertex=e=>`v ${e[0]} ${e[1]} ${e[2]}`,getColorName=e=>{let t;if(e.color){const o=e.color[0],r=e.color[1],s=e.color[2];let a=765;for(const e in colors.cssColors){const l=colors.cssColors[e],i=Math.abs(o-l[0])+Math.abs(r-l[1])+Math.abs(s-l[2]);if(i{const t={filename:"stl",version:packageVersion,addMetaData:!0,output:"script"};(e=Object.assign({},t,e))&&e.statusCallback&&e.statusCallback({progress:0});const{filename:r,version:a,output:n,addMetaData:o}=e;s=isBuffer(s)?bufferToBinaryString(s):s;const l=isDataBinaryRobust(s);e&&e.statusCallback&&e.statusCallback({progress:33});e&&e.statusCallback&&e.statusCallback({progress:66});const i=("script"===n?formatAsJscad:formatAsCsg)((l?deserializeBinarySTL:deserializeAsciiSTL)(s,r,a,"script"===n?({vertices:e,triangles:s,normals:t,colors:r,index:a})=>toScript(e,s,null,r,a):({vertices:e,triangles:s,normals:t,colors:r})=>toPolyhedron(e,s,null,r)),o,a,r);return e&&e.statusCallback&&e.statusCallback({progress:100}),i},bufferToBinaryString=e=>{let s="";const t=new Uint8Array(e),r=t.byteLength;for(let e=0;evoid 0!==e.byteLength&&"function"==typeof e.slice,ensureString=e=>{if("string"!=typeof e){const s=new Uint8Array(e);let t="";for(let r=0;r{const s=ensureString(e);return null===/vertex[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g.exec(s)},formatAsJscad=(e,s,t,r)=>{let a="";return s&&(a=`\n //\n // producer: JSCAD STL Deserializer ${t}\n // date: ${new Date}\n // source: ${r}\n // objects: ${e.length}\n //\n `),a+="const {primitives} = require('@jscad/modeling')\n",a+=e.join("\n"),a+=`\nconst main = () => {\n return [${e.map((e,s)=>`solid${s+1}()`)}]\n}\n\nmodule.exports = {main}\n`},formatAsCsg=e=>e,deserializeBinarySTL=(e,s,t,r)=>{const a=[],n=[],o=[],l=[];let i=0,c=0,u=null;const p=parseInt("01000000000000000",2),h=parseInt("00000000000011111",2),d=parseInt("00000001111100000",2),g=parseInt("00111110000000000",2),m=new BinaryReader(e);let f=0,v=0,b=0,S=0,F=0,y=0;for(let e=0;e<80;e++)switch(f){case 6:b=m.readUInt8(),f+=1;continue;case 7:S=m.readUInt8(),f+=1;continue;case 8:F=m.readUInt8(),f+=1;continue;case 9:y=m.readUInt8(),f+=1;continue;default:switch(v=m.readChar()){case"C":case"O":case"L":case"R":case"=":f+=1}}10===f&&(u=[b/255,S/255,F/255,y/255]);const C=m.readUInt32();for(let e=0;e0&&console.log("bad triangle vertice coords/normal: ",v),c+=v;const b=[];b.push(i++),b.push(i++),b.push(i++);const S=m.readUInt16();let F=null;if(10===f){const e=(S&h)/31,s=((S&d)>>>5)/31,t=((S&g)>>>10)/31,r=255;F=0===(S&p)?[e,s,t,r]:u,l.push(F)}if(0===v){const a=maths.vec3.subtract(maths.vec3.create(),t,s),n=maths.vec3.subtract(maths.vec3.create(),r,s),o=maths.vec3.cross(maths.vec3.create(),a,n);if(maths.vec3.dot(e,o)>0){const e=r;r=s,s=e}}a.push(s),a.push(t),a.push(r),n.push(b),o.push(e)}return c&&console.warn(`WARNING: import errors: ${c} (some triangles might be misaligned or missing)`),[r({vertices:a,triangles:n,normals:o,colors:l,index:1})]},deserializeAsciiSTL=(e,s,t,r)=>{let a=0;const n=e.split("endsolid"),o=[];for(let s=1;s0){const e=g;g=c,c=e}}n.push(c),n.push(d),n.push(g),i.push(o),l.push(m),a++}p&&console.warn(`WARNING: import errors: ${p} (some triangles might be misaligned or missing)`),o.push(r({vertices:n,triangles:l,colors:c,index:s}))}}return o},toPolyhedron=(e,s,t,r)=>{r&&s.length!==r.length&&(r=void 0);const a={orientation:"inward",points:e,faces:s,colors:r};return primitives.polyhedron(a)},toScript=(e,s,t,r,a)=>{let n=`\n//\n// solid ${a} : ${e.length} points, ${s.length} faces, ${r.length} colors\n//\nconst solid${a} = () => {\n`;n+=" const points = [\n";for(let s=0;s{e.statusCallback&&e.statusCallback({progress:0});const o=`solid JSCAD\n${convertToStl(t,e)}\nendsolid JSCAD\n`;return e.statusCallback&&e.statusCallback({progress:100}),[o]},convertToStl=(t,e)=>{const o=[];return t.forEach((r,n)=>{o.push(convertToFacets(r,e)),e.statusCallback&&e.statusCallback({progress:100*n/t.length})}),o.join("\n")},convertToFacets=(t,e)=>{const o=[];return geometries.geom3.toPolygons(t).forEach((t,e)=>{o.push(convertToFacet(t))}),o.join("\n")},vector3DtoStlString=t=>`${t[0]} ${t[1]} ${t[2]}`,vertextoStlString=t=>`vertex ${vector3DtoStlString(t)}`,convertToFacet=t=>{const e=[];if(t.vertices.length>=3){const o=vertextoStlString(t.vertices[0]);for(let r=0;r{r.statusCallback&&r.statusCallback({progress:0});const t=new ArrayBuffer(4),s=new Int32Array(t,0,1),a=new Int8Array(t,0,4);if(s[0]=287454020,68!==a[0])throw new Error("Binary STL output is currently only supported on little-endian (Intel) processors");let n=0,o=0;e.forEach((e,r)=>{geometries.geom3.toPolygons(e).forEach(e=>{const r=e.vertices.length;n+=r>=3?r-2:0,o+=1})});const l=new Uint8Array(80);for(let e=0;e<80;e++)l[e]=65;const i=new Uint32Array(1);i[0]=n;const c=new ArrayBuffer(50*n),y=new Int8Array(c),f=new ArrayBuffer(50),u=new Int8Array(f),g=new Float32Array(f,0,12),w=new Uint16Array(f,48,1);let A=0;return e.forEach(e=>{geometries.geom3.toPolygons(e).forEach((e,t)=>{const s=e.vertices,a=s.length,n=geometries.poly3.plane(e);for(let e=0;e0?e:0)];g[r++]=a[0],g[r++]=a[1],g[r++]=a[2]}w[0]=0,y.set(u,A),A+=50}r.statusCallback&&r.statusCallback({progress:100*t/o})})}),r.statusCallback&&r.statusCallback({progress:100}),[l.buffer,i.buffer,c]};module.exports={serializeBinary:serializeBinary}; -},{"@jscad/modeling":216}],86:[function(require,module,exports){ +},{"@jscad/modeling":217}],87:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{serializeBinary:serializeBinary}=require("./CSGToStlb"),{serializeText:serializeText}=require("./CSGToStla"),mimeType="application/sla",serialize=(e,...i)=>{e=Object.assign({},{binary:!0,statusCallback:null},e);let r=(i=flatten(i)).filter(e=>geometries.geom3.isA(e));if(0===r.length)throw new Error("only 3D geometries can be serialized to STL");return i.length!==r.length&&console.warn("some objects could not be serialized to STL"),r=toArray(modifiers.generalize({snap:!0,triangulate:!0},r)),e.binary?serializeBinary(r,e):serializeText(r,e)};module.exports={mimeType:mimeType,serialize:serialize}; -},{"./CSGToStla":84,"./CSGToStlb":85,"@jscad/array-utils":532,"@jscad/modeling":216}],87:[function(require,module,exports){ +},{"./CSGToStla":85,"./CSGToStlb":86,"@jscad/array-utils":533,"@jscad/modeling":217}],88:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],88:[function(require,module,exports){ +},{}],89:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="-퟿-�𐀀-􏿿",exports.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.RESTRICTED_CHAR_RE=new RegExp("^["+exports.RESTRICTED_CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isRestrictedChar(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}function isCharAndNotRestricted(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isRestrictedChar=isRestrictedChar,exports.isCharAndNotRestricted=isCharAndNotRestricted,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],89:[function(require,module,exports){ +},{}],90:[function(require,module,exports){ "use strict";function isNCNameStartChar(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNCNameChar(e){return isNCNameStartChar(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}Object.defineProperty(exports,"__esModule",{value:!0}),exports.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NC_NAME_CHAR="-"+exports.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.NC_NAME_START_CHAR_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]$","u"),exports.NC_NAME_CHAR_RE=new RegExp("^["+exports.NC_NAME_CHAR+"]$","u"),exports.NC_NAME_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]["+exports.NC_NAME_CHAR+"]*$","u"),exports.isNCNameStartChar=isNCNameStartChar,exports.isNCNameChar=isNCNameChar; -},{}],90:[function(require,module,exports){ +},{}],91:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ed5=require("xmlchars/xml/1.0/ed5"),ed2=require("xmlchars/xml/1.1/ed2"),NSed3=require("xmlchars/xmlns/1.0/ed3");var isS=ed5.isS,isChar10=ed5.isChar,isNameStartChar=ed5.isNameStartChar,isNameChar=ed5.isNameChar,S_LIST=ed5.S_LIST,NAME_RE=ed5.NAME_RE,isChar11=ed2.isChar,isNCNameStartChar=NSed3.isNCNameStartChar,isNCNameChar=NSed3.isNCNameChar,NC_NAME_RE=NSed3.NC_NAME_RE;const XML_NAMESPACE="http://www.w3.org/XML/1998/namespace",XMLNS_NAMESPACE="http://www.w3.org/2000/xmlns/",rootNS={__proto__:null,xml:XML_NAMESPACE,xmlns:XMLNS_NAMESPACE},XML_ENTITIES={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},EOC=-1,NL_LIKE=-2,S_BEGIN=0,S_BEGIN_WHITESPACE=1,S_DOCTYPE=2,S_DOCTYPE_QUOTE=3,S_DTD=4,S_DTD_QUOTED=5,S_DTD_OPEN_WAKA=6,S_DTD_OPEN_WAKA_BANG=7,S_DTD_COMMENT=8,S_DTD_COMMENT_ENDING=9,S_DTD_COMMENT_ENDED=10,S_DTD_PI=11,S_DTD_PI_ENDING=12,S_TEXT=13,S_ENTITY=14,S_OPEN_WAKA=15,S_OPEN_WAKA_BANG=16,S_COMMENT=17,S_COMMENT_ENDING=18,S_COMMENT_ENDED=19,S_CDATA=20,S_CDATA_ENDING=21,S_CDATA_ENDING_2=22,S_PI_FIRST_CHAR=23,S_PI_REST=24,S_PI_BODY=25,S_PI_ENDING=26,S_XML_DECL_NAME_START=27,S_XML_DECL_NAME=28,S_XML_DECL_EQ=29,S_XML_DECL_VALUE_START=30,S_XML_DECL_VALUE=31,S_XML_DECL_SEPARATOR=32,S_XML_DECL_ENDING=33,S_OPEN_TAG=34,S_OPEN_TAG_SLASH=35,S_ATTRIB=36,S_ATTRIB_NAME=37,S_ATTRIB_NAME_SAW_WHITE=38,S_ATTRIB_VALUE=39,S_ATTRIB_VALUE_QUOTED=40,S_ATTRIB_VALUE_CLOSED=41,S_ATTRIB_VALUE_UNQUOTED=42,S_CLOSE_TAG=43,S_CLOSE_TAG_SAW_WHITE=44,TAB=9,NL=10,CR=13,SPACE=32,BANG=33,DQUOTE=34,AMP=38,SQUOTE=39,MINUS=45,FORWARD_SLASH=47,SEMICOLON=59,LESS=60,EQUAL=61,GREATER=62,QUESTION=63,OPEN_BRACKET=91,CLOSE_BRACKET=93,NEL=133,LS=8232,isQuote=t=>34===t||39===t,QUOTES=[34,39],DOCTYPE_TERMINATOR=[...QUOTES,OPEN_BRACKET,GREATER],DTD_TERMINATOR=[...QUOTES,LESS,CLOSE_BRACKET],XML_DECL_NAME_TERMINATOR=[EQUAL,QUESTION,...S_LIST],ATTRIB_VALUE_UNQUOTED_TERMINATOR=[...S_LIST,GREATER,AMP,LESS];function nsPairCheck(t,s,e){switch(s){case"xml":e!==XML_NAMESPACE&&t.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);break;case"xmlns":e!==XMLNS_NAMESPACE&&t.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`)}switch(e){case XMLNS_NAMESPACE:t.fail(""===s?`the default namespace may not be set to ${e}.`:`may not assign a prefix (even "xmlns") to the URI ${XMLNS_NAMESPACE}.`);break;case XML_NAMESPACE:switch(s){case"xml":break;case"":t.fail(`the default namespace may not be set to ${e}.`);break;default:t.fail("may not assign the xml namespace to another prefix.")}}}function nsMappingCheck(t,s){for(const e of Object.keys(s))nsPairCheck(t,e,s[e])}const isNCName=t=>NC_NAME_RE.test(t),isName=t=>NAME_RE.test(t),FORBIDDEN_START=0,FORBIDDEN_BRACKET=1,FORBIDDEN_BRACKET_BRACKET=2;exports.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const EVENT_NAME_TO_HANDLER_NAME={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class SaxesParser{constructor(t){this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;const s=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,s){this.nameStartCheck=isNCNameStartChar,this.nameCheck=isNCNameChar,this.isName=isNCName,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},rootNS);const t=this.opt.additionalNamespaces;null!=t&&(nsMappingCheck(this,t),Object.assign(this.ns,t))}else this.nameStartCheck=isNameStartChar,this.nameCheck=isNameChar,this.isName=isName,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var t;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=FORBIDDEN_START,this.attribList=[];const{fragmentOpt:s}=this;this.state=s?S_TEXT:S_BEGIN,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=s,this.xmlDeclPossible=!s,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:e}=this.opt;if(void 0===e){if(!0===this.opt.forceXMLVersion)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");e="1.0"}this.setXMLVersion(e),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(XML_ENTITIES),null===(t=this.readyHandler)||void 0===t||t.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(t,s){this[EVENT_NAME_TO_HANDLER_NAME[t]]=s}off(t){this[EVENT_NAME_TO_HANDLER_NAME[t]]=void 0}makeError(t){var s;let e=null!==(s=this.fileName)&&void 0!==s?s:"";return this.trackPosition&&(e.length>0&&(e+=":"),e+=`${this.line}:${this.column}`),e.length>0&&(e+=": "),new Error(e+t)}fail(t){const s=this.makeError(t),e=this.errorHandler;if(void 0===e)throw s;return e(s),this}write(t){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let s=!1;null===t?(s=!0,t=""):"object"==typeof t&&(t=t.toString()),void 0!==this.carriedFromPrevious&&(t=`${this.carriedFromPrevious}${t}`,this.carriedFromPrevious=void 0);let e=t.length;const i=t.charCodeAt(e-1);!s&&(i===CR||i>=55296&&i<=56319)&&(this.carriedFromPrevious=t[e-1],e--,t=t.slice(0,e));const{stateTable:a}=this;for(this.chunk=t,this.i=0;this.i=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>=SPACE||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:return t.charCodeAt(s+1)===NL&&(this.i=s+2),this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCode11(){const{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>31&&e<127||e>159&&e!==LS||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:{const e=t.charCodeAt(s+1);e!==NL&&e!==NEL||(this.i=s+2)}case NEL:case LS:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCodeNorm(){const t=this.getCode();return t===NL_LIKE?NL:t}unget(){this.i=this.prevI,this.column--}captureTo(t){let{i:s}=this;const{chunk:e}=this;for(;;){const i=this.getCode(),a=i===NL_LIKE,h=a?NL:i;if(h===EOC||t.includes(h))return this.text+=e.slice(s,this.prevI),h;a&&(this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i)}}captureToChar(t){let{i:s}=this;const{chunk:e}=this;for(;;){let i=this.getCode();switch(i){case NL_LIKE:this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i,i=NL;break;case EOC:return this.text+=e.slice(s),!1}if(i===t)return this.text+=e.slice(s,this.prevI),!0}}captureNameChars(){const{chunk:t,i:s}=this;for(;;){const e=this.getCode();if(e===EOC)return this.name+=t.slice(s),EOC;if(!isNameChar(e))return this.name+=t.slice(s,this.prevI),e===NL_LIKE?NL:e}}skipSpaces(){for(;;){const t=this.getCodeNorm();if(t===EOC||!isS(t))return t}}setXMLVersion(t){this.currentXMLVersion=t,"1.0"===t?(this.isChar=isChar10,this.getCode=this.getCode10):(this.isChar=isChar11,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=S_BEGIN_WHITESPACE}sBeginWhitespace(){const t=this.i,s=this.skipSpaces();switch(this.prevI!==t&&(this.xmlDeclPossible=!1),s){case LESS:if(this.state=S_OPEN_WAKA,0!==this.text.length)throw new Error("no-empty text at start");break;case EOC:break;default:this.unget(),this.state=S_TEXT,this.xmlDeclPossible=!1}}sDoctype(){var t;const s=this.captureTo(DOCTYPE_TERMINATOR);switch(s){case GREATER:null===(t=this.doctypeHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT,this.doctype=!0;break;case EOC:break;default:this.text+=String.fromCodePoint(s),s===OPEN_BRACKET?this.state=S_DTD:isQuote(s)&&(this.state=S_DOCTYPE_QUOTE,this.q=s)}}sDoctypeQuote(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.q=null,this.state=S_DOCTYPE)}sDTD(){const t=this.captureTo(DTD_TERMINATOR);t!==EOC&&(this.text+=String.fromCodePoint(t),t===CLOSE_BRACKET?this.state=S_DOCTYPE:t===LESS?this.state=S_DTD_OPEN_WAKA:isQuote(t)&&(this.state=S_DTD_QUOTED,this.q=t))}sDTDQuoted(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.state=S_DTD,this.q=null)}sDTDOpenWaka(){const t=this.getCodeNorm();switch(this.text+=String.fromCodePoint(t),t){case BANG:this.state=S_DTD_OPEN_WAKA_BANG,this.openWakaBang="";break;case QUESTION:this.state=S_DTD_PI;break;default:this.state=S_DTD}}sDTDOpenWakaBang(){const t=String.fromCodePoint(this.getCodeNorm()),s=this.openWakaBang+=t;this.text+=t,"-"!==s&&(this.state="--"===s?S_DTD_COMMENT:S_DTD,this.openWakaBang="")}sDTDComment(){this.captureToChar(MINUS)&&(this.text+="-",this.state=S_DTD_COMMENT_ENDING)}sDTDCommentEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),this.state=t===MINUS?S_DTD_COMMENT_ENDED:S_DTD_COMMENT}sDTDCommentEnded(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER?this.state=S_DTD:(this.fail("malformed comment."),this.state=S_DTD_COMMENT)}sDTDPI(){this.captureToChar(QUESTION)&&(this.text+="?",this.state=S_DTD_PI_ENDING)}sDTDPIEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER&&(this.state=S_DTD)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:t}=this;const{chunk:s}=this;t:for(;;)switch(this.getCode()){case NL_LIKE:this.entity+=`${s.slice(t,this.prevI)}\n`,t=this.i;break;case SEMICOLON:{const{entityReturnState:e}=this,i=this.entity+s.slice(t,this.prevI);let a;this.state=e,""===i?(this.fail("empty entity name."),a="&;"):(a=this.parseEntity(i),this.entity=""),e===S_TEXT&&void 0===this.textHandler||(this.text+=a);break t}case EOC:this.entity+=s.slice(t);break t}}sOpenWaka(){const t=this.getCode();if(isNameStartChar(t))this.state=S_OPEN_TAG,this.unget(),this.xmlDeclPossible=!1;else switch(t){case FORWARD_SLASH:this.state=S_CLOSE_TAG,this.xmlDeclPossible=!1;break;case BANG:this.state=S_OPEN_WAKA_BANG,this.openWakaBang="",this.xmlDeclPossible=!1;break;case QUESTION:this.state=S_PI_FIRST_CHAR;break;default:this.fail("disallowed character in tag name"),this.state=S_TEXT,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=S_CDATA,this.openWakaBang="";break;case"--":this.state=S_COMMENT,this.openWakaBang="";break;case"DOCTYPE":this.state=S_DOCTYPE,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(MINUS)&&(this.state=S_COMMENT_ENDING)}sCommentEnding(){var t;const s=this.getCodeNorm();s===MINUS?(this.state=S_COMMENT_ENDED,null===(t=this.commentHandler)||void 0===t||t.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(s)}`,this.state=S_COMMENT)}sCommentEnded(){const t=this.getCodeNorm();t!==GREATER?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(t)}`,this.state=S_COMMENT):this.state=S_TEXT}sCData(){this.captureToChar(CLOSE_BRACKET)&&(this.state=S_CDATA_ENDING)}sCDataEnding(){const t=this.getCodeNorm();t===CLOSE_BRACKET?this.state=S_CDATA_ENDING_2:(this.text+=`]${String.fromCodePoint(t)}`,this.state=S_CDATA)}sCDataEnding2(){var t;const s=this.getCodeNorm();switch(s){case GREATER:null===(t=this.cdataHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT;break;case CLOSE_BRACKET:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(s)}`,this.state=S_CDATA}}sPIFirstChar(){const t=this.getCodeNorm();this.nameStartCheck(t)?(this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST):t===QUESTION||isS(t)?(this.fail("processing instruction without a target."),this.state=t===QUESTION?S_PI_ENDING:S_PI_BODY):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST)}sPIRest(){const{chunk:t,i:s}=this;for(;;){const e=this.getCodeNorm();if(e===EOC)return void(this.piTarget+=t.slice(s));if(!this.nameCheck(e)){this.piTarget+=t.slice(s,this.prevI);const i=e===QUESTION;i||isS(e)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=i?S_XML_DECL_ENDING:S_XML_DECL_NAME_START):this.state=i?S_PI_ENDING:S_PI_BODY:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e));break}}}sPIBody(){if(0===this.text.length){const t=this.getCodeNorm();t===QUESTION?this.state=S_PI_ENDING:isS(t)||(this.text=String.fromCodePoint(t))}else this.captureToChar(QUESTION)&&(this.state=S_PI_ENDING)}sPIEnding(){var t;const s=this.getCodeNorm();if(s===GREATER){const{piTarget:s}=this;"xml"===s.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(t=this.piHandler)||void 0===t||t.call(this,{target:s,body:this.text}),this.piTarget=this.text="",this.state=S_TEXT}else s===QUESTION?this.text+="?":(this.text+=`?${String.fromCodePoint(s)}`,this.state=S_PI_BODY);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const t=this.skipSpaces();t!==QUESTION?t!==EOC&&(this.state=S_XML_DECL_NAME,this.name=String.fromCodePoint(t)):this.state=S_XML_DECL_ENDING}sXMLDeclName(){const t=this.captureTo(XML_DECL_NAME_TERMINATOR);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(isS(t)||t===EQUAL){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=t===EQUAL?S_XML_DECL_VALUE_START:S_XML_DECL_EQ}}sXMLDeclEq(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(t!==EQUAL&&this.fail("value required."),this.state=S_XML_DECL_VALUE_START)}sXMLDeclValueStart(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(isQuote(t)?this.q=t:(this.fail("value must be quoted."),this.q=SPACE),this.state=S_XML_DECL_VALUE)}sXMLDeclValue(){const t=this.captureTo([this.q,QUESTION]);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.text="",void this.fail("XML declaration is incomplete.");if(t===EOC)return;const s=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const t=s;this.xmlDecl.version=t,/^1\.[0-9]+$/.test(t)?this.opt.forceXMLVersion||this.setXMLVersion(t):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(s)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=s;break;case"standalone":"yes"!==s&&"no"!==s&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=s}this.name="",this.state=S_XML_DECL_SEPARATOR}sXMLDeclSeparator(){const t=this.getCodeNorm();t!==QUESTION?(isS(t)||(this.fail("whitespace required."),this.unget()),this.state=S_XML_DECL_NAME_START):this.state=S_XML_DECL_ENDING}sXMLDeclEnding(){var t;this.getCodeNorm()===GREATER?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(t=this.xmldeclHandler)||void 0===t||t.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=S_TEXT):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var t;const s=this.captureNameChars();if(s===EOC)return;const e=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=e.ns=Object.create(null)),null===(t=this.openTagStartHandler)||void 0===t||t.call(this,e),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),s){case GREATER:this.openTag();break;case FORWARD_SLASH:this.state=S_OPEN_TAG_SLASH;break;default:isS(s)||this.fail("disallowed character in tag name."),this.state=S_ATTRIB}}sOpenTagSlash(){this.getCode()===GREATER?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=S_ATTRIB)}sAttrib(){const t=this.skipSpaces();t!==EOC&&(isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:this.fail("disallowed character in attribute name."))}sAttribName(){const t=this.captureNameChars();t===EQUAL?this.state=S_ATTRIB_VALUE:isS(t)?this.state=S_ATTRIB_NAME_SAW_WHITE:t===GREATER?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):t!==EOC&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const t=this.skipSpaces();switch(t){case EOC:return;case EQUAL:this.state=S_ATTRIB_VALUE;break;default:this.fail("attribute without value."),this.text="",this.name="",t===GREATER?this.openTag():isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):(this.fail("disallowed character in attribute name."),this.state=S_ATTRIB)}}sAttribValue(){const t=this.getCodeNorm();isQuote(t)?(this.q=t,this.state=S_ATTRIB_VALUE_QUOTED):isS(t)||(this.fail("unquoted attribute value."),this.state=S_ATTRIB_VALUE_UNQUOTED,this.unget())}sAttribValueQuoted(){const{q:t,chunk:s}=this;let{i:e}=this;for(;;)switch(this.getCode()){case t:return this.pushAttrib(this.name,this.text+s.slice(e,this.prevI)),this.name=this.text="",this.q=null,void(this.state=S_ATTRIB_VALUE_CLOSED);case AMP:return this.text+=s.slice(e,this.prevI),this.state=S_ENTITY,void(this.entityReturnState=S_ATTRIB_VALUE_QUOTED);case NL:case NL_LIKE:case TAB:this.text+=`${s.slice(e,this.prevI)} `,e=this.i;break;case LESS:return this.text+=s.slice(e,this.prevI),void this.fail("disallowed character.");case EOC:return void(this.text+=s.slice(e))}}sAttribValueClosed(){const t=this.getCodeNorm();isS(t)?this.state=S_ATTRIB:t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:isNameStartChar(t)?(this.fail("no whitespace between attributes."),this.unget(),this.state=S_ATTRIB_NAME):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const t=this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);switch(t){case AMP:this.state=S_ENTITY,this.entityReturnState=S_ATTRIB_VALUE_UNQUOTED;break;case LESS:this.fail("disallowed character.");break;case EOC:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",t===GREATER?this.openTag():this.state=S_ATTRIB}}sCloseTag(){const t=this.captureNameChars();t===GREATER?this.closeTag():isS(t)?this.state=S_CLOSE_TAG_SAW_WHITE:t!==EOC&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case GREATER:this.closeTag();break;case EOC:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:t,forbiddenState:s}=this;const{chunk:e,textHandler:i}=this;t:for(;;)switch(this.getCode()){case LESS:if(this.state=S_OPEN_WAKA,void 0!==i){const{text:s}=this,a=e.slice(t,this.prevI);0!==s.length?(i(s+a),this.text=""):0!==a.length&&i(a)}s=FORBIDDEN_START;break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==i&&(this.text+=e.slice(t,this.prevI)),s=FORBIDDEN_START;break t;case CLOSE_BRACKET:switch(s){case FORBIDDEN_START:s=FORBIDDEN_BRACKET;break;case FORBIDDEN_BRACKET:s=FORBIDDEN_BRACKET_BRACKET;break;case FORBIDDEN_BRACKET_BRACKET:break;default:throw new Error("impossible state")}break;case GREATER:s===FORBIDDEN_BRACKET_BRACKET&&this.fail('the string "]]>" is disallowed in char data.'),s=FORBIDDEN_START;break;case NL_LIKE:void 0!==i&&(this.text+=`${e.slice(t,this.prevI)}\n`),t=this.i,s=FORBIDDEN_START;break;case EOC:void 0!==i&&(this.text+=e.slice(t));break t;default:s=FORBIDDEN_START}this.forbiddenState=s}handleTextOutsideRoot(){let{i:t}=this;const{chunk:s,textHandler:e}=this;let i=!1;t:for(;;){const a=this.getCode();switch(a){case LESS:if(this.state=S_OPEN_WAKA,void 0!==e){const{text:i}=this,a=s.slice(t,this.prevI);0!==i.length?(e(i+a),this.text=""):0!==a.length&&e(a)}break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==e&&(this.text+=s.slice(t,this.prevI)),i=!0;break t;case NL_LIKE:void 0!==e&&(this.text+=`${s.slice(t,this.prevI)}\n`),t=this.i;break;case EOC:void 0!==e&&(this.text+=s.slice(t));break t;default:isS(a)||(i=!0)}}i&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(t,s){var e;const{prefix:i,local:a}=this.qname(t),h={name:t,prefix:i,local:a,value:s};if(this.attribList.push(h),null===(e=this.attributeHandler)||void 0===e||e.call(this,h),"xmlns"===i){const t=s.trim();"1.0"===this.currentXMLVersion&&""===t&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[a]=t,nsPairCheck(this,a,t)}else if("xmlns"===t){const t=s.trim();this.topNS[""]=t,nsPairCheck(this,"",t)}}pushAttribPlain(t,s){var e;const i={name:t,value:s};this.attribList.push(i),null===(e=this.attributeHandler)||void 0===e||e.call(this,i)}end(){var t,s;this.sawRoot||this.fail("document must contain a root element.");const{tags:e}=this;for(;e.length>0;){const t=e.pop();this.fail(`unclosed tag: ${t.name}`)}this.state!==S_BEGIN&&this.state!==S_TEXT&&this.fail("unexpected end.");const{text:i}=this;return 0!==i.length&&(null===(t=this.textHandler)||void 0===t||t.call(this,i),this.text=""),this._closed=!0,null===(s=this.endHandler)||void 0===s||s.call(this),this._init(),this}resolve(t){var s,e;let i=this.topNS[t];if(void 0!==i)return i;const{tags:a}=this;for(let s=a.length-1;s>=0;s--)if(void 0!==(i=a[s].ns[t]))return i;return void 0!==(i=this.ns[t])?i:null===(e=(s=this.opt).resolvePrefix)||void 0===e?void 0:e.call(s,t)}qname(t){const s=t.indexOf(":");if(-1===s)return{prefix:"",local:t};const e=t.slice(s+1),i=t.slice(0,s);return(""===i||""===e||e.includes(":"))&&this.fail(`malformed name: ${t}.`),{prefix:i,local:e}}processAttribsNS(){var t;const{attribList:s}=this,e=this.tag;{const{prefix:s,local:i}=this.qname(e.name);e.prefix=s,e.local=i;const a=e.uri=null!==(t=this.resolve(s))&&void 0!==t?t:"";""!==s&&("xmlns"===s&&this.fail('tags may not have "xmlns" as prefix.'),""===a&&(this.fail(`unbound namespace prefix: ${JSON.stringify(s)}.`),e.uri=s))}if(0===s.length)return;const{attributes:i}=e,a=new Set;for(const t of s){const{name:s,prefix:e,local:h}=t;let o,n;""===e?(o="xmlns"===s?XMLNS_NAMESPACE:"",n=s):(void 0===(o=this.resolve(e))&&(this.fail(`unbound namespace prefix: ${JSON.stringify(e)}.`),o=e),n=`{${o}}${h}`),a.has(n)&&this.fail(`duplicate attribute: ${n}.`),a.add(n),t.uri=o,i[s]=t}this.attribList=[]}processAttribsPlain(){const{attribList:t}=this,s=this.tag.attributes;for(const{name:e,value:i}of t)void 0!==s[e]&&this.fail(`duplicate attribute: ${e}.`),s[e]=i;this.attribList=[]}openTag(){var t;this.processAttribs();const{tags:s}=this,e=this.tag;e.isSelfClosing=!1,null===(t=this.openTagHandler)||void 0===t||t.call(this,e),s.push(e),this.state=S_TEXT,this.name=""}openSelfClosingTag(){var t,s,e;this.processAttribs();const{tags:i}=this,a=this.tag;a.isSelfClosing=!0,null===(t=this.openTagHandler)||void 0===t||t.call(this,a),null===(s=this.closeTagHandler)||void 0===s||s.call(this,a),null===(this.tag=null!==(e=i[i.length-1])&&void 0!==e?e:null)&&(this.closedRoot=!0),this.state=S_TEXT,this.name=""}closeTag(){const{tags:t,name:s}=this;if(this.state=S_TEXT,this.name="",""===s)return this.fail("weird empty close tag."),void(this.text+="");const e=this.closeTagHandler;let i=t.length;for(;i-- >0;){const i=this.tag=t.pop();if(this.topNS=i.ns,null==e||e(i),i.name===s)break;this.fail("unexpected close tag.")}0===i?this.closedRoot=!0:i<0&&(this.fail(`unmatched closing tag: ${s}.`),this.text+=``)}parseEntity(t){if("#"!==t[0]){const s=this.ENTITIES[t];return void 0!==s?s:(this.fail(this.isName(t)?"undefined entity.":"disallowed character in entity name."),`&${t};`)}let s=NaN;return"x"===t[1]&&/^#x[0-9a-f]+$/i.test(t)?s=parseInt(t.slice(2),16):/^#[0-9]+$/.test(t)&&(s=parseInt(t.slice(1),10)),this.isChar(s)?String.fromCodePoint(s):(this.fail("malformed character entity."),`&${t};`)}}exports.SaxesParser=SaxesParser; -},{"xmlchars/xml/1.0/ed5":87,"xmlchars/xml/1.1/ed2":88,"xmlchars/xmlns/1.0/ed3":89}],91:[function(require,module,exports){ +},{"xmlchars/xml/1.0/ed5":88,"xmlchars/xml/1.1/ed2":89,"xmlchars/xmlns/1.0/ed3":90}],92:[function(require,module,exports){ module.exports={ "name": "@jscad/svg-deserializer", - "version": "2.5.9", + "version": "2.5.10", "description": "SVG Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -565,7 +572,8 @@ module.exports={ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -575,34 +583,34 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],92:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ const pxPmm=1/.2822222,inchMM=.03937,ptMM=1/(1/.03937/72),pcMM=.23622,cssPxUnit=.2822222,svgColors={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};module.exports={pxPmm:pxPmm,inchMM:.03937,ptMM:ptMM,pcMM:pcMM,cssPxUnit:.2822222,svgColors:svgColors}; -},{}],93:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ const{inchMM:inchMM,ptMM:ptMM,pcMM:pcMM,svgColors:svgColors}=require("./constants"),svg2cag=(e,s)=>[e[0]/s[0],0-e[1]/s[1]],cagLengthX=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[0]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0],Math.round(1e5*t)/1e5)},cagLengthY=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[1],Math.round(1e5*t)/1e5)},cagLengthP=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0])},css2cag=(e,s)=>{let r=parseFloat(e);return isNaN(r)?0:0===r?r:(e.search(/EM/i)>0||e.search(/EX/i)>0||e.search(/MM/i)>0||(e.search(/CM/i)>0?r*=10:e.search(/IN/i)>0?r/=inchMM:e.search(/PT/i)>0?r/=ptMM:e.search(/PC/i)>0?r/=pcMM:r/=s),r)},cagColor=e=>{let s;if((e=e.toLowerCase())in svgColors)s=[(s=svgColors[e])[0]/255,s[1]/255,s[2]/255];else if("#"===e[0])4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),7===e.length&&(s=[parseInt("0x"+e.slice(1,3))/255,parseInt("0x"+e.slice(3,5))/255,parseInt("0x"+e.slice(5,7))/255]);else{let r=/rgb\(.+,.+,.+\)/.exec(e);null!==r&&(s=(r=(r=r[0]).slice(r.indexOf("(")+1,r.indexOf(")"))).split(","),s=r.indexOf("%")>0?[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/100,s[1]/100,s[2]/100]:[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/255,s[1]/255,s[2]/255])}return s},cssStyle=(e,s)=>{if("style"in e){const r=e.style+";";let t=new RegExp(s+"\\s*:\\s*(\\S+);","i").exec(r);if(null!==t){let e=(t=t[0]).indexOf(":")+1;for(;" "===t[e];)e++;return t=t.slice(e,t.indexOf(";"))}}},reflect=(e,s,r,t)=>{const l=e-r,a=s-t;return e===r&&s===r?[e,s]:e===r?[e,t+-a]:s===t?[r+-l,s]:[r+-l,t+-a]},groupValue=(e,s)=>{let r=e.length;for(;r>0;){const t=e[r-1];if(s in t)return t[s];r--}},svgColorForTarget=(e,s)=>{let r=null;return"path"===e?s.stroke?r=[s.stroke[0],s.stroke[1],s.stroke[2],1]:s.fill&&(r=[s.fill[0],s.fill[1],s.fill[2],1]):s.fill?r=[s.fill[0],s.fill[1],s.fill[2],1]:s.stroke&&(r=[s.stroke[0],s.stroke[1],s.stroke[2],1]),r};module.exports={svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,css2cag:css2cag,cagColor:cagColor,cssStyle:cssStyle,reflect:reflect,groupValue:groupValue,svgColorForTarget:svgColorForTarget}; -},{"./constants":92}],94:[function(require,module,exports){ -const saxes=require("saxes"),{colors:colors,transforms:transforms}=require("@jscad/modeling"),{toArray:toArray}=require("@jscad/array-utils"),version=require("../package.json").version,{cagLengthX:cagLengthX,cagLengthY:cagLengthY,svgColorForTarget:svgColorForTarget}=require("./helpers"),{svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgGroup:svgGroup,svgLine:svgLine,svgPath:svgPath,svgEllipse:svgEllipse,svgPolygon:svgPolygon,svgPolyline:svgPolyline,svgUse:svgUse}=require("./svgElementHelpers"),shapesMapGeometry=require("./shapesMapGeometry"),shapesMapJscad=require("./shapesMapJscad"),deserialize=(s,e)=>{const t={addMetaData:!0,filename:"svg",output:"script",pxPmm:require("./constants").pxPmm,segments:32,target:"path",pathSelfClosed:"error",version:version};return"script"===(s=Object.assign({},t,s)).output?translate(e,s):instantiate(e,s)},instantiate=(s,e)=>{const{pxPmm:t}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,t),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");e&&e.statusCallback&&e.statusCallback({progress:50});const n=objectify(e,svgObj);return e&&e.statusCallback&&e.statusCallback({progress:100}),n},translate=(s,e)=>{const{filename:t,version:n,pxPmm:r,addMetaData:o}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,r),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");let a=o?`//\n // producer: JSCAD SVG Deserializer ${n}\n // date: ${new Date}\n // source: ${t}\n //\n`:"";return a+="const { colors, geometries, primitives, transforms } = require('@jscad/modeling')\n\n",e&&e.statusCallback&&e.statusCallback({progress:50}),a+=codify(e,svgObj),a+="\nmodule.exports = { main }",e&&e.statusCallback&&e.statusCallback({progress:100}),a};let svgUnitsX,svgUnitsY,svgUnitsV;const svgObjects=[],svgGroups=[],svgDefs=[];let svgObj,svgInDefs=!1,svgUnitsPmm=[1,1];const objectify=(s,e)=>{const{target:t,segments:n,pathSelfClosed:r}=s,o=svgGroups.length;svgGroups.push(e);let a=o;for(;a>0;)a--;let g=[];const l={svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,level:o,target:t,svgGroups:svgGroups,segments:n,pathSelfClosed:r};for(a=0;a{if("transforms"in s){let t=null,n=null,r=null;for(let e=0;e{const{target:t,segments:n}=s,r=svgGroups.length;svgGroups.push(e);let o=" ",a=r;for(;a>0;)o+=" ",a--;let g="";0===r&&(g+="function main(params) {\n let levels = {}\n let paths = {}\n let parts\n");const l="levels.l"+r;for(g+=`${o}${l} = []\n`,a=0;a{const t=new saxes.SaxesParser;return void 0!==e&&e>t.pxPmm&&(t.pxPmm=e),t.on("error",s=>{console.log(`ERROR: SVG file, line ${t.line}, column ${t.column}`),console.log(s)}),t.on("opentag",s=>{const n={SVG:svgSvg,G:svgGroup,RECT:svgRect,CIRCLE:svgCircle,ELLIPSE:svgEllipse,LINE:svgLine,POLYLINE:svgPolyline,POLYGON:svgPolygon,PATH:svgPath,USE:svgUse,DEFS:()=>{svgInDefs=!0},DESC:()=>void 0,TITLE:()=>void 0,STYLE:()=>void 0,undefined:()=>console.log("WARNING: unsupported SVG element: "+s.name)};s.attributes.position=[t.line+1,t.column+1];const r=s.name.toUpperCase(),o=n[r]?n[r](s.attributes,{svgObjects:svgObjects,customPxPmm:e}):void 0;if(o)if("id"in o&&(svgObjects[o.id]=o),"svg"===o.type)svgGroups.push(o),svgUnitsPmm=o.unitsPmm,svgUnitsX=o.viewW,svgUnitsY=o.viewH,svgUnitsV=o.viewP;else if(!0===svgInDefs){if(svgDefs.length>0){const s=svgDefs.pop();"objects"in s&&s.objects.push(o),svgDefs.push(s)}"group"===o.type&&svgDefs.push(o)}else{if(svgGroups.length>0){const s=svgGroups.pop();"objects"in s&&s.objects.push(o),svgGroups.push(s)}"group"===o.type&&svgGroups.push(o)}}),t.on("closetag",s=>{const e=()=>!0===svgInDefs?svgDefs.pop():svgGroups.pop(),t={SVG:e,DEFS:()=>{svgInDefs=!1},USE:e,G:e,undefined:()=>{}},n=s.name.toUpperCase(),r=t[n]?t[n]():void 0;0===svgGroups.length&&(svgObj=r)}),t.on("end",()=>{}),t.write(s).close(),t},extension="svg";module.exports={deserialize:deserialize,extension:"svg"}; +},{"./constants":93}],95:[function(require,module,exports){ +const saxes=require("saxes"),{colors:colors,transforms:transforms}=require("@jscad/modeling"),{toArray:toArray}=require("@jscad/array-utils"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,{cagLengthX:cagLengthX,cagLengthY:cagLengthY,svgColorForTarget:svgColorForTarget}=require("./helpers"),{svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgGroup:svgGroup,svgLine:svgLine,svgPath:svgPath,svgEllipse:svgEllipse,svgPolygon:svgPolygon,svgPolyline:svgPolyline,svgUse:svgUse}=require("./svgElementHelpers"),shapesMapGeometry=require("./shapesMapGeometry"),shapesMapJscad=require("./shapesMapJscad"),deserialize=(s,e)=>{const t={addMetaData:!0,filename:"svg",output:"script",pxPmm:require("./constants").pxPmm,segments:32,target:"path",pathSelfClosed:"error",version:version};return s=Object.assign({},t,s),e=ensureString(e),"script"===s.output?translate(e,s):instantiate(e,s)},instantiate=(s,e)=>{const{pxPmm:t}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,t),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");e&&e.statusCallback&&e.statusCallback({progress:50});const n=objectify(e,svgObj);return e&&e.statusCallback&&e.statusCallback({progress:100}),n},translate=(s,e)=>{const{filename:t,version:n,pxPmm:r,addMetaData:o}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,r),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");let a=o?`//\n // producer: JSCAD SVG Deserializer ${n}\n // date: ${new Date}\n // source: ${t}\n //\n`:"";return a+="const { colors, geometries, primitives, transforms } = require('@jscad/modeling')\n\n",e&&e.statusCallback&&e.statusCallback({progress:50}),a+=codify(e,svgObj),a+="\nmodule.exports = { main }",e&&e.statusCallback&&e.statusCallback({progress:100}),a};let svgUnitsX,svgUnitsY,svgUnitsV;const svgObjects=[],svgGroups=[],svgDefs=[];let svgObj,svgInDefs=!1,svgUnitsPmm=[1,1];const objectify=(s,e)=>{const{target:t,segments:n,pathSelfClosed:r}=s,o=svgGroups.length;svgGroups.push(e);let a=o;for(;a>0;)a--;let g=[];const l={svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,level:o,target:t,svgGroups:svgGroups,segments:n,pathSelfClosed:r};for(a=0;a{if("transforms"in s){let t=null,n=null,r=null;for(let e=0;e{const{target:t,segments:n}=s,r=svgGroups.length;svgGroups.push(e);let o=" ",a=r;for(;a>0;)o+=" ",a--;let g="";0===r&&(g+="function main(params) {\n let levels = {}\n let paths = {}\n let parts\n");const l="levels.l"+r;for(g+=`${o}${l} = []\n`,a=0;a{const t=new saxes.SaxesParser;return void 0!==e&&e>t.pxPmm&&(t.pxPmm=e),t.on("error",s=>{console.log(`ERROR: SVG file, line ${t.line}, column ${t.column}`),console.log(s)}),t.on("opentag",s=>{const n={SVG:svgSvg,G:svgGroup,RECT:svgRect,CIRCLE:svgCircle,ELLIPSE:svgEllipse,LINE:svgLine,POLYLINE:svgPolyline,POLYGON:svgPolygon,PATH:svgPath,USE:svgUse,DEFS:()=>{svgInDefs=!0},DESC:()=>void 0,TITLE:()=>void 0,STYLE:()=>void 0,undefined:()=>console.log("WARNING: unsupported SVG element: "+s.name)};s.attributes.position=[t.line+1,t.column+1];const r=s.name.toUpperCase(),o=n[r]?n[r](s.attributes,{svgObjects:svgObjects,customPxPmm:e}):void 0;if(o)if("id"in o&&(svgObjects[o.id]=o),"svg"===o.type)svgGroups.push(o),svgUnitsPmm=o.unitsPmm,svgUnitsX=o.viewW,svgUnitsY=o.viewH,svgUnitsV=o.viewP;else if(!0===svgInDefs){if(svgDefs.length>0){const s=svgDefs.pop();"objects"in s&&s.objects.push(o),svgDefs.push(s)}"group"===o.type&&svgDefs.push(o)}else{if(svgGroups.length>0){const s=svgGroups.pop();"objects"in s&&s.objects.push(o),svgGroups.push(s)}"group"===o.type&&svgGroups.push(o)}}),t.on("closetag",s=>{const e=()=>!0===svgInDefs?svgDefs.pop():svgGroups.pop(),t={SVG:e,DEFS:()=>{svgInDefs=!1},USE:e,G:e,undefined:()=>{}},n=s.name.toUpperCase(),r=t[n]?t[n]():void 0;0===svgGroups.length&&(svgObj=r)}),t.on("end",()=>{}),t.write(s).close(),t},extension="svg";module.exports={deserialize:deserialize,extension:"svg"}; -},{"../package.json":91,"./constants":92,"./helpers":93,"./shapesMapGeometry":95,"./shapesMapJscad":96,"./svgElementHelpers":97,"@jscad/array-utils":532,"@jscad/modeling":216,"saxes":90}],95:[function(require,module,exports){ +},{"../package.json":92,"./constants":93,"./helpers":94,"./shapesMapGeometry":96,"./shapesMapJscad":97,"./svgElementHelpers":98,"@jscad/array-utils":533,"@jscad/io-utils":71,"@jscad/modeling":217,"saxes":91}],96:[function(require,module,exports){ const{geometries:geometries,primitives:primitives}=require("@jscad/modeling"),{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMapGeometry=(e,t,s)=>{const{svgUnitsPmm:a,svgUnitsX:o,svgUnitsY:r,svgUnitsV:n,svgGroups:g,target:c,segments:p,pathSelfClosed:i}=s;return{group:e=>t({target:c,segments:p},e),rect:(e,t,s,a,o,r,n)=>{let g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a);const i=cagLengthX(e.width,t,s),l=cagLengthY(e.height,t,a),h=cagLengthX(e.rx,t,s);let m;return i>0&&l>0&&(g+=i/2,p-=l/2,m=0===h?primitives.rectangle({center:[g,p],size:[i,l]}):primitives.roundedRectangle({center:[g,p],segments:n,size:[i,l],roundRadius:h}),"path"===c&&(m=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(m)))),m},circle:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a),i=cagLengthP(e.radius,t,o);let l;return i>0&&(l=primitives.circle({center:[g,p],segments:n,radius:i}),"path"===c&&(l=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(l)))),l},ellipse:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.rx,t,s),p=cagLengthY(e.ry,t,a),i=cagLengthX(e.cx,t,s),l=0-cagLengthY(e.cy,t,a);let h;return g>0&&p>0&&(h=primitives.ellipse({center:[i,l],segments:n,radius:[g,p]}),"path"===c&&(h=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(h)))),h},line:(e,t,s,a,o)=>{const r=cagLengthX(e.x1,t,s),n=0-cagLengthY(e.y1,t,a),g=cagLengthX(e.x2,t,s),c=0-cagLengthY(e.y2,t,a);return primitives.line([[r,n],[g,c]])},polygon:(e,t,s,a)=>{const o=[];for(let r=0;r{const r=[];for(let o=0;o{const g=expandPath(e,t,s,a,o,r,n,i);return Object.entries(g).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{const t=e[1];if("geom2"===c&&t.isClosed){const e=geometries.path2.toPoints(t).slice();return e.push(e[0]),geometries.geom2.fromPoints(e)}return t})}}[e.type](e,a,o,r,n,g,p)};module.exports=shapesMapGeometry;const appendPoints=(e,t)=>t?geometries.path2.appendPoints(e,t):geometries.path2.fromPoints({},e),expandPath=(e,t,s,a,o,r,n,g)=>{const c={};let p=0,i=0,l=0,h=0,m=0,F="path"+m,v=!1,d=0,f=0,P=0,u=0;const L=()=>{F="path"+ ++m,v=!1},k=()=>{c[F]||(c[F]=geometries.path2.fromPoints({},[]))};for(let s=0;s=r+2&&(l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"M":for(o.length>=r+2&&(l=parseFloat(o[r++]),h=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"a":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"A":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"c":for(;o.length>=r+6;){const e=l+parseFloat(o[r++]),s=h+parseFloat(o[r++]);d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"C":for(;o.length>=r+6;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]);d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"q":for(;o.length>=r+4;){const e=[l,h];P=l+parseFloat(o[r++]),u=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"Q":for(;o.length>=r+4;){const e=[l,h];P=parseFloat(o[r++]),u=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"t":for(;o.length>=r+2;){const e=[l,h];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"T":for(;o.length>=r+2;){const e=[l,h];l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"s":for(;o.length>=r+4;){const e=d,s=f;d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"S":for(;o.length>=r+4;){const e=d,s=f;d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"h":for(;o.length>=r+1;)l+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"H":for(;o.length>=r+1;)l=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"l":for(;o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"L":for(;o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"v":for(;o.length>=r+1;)h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"V":for(;o.length>=r+1;)h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"z":case"Z":c[F]=geometries.path2.close(c[F]),l=p,h=i,v=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}const m=e=>"z"===e||"Z"===e;if(!0!==v&&c[F]&&c[F].isClosed){let t=e.commands[s+1];if(t&&!m(t.c))if("trim"===g)for(;t&&!m(t.c);)s++,t=e.commands[s+1];else{if("split"!==g)throw new Error(`Malformed svg path at ${e.position[0]}:${a.pos}. Path closed itself with command #${s} ${a.c}${o.join(" ")}`);L()}}}return c}; -},{"./helpers":93,"@jscad/modeling":216}],96:[function(require,module,exports){ +},{"./helpers":94,"@jscad/modeling":217}],97:[function(require,module,exports){ const{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMap=(e,t,s)=>{const{level:a,indent:n,on:o,svgUnitsPmm:r,svgUnitsX:g,svgUnitsY:i,svgUnitsV:$,svgGroups:p,target:c,segments:h}=s;return{group:e=>{let s=t({target:c,segments:h},e);return s+=`${n}${o} = levels.l${a+1}\n`},rect:(e,t,s,a,r,g,i,$)=>{let p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a);const l=cagLengthX(e.width,t,s),f=cagLengthY(e.height,t,a),m=cagLengthX(e.rx,t,s);let F;return l>0&&f>0&&(p=(p+l/2).toFixed(4),h=(h-f/2).toFixed(4),F=0===m?`${n}${o} = primitives.rectangle({center: [${p}, ${h}], size: [${l}, ${f}]}) // line ${e.position}\n`:`${n}${o} = primitives.roundedRectangle({center: [${p}, ${h}], segments: ${$}, size: [${l}, ${f}], roundRadius: ${m}}) // line ${e.position}\n`,"path"===c&&(F+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),F},circle:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a),l=cagLengthP(e.radius,t,r);let f;return l>0&&(f=`${n}${o} = primitives.circle({center: [${p}, ${h}], segments: ${$}, radius: ${l}}) // line ${e.position}\n`,"path"===c&&(f+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),f},ellipse:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.rx,t,s),h=cagLengthY(e.ry,t,a),l=cagLengthX(e.cx,t,s),f=0-cagLengthY(e.cy,t,a);let m;return p>0&&h>0&&(m=`${n}${o} = primitives.ellipse({center: [${l}, ${f}], segments: ${$}, radius: [${p}, ${h}]}) // line ${e.position}\n`,"path"===c&&(m+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),m},line:(e,t,s,a,r)=>{const g=cagLengthX(e.x1,t,s),i=0-cagLengthY(e.y1,t,a),$=cagLengthX(e.x2,t,s),p=0-cagLengthY(e.y2,t,a);return`${n}${o} = primitives.line([[${g}, ${i}], [${$}, ${p}]]) // line ${e.position}\n`},polygon:(e,t,s,a)=>{let r=`${n}${o} = primitives.polygon({points: [\n`;for(let o=0;o{let g=`${n}${o} = geometries.path2.fromPoints({}, [\n`;for(let o=0;o{const{indent:i,on:$,target:p}=o;let c=`${i}parts = [] // line ${e.position}\n`,h=0,l=0,f=0,m=0,F=0,v=$+F,d=!1,P=0,u=0,L=0,k=0;for(let s=0;s0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"M":for(F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f=parseFloat(n.shift()),m=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"a":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"A":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"c":for(;n.length>=6;){const e=f+parseFloat(n.shift()),s=m+parseFloat(n.shift());P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"C":for(;n.length>=6;){const e=parseFloat(n.shift()),s=parseFloat(n.shift());P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"q":for(;n.length>=4;){const e=[f,m];L=f+parseFloat(n.shift()),k=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"Q":for(;n.length>=4;){const e=[f,m];L=parseFloat(n.shift()),k=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"t":for(;n.length>=2;){const e=[f,m];f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"T":for(;n.length>=2;){const e=[f,m];f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"s":for(;n.length>=4;){const e=P,s=u;P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"S":for(;n.length>=4;){const e=P,s=u;P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"h":for(;n.length>=1;)f+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"H":for(;n.length>=1;)f=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"l":for(;n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"L":for(;n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"v":for(;n.length>=1;)m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"V":for(;n.length>=1;)m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"z":case"Z":c+=`${i}${v} = geometries.path2.close(${v})\n`,"geom2"===p&&(c+=`${i}${v} = geometries.geom2.fromPoints(geometries.path2.toPoints(${v}))\n`),c+=`${i}parts.push(${v})\n`,f=h,m=l,d=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}}return F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),c+=`${i}${$} = parts\n`}; -},{"./helpers":93}],97:[function(require,module,exports){ +},{"./helpers":94}],98:[function(require,module,exports){ const{cagColor:cagColor,cssStyle:cssStyle,css2cag:css2cag}=require("./helpers"),{pxPmm:pxPmm}=require("./constants"),svgCore=(s,e)=>{"id"in e&&(s.id=e.id),"position"in e&&(s.position=e.position)},svgPresentation=(s,e)=>{if("display"in e&&(s.visible=e.display),"color"in e&&(s.fill=cagColor(e.color),s.stroke=s.fill),"opacity"in e&&(s.opacity=e.opacity),"fill"in e)s.fill=cagColor(e.fill);else{const t=cssStyle(e,"fill");t&&(s.fill=cagColor(t))}if("fill-opacity"in e&&(s.opacity=e["fill-opacity"]),"stroke-width"in e)s.strokeWidth=e["stroke-width"];else{const t=cssStyle(e,"stroke-width");t&&(s.strokeWidth=t)}if("stroke"in e)s.stroke=cagColor(e.stroke);else{const t=cssStyle(e,"stroke");t&&(s.stroke=cagColor(t))}"stroke-opacity"in e&&(s.strokeOpacity=e["stroke-opacity"])},svgTransformsRegExp=/\w+\(.+\)/i,svgTransforms=(s,e)=>{let t=null;if("transform"in e)t=e.transform;else{const s=cssStyle(e,"transform");s&&(t=s)}if(null!==t){s.transforms=[];let e=svgTransformsRegExp.exec(t);for(;null!==e;){const i=svgTransformsRegExp.lastIndex,n=t.indexOf(")")+1;let r=t.slice(i,n);const o=(r=r.trim()).slice(0,r.indexOf("("));let a,c=r.slice(r.indexOf("(")+1,r.indexOf(")")).trim();switch(c=c.indexOf(",")>0?c.split(","):c.split(" "),o){case"translate":1===c.length&&c.push(0),a={translate:[c[0],c[1]]},s.transforms.push(a);break;case"scale":1===c.length&&c.push(c[0]),a={scale:[c[0],c[1]]},s.transforms.push(a);break;case"rotate":a={rotate:c},s.transforms.push(a)}t=t.slice(n,t.length),e=svgTransformsRegExp.exec(t)}}},viewBoxRegExp=/([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)/i,svgSvg=(s,{customPxPmm:e})=>{const t={type:"svg",x:0,y:0,width:"100%",height:"100%",strokeWidth:"1"};if(t.unitsPmm=[pxPmm,pxPmm],"pxpmm"in s&&(t.pxPmm=s.pxpmm,t.unitsPmm=[t.pxPmm,t.pxPmm]),"width"in s&&(t.width=s.width),"height"in s&&(t.height=s.height),"viewBox"in s){const i=s.viewBox.trim(),n=viewBoxRegExp.exec(i);if(null!==n&&(t.viewX=parseFloat(n[1]),t.viewY=parseFloat(n[2]),t.viewW=parseFloat(n[3]),t.viewH=parseFloat(n[4])),t.width.indexOf("%")<0){let s=css2cag(t.width,e);s=t.viewW/s,t.unitsPmm[0]=s}else{const s=t.unitsPmm[0]*(parseFloat(t.width)/100);t.unitsPmm[0]=s}if(t.height.indexOf("%")<0){let s=css2cag(t.height,pxPmm);s=t.viewH/s,t.unitsPmm[1]=s}else{const s=t.unitsPmm[1]*(parseFloat(t.height)/100);t.unitsPmm[1]=s}}else t.viewX=0,t.viewY=0,t.viewW=1920/t.unitsPmm[0],t.viewH=1080/t.unitsPmm[1];return t.viewP=Math.sqrt(t.viewW*t.viewW+t.viewH*t.viewH)/Math.SQRT2,svgCore(t,s),svgPresentation(t,s),t.objects=[],t},svgEllipse=s=>{const e={type:"ellipse",cx:"0",cy:"0",rx:"0",ry:"0"};return"cx"in s&&(e.cx=s.cx),"cy"in s&&(e.cy=s.cy),"rx"in s&&(e.rx=s.rx),"ry"in s&&(e.ry=s.ry),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgLine=s=>{const e={type:"line",x1:"0",y1:"0",x2:"0",y2:"0"};return"x1"in s&&(e.x1=s.x1),"y1"in s&&(e.y1=s.y1),"x2"in s&&(e.x2=s.x2),"y2"in s&&(e.y2=s.y2),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgListOfPoints=s=>{const e=[],t=/([\d\-+.]+)[\s,]+([\d\-+.]+)[\s,]*/i;s=s.trim();let i=t.exec(s);for(;null!==i;){let n=i[0];const r=t.lastIndex+n.length;n={x:i[1],y:i[2]},e.push(n),s=s.slice(r,s.length),i=t.exec(s)}return e},svgPolyline=s=>{const e={type:"polyline"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgPolygon=s=>{const e={type:"polygon"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgRect=s=>{const e={type:"rect",x:"0",y:"0",rx:"0",ry:"0",width:"0",height:"0"};return"x"in s&&(e.x=s.x),"y"in s&&(e.y=s.y),"rx"in s&&(e.rx=s.rx,"ry"in s||(e.ry=e.rx)),"ry"in s&&(e.ry=s.ry,"rx"in s||(e.rx=e.ry)),e.rx!==e.ry&&console.log("Warning: Unsupported RECT with rx and ry radius"),"width"in s&&(e.width=s.width),"height"in s&&(e.height=s.height),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgCircle=s=>{const e={type:"circle",x:"0",y:"0",radius:"0"};return"cx"in s&&(e.x=s.cx),"cy"in s&&(e.y=s.cy),"r"in s&&(e.radius=s.r),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgGroup=s=>{const e={type:"group"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"x"in s||"y"in s){let t="0",i="0";"x"in s&&(t=s.x),"y"in s&&(i=s.y),"transforms"in e||(e.transforms=[]);const n={translate:[t,i]};e.transforms.push(n)}return e.objects=[],e},svgPath=s=>{const e={type:"path"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e.commands=[],"d"in s){let t=null,i="",n=0;const r=s.d.length,o=s.position[1]-r-2;for(;n0&&(t.p.push(i),i=""),i+=r;break;case".":i.length>0&&i.indexOf(".")>=0&&(t.p.push(i),i=""),i+=r;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":i+=r;break;case"a":case"A":case"c":case"C":case"h":case"H":case"l":case"L":case"v":case"V":case"m":case"M":case"q":case"Q":case"s":case"S":case"t":case"T":case"z":case"Z":null!==t&&(i.length>0&&(t.p.push(i),i=""),e.commands.push(t)),t={c:r,p:[],pos:n+o};break;case",":case" ":case"\n":null!==t&&i.length>0&&(t.p.push(i),i="")}n++}n===r&&null!==t&&(i.length>0&&t.p.push(i),e.commands.push(t))}return e},svgUse=(s,{svgObjects:e})=>{const t={type:"group"};if(svgTransforms(t,s),svgCore(t,s),svgPresentation(t,s),"x"in s||"y"in s){let e="0",i="0";"x"in s&&(e=s.x),"y"in s&&(i=s.y),"transforms"in t||(t.transforms=[]);const n={translate:[e,i]};t.transforms.push(n)}if(t.objects=[],"xlink:href"in s){let i=s["xlink:href"];"#"===i[0]&&(i=i.slice(1,i.length)),void 0!==e[i]&&(i=e[i],i=JSON.parse(JSON.stringify(i)),t.objects.push(i))}return t};module.exports={svgCore:svgCore,svgPresentation:svgPresentation,svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgEllipse:svgEllipse,svgLine:svgLine,svgPolyline:svgPolyline,svgPolygon:svgPolygon,svgGroup:svgGroup,svgPath:svgPath,svgUse:svgUse}; -},{"./constants":92,"./helpers":93}],98:[function(require,module,exports){ +},{"./constants":93,"./helpers":94}],99:[function(require,module,exports){ const{geometries:geometries,maths:maths,measurements:measurements,utils:utils}=require("@jscad/modeling"),stringify=require("onml/lib/stringify"),version=require("./package.json").version,mimeType="image/svg+xml",serialize=(e,...t)=>{const s={unit:"mm",decimals:1e4,version:version,statusCallback:null};e=Object.assign({},s,e);const o=(t=utils.flatten(t)).filter(e=>geometries.geom2.isA(e)||geometries.path2.isA(e));if(0===o.length)throw new Error("only 2D geometries can be serialized to SVG");t.length!==o.length&&console.warn("some objects could not be serialized to SVG"),e.statusCallback&&e.statusCallback({progress:0});const r=getBounds(o);let n=0,l=0;r&&(n=Math.round((r[1][0]-r[0][0])*e.decimals)/e.decimals,l=Math.round((r[1][1]-r[0][1])*e.decimals)/e.decimals);let i=["svg",{width:n+e.unit,height:l+e.unit,viewBox:"0 0 "+n+" "+l,fill:"none","fill-rule":"evenodd","stroke-width":"0.1px",version:"1.1",baseProfile:"tiny",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}];r&&(i=i.concat(convertObjects(o,r,e)));const a=`\n\x3c!-- Created by JSCAD SVG Serializer --\x3e\n\n${stringify(i,2)}`;return e.statusCallback&&e.statusCallback({progress:100}),[a]},getBounds=e=>{const t=measurements.measureBoundingBox(e);return 1===e.length?t:t.reduce((e,t)=>(maths.vec3.min(e[0],e[0],t[0]),maths.vec3.max(e[1],e[1],t[1]),e),[[0,0,0],[0,0,0]])},convertObjects=(e,t,s)=>{const o=0-t[0][0],r=0-t[1][1],n=[];return e.forEach((t,l)=>{s.statusCallback&&s.statusCallback({progress:100*l/e.length}),geometries.geom2.isA(t)&&n.push(convertGeom2(t,[o,r],s)),geometries.path2.isA(t)&&n.push(convertPaths([t],[o,r],s))}),n},reflect=(e,t,s,o)=>{const r=e-s,n=t-o;return e===s&&t===s?[e,t]:e===s?[e,o-n]:t===o?[s- -r,t]:[s- -r,o-n]},convertGeom2=(e,t,s)=>{const o=geometries.geom2.toOutlines(e).map(e=>geometries.path2.fromPoints({closed:!0},e));return s.color="black",e.color&&(s.color=convertColor(e.color)),s.id=null,e.id&&(s.id=e.id),s.class=null,e.class&&(s.class=e.class),convertToContinousPath(o,t,s)},convertToContinousPath=(e,t,s)=>{let o="";e.forEach(e=>o+=convertPath(e,t,s));const r={fill:s.color,d:o};return s.id&&(r.id=s.id),s.class&&(r.class=s.class),["g",["path",r]]},convertPaths=(e,t,s)=>e.reduce((e,o,r)=>{const n={d:convertPath(o,t,s)};return o.color&&(n.stroke=convertColor(o.color)),o.id&&(n.id=o.id),o.class&&(n.class=o.class),e.concat([["path",n]])},["g"]),convertPath=(e,t,s)=>{let o="";const r=e.points.length+(e.isClosed?1:0);for(let n=0;n=e.points.length&&(r-=e.points.length);const l=e.points[r],i=[l[0]+t[0],l[1]+t[1]],a=reflect(i[0],i[1],0,0),c=Math.round(a[0]*s.decimals)/s.decimals,m=Math.round(a[1]*s.decimals)/s.decimals;o+=n>0?`L${c} ${m}`:`M${c} ${m}`}return o},convertColor=e=>`rgba(${255*e[0]},${255*e[1]},${255*e[2]},${e[3]})`;module.exports={serialize:serialize,mimeType:mimeType}; -},{"./package.json":100,"@jscad/modeling":216,"onml/lib/stringify":99}],99:[function(require,module,exports){ +},{"./package.json":101,"@jscad/modeling":217,"onml/lib/stringify":100}],100:[function(require,module,exports){ "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; -},{}],100:[function(require,module,exports){ +},{}],101:[function(require,module,exports){ module.exports={ "name": "@jscad/svg-serializer", - "version": "2.3.16", + "version": "2.3.17", "description": "SVG Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -634,7 +642,7 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "onml": "1.3.0" }, "devDependencies": { @@ -644,22 +652,22 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],101:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],102:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="-퟿-�𐀀-􏿿",exports.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.RESTRICTED_CHAR_RE=new RegExp("^["+exports.RESTRICTED_CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isRestrictedChar(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}function isCharAndNotRestricted(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isRestrictedChar=isRestrictedChar,exports.isCharAndNotRestricted=isCharAndNotRestricted,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],103:[function(require,module,exports){ +},{}],104:[function(require,module,exports){ "use strict";function isNCNameStartChar(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNCNameChar(e){return isNCNameStartChar(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}Object.defineProperty(exports,"__esModule",{value:!0}),exports.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NC_NAME_CHAR="-"+exports.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.NC_NAME_START_CHAR_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]$","u"),exports.NC_NAME_CHAR_RE=new RegExp("^["+exports.NC_NAME_CHAR+"]$","u"),exports.NC_NAME_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]["+exports.NC_NAME_CHAR+"]*$","u"),exports.isNCNameStartChar=isNCNameStartChar,exports.isNCNameChar=isNCNameChar; -},{}],104:[function(require,module,exports){ +},{}],105:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ed5=require("xmlchars/xml/1.0/ed5"),ed2=require("xmlchars/xml/1.1/ed2"),NSed3=require("xmlchars/xmlns/1.0/ed3");var isS=ed5.isS,isChar10=ed5.isChar,isNameStartChar=ed5.isNameStartChar,isNameChar=ed5.isNameChar,S_LIST=ed5.S_LIST,NAME_RE=ed5.NAME_RE,isChar11=ed2.isChar,isNCNameStartChar=NSed3.isNCNameStartChar,isNCNameChar=NSed3.isNCNameChar,NC_NAME_RE=NSed3.NC_NAME_RE;const XML_NAMESPACE="http://www.w3.org/XML/1998/namespace",XMLNS_NAMESPACE="http://www.w3.org/2000/xmlns/",rootNS={__proto__:null,xml:XML_NAMESPACE,xmlns:XMLNS_NAMESPACE},XML_ENTITIES={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},EOC=-1,NL_LIKE=-2,S_BEGIN=0,S_BEGIN_WHITESPACE=1,S_DOCTYPE=2,S_DOCTYPE_QUOTE=3,S_DTD=4,S_DTD_QUOTED=5,S_DTD_OPEN_WAKA=6,S_DTD_OPEN_WAKA_BANG=7,S_DTD_COMMENT=8,S_DTD_COMMENT_ENDING=9,S_DTD_COMMENT_ENDED=10,S_DTD_PI=11,S_DTD_PI_ENDING=12,S_TEXT=13,S_ENTITY=14,S_OPEN_WAKA=15,S_OPEN_WAKA_BANG=16,S_COMMENT=17,S_COMMENT_ENDING=18,S_COMMENT_ENDED=19,S_CDATA=20,S_CDATA_ENDING=21,S_CDATA_ENDING_2=22,S_PI_FIRST_CHAR=23,S_PI_REST=24,S_PI_BODY=25,S_PI_ENDING=26,S_XML_DECL_NAME_START=27,S_XML_DECL_NAME=28,S_XML_DECL_EQ=29,S_XML_DECL_VALUE_START=30,S_XML_DECL_VALUE=31,S_XML_DECL_SEPARATOR=32,S_XML_DECL_ENDING=33,S_OPEN_TAG=34,S_OPEN_TAG_SLASH=35,S_ATTRIB=36,S_ATTRIB_NAME=37,S_ATTRIB_NAME_SAW_WHITE=38,S_ATTRIB_VALUE=39,S_ATTRIB_VALUE_QUOTED=40,S_ATTRIB_VALUE_CLOSED=41,S_ATTRIB_VALUE_UNQUOTED=42,S_CLOSE_TAG=43,S_CLOSE_TAG_SAW_WHITE=44,TAB=9,NL=10,CR=13,SPACE=32,BANG=33,DQUOTE=34,AMP=38,SQUOTE=39,MINUS=45,FORWARD_SLASH=47,SEMICOLON=59,LESS=60,EQUAL=61,GREATER=62,QUESTION=63,OPEN_BRACKET=91,CLOSE_BRACKET=93,NEL=133,LS=8232,isQuote=t=>34===t||39===t,QUOTES=[34,39],DOCTYPE_TERMINATOR=[...QUOTES,OPEN_BRACKET,GREATER],DTD_TERMINATOR=[...QUOTES,LESS,CLOSE_BRACKET],XML_DECL_NAME_TERMINATOR=[EQUAL,QUESTION,...S_LIST],ATTRIB_VALUE_UNQUOTED_TERMINATOR=[...S_LIST,GREATER,AMP,LESS];function nsPairCheck(t,s,e){switch(s){case"xml":e!==XML_NAMESPACE&&t.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);break;case"xmlns":e!==XMLNS_NAMESPACE&&t.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`)}switch(e){case XMLNS_NAMESPACE:t.fail(""===s?`the default namespace may not be set to ${e}.`:`may not assign a prefix (even "xmlns") to the URI ${XMLNS_NAMESPACE}.`);break;case XML_NAMESPACE:switch(s){case"xml":break;case"":t.fail(`the default namespace may not be set to ${e}.`);break;default:t.fail("may not assign the xml namespace to another prefix.")}}}function nsMappingCheck(t,s){for(const e of Object.keys(s))nsPairCheck(t,e,s[e])}const isNCName=t=>NC_NAME_RE.test(t),isName=t=>NAME_RE.test(t),FORBIDDEN_START=0,FORBIDDEN_BRACKET=1,FORBIDDEN_BRACKET_BRACKET=2;exports.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const EVENT_NAME_TO_HANDLER_NAME={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class SaxesParser{constructor(t){this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;const s=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,s){this.nameStartCheck=isNCNameStartChar,this.nameCheck=isNCNameChar,this.isName=isNCName,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},rootNS);const t=this.opt.additionalNamespaces;null!=t&&(nsMappingCheck(this,t),Object.assign(this.ns,t))}else this.nameStartCheck=isNameStartChar,this.nameCheck=isNameChar,this.isName=isName,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var t;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=FORBIDDEN_START,this.attribList=[];const{fragmentOpt:s}=this;this.state=s?S_TEXT:S_BEGIN,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=s,this.xmlDeclPossible=!s,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:e}=this.opt;if(void 0===e){if(!0===this.opt.forceXMLVersion)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");e="1.0"}this.setXMLVersion(e),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(XML_ENTITIES),null===(t=this.readyHandler)||void 0===t||t.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(t,s){this[EVENT_NAME_TO_HANDLER_NAME[t]]=s}off(t){this[EVENT_NAME_TO_HANDLER_NAME[t]]=void 0}makeError(t){var s;let e=null!==(s=this.fileName)&&void 0!==s?s:"";return this.trackPosition&&(e.length>0&&(e+=":"),e+=`${this.line}:${this.column}`),e.length>0&&(e+=": "),new Error(e+t)}fail(t){const s=this.makeError(t),e=this.errorHandler;if(void 0===e)throw s;return e(s),this}write(t){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let s=!1;null===t?(s=!0,t=""):"object"==typeof t&&(t=t.toString()),void 0!==this.carriedFromPrevious&&(t=`${this.carriedFromPrevious}${t}`,this.carriedFromPrevious=void 0);let e=t.length;const i=t.charCodeAt(e-1);!s&&(i===CR||i>=55296&&i<=56319)&&(this.carriedFromPrevious=t[e-1],e--,t=t.slice(0,e));const{stateTable:a}=this;for(this.chunk=t,this.i=0;this.i=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>=SPACE||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:return t.charCodeAt(s+1)===NL&&(this.i=s+2),this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCode11(){const{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>31&&e<127||e>159&&e!==LS||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:{const e=t.charCodeAt(s+1);e!==NL&&e!==NEL||(this.i=s+2)}case NEL:case LS:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCodeNorm(){const t=this.getCode();return t===NL_LIKE?NL:t}unget(){this.i=this.prevI,this.column--}captureTo(t){let{i:s}=this;const{chunk:e}=this;for(;;){const i=this.getCode(),a=i===NL_LIKE,h=a?NL:i;if(h===EOC||t.includes(h))return this.text+=e.slice(s,this.prevI),h;a&&(this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i)}}captureToChar(t){let{i:s}=this;const{chunk:e}=this;for(;;){let i=this.getCode();switch(i){case NL_LIKE:this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i,i=NL;break;case EOC:return this.text+=e.slice(s),!1}if(i===t)return this.text+=e.slice(s,this.prevI),!0}}captureNameChars(){const{chunk:t,i:s}=this;for(;;){const e=this.getCode();if(e===EOC)return this.name+=t.slice(s),EOC;if(!isNameChar(e))return this.name+=t.slice(s,this.prevI),e===NL_LIKE?NL:e}}skipSpaces(){for(;;){const t=this.getCodeNorm();if(t===EOC||!isS(t))return t}}setXMLVersion(t){this.currentXMLVersion=t,"1.0"===t?(this.isChar=isChar10,this.getCode=this.getCode10):(this.isChar=isChar11,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=S_BEGIN_WHITESPACE}sBeginWhitespace(){const t=this.i,s=this.skipSpaces();switch(this.prevI!==t&&(this.xmlDeclPossible=!1),s){case LESS:if(this.state=S_OPEN_WAKA,0!==this.text.length)throw new Error("no-empty text at start");break;case EOC:break;default:this.unget(),this.state=S_TEXT,this.xmlDeclPossible=!1}}sDoctype(){var t;const s=this.captureTo(DOCTYPE_TERMINATOR);switch(s){case GREATER:null===(t=this.doctypeHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT,this.doctype=!0;break;case EOC:break;default:this.text+=String.fromCodePoint(s),s===OPEN_BRACKET?this.state=S_DTD:isQuote(s)&&(this.state=S_DOCTYPE_QUOTE,this.q=s)}}sDoctypeQuote(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.q=null,this.state=S_DOCTYPE)}sDTD(){const t=this.captureTo(DTD_TERMINATOR);t!==EOC&&(this.text+=String.fromCodePoint(t),t===CLOSE_BRACKET?this.state=S_DOCTYPE:t===LESS?this.state=S_DTD_OPEN_WAKA:isQuote(t)&&(this.state=S_DTD_QUOTED,this.q=t))}sDTDQuoted(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.state=S_DTD,this.q=null)}sDTDOpenWaka(){const t=this.getCodeNorm();switch(this.text+=String.fromCodePoint(t),t){case BANG:this.state=S_DTD_OPEN_WAKA_BANG,this.openWakaBang="";break;case QUESTION:this.state=S_DTD_PI;break;default:this.state=S_DTD}}sDTDOpenWakaBang(){const t=String.fromCodePoint(this.getCodeNorm()),s=this.openWakaBang+=t;this.text+=t,"-"!==s&&(this.state="--"===s?S_DTD_COMMENT:S_DTD,this.openWakaBang="")}sDTDComment(){this.captureToChar(MINUS)&&(this.text+="-",this.state=S_DTD_COMMENT_ENDING)}sDTDCommentEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),this.state=t===MINUS?S_DTD_COMMENT_ENDED:S_DTD_COMMENT}sDTDCommentEnded(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER?this.state=S_DTD:(this.fail("malformed comment."),this.state=S_DTD_COMMENT)}sDTDPI(){this.captureToChar(QUESTION)&&(this.text+="?",this.state=S_DTD_PI_ENDING)}sDTDPIEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER&&(this.state=S_DTD)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:t}=this;const{chunk:s}=this;t:for(;;)switch(this.getCode()){case NL_LIKE:this.entity+=`${s.slice(t,this.prevI)}\n`,t=this.i;break;case SEMICOLON:{const{entityReturnState:e}=this,i=this.entity+s.slice(t,this.prevI);let a;this.state=e,""===i?(this.fail("empty entity name."),a="&;"):(a=this.parseEntity(i),this.entity=""),e===S_TEXT&&void 0===this.textHandler||(this.text+=a);break t}case EOC:this.entity+=s.slice(t);break t}}sOpenWaka(){const t=this.getCode();if(isNameStartChar(t))this.state=S_OPEN_TAG,this.unget(),this.xmlDeclPossible=!1;else switch(t){case FORWARD_SLASH:this.state=S_CLOSE_TAG,this.xmlDeclPossible=!1;break;case BANG:this.state=S_OPEN_WAKA_BANG,this.openWakaBang="",this.xmlDeclPossible=!1;break;case QUESTION:this.state=S_PI_FIRST_CHAR;break;default:this.fail("disallowed character in tag name"),this.state=S_TEXT,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=S_CDATA,this.openWakaBang="";break;case"--":this.state=S_COMMENT,this.openWakaBang="";break;case"DOCTYPE":this.state=S_DOCTYPE,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(MINUS)&&(this.state=S_COMMENT_ENDING)}sCommentEnding(){var t;const s=this.getCodeNorm();s===MINUS?(this.state=S_COMMENT_ENDED,null===(t=this.commentHandler)||void 0===t||t.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(s)}`,this.state=S_COMMENT)}sCommentEnded(){const t=this.getCodeNorm();t!==GREATER?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(t)}`,this.state=S_COMMENT):this.state=S_TEXT}sCData(){this.captureToChar(CLOSE_BRACKET)&&(this.state=S_CDATA_ENDING)}sCDataEnding(){const t=this.getCodeNorm();t===CLOSE_BRACKET?this.state=S_CDATA_ENDING_2:(this.text+=`]${String.fromCodePoint(t)}`,this.state=S_CDATA)}sCDataEnding2(){var t;const s=this.getCodeNorm();switch(s){case GREATER:null===(t=this.cdataHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT;break;case CLOSE_BRACKET:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(s)}`,this.state=S_CDATA}}sPIFirstChar(){const t=this.getCodeNorm();this.nameStartCheck(t)?(this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST):t===QUESTION||isS(t)?(this.fail("processing instruction without a target."),this.state=t===QUESTION?S_PI_ENDING:S_PI_BODY):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST)}sPIRest(){const{chunk:t,i:s}=this;for(;;){const e=this.getCodeNorm();if(e===EOC)return void(this.piTarget+=t.slice(s));if(!this.nameCheck(e)){this.piTarget+=t.slice(s,this.prevI);const i=e===QUESTION;i||isS(e)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=i?S_XML_DECL_ENDING:S_XML_DECL_NAME_START):this.state=i?S_PI_ENDING:S_PI_BODY:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e));break}}}sPIBody(){if(0===this.text.length){const t=this.getCodeNorm();t===QUESTION?this.state=S_PI_ENDING:isS(t)||(this.text=String.fromCodePoint(t))}else this.captureToChar(QUESTION)&&(this.state=S_PI_ENDING)}sPIEnding(){var t;const s=this.getCodeNorm();if(s===GREATER){const{piTarget:s}=this;"xml"===s.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(t=this.piHandler)||void 0===t||t.call(this,{target:s,body:this.text}),this.piTarget=this.text="",this.state=S_TEXT}else s===QUESTION?this.text+="?":(this.text+=`?${String.fromCodePoint(s)}`,this.state=S_PI_BODY);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const t=this.skipSpaces();t!==QUESTION?t!==EOC&&(this.state=S_XML_DECL_NAME,this.name=String.fromCodePoint(t)):this.state=S_XML_DECL_ENDING}sXMLDeclName(){const t=this.captureTo(XML_DECL_NAME_TERMINATOR);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(isS(t)||t===EQUAL){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=t===EQUAL?S_XML_DECL_VALUE_START:S_XML_DECL_EQ}}sXMLDeclEq(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(t!==EQUAL&&this.fail("value required."),this.state=S_XML_DECL_VALUE_START)}sXMLDeclValueStart(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(isQuote(t)?this.q=t:(this.fail("value must be quoted."),this.q=SPACE),this.state=S_XML_DECL_VALUE)}sXMLDeclValue(){const t=this.captureTo([this.q,QUESTION]);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.text="",void this.fail("XML declaration is incomplete.");if(t===EOC)return;const s=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const t=s;this.xmlDecl.version=t,/^1\.[0-9]+$/.test(t)?this.opt.forceXMLVersion||this.setXMLVersion(t):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(s)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=s;break;case"standalone":"yes"!==s&&"no"!==s&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=s}this.name="",this.state=S_XML_DECL_SEPARATOR}sXMLDeclSeparator(){const t=this.getCodeNorm();t!==QUESTION?(isS(t)||(this.fail("whitespace required."),this.unget()),this.state=S_XML_DECL_NAME_START):this.state=S_XML_DECL_ENDING}sXMLDeclEnding(){var t;this.getCodeNorm()===GREATER?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(t=this.xmldeclHandler)||void 0===t||t.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=S_TEXT):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var t;const s=this.captureNameChars();if(s===EOC)return;const e=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=e.ns=Object.create(null)),null===(t=this.openTagStartHandler)||void 0===t||t.call(this,e),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),s){case GREATER:this.openTag();break;case FORWARD_SLASH:this.state=S_OPEN_TAG_SLASH;break;default:isS(s)||this.fail("disallowed character in tag name."),this.state=S_ATTRIB}}sOpenTagSlash(){this.getCode()===GREATER?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=S_ATTRIB)}sAttrib(){const t=this.skipSpaces();t!==EOC&&(isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:this.fail("disallowed character in attribute name."))}sAttribName(){const t=this.captureNameChars();t===EQUAL?this.state=S_ATTRIB_VALUE:isS(t)?this.state=S_ATTRIB_NAME_SAW_WHITE:t===GREATER?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):t!==EOC&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const t=this.skipSpaces();switch(t){case EOC:return;case EQUAL:this.state=S_ATTRIB_VALUE;break;default:this.fail("attribute without value."),this.text="",this.name="",t===GREATER?this.openTag():isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):(this.fail("disallowed character in attribute name."),this.state=S_ATTRIB)}}sAttribValue(){const t=this.getCodeNorm();isQuote(t)?(this.q=t,this.state=S_ATTRIB_VALUE_QUOTED):isS(t)||(this.fail("unquoted attribute value."),this.state=S_ATTRIB_VALUE_UNQUOTED,this.unget())}sAttribValueQuoted(){const{q:t,chunk:s}=this;let{i:e}=this;for(;;)switch(this.getCode()){case t:return this.pushAttrib(this.name,this.text+s.slice(e,this.prevI)),this.name=this.text="",this.q=null,void(this.state=S_ATTRIB_VALUE_CLOSED);case AMP:return this.text+=s.slice(e,this.prevI),this.state=S_ENTITY,void(this.entityReturnState=S_ATTRIB_VALUE_QUOTED);case NL:case NL_LIKE:case TAB:this.text+=`${s.slice(e,this.prevI)} `,e=this.i;break;case LESS:return this.text+=s.slice(e,this.prevI),void this.fail("disallowed character.");case EOC:return void(this.text+=s.slice(e))}}sAttribValueClosed(){const t=this.getCodeNorm();isS(t)?this.state=S_ATTRIB:t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:isNameStartChar(t)?(this.fail("no whitespace between attributes."),this.unget(),this.state=S_ATTRIB_NAME):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const t=this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);switch(t){case AMP:this.state=S_ENTITY,this.entityReturnState=S_ATTRIB_VALUE_UNQUOTED;break;case LESS:this.fail("disallowed character.");break;case EOC:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",t===GREATER?this.openTag():this.state=S_ATTRIB}}sCloseTag(){const t=this.captureNameChars();t===GREATER?this.closeTag():isS(t)?this.state=S_CLOSE_TAG_SAW_WHITE:t!==EOC&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case GREATER:this.closeTag();break;case EOC:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:t,forbiddenState:s}=this;const{chunk:e,textHandler:i}=this;t:for(;;)switch(this.getCode()){case LESS:if(this.state=S_OPEN_WAKA,void 0!==i){const{text:s}=this,a=e.slice(t,this.prevI);0!==s.length?(i(s+a),this.text=""):0!==a.length&&i(a)}s=FORBIDDEN_START;break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==i&&(this.text+=e.slice(t,this.prevI)),s=FORBIDDEN_START;break t;case CLOSE_BRACKET:switch(s){case FORBIDDEN_START:s=FORBIDDEN_BRACKET;break;case FORBIDDEN_BRACKET:s=FORBIDDEN_BRACKET_BRACKET;break;case FORBIDDEN_BRACKET_BRACKET:break;default:throw new Error("impossible state")}break;case GREATER:s===FORBIDDEN_BRACKET_BRACKET&&this.fail('the string "]]>" is disallowed in char data.'),s=FORBIDDEN_START;break;case NL_LIKE:void 0!==i&&(this.text+=`${e.slice(t,this.prevI)}\n`),t=this.i,s=FORBIDDEN_START;break;case EOC:void 0!==i&&(this.text+=e.slice(t));break t;default:s=FORBIDDEN_START}this.forbiddenState=s}handleTextOutsideRoot(){let{i:t}=this;const{chunk:s,textHandler:e}=this;let i=!1;t:for(;;){const a=this.getCode();switch(a){case LESS:if(this.state=S_OPEN_WAKA,void 0!==e){const{text:i}=this,a=s.slice(t,this.prevI);0!==i.length?(e(i+a),this.text=""):0!==a.length&&e(a)}break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==e&&(this.text+=s.slice(t,this.prevI)),i=!0;break t;case NL_LIKE:void 0!==e&&(this.text+=`${s.slice(t,this.prevI)}\n`),t=this.i;break;case EOC:void 0!==e&&(this.text+=s.slice(t));break t;default:isS(a)||(i=!0)}}i&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(t,s){var e;const{prefix:i,local:a}=this.qname(t),h={name:t,prefix:i,local:a,value:s};if(this.attribList.push(h),null===(e=this.attributeHandler)||void 0===e||e.call(this,h),"xmlns"===i){const t=s.trim();"1.0"===this.currentXMLVersion&&""===t&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[a]=t,nsPairCheck(this,a,t)}else if("xmlns"===t){const t=s.trim();this.topNS[""]=t,nsPairCheck(this,"",t)}}pushAttribPlain(t,s){var e;const i={name:t,value:s};this.attribList.push(i),null===(e=this.attributeHandler)||void 0===e||e.call(this,i)}end(){var t,s;this.sawRoot||this.fail("document must contain a root element.");const{tags:e}=this;for(;e.length>0;){const t=e.pop();this.fail(`unclosed tag: ${t.name}`)}this.state!==S_BEGIN&&this.state!==S_TEXT&&this.fail("unexpected end.");const{text:i}=this;return 0!==i.length&&(null===(t=this.textHandler)||void 0===t||t.call(this,i),this.text=""),this._closed=!0,null===(s=this.endHandler)||void 0===s||s.call(this),this._init(),this}resolve(t){var s,e;let i=this.topNS[t];if(void 0!==i)return i;const{tags:a}=this;for(let s=a.length-1;s>=0;s--)if(void 0!==(i=a[s].ns[t]))return i;return void 0!==(i=this.ns[t])?i:null===(e=(s=this.opt).resolvePrefix)||void 0===e?void 0:e.call(s,t)}qname(t){const s=t.indexOf(":");if(-1===s)return{prefix:"",local:t};const e=t.slice(s+1),i=t.slice(0,s);return(""===i||""===e||e.includes(":"))&&this.fail(`malformed name: ${t}.`),{prefix:i,local:e}}processAttribsNS(){var t;const{attribList:s}=this,e=this.tag;{const{prefix:s,local:i}=this.qname(e.name);e.prefix=s,e.local=i;const a=e.uri=null!==(t=this.resolve(s))&&void 0!==t?t:"";""!==s&&("xmlns"===s&&this.fail('tags may not have "xmlns" as prefix.'),""===a&&(this.fail(`unbound namespace prefix: ${JSON.stringify(s)}.`),e.uri=s))}if(0===s.length)return;const{attributes:i}=e,a=new Set;for(const t of s){const{name:s,prefix:e,local:h}=t;let o,n;""===e?(o="xmlns"===s?XMLNS_NAMESPACE:"",n=s):(void 0===(o=this.resolve(e))&&(this.fail(`unbound namespace prefix: ${JSON.stringify(e)}.`),o=e),n=`{${o}}${h}`),a.has(n)&&this.fail(`duplicate attribute: ${n}.`),a.add(n),t.uri=o,i[s]=t}this.attribList=[]}processAttribsPlain(){const{attribList:t}=this,s=this.tag.attributes;for(const{name:e,value:i}of t)void 0!==s[e]&&this.fail(`duplicate attribute: ${e}.`),s[e]=i;this.attribList=[]}openTag(){var t;this.processAttribs();const{tags:s}=this,e=this.tag;e.isSelfClosing=!1,null===(t=this.openTagHandler)||void 0===t||t.call(this,e),s.push(e),this.state=S_TEXT,this.name=""}openSelfClosingTag(){var t,s,e;this.processAttribs();const{tags:i}=this,a=this.tag;a.isSelfClosing=!0,null===(t=this.openTagHandler)||void 0===t||t.call(this,a),null===(s=this.closeTagHandler)||void 0===s||s.call(this,a),null===(this.tag=null!==(e=i[i.length-1])&&void 0!==e?e:null)&&(this.closedRoot=!0),this.state=S_TEXT,this.name=""}closeTag(){const{tags:t,name:s}=this;if(this.state=S_TEXT,this.name="",""===s)return this.fail("weird empty close tag."),void(this.text+="");const e=this.closeTagHandler;let i=t.length;for(;i-- >0;){const i=this.tag=t.pop();if(this.topNS=i.ns,null==e||e(i),i.name===s)break;this.fail("unexpected close tag.")}0===i?this.closedRoot=!0:i<0&&(this.fail(`unmatched closing tag: ${s}.`),this.text+=``)}parseEntity(t){if("#"!==t[0]){const s=this.ENTITIES[t];return void 0!==s?s:(this.fail(this.isName(t)?"undefined entity.":"disallowed character in entity name."),`&${t};`)}let s=NaN;return"x"===t[1]&&/^#x[0-9a-f]+$/i.test(t)?s=parseInt(t.slice(2),16):/^#[0-9]+$/.test(t)&&(s=parseInt(t.slice(1),10)),this.isChar(s)?String.fromCodePoint(s):(this.fail("malformed character entity."),`&${t};`)}}exports.SaxesParser=SaxesParser; -},{"xmlchars/xml/1.0/ed5":101,"xmlchars/xml/1.1/ed2":102,"xmlchars/xmlns/1.0/ed3":103}],105:[function(require,module,exports){ +},{"xmlchars/xml/1.0/ed5":102,"xmlchars/xml/1.1/ed2":103,"xmlchars/xmlns/1.0/ed3":104}],106:[function(require,module,exports){ module.exports={ "name": "@jscad/x3d-deserializer", - "version": "2.2.8", + "version": "2.2.9", "description": "X3D Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -686,7 +694,8 @@ module.exports={ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -695,1297 +704,1297 @@ module.exports={ } } -},{}],106:[function(require,module,exports){ +},{}],107:[function(require,module,exports){ const inchMM=1/.03937;module.exports={inchMM:inchMM}; -},{}],107:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ const{maths:maths}=require("@jscad/modeling"),createTransform=(t,a,m,s,e)=>{const r=maths.mat4.create(),o=maths.mat4.create();return maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,e)),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,t)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,a[3],a)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],s)),maths.mat4.multiply(r,r,maths.mat4.fromScaling(o,m)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],maths.vec3.negate(maths.vec3.create(),s))),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,maths.vec3.negate(maths.vec3.create(),t))),r};module.exports=createTransform; -},{"@jscad/modeling":216}],108:[function(require,module,exports){ +},{"@jscad/modeling":217}],109:[function(require,module,exports){ const{extrusions:extrusions,geometries:geometries,maths:maths}=require("@jscad/modeling"),{mat4:mat4,vec3:vec3,utils:utils}=maths,{extrudeFromSlices:extrudeFromSlices,slice:slice}=extrusions,calculateYaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];for(let r=0;re[0]+0===0&&e[1]+0===0&&e[2]+0===0,calculateZaxis=(e,t,a,c)=>{const r=vec3.subtract(vec3.create(),c,a),s=vec3.subtract(vec3.create(),t,a);return vec3.normalize(e,vec3.cross(e,r,s))},calculateZaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];let r;for(let s=0;s2&&calculateZaxis(o,e[0],e[1],e[2]):s===t-1?a?calculateZaxis(o,e[t-2],e[0],e[1]):t>2&&calculateZaxis(o,e[t-3],e[t-2],e[t-1]):calculateZaxis(o,e[s-1],e[s],e[s+1]),r&&vec3.dot(r,o)<0&&vec3.negate(o,o),c.push(o),r=o}if(isZeroVector(c[0]))for(let e=1;e{const a=[];for(let c=0;c(e[0]=t[0],e[1]=a[0],e[2]=c[0],e[3]=0,e[4]=t[1],e[5]=a[1],e[6]=c[1],e[7]=0,e[8]=t[2],e[9]=a[2],e[10]=c[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e),extrudeX3D=e=>{let{beginCap:t,endCap:a,crossSection:c,orientations:r,scales:s,spine:o}=Object.assign({},e);if(utils.area(c)<0&&c.reverse(),1===s.length&&(s=o.map(e=>s[0])),1===r.length&&(r=o.map(e=>r[0])),o.length!==s.length||o.length!==r.length)throw new Error(`invalid X3D specification; spine scale orientaion length must be the same; ${o.length}`);const l=geometries.geom2.fromPoints(c),i=slice.fromSides(geometries.geom2.toSides(l));let n=calculateYaxes(o),m=calculateZaxes(o),u=calculateXaxes(n,m);const v=[0,1,0],g=mat4.fromVectorRotation(mat4.create(),vec3.fromValues(0,0,1),v);return m.reduce((e,t)=>e&&isZeroVector(t),!0)&&(vec3.subtract(v,o[1],o[0]),mat4.fromVectorRotation(g,vec3.fromValues(0,0,1),v),u=u.map(e=>[1,0,0]),n=n.map(e=>[0,1,0]),m=m.map(e=>[0,0,1])),extrudeFromSlices({numberOfSlices:o.length,capStart:t,capEnd:a,callback:function(e,t,a){const c=o[t],l=vec3.fromVec2(vec3.create(),s[t],1),i=r[t],v=u[t],f=n[t],x=m[t],h=mat4.fromTranslation(mat4.create(),c),p=mat4.fromScaling(mat4.create(),l),d=rotationMatrixFromSCP(mat4.create(),v,f,x),b=mat4.fromRotation(mat4.create(),i[3],i),Z=mat4.create();mat4.multiply(Z,g,Z),mat4.multiply(Z,d,Z),mat4.multiply(Z,b,Z),mat4.multiply(Z,h,Z);let S=a;return S=slice.transform(p,S),S=slice.transform(Z,S)}},i)};module.exports=extrudeX3D; -},{"@jscad/modeling":216}],109:[function(require,module,exports){ -const version=require("../package.json").version,translate=require("./translate"),instantiate=require("./instantiate"),deserialize=(e,t)=>{const i={filename:"x3d",output:"script",version:version,flatten:!0,addMetaData:!0};return"script"===(e=Object.assign({},i,e)).output?translate(e,t):instantiate(e,t)},extension="x3d";module.exports={deserialize:deserialize,extension:"x3d"}; +},{"@jscad/modeling":217}],110:[function(require,module,exports){ +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,translate=require("./translate"),instantiate=require("./instantiate"),deserialize=(e,t)=>{const i={filename:"x3d",output:"script",version:version,flatten:!0,addMetaData:!0};return e=Object.assign({},i,e),t=ensureString(t),"script"===e.output?translate(e,t):instantiate(e,t)},extension="x3d";module.exports={deserialize:deserialize,extension:"x3d"}; -},{"../package.json":105,"./instantiate":110,"./translate":117}],110:[function(require,module,exports){ +},{"../package.json":106,"./instantiate":111,"./translate":118,"@jscad/io-utils":71}],111:[function(require,module,exports){ const{flatten:flatten}=require("@jscad/array-utils"),parse=require("./parse"),instantiateDefinitions=require("./instantiateDefinitions"),{x3dTypes:x3dTypes}=require("./objects"),instantiate=(t,e)=>{const s={pxPmm:require("./constants").pxPmm};t=Object.assign({},s,t);const{pxPmm:a}=t;t&&t.statusCallback&&t.statusCallback({progress:0});const{x3dObj:n}=parse(e,a);if(n.definition!==x3dTypes.X3D||!n.objects)throw new Error("X3D malformed");if(n.objects.length<1||n.objects[0].definition!==x3dTypes.SCENE)throw new Error("X3D did not define a SCENE");t&&t.statusCallback&&t.statusCallback({progress:50});const i=n.objects[0].objects;let r=instantiateDefinitions(t,i);return t.flatten&&(r=flatten(r)),t&&t.statusCallback&&t.statusCallback({progress:100}),r};module.exports=instantiate; -},{"./constants":106,"./instantiateDefinitions":111,"./objects":115,"./parse":116,"@jscad/array-utils":532}],111:[function(require,module,exports){ +},{"./constants":107,"./instantiateDefinitions":112,"./objects":116,"./parse":117,"@jscad/array-utils":533}],112:[function(require,module,exports){ const{colors:colors,transforms:transforms}=require("@jscad/modeling"),createTransform=require("./createTransform"),{x3dTypes:x3dTypes}=require("./objects"),{findColor:findColor}=require("./translateHelpers"),instantiatePrimitive=require("./instantiatePrimitive"),{instantiateLine:instantiateLine}=require("./instantiateLine"),{instantiateMesh:instantiateMesh}=require("./instantiateMesh"),instantiatedList=new Map,instantiateTransform=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);if(0===i.length)return null;const e=createTransform(n.center,n.rotation,n.scale,n.scaleOrientation,n.translation);return i.map(t=>{const n=t.color;return t=transforms.transform(e,t),n&&(t.color=n),t})},instantiateShape=(t,n)=>{const i=n.objects,e=findColor(i,t);let a=instantiatePrimitive(t,i);return a||(a=instantiateMesh(t,i)),a||(a=instantiateLine(t,i)),a||(a=null),a&&e&&(a=colors.colorize(e,a)),a},instantiateGroup=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return 0===i.length?null:i},instantiateDefinition=(t,n)=>{let i;switch(n.definition){case x3dTypes.TRANSFORM:i=instantiateTransform(t,n);break;case x3dTypes.SHAPE:i=instantiateShape(t,n);break;case x3dTypes.GROUP:i=instantiateGroup(t,n);break;default:console.log("WARNING: unknown definition: "+n.definition)}return i},instantiateDefinitions=(t,n)=>{const i=n.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return instantiatedList.clear(),i};module.exports=instantiateDefinitions; -},{"./createTransform":107,"./instantiateLine":112,"./instantiateMesh":113,"./instantiatePrimitive":114,"./objects":115,"./translateHelpers":119,"@jscad/modeling":216}],112:[function(require,module,exports){ +},{"./createTransform":108,"./instantiateLine":113,"./instantiateMesh":114,"./instantiatePrimitive":115,"./objects":116,"./translateHelpers":120,"@jscad/modeling":217}],113:[function(require,module,exports){ const jscad=require("@jscad/modeling"),{createColors:createColors,findNode:findNode}=require("./translateHelpers"),{x3dTypes:x3dTypes}=require("./objects"),convertLine=(e,o)=>{let n=findNode(x3dTypes.INDEXEDLINESET,o);if(n){const e=findNode(x3dTypes.COORDINATE,n.objects),o=n.indexes,t=findNode(x3dTypes.COLOR,n.objects);if(e&&o){const r=o.map(o=>{let n=o.map(o=>e.points[o]);return n.findIndex(e=>0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D indexed line set was ignored"),n=[]),n});return!0===n.colorPerVertex?n.colorIndex=o:n.colorIndex=o.map((e,o)=>o),{pointsSet:r,colors:createColors(n,t)}}}if(n=findNode(x3dTypes.LINESET,o)){const e=findNode(x3dTypes.COORDINATE,n.objects),o=findNode(x3dTypes.COLOR,n.objects),t=n.vertexCount;if(e&&t){let r=0;const s=t.map(o=>{let n=[];for(let t=0;t0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D line set was ignored"),n=[]),n});if(!0===n.colorPerVertex){let e=0;n.colorIndex=t.map(o=>{const n=[];for(let t=0;to);return{pointsSet:s,colors:createColors(n,o)}}}return null},instantiateLine=(e,o)=>{let n;const t=convertLine(0,o);if(t){const{pointsSet:e,colors:o}=t;n=e.map((e,n)=>{let t;return t=o?jscad.colors.colorize(o[n],jscad.primitives.line(e)):jscad.primitives.line(e)})}return n};module.exports={convertLine:convertLine,instantiateLine:instantiateLine}; -},{"./objects":115,"./translateHelpers":119,"@jscad/modeling":216}],113:[function(require,module,exports){ +},{"./objects":116,"./translateHelpers":120,"@jscad/modeling":217}],114:[function(require,module,exports){ const{primitives:primitives}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,createColors:createColors}=require("./translateHelpers"),convertMesh=(e,o)=>{let t=findNode(x3dTypes.TRIANGLESET,o);if(t){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects);if(e){const n=e.points,s=n.length,r=Math.trunc(s/3),i=[];for(let e=0;e2){const s=e.points,r=Math.trunc(n.length/3),i=[];for(let e=0;e0){const s=e.points,r=n.length,i=[];for(let e=0;e0){const s=e.points,r=n.length,i=[];for(let e=0;e3){const s=e.points,r=Math.trunc(n.length/4),i=[];for(let e=0;e0){const s=e.points;return{type:`indexed faces (${o.length})`,points:s,faces:o,colors:createColors(t,n),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.ELEVATIONGRID,o)){const e=t.height,o=findNode(x3dTypes.COLOR,t.objects);if(e&&e.length>0){const n=t.xDimension,s=t.xSpacing,r=t.zDimension,i=t.zSpacing,d=[];let c=0;for(let o=0;o=c[0]&&c[1]>=c[2]&&c[1]>=c[3]&&(l=1),c[2]>=c[0]&&c[2]>=c[1]&&c[2]>=c[3]&&(l=2),c[3]>=c[0]&&c[3]>=c[1]&&c[3]>=c[2]&&(l=3),0===l&&a.push([s,d,r],[s,i,d]),1===l&&a.push([r,i,d],[r,s,i]),2===l&&a.push([i,r,s],[i,d,r]),3===l&&a.push([d,s,i],[d,r,s])}const l=t.ccw?"outward":"inward";return!0===t.colorPerVertex&&(t.colorIndex=a),{type:`elevation grid (${n} X ${r})`,points:d,faces:a,colors:createColors(t,o),orientation:l}}}return null},instantiateMesh=(e,o)=>{let t;const n=convertMesh(0,o);return n&&(t=primitives.polyhedron(n)),t};module.exports={convertMesh:convertMesh,instantiateMesh:instantiateMesh}; -},{"./objects":115,"./translateHelpers":119,"@jscad/modeling":216}],114:[function(require,module,exports){ +},{"./objects":116,"./translateHelpers":120,"@jscad/modeling":217}],115:[function(require,module,exports){ const{booleans:booleans,geometries:geometries,primitives:primitives,transforms:transforms}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode}=require("./translateHelpers"),extrudeX3D=require("./extrudeX3D"),instantiatePrimitive=(e,i)=>{let s,r=findNode(x3dTypes.BOX,i);if(r)return s=primitives.cuboid({size:r.size});if(r=findNode(x3dTypes.CONE,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinderElliptic({startRadius:[r.bottomRadius,r.bottomRadius],height:r.height,segments:r.subdivision,endRadius:[r.topRadius,r.topRadius]}));if(r=findNode(x3dTypes.CYLINDER,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinder({radius:r.radius,height:r.height,segments:r.subdivision}));if(r=findNode(x3dTypes.SPHERE,i))return s=primitives.sphere({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.EXTRUSION,i))return s=extrudeX3D(r);if(r=findNode(x3dTypes.ARC2D,i))return s=primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision});if(r=findNode(x3dTypes.ARCCLOSE2D,i))return s="PIE"===r.closureType?primitives.circle({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}):geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}))));if(r=findNode(x3dTypes.CIRCLE2D,i))return s=primitives.arc({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.DISK2D,i))return s=r.innerRadius===r.outerRadius?primitives.arc({radius:r.outerRadius,segments:r.subdivision}):0===r.innerRadius?primitives.circle({radius:r.outerRadius,segments:r.subdivision}):booleans.subtract(primitives.circle({radius:r.outerRadius,segments:r.subdivision}),primitives.circle({radius:r.innerRadius,segments:r.subdivision}));if(r=findNode(x3dTypes.POLYLINE2D,i))return s=primitives.line([r.lineSegments]);if(r=findNode(x3dTypes.RECTANGLE2D,i))return s=primitives.rectangle({size:r.size});if(r=findNode(x3dTypes.TRIANGLESET2D,i)){const e=r.vertices,i=e.length,t=Math.trunc(i/3);s=[];for(let i=0;i{const n={definition:x3dTypes.X3D,objects:[]};return n},x3dUnit=e=>{const n={definition:x3dTypes.UNIT,category:"",name:"",conversionFactor:1};return e.category&&(n.category=e.category),e.name&&(n.name=e.name),e.conversionfactor&&(n.conversionFactor=e.conversionfactor),n},x3dMeta=e=>{const n={definition:x3dTypes.META,content:"",name:""};return e.content&&(n.content=e.content),e.name&&(n.name=e.name),n},x3dScene=e=>{const n={definition:x3dTypes.SCENE,objects:[]};return n},x3dTransform=e=>{const n={definition:x3dTypes.TRANSFORM,center:[0,0,0],rotation:[0,0,1,0],scale:[1,1,1],scaleOrientation:[0,0,1,0],translation:[0,0,0]};if(e.center){const i=parseNumbers(e.center);i.length>2&&(n.center=i)}if(e.rotation){const i=parseNumbers(e.rotation);i.length>3&&(n.rotation=i)}if(e.scale){const i=parseNumbers(e.scale);i.length>2&&(n.scale=i)}if(e.scaleorientation){const i=parseNumbers(e.scaleorientation);i.length>3&&(n.scaleOrientation=i)}if(e.translation){const i=parseNumbers(e.translation);i.length>2&&(n.translation=i)}return n.objects=[],n},x3dShape=e=>{const n={definition:x3dTypes.SHAPE,objects:[]};return n},x3dBox=e=>{const n={definition:x3dTypes.BOX,size:[2,2,2]};if(e.size){const i=parseNumbers(e.size);i.length>2&&(n.size=i)}return n},x3dCone=e=>{const n={definition:x3dTypes.CONE,bottomRadius:1,height:2,subdivision:32,topRadius:1e-5};return e.bottomRadius&&(n.bottomRadius=Math.max(parseFloat(e.bottomRadius),1e-5)),e.height&&(n.height=parseFloat(e.height)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),e.topRadius&&(n.topRadius=Math.max(parseFloat(e.topRadius),1e-5)),n},x3dCylinder=e=>{const n={definition:x3dTypes.CYLINDER,height:2,radius:1,subdivision:32};return e.height&&(n.height=parseFloat(e.height)),e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dSphere=e=>{const n={definition:x3dTypes.SPHERE,radius:1,subdivision:24};if(e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision){const i=parseNumbers(e.subdivision);i.length>1&&(n.subdivision=Math.max(...i))}return n},x3dExtrusion=e=>{const n={definition:x3dTypes.EXTRUSION,ccw:!0,beginCap:!0,endCap:!0,crossSection:[[1,1],[1,-1],[-1,-1],[-1,1],[1,1]],orientations:[[0,0,1,0]],scales:[[1,1]],spine:[[0,0,0],[0,1,0]]};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.beginCap&&(n.beginCap=e.beginCap.includes("TRUE")||e.beginCap.includes("true")),e.endCap&&(n.endCap=e.endCap.includes("TRUE")||e.endCap.includes("true")),e.crossSection){const i=parseNumbers(e.crossSection),t=Math.trunc(i.length/2),s=[];for(let e=0;e{const n={definition:x3dTypes.ARC2D,endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.endAngle&&(n.endAngle=parseFloat(e.endAngle)),e.radius&&(n.radius=parseFloat(e.radius)),e.startAngle&&(n.startAngle=parseFloat(e.startAngle)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dArcClose2D=e=>{const n={definition:x3dTypes.ARCCLOSE2D,closureType:"PIE",endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.closureType&&(n.closureType=e.closureType),e.endAngle&&(n.endAngle=parseFloat(e.endAngle)),e.radius&&(n.radius=parseFloat(e.radius)),e.startAngle&&(n.startAngle=parseFloat(e.startAngle)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dCircle2D=e=>{const n={definition:x3dTypes.CIRCLE2D,radius:1,subdivision:32};return e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dDisk2D=e=>{const n={definition:x3dTypes.DISK2D,innerRadius:0,outerRadius:1,subdivision:32};return e.innerRadius&&(n.innerRadius=parseFloat(e.innerRadius)),e.outerRadius&&(n.outerRadius=parseFloat(e.outerRadius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dPolyline2D=e=>{const n={definition:x3dTypes.POLYLINE2D,lineSegments:[]};if(e.lineSegments){const i=parseNumbers(e.lineSegments);for(let e=0;e{const n={definition:x3dTypes.RECTANGLE2D,size:[2,2]};if(e.size){const i=parseNumbers(e.size);i.length>1&&(n.size=i)}return n},x3dTriangleSet2D=e=>{const n={definition:x3dTypes.TRIANGLESET2D,vertices:[]};if(e.vertices){const i=parseNumbers(e.vertices);for(let e=0;e{const n={definition:x3dTypes.LINESET,vertexCount:[],colorPerVertex:!0};return e.vertexCount&&(n.vertexCount=parseNumbers(e.vertexCount)),e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dIndexedLineSet=e=>{const n={definition:x3dTypes.INDEXEDLINESET,indexes:[],colorPerVertex:!0};if(e.coordIndex){const i=parseIndices(e.coordIndex);n.indexes=i.filter(e=>e.length>1)}return e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dColor=e=>{const n={definition:x3dTypes.COLOR,colors:[]};if(e.color){const i=parseNumbers(e.color),t=i.length,s=Math.trunc(t/3);for(let e=0;e{const n={definition:x3dTypes.COORDINATE,points:[]};if(e.point){const i=parseNumbers(e.point),t=i.length,s=Math.trunc(t/3);for(let e=0;e{const n={definition:x3dTypes.TRIANGLESET,ccw:!0,colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),n.objects=[],n},x3dTriangleFanSet=e=>{const n={definition:x3dTypes.TRIANGLEFANSET,ccw:!0,fanCount:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.fanCount&&(n.fanCount=parseNumbers(e.fanCount)),n.objects=[],n},x3dTriangleStripSet=e=>{const n={definition:x3dTypes.TRIANGLESTRIPSET,ccw:!0,stripCount:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.stripCount&&(n.stripCount=parseNumbers(e.stripCount)),n.objects=[],n},x3dQuadSet=e=>{const n={definition:x3dTypes.QUADSET,ccw:!0,colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),n.objects=[],n},x3dIndexedTriangleSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLESET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(n.index=parseNumbers(e.index)),n.objects=[],n},x3dIndexedTriangleFanSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLEFANSET,ccw:!0,fans:[],colorPerVertex:!0};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=parseIndices(e.index);n.fans=i.filter(e=>e.length>2)}return n.objects=[],n},x3dIndexedTriangleStripSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLESTRIPSET,ccw:!0,strips:[],colorPerVertex:!0,objects:[]};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=parseIndices(e.index);n.strips=i.filter(e=>e.length>2)}return n},x3dIndexedQuadSet=e=>{const n={definition:x3dTypes.INDEXEDQUADSET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(n.index=parseNumbers(e.index)),n.objects=[],n},x3dIndexedFaceSet=e=>{const n={definition:x3dTypes.INDEXEDFACESET,ccw:!0,convex:!0,faces:[],colorPerVertex:!0,colorIndex:null};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.convex&&(n.convex=e.convex.includes("TRUE")||e.convex.includes("true")),e.coordIndex){const i=parseIndices(e.coordIndex);n.faces=i.filter(e=>e.length>2)}if(e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),e.colorIndex)if(n.colorPerVertex){const i=parseIndices(e.colorIndex);n.colorIndex=i.filter(e=>e.length>2)}else n.colorIndex=parseNumbers(e.colorIndex);else n.colorIndex=n.faces;return n.objects=[],n},x3dElevationGrid=e=>{const n={definition:x3dTypes.ELEVATIONGRID,xDimension:2,zDimension:2,xSpacing:1,zSpacing:1,height:[0,0,0,0],ccw:!0,solid:!1,colorPerVertex:!0};return e.xDimension&&(n.xDimension=parseFloat(e.xDimension)),e.zDimension&&(n.zDimension=parseFloat(e.zDimension)),e.xSpacing&&(n.xSpacing=parseFloat(e.xSpacing)),e.zSpacing&&(n.zSpacing=parseFloat(e.zSpacing)),e.height&&(n.height=parseNumbers(e.height)),e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.solid&&(n.solid=e.solid.includes("TRUE")||e.solid.includes("true")),e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dAppearance=e=>{const n={definition:x3dTypes.APPEARANCE,objects:[]};return n},x3dMaterial=e=>{const n={definition:x3dTypes.MATERIAL,color:[.8,.8,.8,1]};let i=1;if(e.transparency&&(i=1-e.transparency),e.diffuseColor){const t=parseNumbers(e.diffuseColor);t.length>2&&(t.length<4&&t.push(i),n.color=t)}if(e.emissiveColor){const t=parseNumbers(e.emissiveColor);t.length>2&&(t.length<4&&t.push(i),n.color=t)}return n},x3dGroup=e=>{const n={definition:x3dTypes.GROUP,objects:[]};return n},parseNumbers=e=>e.trim().replace(/,/g," ").split(/ +/).map(e=>parseFloat(e)),parseIndices=e=>{return e.replace(/,/g," ").trim().split(/ -1/).map(e=>parseNumbers(e))};module.exports={x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial}; -},{"@jscad/modeling":216}],116:[function(require,module,exports){ +},{"@jscad/modeling":217}],117:[function(require,module,exports){ const saxes=require("saxes"),{x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial}=require("./objects"),nodeToObjectMap={X3D:x3dX3D,UNIT:x3dUnit,META:x3dMeta,SCENE:x3dScene,TRANSFORM:x3dTransform,SHAPE:x3dShape,GROUP:x3dGroup,STATICGROUP:x3dGroup,BOX:x3dBox,CONE:x3dCone,CYLINDER:x3dCylinder,SPHERE:x3dSphere,EXTRUSION:x3dExtrusion,ARC2D:x3dArc2D,ARCCLOSE2D:x3dArcClose2D,CIRCLE2D:x3dCircle2D,DISK2D:x3dDisk2D,POLYLINE2D:x3dPolyline2D,RECTANGLE2D:x3dRectangle2D,TRIANGLESET2D:x3dTriangleSet2D,COLOR:x3dColor,COORDINATE:x3dCoordinate,TRIANGLESET:x3dTriangleSet,TRIANGLEFANSET:x3dTriangleFanSet,TRIANGLESTRIPSET:x3dTriangleStripSet,QUADSET:x3dQuadSet,INDEXEDTRIANGLESET:x3dIndexedTriangleSet,INDEXEDTRIANGLEFANSET:x3dIndexedTriangleFanSet,INDEXEDTRIANGLESTRIPSET:x3dIndexedTriangleStripSet,INDEXEDQUADSET:x3dIndexedQuadSet,INDEXEDFACESET:x3dIndexedFaceSet,ELEVATIONGRID:x3dElevationGrid,LINESET:x3dLineSet,INDEXEDLINESET:x3dIndexedLineSet,APPEARANCE:x3dAppearance,MATERIAL:x3dMaterial};let objectId=1;const getObjectId=()=>("0000"+objectId++).slice(-4),createX3DParser=(e,d)=>{const E=new saxes.SaxesParser,s=new Map;let T=null,a=x3dTypes.X3D,x=null;const n=[],t={factor:1,name:"meters"},c={factor:1,name:"radians"};return E.on("error",e=>{console.log(`error: line ${e.line}, column ${e.column}, bad character [${e.c}]`)}),E.on("opentag",e=>{const d=e.name.toUpperCase();let E=nodeToObjectMap[d]?nodeToObjectMap[d](e.attributes,{x3dObjects:n}):null;if(E){if(E.id=getObjectId(),e.attributes.USE){const d=e.attributes.USE;if(s.has(d)){const e=s.get(d);e.definition!==E.definition&&console.log(`WARNING: using a definition "${d}" of a different type; ${E.definition} vs ${e.definition}`),E=e}else console.log(`WARNING: definition "${d}" does not exist, using default for ${E.definition}`)}else if(e.attributes.DEF){const d=e.attributes.DEF;s.has(d)?console.log(`WARNING: redefintion of ${d} has been ignored`):s.set(d,E)}switch(E.definition){case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:case x3dTypes.GROUP:a=E.definition}switch(a){case x3dTypes.X3D:"objects"in E&&n.push(E),E.definition===x3dTypes.UNIT&&("length"===E.category&&(t.factor=E.conversionFactor,t.name=E.name),"angle"===E.category&&(c.factor=E.conversionFactor,c.name=E.name));break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:if(n.length>0){const e=n.pop();"objects"in e&&e.objects.push(E),n.push(e),"objects"in E&&n.push(E)}break;default:console.log("WARNING: invalid X3D definition")}T=E}}),E.on("closetag",e=>{switch(e.name.toUpperCase()){case"X3D":case"SCENE":case"TRANSFORM":case"SHAPE":case"GROUP":case"STATICGROUP":case"APPEARANCE":case"TRIANGLESET":case"TRIANGLEFANSET":case"TRIANGLESTRIPSET":case"QUADSET":case"INDEXEDTRIANGLESET":case"INDEXEDTRIANGLEFANSET":case"INDEXEDTRIANGLESTRIPSET":case"INDEXEDQUADSET":case"INDEXEDFACESET":case"ELEVATIONGRID":case"LINESET":case"INDEXEDLINESET":break;default:return}const d=()=>{n.length>0&&(a=n[n.length-1].definition)};let E=null;switch(a){case x3dTypes.X3D:n.length>0&&(E=n.pop(),d()),0===n.length&&(E.length=t,E.angle=c,x=E);break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:n.length>0&&(E=n.pop(),d());break;default:console.log("WARNING: unhandled definition",a)}}),E.on("text",e=>{null!==e&&(e=e.trim()).length>0&&T&&0!==a&&(T.value=e)}),E.on("end",()=>{}),E.write(e).close(),{x3dObj:x,x3dMaterials:[],x3dTextures:[]}};module.exports=createX3DParser; -},{"./objects":115,"saxes":104}],117:[function(require,module,exports){ +},{"./objects":116,"saxes":105}],118:[function(require,module,exports){ const translateDefinitions=require("./translateDefinitions"),{x3dTypes:x3dTypes}=require("./objects"),parse=require("./parse"),translate=(e,t)=>{const n={pxPmm:require("./constants").pxPmm};e=Object.assign({},n,e);const{version:s,pxPmm:r,addMetaData:o,filename:a}=e;e&&e.statusCallback&&e.statusCallback({progress:0});const{x3dObj:i,x3dMaterials:c,x3dTextures:l}=parse(t,r);let b=o?`//\n// Produced by JSCAD IO Library : X3D Deserializer (${s})\n// date: ${new Date}\n// source: ${a}\n//\n`:"";if(!i)throw new Error("X3D parsing failed, no valid X3D data retrieved");return e&&e.statusCallback&&e.statusCallback({progress:50}),b+=codify(i,{x3dMaterials:c,x3dTextures:l}),e&&e.statusCallback&&e.statusCallback({progress:100}),b},codify=(e,t)=>{if(e.definition!==x3dTypes.X3D||!e.objects)throw new Error("X3D malformed");if(e.objects.length<1||e.objects[0].definition!==x3dTypes.SCENE)throw new Error("X3D did not define a SCENE");const n=e.objects[0].objects,s=e.length,r=e.angle;let o="";o=`// Objects : ${n.length}\n// Units : ${s.name} (${s.factor})\n// Angles : ${r.name} (${r.factor})\n\nconst {booleans, extrusions, geometries, maths, primitives, transforms, utils} = require('@jscad/modeling')\nconst { colorize } = require('@jscad/modeling').colors\n\nconst applyTransform = (matrix, ...objects) => {\n objects = utils.flatten(objects)\n if (objects.length === 0) return objects\n\n return objects.map((object) => {\n const color = object.color\n object = transforms.transform(matrix, object)\n if (color) object.color = color\n return object\n })\n}\n\nconst main = () => {\n let options = {}\n let objects = []\n`;for(let e=0;e{let n=`\n// transform\nconst createObjects${e.id} = (options) => {\n let objects = []\n`;const r=e.objects;for(let t=0;t{let n=`\n// group\nconst createObjects${e.id} = (options) => {\n let objects = []\n`;const r=e.objects;for(let t=0;t{if(translatedList.includes(e.id))return"";translatedList.push(e.id);let n="";switch(e.definition){case x3dTypes.TRANSFORM:n+=translateTransform(t,e);break;case x3dTypes.SHAPE:n+=translateShape(t,e);break;case x3dTypes.GROUP:n+=translateGroup(t,e);break;default:console.log("WARNING: unknown definition: "+e.definition)}return n},translateDefinitions=(t,e)=>e.reduce((e,n,r)=>e+=translateDefinition(t,n),"");module.exports=translateDefinitions; -},{"./createTransform":107,"./objects":115,"./translateShape":122}],119:[function(require,module,exports){ +},{"./createTransform":108,"./objects":116,"./translateShape":123}],120:[function(require,module,exports){ const{x3dTypes:x3dTypes}=require("./objects"),findNode=(r,o)=>o.find(o=>o.definition===r),findColor=(r,o)=>{const e=findNode(x3dTypes.APPEARANCE,r);let n;return e&&(n=findNode(x3dTypes.MATERIAL,e.objects))?n.color?n.color:null:(n=findNode(x3dTypes.MATERIAL,r))&&n.color?n.color:null},pointToString=r=>`[${r}]`,pointsToString=r=>{return`[\n ${r.map(r=>pointToString(r)).join(",\n ")}\n ]`},createColorsFromVertexColors=(r,o)=>{if(!Array.isArray(r)||!Array.isArray(o))return null;if(r.length<0||!Array.isArray(r[0]))return console.log("ERROR: WRONG FORMAT FOR VERTEXCOLORS"),null;const e=[];for(let n=0;n{if(!Array.isArray(r)||!Array.isArray(o))return null;return r.map(r=>o[r]?o[r]:null)},createColors=(r,o)=>{if(!o)return null;if(!Array.isArray(r.colorIndex))return null;let e=null;return e=!0===r.colorPerVertex?createColorsFromVertexColors(r.colorIndex,o.colors):createColorsFromFaceColors(r.colorIndex,o.colors)};module.exports={findNode:findNode,findColor:findColor,createColors:createColors,pointToString:pointToString,pointsToString:pointsToString}; -},{"./objects":115}],120:[function(require,module,exports){ +},{"./objects":116}],121:[function(require,module,exports){ const{pointsToString:pointsToString}=require("./translateHelpers"),{convertLine:convertLine}=require("./instantiateLine"),translateLine=(n,e)=>{const i=convertLine(n,e);if(i){const{pointsSet:n,colors:e}=i;let t=" let lines = []\n";return n.forEach((n,i)=>{if(e){const s=e[i];t+=` const line${i} = colorize([${s}], primitives.line(${pointsToString(n)}))\n lines.push(line${i})\n`}else t+=` const line${i} = primitives.line(${pointsToString(n)})\n lines.push(line${i})\n`}),{primitive:"...lines",code:t}}return null};module.exports=translateLine; -},{"./instantiateLine":112,"./translateHelpers":119}],121:[function(require,module,exports){ +},{"./instantiateLine":113,"./translateHelpers":120}],122:[function(require,module,exports){ const{pointsToString:pointsToString}=require("./translateHelpers"),{convertMesh:convertMesh}=require("./instantiateMesh"),translateToPolyhedron=(n,t,o,e,s)=>{const r=Array.isArray(e)?pointsToString(e):"null";return{primitive:"primitives.polyhedron({points, faces, colors, orientation})",code:`\n // 3D ${n} set: ${t.length} points, ${o.length} faces\n const points = ${pointsToString(t)}\n const faces = ${pointsToString(o)}\n const colors = ${r}\n const orientation = '${s}'\n`}},translateMesh=(n,t)=>{const o=convertMesh(n,t);if(o){const{type:n,points:t,faces:e,colors:s,orientation:r}=o;return translateToPolyhedron(n,t,e,s,r)}return null};module.exports=translateMesh; -},{"./instantiateMesh":113,"./translateHelpers":119}],122:[function(require,module,exports){ +},{"./instantiateMesh":114,"./translateHelpers":120}],123:[function(require,module,exports){ const{geometries:geometries}=require("@jscad/modeling"),{geom3:geom3,poly3:poly3}=geometries,extrudeX3D=require("./extrudeX3D"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,findColor:findColor,pointsToString:pointsToString}=require("./translateHelpers"),translateLine=require("./translateLine"),translateMesh=require("./translateMesh"),translateShape=(e,i)=>{let s=`\n// shape\nconst createObjects${i.id} = (options) => {\n let objects = []\n`;const t=i.objects,n=findColor(t,e);let r,o=findNode(x3dTypes.BOX,t);if(o)r=`primitives.cuboid({size: [${o.size}]})`;else if(o=findNode(x3dTypes.CONE,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinderElliptic({startRadius: [${o.bottomRadius},${o.bottomRadius}], height: ${o.height}, segments: ${o.subdivision}, endRadius: [${o.topRadius}, ${o.topRadius}]}))\n`,r="shape";else if(o=findNode(x3dTypes.CYLINDER,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinder({radius: ${o.radius}, height: ${o.height}, segments: ${o.subdivision}}))\n`,r="shape";else if(o=findNode(x3dTypes.SPHERE,t))r=`primitives.sphere({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.EXTRUSION,t)){const e=extrudeX3D(o);s+=` const polygons = [\n ${geom3.toPolygons(e).map(e=>pointsToString(poly3.toPoints(e))).join(",\n ")}\n]\n`,r="geometries.geom3.fromPoints(polygons)"}if(!r)if(o=findNode(x3dTypes.ARC2D,t))r=`primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.ARCCLOSE2D,t))r="PIE"===o.closureType?`primitives.circle({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`:`geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}}))))`;else if(o=findNode(x3dTypes.CIRCLE2D,t))r=`primitives.arc({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.DISK2D,t))r=o.innerRadius===o.outerRadius?`primitives.arc({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:0===o.innerRadius?`primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:`booleans.subtract(primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}}), primitives.circle({radius: ${o.innerRadius}, segments: ${o.subdivision}}))`;else if(o=findNode(x3dTypes.POLYLINE2D,t)){r=`primitives.line([[${o.lineSegments.join("], [")}]])`}else if(o=findNode(x3dTypes.RECTANGLE2D,t))r=`primitives.rectangle({size: [${o.size}]})`;else if(o=findNode(x3dTypes.TRIANGLESET2D,t)){const e=o.vertices.length,i=Math.trunc(e/3);s+=`\n // 2D triangle set: ${e} points, ${i} faces\n const vertices = ${pointsToString(o.vertices)}\n const triangles = []\n for (let i = 0; i < ${i}; i = i + 3) {\n triangles.push(geometries.geom2.fromPoints([vertices[i], vertices[i + 1], vertices[i + 2]]))\n }\n`,r="triangles"}let d=translateMesh(e,t);return d&&(r=d.primitive,s+=d.code),(d=translateLine(e,t))&&(r=d.primitive,s+=d.code),r&&(s+=n?` objects.push(colorize([${n}], ${r}))`:` objects.push(${r})`),s+="\n return objects\n}\n"};module.exports=translateShape; -},{"./extrudeX3D":108,"./objects":115,"./translateHelpers":119,"./translateLine":120,"./translateMesh":121,"@jscad/modeling":216}],123:[function(require,module,exports){ +},{"./extrudeX3D":109,"./objects":116,"./translateHelpers":120,"./translateLine":121,"./translateMesh":122,"@jscad/modeling":217}],124:[function(require,module,exports){ "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; -},{}],124:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom2:geom2,geom3:geom3,path2:path2,poly2:poly2,poly3:poly3}=geometries,{flatten:flatten}=require("@jscad/array-utils"),stringify=require("onml/lib/stringify"),mimeType="model/x3d+xml",defNames=new Map,serialize=(e,...o)=>{if(e=Object.assign({},{color:[0,0,1,1],shininess:8/256,smooth:!1,decimals:1e3,metadata:!0,unit:"millimeter",statusCallback:null},e),0===(o=(o=flatten(o)).filter(e=>geom3.isA(e)||geom2.isA(e)||path2.isA(e))).length)throw new Error("expected one or more geom3/geom2/path2 objects");e.statusCallback&&e.statusCallback({progress:0});let t=["X3D",{profile:"Interchange",version:"3.3","xmlns:xsd":"http://www.w3.org/2001/XMLSchema-instance","xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-3.3.xsd"}];e.metadata?t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}],["meta",{name:"reference",content:"https://www.openjscad.xyz"}],["meta",{name:"created",content:(new Date).toISOString()}]]):t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}]]),t=t.concat(convertObjects(o,e));const r=`\n${stringify(t,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[r]},convertObjects=(e,o)=>{const t=[];return e.forEach((r,s)=>{if(o.statusCallback&&o.statusCallback({progress:100*s/e.length}),geom3.isA(r)){r=modifiers.generalize({snap:!0,triangulate:!0},r),geom3.toPolygons(r).length>0&&t.push(convertGeom3(r,o))}geom2.isA(r)&&t.push(convertGeom2(r,o)),path2.isA(r)&&t.push(convertPath2(r,o))}),[["Scene",{},["Transform",{rotation:"1 0 0 -1.5708"},...t]]]},convertPath2=(e,o)=>{const t=path2.toPoints(e).slice();t.length>1&&e.isClosed&&t.push(t[0]);const r=["Shape",shapeAttributes(e),convertPolyline2D(poly2.create(t),o)];return e.color&&r.push(convertAppearance(e,"emissiveColor",o)),r},convertGeom2=(e,o)=>{const t=geom2.toOutlines(e),r=["Group",{}];return t.forEach(t=>{t.length>1&&t.push(t[0]);const s=["Shape",shapeAttributes(e),convertPolyline2D(poly2.create(t),o)];e.color&&s.push(convertAppearance(e,"emissiveColor",o)),r.push(s)}),r},shapeAttributes=(e,o={})=>(e.id&&Object.assign(o,{DEF:checkDefName(e.id)}),o),checkDefName=e=>{const o=defNames.get(e)||0;return defNames.set(e,o+1),o>0&&console.warn(`Warning: object.id set as DEF but not unique. ${e} set ${o+1} times.`),e},convertPolyline2D=(e,o)=>{return["Polyline2D",{lineSegments:e.vertices.map(e=>`${e[0]} ${e[1]}`).join(" ")}]},convertAppearance=(e,o,t)=>{const r={[o]:e.color.slice(0,3).join(" "),transparency:roundToDecimals(1-e.color[3],t)};return"diffuseColor"===o&&Object.assign(r,{specularColor:"0.2 0.2 0.2",shininess:t.shininess}),["Appearance",["Material",r]]},convertGeom3=(e,o)=>{const t=["Shape",shapeAttributes(e),convertMesh(e,o)];let r=["Appearance",{},["Material"]];return e.color&&(r=convertAppearance(e,"diffuseColor",o)),t.push(r),t},convertMesh=(e,o)=>{const t=convertToTriangles(e,o),r=polygons2coordinates(t,o),s=r[0].join(" "),n=r[1].join(" "),a=r[2].join(" "),c=["IndexedTriangleSet",{ccw:"true",colorPerVertex:"false",normalPerVertex:o.smooth,solid:"false",index:s},["Coordinate",{point:n}]];return e.color||c.push(["Color",{color:a}]),c},convertToTriangles=(e,o)=>{const t=[];return geom3.toPolygons(e).forEach(r=>{const s=r.vertices[0];for(let n=r.vertices.length-3;n>=0;n--){const a=poly3.fromPoints([s,r.vertices[n+1],r.vertices[n+2]]);let c=o.color;e.color&&(c=e.color),r.color&&(c=r.color),a.color=c,t.push(a)}}),t},convertToColor=(e,o)=>{let t=o.color;return e.color&&(t=e.color),`${t[0]} ${t[1]} ${t[2]}`},roundToDecimals=(e,o)=>Math.round(e*o.decimals)/o.decimals,polygons2coordinates=(e,o)=>{const t=[],r=[],s=[],n=new Map;return e.forEach(e=>{const a=[],c=e.vertices.length;for(let t=0;tcssColors[o.toLowerCase()];module.exports=colorNameToRgb; -},{"./cssColors":127}],126:[function(require,module,exports){ +},{"./cssColors":128}],127:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),colorGeom2=(o,r)=>{const e=geom2.clone(r);return e.color=o,e},colorGeom3=(o,r)=>{const e=geom3.clone(r);return e.color=o,e},colorPath2=(o,r)=>{const e=path2.clone(r);return e.color=o,e},colorPoly3=(o,r)=>{const e=poly3.clone(r);return e.color=o,e},colorize=(o,...r)=>{if(!Array.isArray(o))throw new Error("color must be an array");if(o.length<3)throw new Error("color must contain R, G and B values");if(3===o.length&&(o=[o[0],o[1],o[2],1]),0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const e=r.map(r=>geom2.isA(r)?colorGeom2(o,r):geom3.isA(r)?colorGeom3(o,r):path2.isA(r)?colorPath2(o,r):poly3.isA(r)?colorPoly3(o,r):(r.color=o,r));return 1===e.length?e[0]:e};module.exports=colorize; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186,"../geometries/poly3":203,"../utils/flatten":522}],127:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187,"../geometries/poly3":204,"../utils/flatten":523}],128:[function(require,module,exports){ const cssColors={black:[0,0,0],silver:[192/255,192/255,192/255],gray:[128/255,128/255,128/255],white:[1,1,1],maroon:[128/255,0,0],red:[1,0,0],purple:[128/255,0,128/255],fuchsia:[1,0,1],green:[0,128/255,0],lime:[0,1,0],olive:[128/255,128/255,0],yellow:[1,1,0],navy:[0,0,128/255],blue:[0,0,1],teal:[0,128/255,128/255],aqua:[0,1,1],aliceblue:[240/255,248/255,1],antiquewhite:[250/255,235/255,215/255],aquamarine:[127/255,1,212/255],azure:[240/255,1,1],beige:[245/255,245/255,220/255],bisque:[1,228/255,196/255],blanchedalmond:[1,235/255,205/255],blueviolet:[138/255,43/255,226/255],brown:[165/255,42/255,42/255],burlywood:[222/255,184/255,135/255],cadetblue:[95/255,158/255,160/255],chartreuse:[127/255,1,0],chocolate:[210/255,105/255,30/255],coral:[1,127/255,80/255],cornflowerblue:[100/255,149/255,237/255],cornsilk:[1,248/255,220/255],crimson:[220/255,20/255,60/255],cyan:[0,1,1],darkblue:[0,0,139/255],darkcyan:[0,139/255,139/255],darkgoldenrod:[184/255,134/255,11/255],darkgray:[169/255,169/255,169/255],darkgreen:[0,100/255,0],darkgrey:[169/255,169/255,169/255],darkkhaki:[189/255,183/255,107/255],darkmagenta:[139/255,0,139/255],darkolivegreen:[85/255,107/255,47/255],darkorange:[1,140/255,0],darkorchid:[.6,50/255,.8],darkred:[139/255,0,0],darksalmon:[233/255,150/255,122/255],darkseagreen:[143/255,188/255,143/255],darkslateblue:[72/255,61/255,139/255],darkslategray:[47/255,79/255,79/255],darkslategrey:[47/255,79/255,79/255],darkturquoise:[0,206/255,209/255],darkviolet:[148/255,0,211/255],deeppink:[1,20/255,147/255],deepskyblue:[0,191/255,1],dimgray:[105/255,105/255,105/255],dimgrey:[105/255,105/255,105/255],dodgerblue:[30/255,144/255,1],firebrick:[178/255,34/255,34/255],floralwhite:[1,250/255,240/255],forestgreen:[34/255,139/255,34/255],gainsboro:[220/255,220/255,220/255],ghostwhite:[248/255,248/255,1],gold:[1,215/255,0],goldenrod:[218/255,165/255,32/255],greenyellow:[173/255,1,47/255],grey:[128/255,128/255,128/255],honeydew:[240/255,1,240/255],hotpink:[1,105/255,180/255],indianred:[205/255,92/255,92/255],indigo:[75/255,0,130/255],ivory:[1,1,240/255],khaki:[240/255,230/255,140/255],lavender:[230/255,230/255,250/255],lavenderblush:[1,240/255,245/255],lawngreen:[124/255,252/255,0],lemonchiffon:[1,250/255,205/255],lightblue:[173/255,216/255,230/255],lightcoral:[240/255,128/255,128/255],lightcyan:[224/255,1,1],lightgoldenrodyellow:[250/255,250/255,210/255],lightgray:[211/255,211/255,211/255],lightgreen:[144/255,238/255,144/255],lightgrey:[211/255,211/255,211/255],lightpink:[1,182/255,193/255],lightsalmon:[1,160/255,122/255],lightseagreen:[32/255,178/255,170/255],lightskyblue:[135/255,206/255,250/255],lightslategray:[119/255,136/255,.6],lightslategrey:[119/255,136/255,.6],lightsteelblue:[176/255,196/255,222/255],lightyellow:[1,1,224/255],limegreen:[50/255,205/255,50/255],linen:[250/255,240/255,230/255],magenta:[1,0,1],mediumaquamarine:[.4,205/255,170/255],mediumblue:[0,0,205/255],mediumorchid:[186/255,85/255,211/255],mediumpurple:[147/255,112/255,219/255],mediumseagreen:[60/255,179/255,113/255],mediumslateblue:[123/255,104/255,238/255],mediumspringgreen:[0,250/255,154/255],mediumturquoise:[72/255,209/255,.8],mediumvioletred:[199/255,21/255,133/255],midnightblue:[25/255,25/255,112/255],mintcream:[245/255,1,250/255],mistyrose:[1,228/255,225/255],moccasin:[1,228/255,181/255],navajowhite:[1,222/255,173/255],oldlace:[253/255,245/255,230/255],olivedrab:[107/255,142/255,35/255],orange:[1,165/255,0],orangered:[1,69/255,0],orchid:[218/255,112/255,214/255],palegoldenrod:[238/255,232/255,170/255],palegreen:[152/255,251/255,152/255],paleturquoise:[175/255,238/255,238/255],palevioletred:[219/255,112/255,147/255],papayawhip:[1,239/255,213/255],peachpuff:[1,218/255,185/255],peru:[205/255,133/255,63/255],pink:[1,192/255,203/255],plum:[221/255,160/255,221/255],powderblue:[176/255,224/255,230/255],rosybrown:[188/255,143/255,143/255],royalblue:[65/255,105/255,225/255],saddlebrown:[139/255,69/255,19/255],salmon:[250/255,128/255,114/255],sandybrown:[244/255,164/255,96/255],seagreen:[46/255,139/255,87/255],seashell:[1,245/255,238/255],sienna:[160/255,82/255,45/255],skyblue:[135/255,206/255,235/255],slateblue:[106/255,90/255,205/255],slategray:[112/255,128/255,144/255],slategrey:[112/255,128/255,144/255],snow:[1,250/255,250/255],springgreen:[0,1,127/255],steelblue:[70/255,130/255,180/255],tan:[210/255,180/255,140/255],thistle:[216/255,191/255,216/255],tomato:[1,99/255,71/255],turquoise:[64/255,224/255,208/255],violet:[238/255,130/255,238/255],wheat:[245/255,222/255,179/255],whitesmoke:[245/255,245/255,245/255],yellowgreen:[154/255,205/255,50/255]};module.exports=cssColors; -},{}],128:[function(require,module,exports){ +},{}],129:[function(require,module,exports){ const hexToRgb=t=>{if((t=t.replace("#","")).length<6)throw new Error("the given notation must contain 3 or more hex values");const e=parseInt(t.substring(0,2),16)/255,n=parseInt(t.substring(2,4),16)/255,r=parseInt(t.substring(4,6),16)/255;if(t.length>=8){return[e,n,r,parseInt(t.substring(6,8),16)/255]}return[e,n,r]};module.exports=hexToRgb; -},{}],129:[function(require,module,exports){ +},{}],130:[function(require,module,exports){ const flatten=require("../utils/flatten"),hueToColorComponent=require("./hueToColorComponent"),hslToRgb=(...o)=>{if((o=flatten(o)).length<3)throw new Error("values must contain H, S and L values");const e=o[0],n=o[1],t=o[2];let r=t,l=t,u=t;if(0!==n){const o=t<.5?t*(1+n):t+n-t*n,h=2*t-o;r=hueToColorComponent(h,o,e+1/3),l=hueToColorComponent(h,o,e),u=hueToColorComponent(h,o,e-1/3)}if(o.length>3){return[r,l,u,o[3]]}return[r,l,u]};module.exports=hslToRgb; -},{"../utils/flatten":522,"./hueToColorComponent":131}],130:[function(require,module,exports){ +},{"../utils/flatten":523,"./hueToColorComponent":132}],131:[function(require,module,exports){ const flatten=require("../utils/flatten"),hsvToRgb=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain H, S and V values");const t=e[0],a=e[1],r=e[2];let s=0,n=0,o=0;const c=Math.floor(6*t),l=6*t-c,u=r*(1-a),b=r*(1-l*a),h=r*(1-(1-l)*a);switch(c%6){case 0:s=r,n=h,o=u;break;case 1:s=b,n=r,o=u;break;case 2:s=u,n=r,o=h;break;case 3:s=u,n=b,o=r;break;case 4:s=h,n=u,o=r;break;case 5:s=r,n=u,o=b}if(e.length>3){return[s,n,o,e[3]]}return[s,n,o]};module.exports=hsvToRgb; -},{"../utils/flatten":522}],131:[function(require,module,exports){ +},{"../utils/flatten":523}],132:[function(require,module,exports){ const hueToColorComponent=(o,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?o+6*(e-o)*n:n<.5?e:n<2/3?o+(e-o)*(2/3-n)*6:o);module.exports=hueToColorComponent; -},{}],132:[function(require,module,exports){ +},{}],133:[function(require,module,exports){ module.exports={colorize:require("./colorize"),colorNameToRgb:require("./colorNameToRgb"),cssColors:require("./cssColors"),hexToRgb:require("./hexToRgb"),hslToRgb:require("./hslToRgb"),hsvToRgb:require("./hsvToRgb"),hueToColorComponent:require("./hueToColorComponent"),rgbToHex:require("./rgbToHex"),rgbToHsl:require("./rgbToHsl"),rgbToHsv:require("./rgbToHsv")}; -},{"./colorNameToRgb":125,"./colorize":126,"./cssColors":127,"./hexToRgb":128,"./hslToRgb":129,"./hsvToRgb":130,"./hueToColorComponent":131,"./rgbToHex":133,"./rgbToHsl":134,"./rgbToHsv":135}],133:[function(require,module,exports){ +},{"./colorNameToRgb":126,"./colorize":127,"./cssColors":128,"./hexToRgb":129,"./hslToRgb":130,"./hsvToRgb":131,"./hueToColorComponent":132,"./rgbToHex":134,"./rgbToHsl":135,"./rgbToHsv":136}],134:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHex=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=255*t[0],r=255*t[1],n=255*t[2];let o=`#${Number(16777216+65536*e+256*r+n).toString(16).substring(1,7)}`;return t.length>3&&(o+=Number(255*t[3]).toString(16)),o};module.exports=rgbToHex; -},{"../utils/flatten":522}],134:[function(require,module,exports){ +},{"../utils/flatten":523}],135:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHsl=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=t[0],n=t[1],s=t[2],a=Math.max(e,n,s),r=Math.min(e,n,s);let l,o;const c=(a+r)/2;if(a===r)l=o=0;else{const t=a-r;switch(o=c>.5?t/(2-a-r):t/(a+r),a){case e:l=(n-s)/t+(n3){return[l,o,c,t[3]]}return[l,o,c]};module.exports=rgbToHsl; -},{"../utils/flatten":522}],135:[function(require,module,exports){ +},{"../utils/flatten":523}],136:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHsv=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain R, G and B values");const t=e[0],a=e[1],n=e[2],r=Math.max(t,a,n),s=Math.min(t,a,n);let l;const o=r,c=r-s,i=0===r?0:c/r;if(r===s)l=0;else{switch(r){case t:l=(a-n)/c+(a3){return[l,i,o,e[3]]}return[l,i,o]};module.exports=rgbToHsv; -},{"../utils/flatten":522}],136:[function(require,module,exports){ +},{"../utils/flatten":523}],137:[function(require,module,exports){ const lengths=require("./lengths"),arcLengthToT=(e,t)=>{const{distance:s,segments:n}=Object.assign({},{distance:0,segments:100},e),o=lengths(n,t);let r=0,c=n;for(;r<=c;){const e=Math.floor(r+(c-r)/2),t=o[e]-s;if(t<0)r=e+1;else{if(!(t>0)){c=e;break}c=e-1}}const g=c;if(o[g]===s)return g/n;const a=o[g];return(g+(s-a)/(o[g+1]-a))/n};module.exports=arcLengthToT; -},{"./lengths":140}],137:[function(require,module,exports){ +},{"./lengths":141}],138:[function(require,module,exports){ const create=e=>{if(!Array.isArray(e))throw new Error("Bezier points must be a valid array/");if(e.length<2)throw new Error("Bezier points must contain at least 2 values.");const r=getPointType(e);return{points:e,pointType:r,dimensions:"float_single"===r?0:e[0].length,permutations:getPermutations(e.length-1),tangentPermutations:getPermutations(e.length-2)}},getPointType=function(e){let r=null;return e.forEach(e=>{let t="";if(Number.isFinite(e))t="float_single";else{if(!Array.isArray(e))throw new Error("Bezier points must all be numbers or arrays of number.");e.forEach(e=>{if(!Number.isFinite(e))throw new Error("Bezier point values must all be numbers.")}),t="float_"+e.length}if(null==r)r=t;else if(r!==t)throw new Error("Bezier points must be either all numbers or all arrays of numbers of the same size.")}),r},getPermutations=function(e){const r=[];for(let t=0;t<=e;t++)r.push(factorial(e)/(factorial(t)*factorial(e-t)));return r},factorial=function(e){let r=1;for(let t=2;t<=e;t++)r*=t;return r};module.exports=create; -},{}],138:[function(require,module,exports){ +},{}],139:[function(require,module,exports){ module.exports={create:require("./create"),valueAt:require("./valueAt"),tangentAt:require("./tangentAt"),lengths:require("./lengths"),length:require("./length"),arcLengthToT:require("./arcLengthToT")}; -},{"./arcLengthToT":136,"./create":137,"./length":139,"./lengths":140,"./tangentAt":141,"./valueAt":142}],139:[function(require,module,exports){ +},{"./arcLengthToT":137,"./create":138,"./length":140,"./lengths":141,"./tangentAt":142,"./valueAt":143}],140:[function(require,module,exports){ const lengths=require("./lengths"),length=(e,t)=>lengths(e,t)[e];module.exports=length; -},{"./lengths":140}],140:[function(require,module,exports){ +},{"./lengths":141}],141:[function(require,module,exports){ const valueAt=require("./valueAt"),lengths=(e,r)=>{let t=0;const n=[0];let s=valueAt(0,r);for(let a=1;a<=e;a++){const i=valueAt(a/e,r);t+=distanceBetween(i,s),n.push(t),s=i}return n},distanceBetween=(e,r)=>{if(Number.isFinite(e)&&Number.isFinite(r))return Math.abs(e-r);if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)throw new Error("The operands must have the same number of dimensions.");let t=0;for(let n=0;n{if(t<0||t>1)throw new Error("Bezier tangentAt() input must be between 0 and 1");if("float_single"===n.pointType)return bezierTangent(n,n.points,t);{const e=[];for(let o=0;o{if(t<0||t>1)throw new Error("Bezier valueAt() input must be between 0 and 1");if("float_single"===e.pointType)return bezierFunction(e,e.points,t);{const n=[];for(let o=0;omat4.isIdentity(r.transforms)?r:(r.sides=r.sides.map(s=>{return[vec2.transform(vec2.create(),s[0],r.transforms),vec2.transform(vec2.create(),s[1],r.transforms)]}),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":267,"../../maths/vec2":315}],145:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec2":316}],146:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],146:[function(require,module,exports){ +},{}],147:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{sides:e,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":267}],147:[function(require,module,exports){ +},{"../../maths/mat4":268}],148:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=e=>{if(0!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));for(let t=21;t=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary; -},{"../../maths/mat4":267,"../../maths/vec2":315,"./create":146}],148:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec2":316,"./create":147}],149:[function(require,module,exports){ const vec2=require("../../maths/vec2"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");let r=e.length;if(r<3)throw new Error("the given points must define a closed geometry with three or more points");vec2.equals(e[0],e[r-1])&&--r;const t=[];let o=e[r-1];for(let n=0;n!!(s&&"object"==typeof s&&"sides"in s&&"transforms"in s&&Array.isArray(s.sides)&&"length"in s.transforms);module.exports=isA; -},{}],151:[function(require,module,exports){ +},{}],152:[function(require,module,exports){ const create=require("./create"),toSides=require("./toSides"),reverse=e=>{const r=toSides(e).map(e=>[e[1],e[0]]);return r.reverse(),create(r)};module.exports=reverse; -},{"./create":146,"./toSides":155}],152:[function(require,module,exports){ +},{"./create":147,"./toSides":156}],153:[function(require,module,exports){ const toCompactBinary=o=>{const t=o.sides,r=o.transforms;let n=[-1,-1,-1,-1];o.color&&(n=o.color);const e=new Float32Array(21+4*t.length);e[0]=0,e[1]=r[0],e[2]=r[1],e[3]=r[2],e[4]=r[3],e[5]=r[4],e[6]=r[5],e[7]=r[6],e[8]=r[7],e[9]=r[8],e[10]=r[9],e[11]=r[10],e[12]=r[11],e[13]=r[12],e[14]=r[13],e[15]=r[14],e[16]=r[15],e[17]=n[0],e[18]=n[1],e[19]=n[2],e[20]=n[3];for(let o=0;o{const t=new Map,r=e=>{const r=e.toString();return t.has(r)?t.get(r):(t.set(r,e),e)};return e.map(e=>e.map(r))},toVertexMap=e=>{const t=new Map;return toSharedVertices(e).forEach(e=>{t.has(e[0])?t.get(e[0]).push(e):t.set(e[0],[e])}),t},toOutlines=e=>{const t=toVertexMap(toSides(e)),r=[];for(;;){let e;for(const[r,o]of t){if(e=o.shift())break;t.delete(r)}if(void 0===e)break;const o=[],s=e[0];for(;;){o.push(e[0]);const r=e[1];if(r===s)break;const n=t.get(r);if(!n)throw new Error(`geometry is not closed at vertex ${r}`);const c=popNextSide(e,n);0===n.length&&t.delete(r),e=c}o.length>0&&o.push(o.shift()),r.push(o)}return t.clear(),r},popNextSide=(e,t)=>{if(1===t.length)return t.pop();const r=vec2.create(),o=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]));let s,n;t.forEach((e,t)=>{let c=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]))-o;c<-180&&(c+=360),c>=180&&(c-=360),(void 0===n||c>s)&&(n=t,s=c)});const c=t[n];return t.splice(n,1),c};module.exports=toOutlines; -},{"../../maths/vec2":315,"./toSides":155}],154:[function(require,module,exports){ +},{"../../maths/vec2":316,"./toSides":156}],155:[function(require,module,exports){ const toSides=require("./toSides"),toPoints=t=>{const o=toSides(t).map(t=>t[0]);return o.length>0&&o.push(o.shift()),o};module.exports=toPoints; -},{"./toSides":155}],155:[function(require,module,exports){ +},{"./toSides":156}],156:[function(require,module,exports){ const applyTransforms=require("./applyTransforms"),toSides=s=>applyTransforms(s).sides;module.exports=toSides; -},{"./applyTransforms":144}],156:[function(require,module,exports){ +},{"./applyTransforms":145}],157:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toSides=require("./toSides"),toString=e=>{const t=toSides(e);let o="geom2 ("+t.length+" sides):\n[\n";return t.forEach(e=>{o+=" ["+vec2.toString(e[0])+", "+vec2.toString(e[1])+"]\n"}),o+="]\n"};module.exports=toString; -},{"../../maths/vec2":315,"./toSides":155}],157:[function(require,module,exports){ +},{"../../maths/vec2":316,"./toSides":156}],158:[function(require,module,exports){ const mat4=require("../../maths/mat4"),reverse=require("./reverse.js"),transform=(r,e)=>{const s=mat4.multiply(mat4.create(),r,e.transforms),t=Object.assign({},e,{transforms:s});return r[0]*r[5]-r[4]*r[1]<0?reverse(t):t};module.exports=transform; -},{"../../maths/mat4":267,"./reverse.js":151}],158:[function(require,module,exports){ +},{"../../maths/mat4":268,"./reverse.js":152}],159:[function(require,module,exports){ const vec2=require("../../maths/vec2"),isA=require("./isA"),toOutlines=require("./toOutlines"),validate=e=>{if(!isA(e))throw new Error("invalid geom2 structure");if(toOutlines(e),e.sides.forEach(e=>{if(vec2.equals(e[0],e[1]))throw new Error(`geom2 self-edge ${e[0]}`)}),!e.transforms.every(Number.isFinite))throw new Error(`geom2 invalid transforms ${e.transforms}`)};module.exports=validate; -},{"../../maths/vec2":315,"./isA":150,"./toOutlines":153}],159:[function(require,module,exports){ +},{"../../maths/vec2":316,"./isA":151,"./toOutlines":154}],160:[function(require,module,exports){ const mat4=require("../../maths/mat4"),poly3=require("../poly3"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.polygons=r.polygons.map(s=>poly3.transform(r.transforms,s)),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":267,"../poly3":203}],160:[function(require,module,exports){ +},{"../../maths/mat4":268,"../poly3":204}],161:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],161:[function(require,module,exports){ +},{}],162:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{polygons:e,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":267}],162:[function(require,module,exports){ +},{"../../maths/mat4":268}],163:[function(require,module,exports){ const vec3=require("../../maths/vec3"),mat4=require("../../maths/mat4"),poly3=require("../poly3"),create=require("./create"),fromCompactBinary=e=>{if(1!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));const o=e[21];let t=22,a=e.length-3*o;for(;a=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary; -},{"../../maths/mat4":267,"../../maths/vec3":346,"../poly3":203,"./create":161}],163:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec3":347,"../poly3":204,"./create":162}],164:[function(require,module,exports){ const poly3=require("../poly3"),create=require("./create"),fromPoints=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=r.map((r,e)=>{return poly3.create(r)});return create(e)};module.exports=fromPoints; -},{"../poly3":203,"./create":161}],164:[function(require,module,exports){ +},{"../poly3":204,"./create":162}],165:[function(require,module,exports){ const quickhull=require("../../operations/hulls/quickhull"),create=require("./create"),poly3=require("../poly3"),fromPointsConvex=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=quickhull(r,{skipTriangulation:!0}).map(e=>{const o=e.map(e=>r[e]);return poly3.create(o)});return create(e)};module.exports=fromPointsConvex; -},{"../../operations/hulls/quickhull":472,"../poly3":203,"./create":161}],165:[function(require,module,exports){ +},{"../../operations/hulls/quickhull":473,"../poly3":204,"./create":162}],166:[function(require,module,exports){ module.exports={clone:require("./clone"),create:require("./create"),fromPointsConvex:require("./fromPointsConvex"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),invert:require("./invert"),isA:require("./isA"),toPoints:require("./toPoints"),toPolygons:require("./toPolygons"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")}; -},{"./clone":160,"./create":161,"./fromCompactBinary":162,"./fromPoints":163,"./fromPointsConvex":164,"./invert":166,"./isA":167,"./toCompactBinary":168,"./toPoints":169,"./toPolygons":170,"./toString":171,"./transform":172,"./validate":173}],166:[function(require,module,exports){ +},{"./clone":161,"./create":162,"./fromCompactBinary":163,"./fromPoints":164,"./fromPointsConvex":165,"./invert":167,"./isA":168,"./toCompactBinary":169,"./toPoints":170,"./toPolygons":171,"./toString":172,"./transform":173,"./validate":174}],167:[function(require,module,exports){ const poly3=require("../poly3"),create=require("./create"),toPolygons=require("./toPolygons"),invert=e=>{const o=toPolygons(e).map(e=>poly3.invert(e));return create(o)};module.exports=invert; -},{"../poly3":203,"./create":161,"./toPolygons":170}],167:[function(require,module,exports){ +},{"../poly3":204,"./create":162,"./toPolygons":171}],168:[function(require,module,exports){ const isA=o=>!!(o&&"object"==typeof o&&"polygons"in o&&"transforms"in o&&Array.isArray(o.polygons)&&"length"in o.transforms);module.exports=isA; -},{}],168:[function(require,module,exports){ +},{}],169:[function(require,module,exports){ const poly3=require("../poly3"),toCompactBinary=o=>{const t=o.polygons,e=o.transforms,r=t.length,n=t.reduce((o,t)=>o+t.vertices.length,0);let l=[-1,-1,-1,-1];o.color&&(l=o.color);const c=new Float32Array(22+r+3*n);c[0]=1,c[1]=e[0],c[2]=e[1],c[3]=e[2],c[4]=e[3],c[5]=e[4],c[6]=e[5],c[7]=e[6],c[8]=e[7],c[9]=e[8],c[10]=e[9],c[11]=e[10],c[12]=e[11],c[13]=e[12],c[14]=e[13],c[15]=e[14],c[16]=e[15],c[17]=l[0],c[18]=l[1],c[19]=l[2],c[20]=l[3],c[21]=n;let s=22,a=s+r;return t.forEach(o=>{const t=poly3.toPoints(o);c[s]=t.length,s++;for(let o=0;o{return toPolygons(o).map(o=>poly3.toPoints(o))};module.exports=toPoints; -},{"../poly3":203,"./toPolygons":170}],170:[function(require,module,exports){ +},{"../poly3":204,"./toPolygons":171}],171:[function(require,module,exports){ const applyTransforms=require("./applyTransforms"),toPolygons=o=>applyTransforms(o).polygons;module.exports=toPolygons; -},{"./applyTransforms":159}],171:[function(require,module,exports){ +},{"./applyTransforms":160}],172:[function(require,module,exports){ const poly3=require("../poly3"),toPolygons=require("./toPolygons"),toString=o=>{const t=toPolygons(o);let n="geom3 ("+t.length+" polygons):\n";return t.forEach(o=>{n+=" "+poly3.toString(o)+"\n"}),n};module.exports=toString; -},{"../poly3":203,"./toPolygons":170}],172:[function(require,module,exports){ +},{"../poly3":204,"./toPolygons":171}],173:[function(require,module,exports){ const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform; -},{"../../maths/mat4":267}],173:[function(require,module,exports){ +},{"../../maths/mat4":268}],174:[function(require,module,exports){ const poly3=require("../poly3"),isA=require("./isA"),validate=e=>{if(!isA(e))throw new Error("invalid geom3 structure");if(e.polygons.forEach(poly3.validate),validateManifold(e),!e.transforms.every(Number.isFinite))throw new Error(`geom3 invalid transforms ${e.transforms}`)},validateManifold=e=>{const o=new Map;e.polygons.forEach(({vertices:e})=>{e.forEach((r,n)=>{const t=`${`${r}`}/${`${e[(n+1)%e.length]}`}`,i=o.has(t)?o.get(t):0;o.set(t,i+1)})});const r=[];if(o.forEach((e,n)=>{const t=n.split("/").reverse().join("/");e!==o.get(t)&&r.push(n.replace("/"," -> "))}),r.length>0)throw new Error(`non-manifold edges ${r.length}\n${r.join("\n")}`)};module.exports=validate; -},{"../poly3":203,"./isA":167}],174:[function(require,module,exports){ +},{"../poly3":204,"./isA":168}],175:[function(require,module,exports){ module.exports={geom2:require("./geom2"),geom3:require("./geom3"),path2:require("./path2"),poly2:require("./poly2"),poly3:require("./poly3")}; -},{"./geom2":149,"./geom3":165,"./path2":186,"./poly2":197,"./poly3":203}],175:[function(require,module,exports){ +},{"./geom2":150,"./geom3":166,"./path2":187,"./poly2":198,"./poly3":204}],176:[function(require,module,exports){ const{TAU:TAU}=require("../../maths/constants"),vec2=require("../../maths/vec2"),fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),appendArc=(e,t)=>{let{endpoint:r,radius:a,xaxisrotation:o,clockwise:n,large:s,segments:c}=Object.assign({},{radius:[0,0],xaxisrotation:0,clockwise:!1,large:!1,segments:16},e);if(!Array.isArray(r))throw new Error("endpoint must be an array of X and Y values");if(r.length<2)throw new Error("endpoint must contain X and Y values");if(r=vec2.clone(r),!Array.isArray(a))throw new Error("radius must be an array of X and Y values");if(a.length<2)throw new Error("radius must contain X and Y values");if(c<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given path cannot be closed");const i=toPoints(t);if(i.length<1)throw new Error("the given path must contain one or more points (as the starting point for the arc)");let h=a[0],u=a[1];const l=i[i.length-1];h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5,r=vec2.fromValues(Math.round(1e5*r[0])/1e5,Math.round(1e5*r[1])/1e5);const d=!n;let v=[];if(0===h||0===u)v.push(r);else{h=Math.abs(h),u=Math.abs(u);const t=o,a=Math.cos(t),n=Math.sin(t),i=vec2.subtract(vec2.create(),l,r);vec2.scale(i,i,.5);const f=Math.round(1e5*(a*i[0]+n*i[1]))/1e5,m=Math.round(1e5*(-n*i[0]+a*i[1]))/1e5,M=vec2.fromValues(f,m),p=M[0]*M[0]/(h*h)+M[1]*M[1]/(u*u);if(p>1){const e=Math.sqrt(p);h*=e,u*=e,h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5}let w=Math.sqrt((h*h*u*u-h*h*M[1]*M[1]-u*u*M[0]*M[0])/(h*h*M[1]*M[1]+u*u*M[0]*M[0]));d===s&&(w=-w);const g=vec2.fromValues(h*M[1]/u,-u*M[0]/h);vec2.scale(g,g,w);let A=vec2.fromValues(a*g[0]-n*g[1],n*g[0]+a*g[1]);A=vec2.add(A,A,vec2.scale(vec2.create(),vec2.add(vec2.create(),l,r),.5));const b=vec2.fromValues((M[0]-g[0])/h,(M[1]-g[1])/u),E=vec2.fromValues((-M[0]-g[0])/h,(-M[1]-g[1])/u),V=vec2.angleRadians(b);let q=vec2.angleRadians(E)-V;q%=TAU,!d&&q>0?q-=TAU:d&&q<0&&(q+=TAU);let y=Math.ceil(Math.abs(q)/TAU*c)+1;y<1&&(y=1);for(let e=1;e{let{controlPoints:o,segments:r}=Object.assign({},{segments:16},e);if(!Array.isArray(o))throw new Error("controlPoints must be an array of one or more points");if(o.length<1)throw new Error("controlPoints must be an array of one or more points");if(r<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given geometry cannot be closed");const n=toPoints(t);if(n.length<1)throw new Error("the given path must contain one or more points (as the starting point for the bezier curve)");if(null===(o=o.slice())[0]){if(o.length<2)throw new Error("a null control point must be passed with one more control points");let e=n[n.length-2];if("lastBezierControlPoint"in t&&(e=t.lastBezierControlPoint),!Array.isArray(e))throw new Error("the given path must contain TWO or more points if given a null control point");const r=vec2.scale(vec2.create(),n[n.length-1],2);vec2.subtract(r,r,e),o[0]=r}o.unshift(n[n.length-1]);const s=o.length-1,i=[];let c=1;for(let e=0;e<=s;++e)e>0&&(c*=e),i.push(c);const a=[];for(let e=0;e<=s;++e){const t=i[s]/(i[e]*i[s-e]);a.push(t)}const l=vec2.create(),h=vec2.create(),p=vec3.create(),u=e=>{let t=1,r=Math.pow(1-e,s);const n=1!==e?1/(1-e):1,i=vec2.create();for(let c=0;c<=s;++c){c===s&&(r=1);const h=a[c]*t*r,p=vec2.scale(l,o[c],h);vec2.add(i,i,p),t*=e,r*=n}return i},v=[],m=[],f=s+1;for(let e=0;eP){const e=m[g-1],t=m[g+1],o=e+1*(t-e)/3,r=e+2*(t-e)/3,n=u(o),s=u(r);v.splice(g,1,n,s),m.splice(g,1,o,r),--g<1&&(g=1)}else++g}v.shift();const b=appendPoints(v,t);return b.lastBezierControlPoint=o[o.length-2],b};module.exports=appendBezier; -},{"../../maths/constants":218,"../../maths/vec2":315,"./appendPoints":177,"./toPoints":190}],177:[function(require,module,exports){ +},{"../../maths/constants":219,"../../maths/vec2":316,"./appendPoints":178,"./toPoints":191}],178:[function(require,module,exports){ const concat=require("./concat"),create=require("./create"),appendPoints=(e,c)=>concat(c,create(e));module.exports=appendPoints; -},{"./concat":181,"./create":182}],178:[function(require,module,exports){ +},{"./concat":182,"./create":183}],179:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.points=r.points.map(s=>vec2.transform(vec2.create(),s,r.transforms)),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":267,"../../maths/vec2":315}],179:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec2":316}],180:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],180:[function(require,module,exports){ +},{}],181:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),clone=require("./clone"),close=e=>{if(e.isClosed)return e;const t=clone(e);if(t.isClosed=!0,t.points.length>1){const e=t.points,n=e[0];let o=e[e.length-1];for(;vec2.distance(n,o){let o=!1,e=[];return t.forEach((t,n)=>{const s=toPoints(t).slice();if(e.length>0&&s.length>0&&equals(s[0],e[e.length-1])&&s.shift(),s.length>0&&o)throw new Error(`Cannot concatenate to a closed path; check the ${n}th path`);o=t.isClosed,e=e.concat(s)}),fromPoints({closed:o},e)};module.exports=concat; -},{"../../maths/vec2":315,"./fromPoints":185,"./toPoints":190}],182:[function(require,module,exports){ +},{"../../maths/vec2":316,"./fromPoints":186,"./toPoints":191}],183:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{points:e,isClosed:!1,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":267}],183:[function(require,module,exports){ +},{"../../maths/mat4":268}],184:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),equals=(e,t)=>{if(e.isClosed!==t.isClosed)return!1;if(e.points.length!==t.points.length)return!1;const o=toPoints(e),s=toPoints(t),i=o.length;let r=0;do{let t=!1;for(let e=0;e{if(2!==r[0])throw new Error("invalid compact binary data");const e=create();e.transforms=mat4.clone(r.slice(1,17)),e.isClosed=!!r[17];for(let t=22;t=0&&(e.color=[r[18],r[19],r[20],r[21]]),e};module.exports=fromCompactBinary; -},{"../../maths/mat4":267,"../../maths/vec2":315,"./create":182}],185:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec2":316,"./create":183}],186:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),close=require("./close"),create=require("./create"),fromPoints=(e,t)=>{let{closed:s}=Object.assign({},{closed:!1},e),o=create();if(o.points=t.map(e=>vec2.clone(e)),o.points.length>1){const e=o.points[0],t=o.points[o.points.length-1];vec2.distance(e,t)!!(s&&"object"==typeof s&&"points"in s&&"transforms"in s&&"isClosed"in s&&Array.isArray(s.points)&&"length"in s.transforms);module.exports=isA; -},{}],188:[function(require,module,exports){ +},{}],189:[function(require,module,exports){ const clone=require("./clone"),reverse=e=>{const r=clone(e);return r.points=e.points.slice().reverse(),r};module.exports=reverse; -},{"./clone":179}],189:[function(require,module,exports){ +},{"./clone":180}],190:[function(require,module,exports){ const toCompactBinary=o=>{const t=o.points,n=o.transforms;let r=[-1,-1,-1,-1];o.color&&(r=o.color);const s=new Float32Array(22+2*t.length);s[0]=2,s[1]=n[0],s[2]=n[1],s[3]=n[2],s[4]=n[3],s[5]=n[4],s[6]=n[5],s[7]=n[6],s[8]=n[7],s[9]=n[8],s[10]=n[9],s[11]=n[10],s[12]=n[11],s[13]=n[12],s[14]=n[13],s[15]=n[14],s[16]=n[15],s[17]=o.isClosed?1:0,s[18]=r[0],s[19]=r[1],s[20]=r[2],s[21]=r[3];for(let o=0;oapplyTransforms(o).points;module.exports=toPoints; -},{"./applyTransforms":178}],191:[function(require,module,exports){ +},{"./applyTransforms":179}],192:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),toString=t=>{const o=toPoints(t);let n="path ("+o.length+" points, "+t.isClosed+"):\n[\n";return o.forEach(t=>{n+=" "+vec2.toString(t)+",\n"}),n+="]\n"};module.exports=toString; -},{"../../maths/vec2":315,"./toPoints":190}],192:[function(require,module,exports){ +},{"../../maths/vec2":316,"./toPoints":191}],193:[function(require,module,exports){ const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform; -},{"../../maths/mat4":267}],193:[function(require,module,exports){ +},{"../../maths/mat4":268}],194:[function(require,module,exports){ const vec2=require("../../maths/vec2"),isA=require("./isA"),validate=r=>{if(!isA(r))throw new Error("invalid path2 structure");if(r.points.length>1)for(let i=0;i{if(!r.every(Number.isFinite))throw new Error(`path2 invalid point ${r}`)}),!r.transforms.every(Number.isFinite))throw new Error(`path2 invalid transforms ${r.transforms}`)};module.exports=validate; -},{"../../maths/vec2":315,"./isA":187}],194:[function(require,module,exports){ +},{"../../maths/vec2":316,"./isA":188}],195:[function(require,module,exports){ const measureArea=require("./measureArea"),flip=require("./flip"),arePointsInside=(e,r)=>{if(0===e.length)return 0;const n=r.vertices;return n.length<3?0:(measureArea(r)<0&&(r=flip(r)),e.reduce((e,r)=>e+isPointInside(r,n),0)===e.length?1:0)},isPointInside=(e,r)=>{const n=r.length,t=e[0],i=e[1];let s=r[n-1],o=r[0],l=s[1]>i,u=0,a=0;for(let e=n+1;--e;){const e=o[1]>i;if(l!==e){const e=s[0]>t,r=o[0]>t;e&&r?u=!u:o[0]-(o[1]-i)*(s[0]-o[0])/(s[1]-o[1])>=t&&(u=!u)}l=e,s=o,o=r[++a]}return u};module.exports=arePointsInside; -},{"./flip":196,"./measureArea":198}],195:[function(require,module,exports){ +},{"./flip":197,"./measureArea":199}],196:[function(require,module,exports){ const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create; -},{}],196:[function(require,module,exports){ +},{}],197:[function(require,module,exports){ const create=require("./create"),flip=e=>{const r=e.vertices.slice().reverse();return create(r)};module.exports=flip; -},{"./create":195}],197:[function(require,module,exports){ +},{"./create":196}],198:[function(require,module,exports){ module.exports={arePointsInside:require("./arePointsInside"),create:require("./create"),flip:require("./flip"),measureArea:require("./measureArea")}; -},{"./arePointsInside":194,"./create":195,"./flip":196,"./measureArea":198}],198:[function(require,module,exports){ +},{"./arePointsInside":195,"./create":196,"./flip":197,"./measureArea":199}],199:[function(require,module,exports){ const area=require("../../maths/utils/area"),measureArea=e=>area(e.vertices);module.exports=measureArea; -},{"../../maths/utils/area":292}],199:[function(require,module,exports){ +},{"../../maths/utils/area":293}],200:[function(require,module,exports){ const create=require("./create"),vec3=require("../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.vertices=r.vertices.map(e=>vec3.clone(e)),c};module.exports=clone; -},{"../../maths/vec3":346,"./create":200}],200:[function(require,module,exports){ +},{"../../maths/vec3":347,"./create":201}],201:[function(require,module,exports){ const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create; -},{}],201:[function(require,module,exports){ +},{}],202:[function(require,module,exports){ const vec3=require("../../maths/vec3"),create=require("./create"),fromPoints=e=>{const r=e.map(e=>vec3.clone(e));return create(r)};module.exports=fromPoints; -},{"../../maths/vec3":346,"./create":200}],202:[function(require,module,exports){ +},{"../../maths/vec3":347,"./create":201}],203:[function(require,module,exports){ const create=require("./create"),fromPointsAndPlane=(e,n)=>{const r=create(e);return r.plane=n,r};module.exports=fromPointsAndPlane; -},{"./create":200}],203:[function(require,module,exports){ +},{"./create":201}],204:[function(require,module,exports){ module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromPointsAndPlane:require("./fromPointsAndPlane"),invert:require("./invert"),isA:require("./isA"),isConvex:require("./isConvex"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureSignedVolume:require("./measureSignedVolume"),plane:require("./plane"),toPoints:require("./toPoints"),toString:require("./toString"),transform:require("./transform"),validate:require("./validate")}; -},{"./clone":199,"./create":200,"./fromPoints":201,"./fromPointsAndPlane":202,"./invert":204,"./isA":205,"./isConvex":206,"./measureArea":207,"./measureBoundingBox":208,"./measureBoundingSphere":209,"./measureSignedVolume":210,"./plane":211,"./toPoints":212,"./toString":213,"./transform":214,"./validate":215}],204:[function(require,module,exports){ +},{"./clone":200,"./create":201,"./fromPoints":202,"./fromPointsAndPlane":203,"./invert":205,"./isA":206,"./isConvex":207,"./measureArea":208,"./measureBoundingBox":209,"./measureBoundingSphere":210,"./measureSignedVolume":211,"./plane":212,"./toPoints":213,"./toString":214,"./transform":215,"./validate":216}],205:[function(require,module,exports){ const plane=require("../../maths/plane"),create=require("./create"),invert=e=>{const r=e.vertices.slice().reverse(),a=create(r);return e.plane&&(a.plane=plane.flip(plane.create(),e.plane)),a};module.exports=invert; -},{"../../maths/plane":287,"./create":200}],205:[function(require,module,exports){ +},{"../../maths/plane":288,"./create":201}],206:[function(require,module,exports){ const isA=e=>!!(e&&"object"==typeof e&&"vertices"in e&&Array.isArray(e.vertices));module.exports=isA; -},{}],206:[function(require,module,exports){ +},{}],207:[function(require,module,exports){ const plane=require("../../maths/plane"),vec3=require("../../maths/vec3"),isConvex=e=>areVerticesConvex(e.vertices),areVerticesConvex=e=>{const t=e.length;if(t>2){const r=plane.fromPoints(plane.create(),...e);let c=e[t-2],n=e[t-1];for(let o=0;o{const n=vec3.cross(vec3.create(),vec3.subtract(vec3.create(),t,e),vec3.subtract(vec3.create(),r,t));return vec3.dot(n,c)>=0};module.exports=isConvex; -},{"../../maths/plane":287,"../../maths/vec3":346}],207:[function(require,module,exports){ +},{"../../maths/plane":288,"../../maths/vec3":347}],208:[function(require,module,exports){ const plane=require("./plane"),measureArea=e=>{const r=e.vertices.length;if(r<3)return 0;const a=e.vertices,t=plane(e),s=Math.abs(t[0]),n=Math.abs(t[1]),c=Math.abs(t[2]);if(s+n+c===0)return 0;let l=3;s>n&&s>c?l=1:n>c&&(l=2);let o=0,u=0,f=1,i=2;switch(l){case 1:for(f=1;f{const c=e.vertices,n=c.length,o=0===n?vec3.create():vec3.clone(c[0]),r=vec3.clone(o);for(let e=1;e{const r=cache.get(e);if(r)return r;const t=e.vertices,c=vec4.create();if(0===t.length)return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c;let n=t[0],a=n,s=n,h=n,o=n,u=n;t.forEach(e=>{n[0]>e[0]&&(n=e),a[1]>e[1]&&(a=e),s[2]>e[2]&&(s=e),h[0]{let r=0;const t=e.vertices,c=vec3.create();for(let e=0;e(e.plane||(e.plane=mplane.fromPoints(mplane.create(),...e.vertices)),e.plane);module.exports=plane; -},{"../../maths/plane/":287}],212:[function(require,module,exports){ +},{"../../maths/plane/":288}],213:[function(require,module,exports){ const toPoints=o=>o.vertices;module.exports=toPoints; -},{}],213:[function(require,module,exports){ +},{}],214:[function(require,module,exports){ const vec3=require("../../maths/vec3/"),toString=e=>{let t="poly3: vertices: [";return e.vertices.forEach(e=>{t+=`${vec3.toString(e)}, `}),t+="]"};module.exports=toString; -},{"../../maths/vec3/":346}],214:[function(require,module,exports){ +},{"../../maths/vec3/":347}],215:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.vertices.map(r=>vec3.transform(vec3.create(),r,e));return mat4.isMirroring(e)&&t.reverse(),create(t)};module.exports=transform; -},{"../../maths/mat4":267,"../../maths/vec3":346,"./create":200}],215:[function(require,module,exports){ +},{"../../maths/mat4":268,"../../maths/vec3":347,"./create":201}],216:[function(require,module,exports){ const signedDistanceToPoint=require("../../maths/plane/signedDistanceToPoint"),{NEPS:NEPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),isA=require("./isA"),isConvex=require("./isConvex"),measureArea=require("./measureArea"),plane=require("./plane"),validate=e=>{if(!isA(e))throw new Error("invalid poly3 structure");if(e.vertices.length<3)throw new Error(`poly3 not enough vertices ${e.vertices.length}`);if(measureArea(e)<=0)throw new Error("poly3 area must be greater than zero");for(let r=0;r{if(!e.every(Number.isFinite))throw new Error(`poly3 invalid vertex ${e}`)}),e.vertices.length>3){const r=plane(e);e.vertices.forEach(e=>{const t=Math.abs(signedDistanceToPoint(r,e));if(t>NEPS)throw new Error(`poly3 must be coplanar: vertex ${e} distance ${t}`)})}};module.exports=validate; -},{"../../maths/constants":218,"../../maths/plane/signedDistanceToPoint":289,"../../maths/vec3":346,"./isA":205,"./isConvex":206,"./measureArea":207,"./plane":211}],216:[function(require,module,exports){ +},{"../../maths/constants":219,"../../maths/plane/signedDistanceToPoint":290,"../../maths/vec3":347,"./isA":206,"./isConvex":207,"./measureArea":208,"./plane":212}],217:[function(require,module,exports){ module.exports={colors:require("./colors"),curves:require("./curves"),geometries:require("./geometries"),maths:require("./maths"),measurements:require("./measurements"),primitives:require("./primitives"),text:require("./text"),utils:require("./utils"),booleans:require("./operations/booleans"),expansions:require("./operations/expansions"),extrusions:require("./operations/extrusions"),hulls:require("./operations/hulls"),modifiers:require("./operations/modifiers"),transforms:require("./operations/transforms")}; -},{"./colors":132,"./curves":143,"./geometries":174,"./maths":219,"./measurements":376,"./operations/booleans":390,"./operations/expansions":419,"./operations/extrusions":442,"./operations/hulls":465,"./operations/modifiers":476,"./operations/transforms":486,"./primitives":502,"./text":516,"./utils":524}],217:[function(require,module,exports){ -const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.GetCartesian=function(e,t){const i=e+"/"+t;let s,n;if("X/Y"===i)s=[0,0,1],n=[1,0,0];else if("Y/-X"===i)s=[0,0,1],n=[0,1,0];else if("-X/-Y"===i)s=[0,0,1],n=[-1,0,0];else if("-Y/X"===i)s=[0,0,1],n=[0,-1,0];else if("-X/Y"===i)s=[0,0,-1],n=[-1,0,0];else if("-Y/-X"===i)s=[0,0,-1],n=[0,-1,0];else if("X/-Y"===i)s=[0,0,-1],n=[1,0,0];else if("Y/X"===i)s=[0,0,-1],n=[0,1,0];else if("X/Z"===i)s=[0,-1,0],n=[1,0,0];else if("Z/-X"===i)s=[0,-1,0],n=[0,0,1];else if("-X/-Z"===i)s=[0,-1,0],n=[-1,0,0];else if("-Z/X"===i)s=[0,-1,0],n=[0,0,-1];else if("-X/Z"===i)s=[0,1,0],n=[-1,0,0];else if("-Z/-X"===i)s=[0,1,0],n=[0,0,-1];else if("X/-Z"===i)s=[0,1,0],n=[1,0,0];else if("Z/X"===i)s=[0,1,0],n=[0,0,1];else if("Y/Z"===i)s=[1,0,0],n=[0,1,0];else if("Z/-Y"===i)s=[1,0,0],n=[0,0,1];else if("-Y/-Z"===i)s=[1,0,0],n=[0,-1,0];else if("-Z/Y"===i)s=[1,0,0],n=[0,0,-1];else if("-Y/Z"===i)s=[-1,0,0],n=[0,-1,0];else if("-Z/-Y"===i)s=[-1,0,0],n=[0,0,-1];else if("Y/-Z"===i)s=[-1,0,0],n=[0,1,0];else{if("Z/Y"!==i)throw new Error("OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.");s=[-1,0,0],n=[0,0,1]}return new OrthoNormalBasis(new Plane(new Vector3D(s),0),new Vector3D(n))},OrthoNormalBasis.Z0Plane=function(){const e=new Plane(new Vector3D([0,0,1]),0);return new OrthoNormalBasis(e,new Vector3D([1,0,0]))},OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),i=vec3.scale(vec3.create(),this.v,e[1]),s=vec3.add(t,t,this.planeorigin);return vec3.add(i,i,s)},line3Dto2D:function(e){const t=e.point,i=e.direction.plus(t),s=this.to2D(t),n=this.to2D(i);return Line2D.fromPoints(s,n)},line2Dto3D:function(e){const t=e.origin(),i=e.direction().plus(t),s=this.to3D(t),n=this.to3D(i);return Line3D.fromPoints(s,n)},transform:function(e){const t=this.plane.transform(e),i=this.u.transform(e),s=new Vector3D(0,0,0).transform(e),n=i.minus(s);return new OrthoNormalBasis(t,n)}},module.exports=OrthoNormalBasis; +},{"./colors":133,"./curves":144,"./geometries":175,"./maths":220,"./measurements":377,"./operations/booleans":391,"./operations/expansions":420,"./operations/extrusions":443,"./operations/hulls":466,"./operations/modifiers":477,"./operations/transforms":487,"./primitives":503,"./text":517,"./utils":525}],218:[function(require,module,exports){ +const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),s=vec3.scale(vec3.create(),this.v,e[1]),i=vec3.add(t,t,this.planeorigin);return vec3.add(s,s,i)}},module.exports=OrthoNormalBasis; -},{"./mat4":267,"./vec2":315,"./vec3":346}],218:[function(require,module,exports){ +},{"./mat4":268,"./vec2":316,"./vec3":347}],219:[function(require,module,exports){ const spatialResolution=1e5,EPS=1e-5,NEPS=1e-13,TAU=2*Math.PI;module.exports={EPS:EPS,NEPS:NEPS,TAU:TAU,spatialResolution:1e5}; -},{}],219:[function(require,module,exports){ +},{}],220:[function(require,module,exports){ module.exports={constants:require("./constants"),line2:require("./line2"),line3:require("./line3"),mat4:require("./mat4"),plane:require("./plane"),utils:require("./utils"),vec2:require("./vec2"),vec3:require("./vec3"),vec4:require("./vec4")}; -},{"./constants":218,"./line2":229,"./line3":246,"./mat4":267,"./plane":287,"./utils":293,"./vec2":315,"./vec3":346,"./vec4":372}],220:[function(require,module,exports){ +},{"./constants":219,"./line2":230,"./line3":247,"./mat4":268,"./plane":288,"./utils":294,"./vec2":316,"./vec3":347,"./vec4":373}],221:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone; -},{"./create":223}],221:[function(require,module,exports){ +},{"./create":224}],222:[function(require,module,exports){ const vec2=require("../vec2"),direction=require("./direction"),origin=require("./origin"),closestPoint=(e,c)=>{const i=origin(e),r=direction(e),o=vec2.subtract(vec2.create(),c,i),t=vec2.dot(o,r);return vec2.scale(o,r,t),vec2.add(o,o,i),o};module.exports=closestPoint; -},{"../vec2":315,"./direction":224,"./origin":231}],222:[function(require,module,exports){ +},{"../vec2":316,"./direction":225,"./origin":232}],223:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy; -},{}],223:[function(require,module,exports){ +},{}],224:[function(require,module,exports){ const create=()=>[0,1,0];module.exports=create; -},{}],224:[function(require,module,exports){ +},{}],225:[function(require,module,exports){ const vec2=require("../vec2"),direction=e=>{const c=vec2.normal(vec2.create(),e);return vec2.negate(c,c),c};module.exports=direction; -},{"../vec2":315}],225:[function(require,module,exports){ +},{"../vec2":316}],226:[function(require,module,exports){ const vec2=require("../vec2"),distanceToPoint=(e,t)=>{let o=vec2.dot(t,e);return o=Math.abs(o-e[2])};module.exports=distanceToPoint; -},{"../vec2":315}],226:[function(require,module,exports){ +},{"../vec2":316}],227:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals; -},{}],227:[function(require,module,exports){ +},{}],228:[function(require,module,exports){ const vec2=require("../vec2"),fromPoints=(e,c,o)=>{const r=vec2.subtract(vec2.create(),o,c);vec2.normal(r,r),vec2.normalize(r,r);const t=vec2.dot(c,r);return e[0]=r[0],e[1]=r[1],e[2]=t,e};module.exports=fromPoints; -},{"../vec2":315}],228:[function(require,module,exports){ +},{"../vec2":316}],229:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues; -},{"./create":223}],229:[function(require,module,exports){ +},{"./create":224}],230:[function(require,module,exports){ module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromValues:require("./fromValues"),intersectPointOfLines:require("./intersectPointOfLines"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform"),xAtY:require("./xAtY")}; -},{"./clone":220,"./closestPoint":221,"./copy":222,"./create":223,"./direction":224,"./distanceToPoint":225,"./equals":226,"./fromPoints":227,"./fromValues":228,"./intersectPointOfLines":230,"./origin":231,"./reverse":232,"./toString":233,"./transform":234,"./xAtY":235}],230:[function(require,module,exports){ +},{"./clone":221,"./closestPoint":222,"./copy":223,"./create":224,"./direction":225,"./distanceToPoint":226,"./equals":227,"./fromPoints":228,"./fromValues":229,"./intersectPointOfLines":231,"./origin":232,"./reverse":233,"./toString":234,"./transform":235,"./xAtY":236}],231:[function(require,module,exports){ const vec2=require("../vec2"),{solve2Linear:solve2Linear}=require("../utils"),intersectToLine=(e,r)=>{const n=solve2Linear(e[0],e[1],r[0],r[1],e[2],r[2]);return vec2.clone(n)};module.exports=intersectToLine; -},{"../utils":293,"../vec2":315}],231:[function(require,module,exports){ +},{"../utils":294,"../vec2":316}],232:[function(require,module,exports){ const vec2=require("../vec2"),origin=e=>vec2.scale(vec2.create(),e,e[2]);module.exports=origin; -},{"../vec2":315}],232:[function(require,module,exports){ +},{"../vec2":316}],233:[function(require,module,exports){ const vec2=require("../vec2"),copy=require("./copy"),fromValues=require("./fromValues"),reverse=(e,r)=>{const c=vec2.negate(vec2.create(),r),o=-r[2];return copy(e,fromValues(c[0],c[1],o))};module.exports=reverse; -},{"../vec2":315,"./copy":222,"./fromValues":228}],233:[function(require,module,exports){ +},{"../vec2":316,"./copy":223,"./fromValues":229}],234:[function(require,module,exports){ const toString=t=>`line2: (${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)})`;module.exports=toString; -},{}],234:[function(require,module,exports){ +},{}],235:[function(require,module,exports){ const vec2=require("../vec2"),fromPoints=require("./fromPoints"),origin=require("./origin"),direction=require("./direction"),transform=(r,o,i)=>{const e=origin(o),n=direction(o);return vec2.transform(e,e,i),vec2.transform(n,n,i),fromPoints(r,e,n)};module.exports=transform; -},{"../vec2":315,"./direction":224,"./fromPoints":227,"./origin":231}],235:[function(require,module,exports){ +},{"../vec2":316,"./direction":225,"./fromPoints":228,"./origin":232}],236:[function(require,module,exports){ const origin=require("./origin"),xAtY=(i,r)=>{let e=(i[2]-i[1]*r)/i[0];if(Number.isNaN(e)){e=origin(i)[0]}return e};module.exports=xAtY; -},{"./origin":231}],236:[function(require,module,exports){ +},{"./origin":232}],237:[function(require,module,exports){ const vec3=require("../vec3"),create=require("./create"),clone=e=>{const c=create();return vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c};module.exports=clone; -},{"../vec3":346,"./create":239}],237:[function(require,module,exports){ +},{"../vec3":347,"./create":240}],238:[function(require,module,exports){ const vec3=require("../vec3"),closestPoint=(e,c)=>{const t=e[0],o=e[1],s=vec3.dot(vec3.subtract(vec3.create(),c,t),o)/vec3.dot(o,o),v=vec3.scale(vec3.create(),o,s);return vec3.add(v,v,t),v};module.exports=closestPoint; -},{"../vec3":346}],238:[function(require,module,exports){ +},{"../vec3":347}],239:[function(require,module,exports){ const vec3=require("../vec3"),copy=(c,e)=>(vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c);module.exports=copy; -},{"../vec3":346}],239:[function(require,module,exports){ +},{"../vec3":347}],240:[function(require,module,exports){ const vec3=require("../vec3"),create=()=>[vec3.fromValues(0,0,0),vec3.fromValues(0,0,1)];module.exports=create; -},{"../vec3":346}],240:[function(require,module,exports){ +},{"../vec3":347}],241:[function(require,module,exports){ const direction=o=>o[1];module.exports=direction; -},{}],241:[function(require,module,exports){ +},{}],242:[function(require,module,exports){ const vec3=require("../vec3"),closestPoint=require("./closestPoint"),distanceToPoint=(e,t)=>{const c=closestPoint(e,t),o=vec3.subtract(vec3.create(),t,c);return vec3.length(o)};module.exports=distanceToPoint; -},{"../vec3":346,"./closestPoint":237}],242:[function(require,module,exports){ +},{"../vec3":347,"./closestPoint":238}],243:[function(require,module,exports){ const vec3=require("../vec3"),equals=(e,s)=>!!vec3.equals(e[1],s[1])&&!!vec3.equals(e[0],s[0]);module.exports=equals; -},{"../vec3":346}],243:[function(require,module,exports){ +},{"../vec3":347}],244:[function(require,module,exports){ const vec3=require("../vec3"),{solve2Linear:solve2Linear}=require("../utils"),{EPS:EPS}=require("../constants"),fromPointAndDirection=require("./fromPointAndDirection"),fromPlanes=(e,r,o)=>{let n=vec3.cross(vec3.create(),r,o),s=vec3.length(n);if(s=a&&t>=i?(c=solve2Linear(r[1],r[2],o[1],o[2],r[3],o[3]),l=vec3.fromValues(0,c[0],c[1])):a>=t&&a>=i?(c=solve2Linear(r[0],r[2],o[0],o[2],r[3],o[3]),l=vec3.fromValues(c[0],0,c[1])):(c=solve2Linear(r[0],r[1],o[0],o[1],r[3],o[3]),l=vec3.fromValues(c[0],c[1],0)),fromPointAndDirection(e,l,n)};module.exports=fromPlanes; -},{"../constants":218,"../utils":293,"../vec3":346,"./fromPointAndDirection":244}],244:[function(require,module,exports){ +},{"../constants":219,"../utils":294,"../vec3":347,"./fromPointAndDirection":245}],245:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=(e,c,o)=>{const r=vec3.normalize(vec3.create(),o);return vec3.copy(e[0],c),vec3.copy(e[1],r),e};module.exports=fromPointAndDirection; -},{"../vec3":346}],245:[function(require,module,exports){ +},{"../vec3":347}],246:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),fromPoints=(o,r,e)=>{const t=vec3.subtract(vec3.create(),e,r);return fromPointAndDirection(o,r,t)};module.exports=fromPoints; -},{"../vec3":346,"./fromPointAndDirection":244}],246:[function(require,module,exports){ +},{"../vec3":347,"./fromPointAndDirection":245}],247:[function(require,module,exports){ module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPlanes:require("./fromPlanes"),fromPointAndDirection:require("./fromPointAndDirection"),fromPoints:require("./fromPoints"),intersectPointOfLineAndPlane:require("./intersectPointOfLineAndPlane"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform")}; -},{"./clone":236,"./closestPoint":237,"./copy":238,"./create":239,"./direction":240,"./distanceToPoint":241,"./equals":242,"./fromPlanes":243,"./fromPointAndDirection":244,"./fromPoints":245,"./intersectPointOfLineAndPlane":247,"./origin":248,"./reverse":249,"./toString":250,"./transform":251}],247:[function(require,module,exports){ +},{"./clone":237,"./closestPoint":238,"./copy":239,"./create":240,"./direction":241,"./distanceToPoint":242,"./equals":243,"./fromPlanes":244,"./fromPointAndDirection":245,"./fromPoints":246,"./intersectPointOfLineAndPlane":248,"./origin":249,"./reverse":250,"./toString":251,"./transform":252}],248:[function(require,module,exports){ const vec3=require("../vec3"),intersectToPlane=(e,c)=>{const t=c,r=c[3],o=e[0],v=e[1],n=(r-vec3.dot(t,o))/vec3.dot(t,v);return vec3.add(vec3.create(),o,vec3.scale(vec3.create(),v,n))};module.exports=intersectToPlane; -},{"../vec3":346}],248:[function(require,module,exports){ +},{"../vec3":347}],249:[function(require,module,exports){ const origin=o=>o[0];module.exports=origin; -},{}],249:[function(require,module,exports){ +},{}],250:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),reverse=(e,r)=>{const n=vec3.clone(r[0]),o=vec3.negate(vec3.create(),r[1]);return fromPointAndDirection(e,n,o)};module.exports=reverse; -},{"../vec3":346,"./fromPointAndDirection":244}],250:[function(require,module,exports){ +},{"../vec3":347,"./fromPointAndDirection":245}],251:[function(require,module,exports){ const toString=t=>{const o=t[0],i=t[1];return`line3: point: (${o[0].toFixed(7)}, ${o[1].toFixed(7)}, ${o[2].toFixed(7)}) direction: (${i[0].toFixed(7)}, ${i[1].toFixed(7)}, ${i[2].toFixed(7)})`};module.exports=toString; -},{}],251:[function(require,module,exports){ +},{}],252:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),transform=(r,e,t)=>{const o=e[0],c=e[1],n=vec3.add(vec3.create(),o,c),i=vec3.transform(vec3.create(),o,t),a=vec3.transform(n,n,t),m=vec3.subtract(a,a,i);return fromPointAndDirection(r,i,m)};module.exports=transform; -},{"../vec3":346,"./fromPointAndDirection":244}],252:[function(require,module,exports){ +},{"../vec3":347,"./fromPointAndDirection":245}],253:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d[3]=o[3]+a[3],d[4]=o[4]+a[4],d[5]=o[5]+a[5],d[6]=o[6]+a[6],d[7]=o[7]+a[7],d[8]=o[8]+a[8],d[9]=o[9]+a[9],d[10]=o[10]+a[10],d[11]=o[11]+a[11],d[12]=o[12]+a[12],d[13]=o[13]+a[13],d[14]=o[14]+a[14],d[15]=o[15]+a[15],d);module.exports=add; -},{}],253:[function(require,module,exports){ +},{}],254:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r};module.exports=clone; -},{"./create":255}],254:[function(require,module,exports){ +},{"./create":256}],255:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o[4]=c[4],o[5]=c[5],o[6]=c[6],o[7]=c[7],o[8]=c[8],o[9]=c[9],o[10]=c[10],o[11]=c[11],o[12]=c[12],o[13]=c[13],o[14]=c[14],o[15]=c[15],o);module.exports=copy; -},{}],255:[function(require,module,exports){ +},{}],256:[function(require,module,exports){ const create=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];module.exports=create; -},{}],256:[function(require,module,exports){ +},{}],257:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3]&&e[4]===s[4]&&e[5]===s[5]&&e[6]===s[6]&&e[7]===s[7]&&e[8]===s[8]&&e[9]===s[9]&&e[10]===s[10]&&e[11]===s[11]&&e[12]===s[12]&&e[13]===s[13]&&e[14]===s[14]&&e[15]===s[15];module.exports=equals; -},{}],257:[function(require,module,exports){ +},{}],258:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),identity=require("./identity"),fromRotation=(t,o,i)=>{let[n,r,s]=i;const e=n*n+r*r+s*s;if(Math.abs(e)(o[0]=c[0],o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=c[1],o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c[2],o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o);module.exports=fromScaling; -},{}],259:[function(require,module,exports){ +},{}],260:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromTaitBryanRotation=(o,s,n,t)=>{const i=sin(s),r=cos(s),c=sin(n),a=cos(n),e=sin(t),m=cos(t);return o[0]=a*r,o[1]=a*i,o[2]=-c,o[3]=0,o[4]=e*c*r-m*i,o[5]=m*r+e*c*i,o[6]=e*a,o[7]=0,o[8]=e*i+m*c*r,o[9]=m*c*i-e*r,o[10]=m*a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromTaitBryanRotation; -},{"../utils/trigonometry":297}],260:[function(require,module,exports){ +},{"../utils/trigonometry":298}],261:[function(require,module,exports){ const fromTranslation=(o,n)=>(o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=n[0],o[13]=n[1],o[14]=n[2],o[15]=1,o);module.exports=fromTranslation; -},{}],261:[function(require,module,exports){ +},{}],262:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t,o,a,c,s,u,l,m,n,f,V,d,i,p)=>{const q=create();return q[0]=e,q[1]=r,q[2]=t,q[3]=o,q[4]=a,q[5]=c,q[6]=s,q[7]=u,q[8]=l,q[9]=m,q[10]=n,q[11]=f,q[12]=V,q[13]=d,q[14]=i,q[15]=p,q};module.exports=fromValues; -},{"./create":255}],262:[function(require,module,exports){ +},{"./create":256}],263:[function(require,module,exports){ const vec3=require("../vec3"),fromRotation=require("./fromRotation"),fromVectorRotation=(o,e,t)=>{const r=vec3.normalize(vec3.create(),e),c=vec3.normalize(vec3.create(),t),n=vec3.cross(vec3.create(),c,r),a=vec3.dot(c,r);if(-1===a)return fromRotation(o,Math.PI,vec3.orthogonal(n,r));const i=1/(1+a);return o[0]=n[0]*n[0]*i+a,o[1]=n[1]*n[0]*i-n[2],o[2]=n[2]*n[0]*i+n[1],o[3]=0,o[4]=n[0]*n[1]*i+n[2],o[5]=n[1]*n[1]*i+a,o[6]=n[2]*n[1]*i-n[0],o[7]=0,o[8]=n[0]*n[2]*i-n[1],o[9]=n[1]*n[2]*i+n[0],o[10]=n[2]*n[2]*i+a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromVectorRotation; -},{"../vec3":346,"./fromRotation":257}],263:[function(require,module,exports){ +},{"../vec3":347,"./fromRotation":258}],264:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromXRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=n,o[6]=s,o[7]=0,o[8]=0,o[9]=-s,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromXRotation; -},{"../utils/trigonometry":297}],264:[function(require,module,exports){ +},{"../utils/trigonometry":298}],265:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromYRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=0,o[2]=-s,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=s,o[9]=0,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromYRotation; -},{"../utils/trigonometry":297}],265:[function(require,module,exports){ +},{"../utils/trigonometry":298}],266:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromZRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=s,o[2]=0,o[3]=0,o[4]=-s,o[5]=n,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromZRotation; -},{"../utils/trigonometry":297}],266:[function(require,module,exports){ +},{"../utils/trigonometry":298}],267:[function(require,module,exports){ const identity=t=>(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t);module.exports=identity; -},{}],267:[function(require,module,exports){ +},{}],268:[function(require,module,exports){ module.exports={add:require("./add"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),invert:require("./invert"),equals:require("./equals"),fromRotation:require("./fromRotation"),fromScaling:require("./fromScaling"),fromTaitBryanRotation:require("./fromTaitBryanRotation"),fromTranslation:require("./fromTranslation"),fromValues:require("./fromValues"),fromVectorRotation:require("./fromVectorRotation"),fromXRotation:require("./fromXRotation"),fromYRotation:require("./fromYRotation"),fromZRotation:require("./fromZRotation"),identity:require("./identity"),isIdentity:require("./isIdentity"),isOnlyTransformScale:require("./isOnlyTransformScale"),isMirroring:require("./isMirroring"),mirrorByPlane:require("./mirrorByPlane"),multiply:require("./multiply"),rotate:require("./rotate"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),subtract:require("./subtract"),toString:require("./toString"),translate:require("./translate")}; -},{"./add":252,"./clone":253,"./copy":254,"./create":255,"./equals":256,"./fromRotation":257,"./fromScaling":258,"./fromTaitBryanRotation":259,"./fromTranslation":260,"./fromValues":261,"./fromVectorRotation":262,"./fromXRotation":263,"./fromYRotation":264,"./fromZRotation":265,"./identity":266,"./invert":268,"./isIdentity":269,"./isMirroring":270,"./isOnlyTransformScale":271,"./mirrorByPlane":272,"./multiply":273,"./rotate":274,"./rotateX":275,"./rotateY":276,"./rotateZ":277,"./scale":278,"./subtract":279,"./toString":280,"./translate":281}],268:[function(require,module,exports){ +},{"./add":253,"./clone":254,"./copy":255,"./create":256,"./equals":257,"./fromRotation":258,"./fromScaling":259,"./fromTaitBryanRotation":260,"./fromTranslation":261,"./fromValues":262,"./fromVectorRotation":263,"./fromXRotation":264,"./fromYRotation":265,"./fromZRotation":266,"./identity":267,"./invert":269,"./isIdentity":270,"./isMirroring":271,"./isOnlyTransformScale":272,"./mirrorByPlane":273,"./multiply":274,"./rotate":275,"./rotateX":276,"./rotateY":277,"./rotateZ":278,"./scale":279,"./subtract":280,"./toString":281,"./translate":282}],269:[function(require,module,exports){ const invert=(t,e)=>{const n=e[0],r=e[1],l=e[2],o=e[3],s=e[4],u=e[5],c=e[6],i=e[7],v=e[8],d=e[9],m=e[10],p=e[11],x=e[12],a=e[13],b=e[14],f=e[15],g=n*u-r*s,h=n*c-l*s,j=n*i-o*s,k=r*c-l*u,q=r*i-o*u,w=l*i-o*c,y=v*a-d*x,z=v*b-m*x,A=v*f-p*x,B=d*b-m*a,C=d*f-p*a,D=m*f-p*b;let E=g*D-h*C+j*B+k*A-q*z+w*y;return E?(E=1/E,t[0]=(u*D-c*C+i*B)*E,t[1]=(l*C-r*D-o*B)*E,t[2]=(a*w-b*q+f*k)*E,t[3]=(m*q-d*w-p*k)*E,t[4]=(c*A-s*D-i*z)*E,t[5]=(n*D-l*A+o*z)*E,t[6]=(b*j-x*w-f*h)*E,t[7]=(v*w-m*j+p*h)*E,t[8]=(s*C-u*A+i*y)*E,t[9]=(r*A-n*C-o*y)*E,t[10]=(x*q-a*j+f*g)*E,t[11]=(d*j-v*q-p*g)*E,t[12]=(u*z-s*B-c*y)*E,t[13]=(n*B-r*z+l*y)*E,t[14]=(a*h-x*k-b*g)*E,t[15]=(v*k-d*h+m*g)*E,t):null};module.exports=invert; -},{}],269:[function(require,module,exports){ +},{}],270:[function(require,module,exports){ const isIdentity=t=>1===t[0]&&0===t[1]&&0===t[2]&&0===t[3]&&0===t[4]&&1===t[5]&&0===t[6]&&0===t[7]&&0===t[8]&&0===t[9]&&1===t[10]&&0===t[11]&&0===t[12]&&0===t[13]&&0===t[14]&&1===t[15];module.exports=isIdentity; -},{}],270:[function(require,module,exports){ +},{}],271:[function(require,module,exports){ const isMirroring=r=>{const i=r[4]*r[9]-r[8]*r[5],o=r[8]*r[1]-r[0]*r[9],n=r[0]*r[5]-r[4]*r[1];return i*r[2]+o*r[6]+n*r[10]<0};module.exports=isMirroring; -},{}],271:[function(require,module,exports){ +},{}],272:[function(require,module,exports){ const isOnlyTransformScale=s=>isZero(s[1])&&isZero(s[2])&&isZero(s[3])&&isZero(s[4])&&isZero(s[6])&&isZero(s[7])&&isZero(s[8])&&isZero(s[9])&&isZero(s[11])&&1===s[15],isZero=s=>Math.abs(s){const[e,n,t,l]=o;return r[0]=1-2*e*e,r[1]=-2*n*e,r[2]=-2*t*e,r[3]=0,r[4]=-2*e*n,r[5]=1-2*n*n,r[6]=-2*t*n,r[7]=0,r[8]=-2*e*t,r[9]=-2*n*t,r[10]=1-2*t*t,r[11]=0,r[12]=2*e*l,r[13]=2*n*l,r[14]=2*t*l,r[15]=1,r};module.exports=mirrorByPlane; -},{}],273:[function(require,module,exports){ +},{}],274:[function(require,module,exports){ const multiply=(t,l,e)=>{const o=l[0],u=l[1],m=l[2],n=l[3],p=l[4],r=l[5],s=l[6],c=l[7],i=l[8],y=l[9],d=l[10],x=l[11],a=l[12],b=l[13],f=l[14],g=l[15];let h=e[0],j=e[1],k=e[2],q=e[3];return t[0]=h*o+j*p+k*i+q*a,t[1]=h*u+j*r+k*y+q*b,t[2]=h*m+j*s+k*d+q*f,t[3]=h*n+j*c+k*x+q*g,h=e[4],j=e[5],k=e[6],q=e[7],t[4]=h*o+j*p+k*i+q*a,t[5]=h*u+j*r+k*y+q*b,t[6]=h*m+j*s+k*d+q*f,t[7]=h*n+j*c+k*x+q*g,h=e[8],j=e[9],k=e[10],q=e[11],t[8]=h*o+j*p+k*i+q*a,t[9]=h*u+j*r+k*y+q*b,t[10]=h*m+j*s+k*d+q*f,t[11]=h*n+j*c+k*x+q*g,h=e[12],j=e[13],k=e[14],q=e[15],t[12]=h*o+j*p+k*i+q*a,t[13]=h*u+j*r+k*y+q*b,t[14]=h*m+j*s+k*d+q*f,t[15]=h*n+j*c+k*x+q*g,t};module.exports=multiply; -},{}],274:[function(require,module,exports){ +},{}],275:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),copy=require("./copy"),rotate=(t,o,r,s)=>{let[e,n,c]=s;const i=e*e+n*n+c*c;if(Math.abs(i){const r=sin(s),e=cos(s),n=t[4],i=t[5],c=t[6],u=t[7],a=t[8],l=t[9],m=t[10],X=t[11];return t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[4]=n*e+a*r,o[5]=i*e+l*r,o[6]=c*e+m*r,o[7]=u*e+X*r,o[8]=a*e-n*r,o[9]=l*e-i*r,o[10]=m*e-c*r,o[11]=X*e-u*r,o};module.exports=rotateX; -},{"../utils/trigonometry":297}],276:[function(require,module,exports){ +},{"../utils/trigonometry":298}],277:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateY=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[8],l=t[9],m=t[10],Y=t[11];return t!==o&&(o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e-a*r,o[1]=i*e-l*r,o[2]=c*e-m*r,o[3]=u*e-Y*r,o[8]=n*r+a*e,o[9]=i*r+l*e,o[10]=c*r+m*e,o[11]=u*r+Y*e,o};module.exports=rotateY; -},{"../utils/trigonometry":297}],277:[function(require,module,exports){ +},{"../utils/trigonometry":298}],278:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateZ=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[4],l=t[5],m=t[6],Z=t[7];return t!==o&&(o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e+a*r,o[1]=i*e+l*r,o[2]=c*e+m*r,o[3]=u*e+Z*r,o[4]=a*e-n*r,o[5]=l*e-i*r,o[6]=m*e-c*r,o[7]=Z*e-u*r,o};module.exports=rotateZ; -},{"../utils/trigonometry":297}],278:[function(require,module,exports){ +},{"../utils/trigonometry":298}],279:[function(require,module,exports){ const scale=(e,s,c)=>{const o=c[0],t=c[1],l=c[2];return e[0]=s[0]*o,e[1]=s[1]*o,e[2]=s[2]*o,e[3]=s[3]*o,e[4]=s[4]*t,e[5]=s[5]*t,e[6]=s[6]*t,e[7]=s[7]*t,e[8]=s[8]*l,e[9]=s[9]*l,e[10]=s[10]*l,e[11]=s[11]*l,e[12]=s[12],e[13]=s[13],e[14]=s[14],e[15]=s[15],e};module.exports=scale; -},{}],279:[function(require,module,exports){ +},{}],280:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t[3]=s[3]-c[3],t[4]=s[4]-c[4],t[5]=s[5]-c[5],t[6]=s[6]-c[6],t[7]=s[7]-c[7],t[8]=s[8]-c[8],t[9]=s[9]-c[9],t[10]=s[10]-c[10],t[11]=s[11]-c[11],t[12]=s[12]-c[12],t[13]=s[13]-c[13],t[14]=s[14]-c[14],t[15]=s[15]-c[15],t);module.exports=subtract; -},{}],280:[function(require,module,exports){ +},{}],281:[function(require,module,exports){ const toString=t=>t.map(t=>t.toFixed(7)).toString();module.exports=toString; -},{}],281:[function(require,module,exports){ +},{}],282:[function(require,module,exports){ const translate=(t,e,n)=>{const r=n[0],s=n[1],a=n[2];let l,o,c,u,d,m,p,x,b,f,g,h;return e===t?(t[12]=e[0]*r+e[4]*s+e[8]*a+e[12],t[13]=e[1]*r+e[5]*s+e[9]*a+e[13],t[14]=e[2]*r+e[6]*s+e[10]*a+e[14],t[15]=e[3]*r+e[7]*s+e[11]*a+e[15]):(l=e[0],o=e[1],c=e[2],u=e[3],d=e[4],m=e[5],p=e[6],x=e[7],b=e[8],f=e[9],g=e[10],h=e[11],t[0]=l,t[1]=o,t[2]=c,t[3]=u,t[4]=d,t[5]=m,t[6]=p,t[7]=x,t[8]=b,t[9]=f,t[10]=g,t[11]=h,t[12]=l*r+d*s+b*a+e[12],t[13]=o*r+m*s+f*a+e[13],t[14]=c*r+p*s+g*a+e[14],t[15]=u*r+x*s+h*a+e[15]),t};module.exports=translate; -},{}],282:[function(require,module,exports){ +},{}],283:[function(require,module,exports){ const flip=(l,o)=>(l[0]=-o[0],l[1]=-o[1],l[2]=-o[2],l[3]=-o[3],l);module.exports=flip; -},{}],283:[function(require,module,exports){ +},{}],284:[function(require,module,exports){ const vec3=require("../vec3"),fromNormalAndPoint=require("./fromNormalAndPoint"),fromNoisyPoints=(e,...c)=>{e[0]=0,e[1]=0,e[2]=0,e[3]=0;const o=c.length;c.forEach(c=>{vec3.add(e,e,c)}),vec3.scale(e,e,1/o);let t=0,r=0,a=0,v=0,d=0,n=0;const s=vec3.create();c.forEach(c=>{vec3.subtract(s,c,e),t+=s[0]*s[0],r+=s[0]*s[1],a+=s[0]*s[2],v+=s[1]*s[1],d+=s[1]*s[2],n+=s[2]*s[2]}),t/=o,r/=o,a/=o,v/=o,d/=o,n/=o,s[0]=0,s[1]=0,s[2]=0;const l=vec3.create();let i=v*n-d*d;l[0]=i,l[1]=a*d-r*n,l[2]=r*d-a*v;let m=i*i;return vec3.add(s,s,vec3.scale(l,l,m)),i=t*n-a*a,l[0]=a*d-r*n,l[1]=i,l[2]=r*a-d*t,m=i*i,vec3.dot(s,l)<0&&(m=-m),vec3.add(s,s,vec3.scale(l,l,m)),i=t*v-r*r,l[0]=r*d-a*v,l[1]=r*a-d*t,l[2]=i,m=i*i,vec3.dot(s,l)<0&&(m=-m),vec3.add(s,s,vec3.scale(l,l,m)),fromNormalAndPoint(e,s,e)};module.exports=fromNoisyPoints; -},{"../vec3":346,"./fromNormalAndPoint":284}],284:[function(require,module,exports){ +},{"../vec3":347,"./fromNormalAndPoint":285}],285:[function(require,module,exports){ const vec3=require("../vec3"),fromNormalAndPoint=(e,o,r)=>{const c=vec3.normalize(vec3.create(),o),n=vec3.dot(r,c);return e[0]=c[0],e[1]=c[1],e[2]=c[2],e[3]=n,e};module.exports=fromNormalAndPoint; -},{"../vec3":346}],285:[function(require,module,exports){ +},{"../vec3":347}],286:[function(require,module,exports){ const vec3=require("../vec3"),fromPoints=(e,...c)=>{const r=c.length,t=vec3.create(),o=vec3.create(),v=e=>{const v=c[e],n=c[(e+1)%r],s=c[(e+2)%r];return vec3.subtract(t,n,v),vec3.subtract(o,s,v),vec3.cross(t,t,o),vec3.normalize(t,t),t};return e[0]=0,e[1]=0,e[2]=0,3===r?vec3.copy(e,v(0)):(c.forEach((c,r)=>{vec3.add(e,e,v(r))}),vec3.normalize(e,e)),e[3]=vec3.dot(e,c[0]),e};module.exports=fromPoints; -},{"../vec3":346}],286:[function(require,module,exports){ +},{"../vec3":347}],287:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),vec3=require("../vec3"),fromPointsRandom=(e,c,o,t)=>{let r=vec3.subtract(vec3.create(),o,c),v=vec3.subtract(vec3.create(),t,c);vec3.length(r){const r=o[0]*e[0]+o[1]*e[1]+o[2]*e[2]-e[3],t=o[0]-r*e[0],c=o[1]-r*e[1],n=o[2]-r*e[2];return vec3.fromValues(t,c,n)};module.exports=projectionOfPoint; -},{"../vec3":346}],289:[function(require,module,exports){ +},{"../vec3":347}],290:[function(require,module,exports){ const vec3=require("../vec3"),signedDistanceToPoint=(e,o)=>vec3.dot(e,o)-e[3];module.exports=signedDistanceToPoint; -},{"../vec3":346}],290:[function(require,module,exports){ +},{"../vec3":347}],291:[function(require,module,exports){ const mat4=require("../mat4"),vec3=require("../vec3"),fromPoints=require("./fromPoints"),flip=require("./flip"),transform=(e,r,c)=>{const t=mat4.isMirroring(c),o=vec3.orthogonal(vec3.create(),r),a=vec3.cross(o,r,o),v=vec3.cross(vec3.create(),r,a);let s=vec3.fromScalar(vec3.create(),r[3]);vec3.multiply(s,s,r);let i=vec3.add(vec3.create(),s,a),m=vec3.add(vec3.create(),s,v);return s=vec3.transform(s,s,c),i=vec3.transform(i,i,c),m=vec3.transform(m,m,c),fromPoints(e,s,i,m),t&&flip(e,e),e};module.exports=transform; -},{"../mat4":267,"../vec3":346,"./flip":282,"./fromPoints":285}],291:[function(require,module,exports){ +},{"../mat4":268,"../vec3":347,"./flip":283,"./fromPoints":286}],292:[function(require,module,exports){ const{NEPS:NEPS}=require("../constants"),aboutEqualNormals=(a,s)=>Math.abs(a[0]-s[0])<=NEPS&&Math.abs(a[1]-s[1])<=NEPS&&Math.abs(a[2]-s[2])<=NEPS;module.exports=aboutEqualNormals; -},{"../constants":218}],292:[function(require,module,exports){ +},{"../constants":219}],293:[function(require,module,exports){ const area=e=>{let t=0;for(let r=0;r{let n,r=o-e[1],i=t[1]-e[1];return i<0&&(r=-r,i=-i),n=r<=0?0:r>=i?1:i<1e-10?.5:r/i,e[0]+n*(t[0]-e[0])};module.exports=interpolateBetween2DPointsForY; -},{}],295:[function(require,module,exports){ +},{}],296:[function(require,module,exports){ const intersect=(t,e,r,n)=>{if(t[0]===e[0]&&t[1]===e[1]||r[0]===n[0]&&r[1]===n[1])return;const s=(n[1]-r[1])*(e[0]-t[0])-(n[0]-r[0])*(e[1]-t[1]);if(Math.abs(s)1||c<0||c>1?void 0:[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]};module.exports=intersect; -},{}],296:[function(require,module,exports){ +},{}],297:[function(require,module,exports){ const solve2Linear=(e,o,n,r,s,t)=>{const l=1/(e*r-o*n);let a=s*r-o*t,c=-s*n+e*t;return[a*=l,c*=l]};module.exports=solve2Linear; -},{}],297:[function(require,module,exports){ +},{}],298:[function(require,module,exports){ const{NEPS:NEPS}=require("../constants"),rezero=s=>Math.abs(s)rezero(Math.sin(s)),cos=s=>rezero(Math.cos(s));module.exports={sin:sin,cos:cos}; -},{"../constants":218}],298:[function(require,module,exports){ +},{"../constants":219}],299:[function(require,module,exports){ const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a);module.exports=abs; -},{}],299:[function(require,module,exports){ +},{}],300:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d);module.exports=add; -},{}],300:[function(require,module,exports){ +},{}],301:[function(require,module,exports){ module.exports=require("./angleRadians"); -},{"./angleRadians":302}],301:[function(require,module,exports){ +},{"./angleRadians":303}],302:[function(require,module,exports){ const angleRadians=require("./angleRadians"),angleDegrees=e=>57.29577951308232*angleRadians(e);module.exports=angleDegrees; -},{"./angleRadians":302}],302:[function(require,module,exports){ +},{"./angleRadians":303}],303:[function(require,module,exports){ const angleRadians=a=>Math.atan2(a[1],a[0]);module.exports=angleRadians; -},{}],303:[function(require,module,exports){ +},{}],304:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r};module.exports=clone; -},{"./create":305}],304:[function(require,module,exports){ +},{"./create":306}],305:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o);module.exports=copy; -},{}],305:[function(require,module,exports){ +},{}],306:[function(require,module,exports){ const create=()=>[0,0];module.exports=create; -},{}],306:[function(require,module,exports){ +},{}],307:[function(require,module,exports){ const cross=(s,o,c)=>(s[0]=0,s[1]=0,s[2]=o[0]*c[1]-o[1]*c[0],s);module.exports=cross; -},{}],307:[function(require,module,exports){ +},{}],308:[function(require,module,exports){ const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1];return Math.sqrt(e*e+n*n)};module.exports=distance; -},{}],308:[function(require,module,exports){ +},{}],309:[function(require,module,exports){ const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d);module.exports=divide; -},{}],309:[function(require,module,exports){ +},{}],310:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1];module.exports=dot; -},{}],310:[function(require,module,exports){ +},{}],311:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1];module.exports=equals; -},{}],311:[function(require,module,exports){ +},{}],312:[function(require,module,exports){ const fromAngleRadians=require("./fromAngleRadians"),fromAngleDegrees=(e,r)=>fromAngleRadians(e,.017453292519943295*r);module.exports=fromAngleDegrees; -},{"./fromAngleRadians":312}],312:[function(require,module,exports){ +},{"./fromAngleRadians":313}],313:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromAngleRadians=(s,o)=>(s[0]=cos(o),s[1]=sin(o),s);module.exports=fromAngleRadians; -},{"../utils/trigonometry":297}],313:[function(require,module,exports){ +},{"../utils/trigonometry":298}],314:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o);module.exports=fromScalar; -},{}],314:[function(require,module,exports){ +},{}],315:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r)=>{const t=create();return t[0]=e,t[1]=r,t};module.exports=fromValues; -},{"./create":305}],315:[function(require,module,exports){ +},{"./create":306}],316:[function(require,module,exports){ module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),angleDegrees:require("./angleDegrees"),angleRadians:require("./angleRadians"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromAngleDegrees:require("./fromAngleDegrees"),fromAngleRadians:require("./fromAngleRadians"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normal:require("./normal"),normalize:require("./normalize"),rotate:require("./rotate"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")}; -},{"./abs":298,"./add":299,"./angle":300,"./angleDegrees":301,"./angleRadians":302,"./clone":303,"./copy":304,"./create":305,"./cross":306,"./distance":307,"./divide":308,"./dot":309,"./equals":310,"./fromAngleDegrees":311,"./fromAngleRadians":312,"./fromScalar":313,"./fromValues":314,"./length":316,"./lerp":317,"./max":318,"./min":319,"./multiply":320,"./negate":321,"./normal":322,"./normalize":323,"./rotate":324,"./scale":325,"./snap":326,"./squaredDistance":327,"./squaredLength":328,"./subtract":329,"./toString":330,"./transform":331}],316:[function(require,module,exports){ +},{"./abs":299,"./add":300,"./angle":301,"./angleDegrees":302,"./angleRadians":303,"./clone":304,"./copy":305,"./create":306,"./cross":307,"./distance":308,"./divide":309,"./dot":310,"./equals":311,"./fromAngleDegrees":312,"./fromAngleRadians":313,"./fromScalar":314,"./fromValues":315,"./length":317,"./lerp":318,"./max":319,"./min":320,"./multiply":321,"./negate":322,"./normal":323,"./normalize":324,"./rotate":325,"./scale":326,"./snap":327,"./squaredDistance":328,"./squaredLength":329,"./subtract":330,"./toString":331,"./transform":332}],317:[function(require,module,exports){ const length=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]);module.exports=length; -},{}],317:[function(require,module,exports){ +},{}],318:[function(require,module,exports){ const lerp=(e,r,o,t)=>{const l=r[0],n=r[1];return e[0]=l+t*(o[0]-l),e[1]=n+t*(o[1]-n),e};module.exports=lerp; -},{}],318:[function(require,module,exports){ +},{}],319:[function(require,module,exports){ const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a);module.exports=max; -},{}],319:[function(require,module,exports){ +},{}],320:[function(require,module,exports){ const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m);module.exports=min; -},{}],320:[function(require,module,exports){ +},{}],321:[function(require,module,exports){ const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l);module.exports=multiply; -},{}],321:[function(require,module,exports){ +},{}],322:[function(require,module,exports){ const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e);module.exports=negate; -},{}],322:[function(require,module,exports){ +},{}],323:[function(require,module,exports){ const{TAU:TAU}=require("../constants"),create=require("./create"),rotate=require("./rotate"),normal=(e,r)=>rotate(e,r,create(),TAU/4);module.exports=normal; -},{"../constants":218,"./create":305,"./rotate":324}],323:[function(require,module,exports){ +},{"../constants":219,"./create":306,"./rotate":325}],324:[function(require,module,exports){ const normalize=(t,e)=>{const o=e[0],r=e[1];let n=o*o+r*r;return n>0&&(n=1/Math.sqrt(n)),t[0]=o*n,t[1]=r*n,t};module.exports=normalize; -},{}],324:[function(require,module,exports){ +},{}],325:[function(require,module,exports){ const rotate=(t,o,e,r)=>{const s=o[0]-e[0],a=o[1]-e[1],n=Math.cos(r),c=Math.sin(r);return t[0]=s*n-a*c+e[0],t[1]=s*c+a*n+e[1],t};module.exports=rotate; -},{}],325:[function(require,module,exports){ +},{}],326:[function(require,module,exports){ const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e);module.exports=scale; -},{}],326:[function(require,module,exports){ +},{}],327:[function(require,module,exports){ const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n);module.exports=snap; -},{}],327:[function(require,module,exports){ +},{}],328:[function(require,module,exports){ const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1];return t*t+n*n};module.exports=squaredDistance; -},{}],328:[function(require,module,exports){ +},{}],329:[function(require,module,exports){ const squaredLength=e=>{const t=e[0],n=e[1];return t*t+n*n};module.exports=squaredLength; -},{}],329:[function(require,module,exports){ +},{}],330:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t);module.exports=subtract; -},{}],330:[function(require,module,exports){ +},{}],331:[function(require,module,exports){ const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}]`;module.exports=toString; -},{}],331:[function(require,module,exports){ +},{}],332:[function(require,module,exports){ const transform=(r,o,t)=>{const n=o[0],s=o[1];return r[0]=t[0]*n+t[4]*s+t[12],r[1]=t[1]*n+t[5]*s+t[13],r};module.exports=transform; -},{}],332:[function(require,module,exports){ +},{}],333:[function(require,module,exports){ const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a[2]=Math.abs(s[2]),a);module.exports=abs; -},{}],333:[function(require,module,exports){ +},{}],334:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d);module.exports=add; -},{}],334:[function(require,module,exports){ +},{}],335:[function(require,module,exports){ const dot=require("./dot"),angle=(t,a)=>{const o=t[0],e=t[1],r=t[2],n=a[0],s=a[1],h=a[2],M=Math.sqrt(o*o+e*e+r*r)*Math.sqrt(n*n+s*s+h*h),d=M&&dot(t,a)/M;return Math.acos(Math.min(Math.max(d,-1),1))};module.exports=angle; -},{"./dot":341}],335:[function(require,module,exports){ +},{"./dot":342}],336:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone; -},{"./create":337}],336:[function(require,module,exports){ +},{"./create":338}],337:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy; -},{}],337:[function(require,module,exports){ +},{}],338:[function(require,module,exports){ const create=()=>[0,0,0];module.exports=create; -},{}],338:[function(require,module,exports){ +},{}],339:[function(require,module,exports){ const cross=(s,o,r)=>{const c=o[0],t=o[1],e=o[2],n=r[0],u=r[1],d=r[2];return s[0]=t*d-e*u,s[1]=e*n-c*d,s[2]=c*u-t*n,s};module.exports=cross; -},{}],339:[function(require,module,exports){ +},{}],340:[function(require,module,exports){ const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1],c=s[2]-t[2];return Math.sqrt(e*e+n*n+c*c)};module.exports=distance; -},{}],340:[function(require,module,exports){ +},{}],341:[function(require,module,exports){ const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d[2]=e[2]/i[2],d);module.exports=divide; -},{}],341:[function(require,module,exports){ +},{}],342:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2];module.exports=dot; -},{}],342:[function(require,module,exports){ +},{}],343:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals; -},{}],343:[function(require,module,exports){ +},{}],344:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o);module.exports=fromScalar; -},{}],344:[function(require,module,exports){ +},{}],345:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues; -},{"./create":337}],345:[function(require,module,exports){ +},{"./create":338}],346:[function(require,module,exports){ const fromVector2=(o,r,e=0)=>(o[0]=r[0],o[1]=r[1],o[2]=e,o);module.exports=fromVector2; -},{}],346:[function(require,module,exports){ +},{}],347:[function(require,module,exports){ module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),fromVec2:require("./fromVec2"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normalize:require("./normalize"),orthogonal:require("./orthogonal"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")}; -},{"./abs":332,"./add":333,"./angle":334,"./clone":335,"./copy":336,"./create":337,"./cross":338,"./distance":339,"./divide":340,"./dot":341,"./equals":342,"./fromScalar":343,"./fromValues":344,"./fromVec2":345,"./length":347,"./lerp":348,"./max":349,"./min":350,"./multiply":351,"./negate":352,"./normalize":353,"./orthogonal":354,"./rotateX":355,"./rotateY":356,"./rotateZ":357,"./scale":358,"./snap":359,"./squaredDistance":360,"./squaredLength":361,"./subtract":362,"./toString":363,"./transform":364}],347:[function(require,module,exports){ +},{"./abs":333,"./add":334,"./angle":335,"./clone":336,"./copy":337,"./create":338,"./cross":339,"./distance":340,"./divide":341,"./dot":342,"./equals":343,"./fromScalar":344,"./fromValues":345,"./fromVec2":346,"./length":348,"./lerp":349,"./max":350,"./min":351,"./multiply":352,"./negate":353,"./normalize":354,"./orthogonal":355,"./rotateX":356,"./rotateY":357,"./rotateZ":358,"./scale":359,"./snap":360,"./squaredDistance":361,"./squaredLength":362,"./subtract":363,"./toString":364,"./transform":365}],348:[function(require,module,exports){ const length=t=>{const e=t[0],n=t[1],o=t[2];return Math.sqrt(e*e+n*n+o*o)};module.exports=length; -},{}],348:[function(require,module,exports){ +},{}],349:[function(require,module,exports){ const lerp=(e,l,o,p)=>(e[0]=l[0]+p*(o[0]-l[0]),e[1]=l[1]+p*(o[1]-l[1]),e[2]=l[2]+p*(o[2]-l[2]),e);module.exports=lerp; -},{}],349:[function(require,module,exports){ +},{}],350:[function(require,module,exports){ const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a[2]=Math.max(m[2],x[2]),a);module.exports=max; -},{}],350:[function(require,module,exports){ +},{}],351:[function(require,module,exports){ const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m[2]=Math.min(n[2],i[2]),m);module.exports=min; -},{}],351:[function(require,module,exports){ +},{}],352:[function(require,module,exports){ const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l[2]=t[2]*m[2],l);module.exports=multiply; -},{}],352:[function(require,module,exports){ +},{}],353:[function(require,module,exports){ const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e);module.exports=negate; -},{}],353:[function(require,module,exports){ +},{}],354:[function(require,module,exports){ const normalize=(t,e)=>{const o=e[0],r=e[1],n=e[2];let l=o*o+r*r+n*n;return l>0&&(l=1/Math.sqrt(l)),t[0]=o*l,t[1]=r*l,t[2]=n*l,t};module.exports=normalize; -},{}],354:[function(require,module,exports){ +},{}],355:[function(require,module,exports){ const abs=require("./abs"),create=require("./create"),cross=require("./cross"),orthogonal=(r,e)=>{const o=abs(create(),e),s=0+(o[0]{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[0],n[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),n[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateX; -},{}],356:[function(require,module,exports){ +},{}],357:[function(require,module,exports){ const rotateY=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),n[1]=e[1],n[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateY; -},{}],357:[function(require,module,exports){ +},{}],358:[function(require,module,exports){ const rotateZ=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],n[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),n[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=o[2],t};module.exports=rotateZ; -},{}],358:[function(require,module,exports){ +},{}],359:[function(require,module,exports){ const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e[2]=s[2]*c,e);module.exports=scale; -},{}],359:[function(require,module,exports){ +},{}],360:[function(require,module,exports){ const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n[2]=Math.round(o[2]/a)*a+0,n);module.exports=snap; -},{}],360:[function(require,module,exports){ +},{}],361:[function(require,module,exports){ const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1],r=s[2]-e[2];return t*t+n*n+r*r};module.exports=squaredDistance; -},{}],361:[function(require,module,exports){ +},{}],362:[function(require,module,exports){ const squaredLength=e=>{const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r};module.exports=squaredLength; -},{}],362:[function(require,module,exports){ +},{}],363:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t);module.exports=subtract; -},{}],363:[function(require,module,exports){ +},{}],364:[function(require,module,exports){ const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)}]`;module.exports=toString; -},{}],364:[function(require,module,exports){ +},{}],365:[function(require,module,exports){ const transform=(r,t,o)=>{const n=t[0],s=t[1],e=t[2];let m=o[3]*n+o[7]*s+o[11]*e+o[15];return m=m||1,r[0]=(o[0]*n+o[4]*s+o[8]*e+o[12])/m,r[1]=(o[1]*n+o[5]*s+o[9]*e+o[13])/m,r[2]=(o[2]*n+o[6]*s+o[10]*e+o[14])/m,r};module.exports=transform; -},{}],365:[function(require,module,exports){ +},{}],366:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r};module.exports=clone; -},{"./create":367}],366:[function(require,module,exports){ +},{"./create":368}],367:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o);module.exports=copy; -},{}],367:[function(require,module,exports){ +},{}],368:[function(require,module,exports){ const create=()=>[0,0,0,0];module.exports=create; -},{}],368:[function(require,module,exports){ +},{}],369:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2]+o[3]*t[3];module.exports=dot; -},{}],369:[function(require,module,exports){ +},{}],370:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3];module.exports=equals; -},{}],370:[function(require,module,exports){ +},{}],371:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o[3]=r,o);module.exports=fromScalar; -},{}],371:[function(require,module,exports){ +},{}],372:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t,o)=>{const a=create();return a[0]=e,a[1]=r,a[2]=t,a[3]=o,a};module.exports=fromValues; -},{"./create":367}],372:[function(require,module,exports){ +},{"./create":368}],373:[function(require,module,exports){ module.exports={clone:require("./clone"),copy:require("./copy"),create:require("./create"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),toString:require("./toString"),transform:require("./transform")}; -},{"./clone":365,"./copy":366,"./create":367,"./dot":368,"./equals":369,"./fromScalar":370,"./fromValues":371,"./toString":373,"./transform":374}],373:[function(require,module,exports){ +},{"./clone":366,"./copy":367,"./create":368,"./dot":369,"./equals":370,"./fromScalar":371,"./fromValues":372,"./toString":374,"./transform":375}],374:[function(require,module,exports){ const toString=t=>`(${t[0].toFixed(9)}, ${t[1].toFixed(9)}, ${t[2].toFixed(9)}, ${t[3].toFixed(9)})`;module.exports=toString; -},{}],374:[function(require,module,exports){ +},{}],375:[function(require,module,exports){ const transform=(r,o,t)=>{const[n,s,e,m]=o;return r[0]=t[0]*n+t[4]*s+t[8]*e+t[12]*m,r[1]=t[1]*n+t[5]*s+t[9]*e+t[13]*m,r[2]=t[2]*n+t[6]*s+t[10]*e+t[14]*m,r[3]=t[3]*n+t[7]*s+t[11]*e+t[15]*m,r};module.exports=transform; -},{}],375:[function(require,module,exports){ +},{}],376:[function(require,module,exports){ const{EPS:EPS}=require("../maths/constants"),calculateEpsilonFromBounds=(o,t)=>{let e=0;for(let l=0;l{if(0===(e=flatten(e)).length)throw new Error("measureAggregateArea: no geometries supplied");const r=measureArea(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateArea; -},{"../utils/flatten":522,"./measureArea":381}],378:[function(require,module,exports){ +},{"../utils/flatten":523,"./measureArea":382}],379:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec3min=require("../maths/vec3/min"),vec3max=require("../maths/vec3/max"),measureBoundingBox=require("./measureBoundingBox"),measureAggregateBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateBoundingBox: no geometries supplied");const r=measureBoundingBox(e);if(1===e.length)return r;const u=[[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]];return r.reduce((e,r)=>e=[vec3min(e[0],e[0],r[0]),vec3max(e[1],e[1],r[1])],u)};module.exports=measureAggregateBoundingBox; -},{"../maths/vec3/max":349,"../maths/vec3/min":350,"../utils/flatten":522,"./measureBoundingBox":382}],379:[function(require,module,exports){ +},{"../maths/vec3/max":350,"../maths/vec3/min":351,"../utils/flatten":523,"./measureBoundingBox":383}],380:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureAggregateBoundingBox=require("./measureAggregateBoundingBox"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),measureAggregateEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateEpsilon: no geometries supplied");const o=measureAggregateBoundingBox(e);let r=0;return r=e.reduce((e,o)=>path2.isA(o)||geom2.isA(o)?Math.max(e,2):geom3.isA(o)?Math.max(e,3):0,r),calculateEpsilonFromBounds(o,r)};module.exports=measureAggregateEpsilon; -},{"../geometries":174,"../utils/flatten":522,"./calculateEpsilonFromBounds":375,"./measureAggregateBoundingBox":378}],380:[function(require,module,exports){ +},{"../geometries":175,"../utils/flatten":523,"./calculateEpsilonFromBounds":376,"./measureAggregateBoundingBox":379}],381:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureVolume=require("./measureVolume"),measureAggregateVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateVolume: no geometries supplied");const r=measureVolume(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateVolume; -},{"../utils/flatten":522,"./measureVolume":388}],381:[function(require,module,exports){ +},{"../utils/flatten":523,"./measureVolume":389}],382:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureAreaOfPath2=()=>0,measureAreaOfGeom2=e=>{let r=cache.get(e);if(r)return r;return r=geom2.toSides(e).reduce((e,r)=>e+(r[0][0]*r[1][1]-r[0][1]*r[1][0]),0),r*=.5,cache.set(e,r),r},measureAreaOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureArea(r),0),cache.set(e,r),r},measureArea=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?measureAreaOfGeom2(e):geom3.isA(e)?measureAreaOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureArea; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186,"../geometries/poly3":203,"../utils/flatten":522}],382:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187,"../geometries/poly3":204,"../utils/flatten":523}],383:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2=e=>{let o=cache.get(e);if(o)return o;const t=path2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);if(o)return o;const t=geom2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);if(o)return o;const t=geom3.toPolygons(e);let n=vec3.create();if(t.length>0){const e=poly3.toPoints(t[0]);vec3.copy(n,e[0])}let r=vec3.clone(n);return t.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(r,r,e)})}),n=[n[0],n[1],n[2]],r=[r[0],r[1],r[2]],o=[n,r],cache.set(e,o),o},measureBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureBoundingBoxOfPath2(e):geom2.isA(e)?measureBoundingBoxOfGeom2(e):geom3.isA(e)?measureBoundingBoxOfGeom3(e):[[0,0,0],[0,0,0]]);return 1===o.length?o[0]:o};module.exports=measureBoundingBox; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186,"../geometries/poly3":203,"../maths/vec2":315,"../maths/vec3":346,"../utils/flatten":522}],383:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187,"../geometries/poly3":204,"../maths/vec2":316,"../maths/vec3":347,"../utils/flatten":523}],384:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cacheOfBoundingSpheres=new WeakMap,measureBoundingSphereOfPath2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=path2.toPoints(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o,0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom2.toSides(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o[0],0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e[0]))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom3=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom3.toPolygons(e);if(c.length>0){let e=0;c.forEach(t=>{poly3.toPoints(t).forEach(t=>{vec3.add(r,r,t),e++})}),vec3.scale(r,r,1/e),c.forEach(e=>{poly3.toPoints(e).forEach(e=>{o=Math.max(o,vec3.squaredDistance(r,e))})}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphere=(...e)=>{const t=(e=flatten(e)).map(e=>path2.isA(e)?measureBoundingSphereOfPath2(e):geom2.isA(e)?measureBoundingSphereOfGeom2(e):geom3.isA(e)?measureBoundingSphereOfGeom3(e):[[0,0,0],0]);return 1===t.length?t[0]:t};module.exports=measureBoundingSphere; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186,"../geometries/poly3":203,"../maths/vec2":315,"../maths/vec3":346,"../utils/flatten":522}],384:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187,"../geometries/poly3":204,"../maths/vec2":316,"../maths/vec3":347,"../utils/flatten":523}],385:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureCenter=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[0][0]+(n[1][0]-n[0][0])/2,n[0][1]+(n[1][1]-n[0][1])/2,n[0][2]+(n[1][2]-n[0][2])/2]});return 1===n.length?n[0]:n};module.exports=measureCenter; -},{"../utils/flatten":522,"./measureBoundingBox":382}],385:[function(require,module,exports){ +},{"../utils/flatten":523,"./measureBoundingBox":383}],386:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),cacheOfCenterOfMass=new WeakMap,measureCenterOfMassGeom2=e=>{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;const s=geom2.toSides(e);let r=0,c=0,a=0;if(s.length>0){for(let e=0;e{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;t=vec3.create();const s=geom3.toPolygons(e);if(0===s.length)return t;let r=0;const c=vec3.create();return s.forEach(e=>{const s=e.vertices;for(let e=0;e{const t=(e=flatten(e)).map(e=>geom2.isA(e)?measureCenterOfMassGeom2(e):geom3.isA(e)?measureCenterOfMassGeom3(e):[0,0,0]);return 1===t.length?t[0]:t};module.exports=measureCenterOfMass; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../maths/vec3":346,"../utils/flatten":522}],386:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../maths/vec3":347,"../utils/flatten":523}],387:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureDimensions=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[1][0]-n[0][0],n[1][1]-n[0][1],n[1][2]-n[0][2]]});return 1===n.length?n[0]:n};module.exports=measureDimensions; -},{"../utils/flatten":522,"./measureBoundingBox":382}],387:[function(require,module,exports){ +},{"../utils/flatten":523,"./measureBoundingBox":383}],388:[function(require,module,exports){ const flatten=require("../utils/flatten"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),measureBoundingBox=require("./measureBoundingBox"),measureEpsilonOfPath2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom3=e=>calculateEpsilonFromBounds(measureBoundingBox(e),3),measureEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureEpsilonOfPath2(e):geom2.isA(e)?measureEpsilonOfGeom2(e):geom3.isA(e)?measureEpsilonOfGeom3(e):0);return 1===o.length?o[0]:o};module.exports=measureEpsilon; -},{"../geometries":174,"../utils/flatten":522,"./calculateEpsilonFromBounds":375,"./measureBoundingBox":382}],388:[function(require,module,exports){ +},{"../geometries":175,"../utils/flatten":523,"./calculateEpsilonFromBounds":376,"./measureBoundingBox":383}],389:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureVolumeOfPath2=()=>0,measureVolumeOfGeom2=()=>0,measureVolumeOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureSignedVolume(r),0),cache.set(e,r),r},measureVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?0:geom3.isA(e)?measureVolumeOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureVolume; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186,"../geometries/poly3":203,"../utils/flatten":522}],389:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187,"../geometries/poly3":204,"../utils/flatten":523}],390:[function(require,module,exports){ const vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),fromFakePolygon=(e,o)=>{if(o.vertices.length<4)return null;const r=[],n=o.vertices.filter((e,o)=>e[2]>0&&(r.push(o),!0));if(2!==n.length)throw new Error("Assertion failed: fromFakePolygon: not enough points found");const t=n.map(o=>{const r=Math.round(o[0]/e)*e+0,n=Math.round(o[1]/e)*e+0;return vec2.fromValues(r,n)});if(vec2.equals(t[0],t[1]))return null;const s=r[1]-r[0];if(1!==s&&3!==s)throw new Error("Assertion failed: fromFakePolygon: unknown index ordering");return 1===s&&t.reverse(),t},fromFakePolygons=(e,o)=>{const r=o.map(o=>fromFakePolygon(e,o)).filter(e=>null!==e);return geom2.create(r)};module.exports=fromFakePolygons; -},{"../../geometries/geom2":149,"../../maths/vec2":315}],390:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../maths/vec2":316}],391:[function(require,module,exports){ module.exports={intersect:require("./intersect"),scission:require("./scission"),subtract:require("./subtract"),union:require("./union")}; -},{"./intersect":391,"./scission":396,"./subtract":398,"./union":409}],391:[function(require,module,exports){ +},{"./intersect":392,"./scission":397,"./subtract":399,"./union":410}],392:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),intersectGeom2=require("./intersectGeom2"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only intersect of the types are supported");const r=e[0];return geom2.isA(r)?intersectGeom2(e):geom3.isA(r)?intersectGeom3(e):r};module.exports=intersect; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../utils/areAllShapesTheSameType":520,"../../utils/flatten":522,"./intersectGeom2":392,"./intersectGeom3":393}],392:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../utils/areAllShapesTheSameType":521,"../../utils/flatten":523,"./intersectGeom2":393,"./intersectGeom3":394}],393:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=intersectGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=intersect; -},{"../../geometries/geom3":165,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"./fromFakePolygons":389,"./intersectGeom3":393,"./to3DWalls":402}],393:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"./fromFakePolygons":390,"./intersectGeom3":394,"./to3DWalls":403}],394:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),intersectSub=require("./intersectGeom3Sub"),intersect=(...e)=>{let t=(e=flatten(e)).shift();return e.forEach(e=>{t=intersectSub(t,e)}),t=retessellate(t)};module.exports=intersect; -},{"../../utils/flatten":522,"../modifiers/retessellate":480,"./intersectGeom3Sub":394}],394:[function(require,module,exports){ +},{"../../utils/flatten":523,"../modifiers/retessellate":481,"./intersectGeom3Sub":395}],395:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),intersectGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.create();const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),t.clipTo(r),t.invert(),r.clipTo(t),t.clipTo(r),r.addPolygons(t.allPolygons()),r.invert();const n=r.allPolygons();return geom3.create(n)};module.exports=intersectGeom3Sub; -},{"../../geometries/geom3":165,"./mayOverlap":395,"./trees":406}],395:[function(require,module,exports){ +},{"../../geometries/geom3":166,"./mayOverlap":396,"./trees":407}],396:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),measureBoundingBox=require("../../measurements/measureBoundingBox"),mayOverlap=(e,n)=>{if(0===e.polygons.length||0===n.polygons.length)return!1;const o=measureBoundingBox(e),r=o[0],s=o[1],u=measureBoundingBox(n),a=u[0],t=u[1];return!(a[0]-s[0]>EPS)&&(!(r[0]-t[0]>EPS)&&(!(a[1]-s[1]>EPS)&&(!(r[1]-t[1]>EPS)&&(!(a[2]-s[2]>EPS)&&!(r[2]-t[2]>EPS)))))};module.exports=mayOverlap; -},{"../../maths/constants":218,"../../measurements/measureBoundingBox":382}],396:[function(require,module,exports){ +},{"../../maths/constants":219,"../../measurements/measureBoundingBox":383}],397:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),scissionGeom3=require("./scissionGeom3"),scission=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>geom3.isA(e)?scissionGeom3(e):e);return 1===s.length?s[0]:s};module.exports=scission; -},{"../../geometries/geom3":165,"../../utils/flatten":522,"./scissionGeom3":397}],397:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../utils/flatten":523,"./scissionGeom3":398}],398:[function(require,module,exports){ const vec3=require("../../maths/vec3"),measureEpsilon=require("../../measurements/measureEpsilon"),geom3=require("../../geometries/geom3"),sortNb=e=>e.sort((e,s)=>e-s).filter((e,s,o)=>!s||e!==o[s-1]),insertMapping=(e,s,o)=>{const t=`${s}`,n=e.get(t);void 0===n?e.set(t,[o]):n.push(o)},findMapping=(e,s)=>{const o=`${s}`;return e.get(o)},scissionGeom3=e=>{const s=measureEpsilon(e),o=geom3.toPolygons(e),t=o.length,n=new Map,r=vec3.create();o.forEach((e,o)=>{e.vertices.forEach(e=>{insertMapping(n,vec3.snap(r,e,s),o)})});const c=o.map(e=>{let o=[];return e.vertices.forEach(e=>{o=o.concat(findMapping(n,vec3.snap(r,e,s)))}),{e:1,d:sortNb(o)}});n.clear();let i=0;const a=c.length;for(let e=0;e0){const o=new Array(t);o[e]=!0;do{i=0,o.forEach((e,s)=>{const t=c[s];if(t.e>0){t.e=-1;for(let e=0;e0);s.indexes=o}}const p=[];for(let e=0;es.push(o[t])),p.push(geom3.create(s))}return p};module.exports=scissionGeom3; -},{"../../geometries/geom3":165,"../../maths/vec3":346,"../../measurements/measureEpsilon":387}],398:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../maths/vec3":347,"../../measurements/measureEpsilon":388}],399:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),subtractGeom2=require("./subtractGeom2"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only subtract of the types are supported");const r=e[0];return geom2.isA(r)?subtractGeom2(e):geom3.isA(r)?subtractGeom3(e):r};module.exports=subtract; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../utils/areAllShapesTheSameType":520,"../../utils/flatten":522,"./subtractGeom2":399,"./subtractGeom3":400}],399:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../utils/areAllShapesTheSameType":521,"../../utils/flatten":523,"./subtractGeom2":400,"./subtractGeom3":401}],400:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=subtractGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=subtract; -},{"../../geometries/geom3":165,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"./fromFakePolygons":389,"./subtractGeom3":400,"./to3DWalls":402}],400:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"./fromFakePolygons":390,"./subtractGeom3":401,"./to3DWalls":403}],401:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),subtractSub=require("./subtractGeom3Sub"),subtract=(...t)=>{let e=(t=flatten(t)).shift();return t.forEach(t=>{e=subtractSub(e,t)}),e=retessellate(e)};module.exports=subtract; -},{"../../utils/flatten":522,"../modifiers/retessellate":480,"./subtractGeom3Sub":401}],401:[function(require,module,exports){ +},{"../../utils/flatten":523,"../modifiers/retessellate":481,"./subtractGeom3Sub":402}],402:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),subtractGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.clone(e);const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),r.clipTo(t),t.clipTo(r,!0),r.addPolygons(t.allPolygons()),r.invert();const l=r.allPolygons();return geom3.create(l)};module.exports=subtractGeom3Sub; -},{"../../geometries/geom3":165,"./mayOverlap":395,"./trees":406}],402:[function(require,module,exports){ +},{"../../geometries/geom3":166,"./mayOverlap":396,"./trees":407}],403:[function(require,module,exports){ const vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),to3DWall=(e,o,r)=>{const c=[vec3.fromVec2(vec3.create(),r[0],e),vec3.fromVec2(vec3.create(),r[1],e),vec3.fromVec2(vec3.create(),r[1],o),vec3.fromVec2(vec3.create(),r[0],o)];return poly3.create(c)},to3DWalls=(e,o)=>{const r=geom2.toSides(o).map(o=>to3DWall(e.z0,e.z1,o));return geom3.create(r)};module.exports=to3DWalls; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/poly3":203,"../../maths/vec3":346}],403:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/poly3":204,"../../maths/vec3":347}],404:[function(require,module,exports){ const plane=require("../../../maths/plane"),poly3=require("../../../geometries/poly3");class Node{constructor(e){this.plane=null,this.front=null,this.back=null,this.polygontreenodes=[],this.parent=e}invert(){const e=[this];let o;for(let n=0;n0&&l.push({node:n.front,polygontreenodes:p});const h=s.length;if(n.back&&h>0)l.push({node:n.back,polygontreenodes:s});else for(let e=0;e0&&e.rootnode.clipPolygons(n.polygontreenodes,o),n.front&&t.push(n.front),n.back&&t.push(n.back),n=t.pop()}while(void 0!==n)}addPolygonTreeNodes(e){let o={node:this,polygontreenodes:e};const n=[];do{const e=o.node,t=o.polygontreenodes;if(0===t.length){o=n.pop();continue}if(!e.plane){let o=0;const n=t[o=Math.floor(t.length/2)].getPolygon();e.plane=poly3.plane(n)}const l=[],s=[],p=t.length;for(let o=0;o0){e.front||(e.front=new Node(e)),p===l.length&&0===s.length?e.front.polygontreenodes=l:n.push({node:e.front,polygontreenodes:l})}if(s.length>0){e.back||(e.back=new Node(e)),p===s.length&&0===l.length?e.back.polygontreenodes=s:n.push({node:e.back,polygontreenodes:s})}o=n.pop()}while(void 0!==o)}}module.exports=Node; -},{"../../../geometries/poly3":203,"../../../maths/plane":287}],404:[function(require,module,exports){ +},{"../../../geometries/poly3":204,"../../../maths/plane":288}],405:[function(require,module,exports){ const{EPS:EPS}=require("../../../maths/constants"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitPolygonByPlane=require("./splitPolygonByPlane");class PolygonTreeNode{constructor(e,t){this.parent=e,this.children=[],this.polygon=t,this.removed=!1}addPolygons(e){if(!this.isRootNode())throw new Error("Assertion failed");const t=this;e.forEach(e=>{t.addChild(e)})}remove(){if(!this.removed){this.removed=!0,this.polygon=null;const e=this.parent.children,t=e.indexOf(this);if(t<0)throw new Error("Assertion failed");e.splice(t,1),this.parent.recursivelyInvalidatePolygon()}}isRemoved(){return this.removed}isRootNode(){return!this.parent}invert(){if(!this.isRootNode())throw new Error("Assertion failed");this.invertSub()}getPolygon(){if(!this.polygon)throw new Error("Assertion failed");return this.polygon}getPolygons(e){let t=[this];const o=[t];let n,l,s,i;for(n=0;n0&&o.push(i.children)}splitByPlane(e,t,o,n,l){if(this.children.length){const s=[this.children];let i,r,h,c,d;for(i=0;i0?s.push(c.children):c._splitByPlane(e,t,o,n,l)}else this._splitByPlane(e,t,o,n,l)}_splitByPlane(e,t,o,n,l){const s=this.polygon;if(s){const i=poly3.measureBoundingSphere(s),r=i[3]+EPS,h=i,c=vec3.dot(e,h)-e[3];if(c>r)n.push(this);else if(c<-r)l.push(this);else{const i=splitPolygonByPlane(e,s);switch(i.type){case 0:t.push(this);break;case 1:o.push(this);break;case 2:n.push(this);break;case 3:l.push(this);break;case 4:if(i.front){const e=this.addChild(i.front);n.push(e)}if(i.back){const e=this.addChild(i.back);l.push(e)}}}}}addChild(e){const t=new PolygonTreeNode(this,e);return this.children.push(t),t}invertSub(){let e=[this];const t=[e];let o,n,l,s;for(o=0;o0&&t.push(s.children)}recursivelyInvalidatePolygon(){this.polygon=null,this.parent&&this.parent.recursivelyInvalidatePolygon()}clear(){let e=[this];const t=[e];for(let o=0;o0&&t.push(n.children),n.children=[]}}}toString(){let e="",t=[this];const o=[t];let n,l,s,i;for(n=0;n0&&o.push(i.children)}return e}}module.exports=PolygonTreeNode; -},{"../../../geometries/poly3":203,"../../../maths/constants":218,"../../../maths/vec3":346,"./splitPolygonByPlane":408}],405:[function(require,module,exports){ +},{"../../../geometries/poly3":204,"../../../maths/constants":219,"../../../maths/vec3":347,"./splitPolygonByPlane":409}],406:[function(require,module,exports){ const Node=require("./Node"),PolygonTreeNode=require("./PolygonTreeNode");class Tree{constructor(o){this.polygonTree=new PolygonTreeNode,this.rootnode=new Node(null),o&&this.addPolygons(o)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(o,e=!1){this.rootnode.clipTo(o,e)}allPolygons(){const o=[];return this.polygonTree.getPolygons(o),o}addPolygons(o){const e=new Array(o.length);for(let r=0;r{const n=vec3.subtract(vec3.create(),c,t);let s=(e[3]-vec3.dot(e,t))/vec3.dot(e,n);return Number.isNaN(s)&&(s=0),s>1&&(s=1),s<0&&(s=0),vec3.scale(n,n,s),vec3.add(n,t,n),n};module.exports=splitLineSegmentByPlane; -},{"../../../maths/vec3":346}],408:[function(require,module,exports){ +},{"../../../maths/vec3":347}],409:[function(require,module,exports){ const{EPS:EPS}=require("../../../maths/constants"),plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitLineSegmentByPlane=require("./splitLineSegmentByPlane"),splitPolygonByPlane=(e,t)=>{const l={type:null,front:null,back:null},n=t.vertices,s=n.length,o=poly3.plane(t);if(plane.equals(o,e))l.type=0;else{let t=!1,p=!1;const i=[],c=-EPS;for(let l=0;lEPS&&(t=!0),s=s&&(r=0);const a=i[r];if(c===a)c?p.push(o):t.push(o);else{const l=n[r],s=splitLineSegmentByPlane(e,o,l);c?(p.push(o),p.push(s),t.push(s)):(t.push(o),t.push(s),p.push(s))}c=a}const r=EPS*EPS;if(p.length>=3){let e=p[p.length-1];for(let t=0;t=3){let e=t[t.length-1];for(let l=0;l=3&&(l.front=poly3.fromPointsAndPlane(t,o)),p.length>=3&&(l.back=poly3.fromPointsAndPlane(p,o))}else l.type=3;else l.type=2;else{const t=vec3.dot(e,o);l.type=t>=0?0:1}}return l};module.exports=splitPolygonByPlane; -},{"../../../geometries/poly3":203,"../../../maths/constants":218,"../../../maths/plane":287,"../../../maths/vec3":346,"./splitLineSegmentByPlane":407}],409:[function(require,module,exports){ +},{"../../../geometries/poly3":204,"../../../maths/constants":219,"../../../maths/plane":288,"../../../maths/vec3":347,"./splitLineSegmentByPlane":408}],410:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),unionGeom2=require("./unionGeom2"),unionGeom3=require("./unionGeom3"),union=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only unions of the same type are supported");const o=e[0];return geom2.isA(o)?unionGeom2(e):geom3.isA(o)?unionGeom3(e):o};module.exports=union; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../utils/areAllShapesTheSameType":520,"../../utils/flatten":522,"./unionGeom2":410,"./unionGeom3":411}],410:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../utils/areAllShapesTheSameType":521,"../../utils/flatten":523,"./unionGeom2":411,"./unionGeom3":412}],411:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),unionGeom3=require("./unionGeom3"),union=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),n=unionGeom3(o),r=measureEpsilon(n);return fromFakePolygons(r,geom3.toPolygons(n))};module.exports=union; -},{"../../geometries/geom3":165,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"./fromFakePolygons":389,"./to3DWalls":402,"./unionGeom3":411}],411:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"./fromFakePolygons":390,"./to3DWalls":403,"./unionGeom3":412}],412:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),unionSub=require("./unionGeom3Sub"),union=(...e)=>{let t;for(e=flatten(e),t=1;t{if(!mayOverlap(e,o))return unionForNonIntersecting(e,o);const n=new Tree(geom3.toPolygons(e)),r=new Tree(geom3.toPolygons(o));n.clipTo(r,!1),r.clipTo(n),r.invert(),r.clipTo(n),r.invert();const t=n.allPolygons().concat(r.allPolygons());return geom3.create(t)},unionForNonIntersecting=(e,o)=>{let n=geom3.toPolygons(e);return n=n.concat(geom3.toPolygons(o)),geom3.create(n)};module.exports=unionSub; -},{"../../geometries/geom3":165,"./mayOverlap":395,"./trees":406}],413:[function(require,module,exports){ +},{"../../geometries/geom3":166,"./mayOverlap":396,"./trees":407}],414:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),expandGeom2=require("./expandGeom2"),expandGeom3=require("./expandGeom3"),expandPath2=require("./expandPath2"),expand=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?expandPath2(e,r):geom2.isA(r)?expandGeom2(e,r):geom3.isA(r)?expandGeom3(e,r):r);return 1===t.length?t[0]:t};module.exports=expand; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../utils/flatten":522,"./expandGeom2":414,"./expandGeom3":415,"./expandPath2":416}],414:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../utils/flatten":523,"./expandGeom2":415,"./expandGeom3":416,"./expandPath2":417}],415:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),offsetFromPoints=require("./offsetFromPoints"),expandGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:16},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o).map(o=>offsetFromPoints(e={delta:r,corners:s,closed:!0,segments:t},o)).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(n)};module.exports=expandGeom2; -},{"../../geometries/geom2":149,"./offsetFromPoints":421}],415:[function(require,module,exports){ +},{"../../geometries/geom2":150,"./offsetFromPoints":422}],416:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),union=require("../booleans/union"),expandShell=require("./expandShell"),expandGeom3=(e,n)=>{const{delta:o,corners:r,segments:t}=Object.assign({},{delta:1,corners:"round",segments:12},e);if("round"!==r)throw new Error('corners must be "round" for 3D geometries');if(0===geom3.toPolygons(n).length)throw new Error("the given geometry cannot be empty");const s=expandShell(e={delta:o,corners:r,segments:t},n);return union(n,s)};module.exports=expandGeom3; -},{"../../geometries/geom3":165,"../booleans/union":409,"./expandShell":417}],416:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../booleans/union":410,"./expandShell":418}],417:[function(require,module,exports){ const area=require("../../maths/utils/area"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),createGeometryFromClosedOffsets=e=>{let{external:t,internal:r}=e;area(t)<0?t=t.reverse():r=r.reverse();const o=path2.fromPoints({closed:!0},t),s=path2.fromPoints({closed:!0},r),n=geom2.toSides(geom2.fromPoints(path2.toPoints(o))),a=geom2.toSides(geom2.fromPoints(path2.toPoints(s)));return n.push(...a),geom2.create(n)},createGeometryFromExpandedOpenPath=(e,t,r,o)=>{const{points:s,external:n,internal:a}=e,c=Math.floor(t/2),m=[],i=[];if("round"===r&&c>0){const e=Math.PI/c,t=s[s.length-1],r=vec2.angle(vec2.subtract(vec2.create(),n[n.length-1],t)),d=s[0],l=vec2.angle(vec2.subtract(vec2.create(),a[0],d));for(let s=1;s{e=Object.assign({},{delta:1,corners:"edge",segments:16},e);const{delta:r,corners:o,segments:s}=e;if(r<=0)throw new Error("the given delta must be positive for paths");if("edge"!==o&&"chamfer"!==o&&"round"!==o)throw new Error('corners must be "edge", "chamfer", or "round"');const n=t.isClosed,a=path2.toPoints(t);if(0===a.length)throw new Error("the given geometry cannot be empty");const c={points:a,external:offsetFromPoints({delta:r,corners:o,segments:s,closed:n},a),internal:offsetFromPoints({delta:-r,corners:o,segments:s,closed:n},a)};return t.isClosed?createGeometryFromClosedOffsets(c):createGeometryFromExpandedOpenPath(c,s,o,r)};module.exports=expandPath2; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"../../maths/utils/area":292,"../../maths/vec2":315,"./offsetFromPoints":421}],417:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"../../maths/utils/area":293,"../../maths/vec2":316,"./offsetFromPoints":422}],418:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),fnNumberSort=require("../../utils/fnNumberSort"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),sphere=require("../../primitives/sphere"),retessellate=require("../modifiers/retessellate"),unionGeom3Sub=require("../booleans/unionGeom3Sub"),extrudePolygon=require("./extrudePolygon"),mapPlaneToVertex=(e,t,o)=>{const n=t.toString();if(e.has(n)){e.get(n)[1].push(o)}else{const s=[t,[o]];e.set(n,s)}},mapPlaneToEdge=(e,t,o)=>{const n=t[0].toString(),s=t[1].toString(),r=n{e.findIndex(e=>e===t)<0&&e.push(t)},expandShell=(e,t)=>{const{delta:o,segments:n}=Object.assign({},{delta:1,segments:12},e);let s=geom3.create();const r=new Map,c=new Map,a=vec3.create(),l=vec3.create();return geom3.toPolygons(t).forEach((e,t)=>{const n=vec3.scale(vec3.create(),poly3.plane(e),2*o),a=poly3.transform(mat4.fromTranslation(mat4.create(),vec3.scale(vec3.create(),n,-.5)),e),l=extrudePolygon(n,a);s=unionGeom3Sub(s,l);const u=e.vertices;for(let t=0;t{const t=e[0],r=e[1],c=t[0],u=t[1],i=vec3.subtract(vec3.create(),u,c);vec3.normalize(i,i);const m=r[0],g=vec3.cross(vec3.create(),m,i);let p=[];for(let e=0;e=0&&vec3.distance(r,v)=0){f.push(r),S.push(i);const e=[d,i,r,v],t=poly3.create(e);q.push(t)}v=r,d=i}}S.reverse(),q.push(poly3.create(f)),q.push(poly3.create(S));const y=geom3.create(q);s=unionGeom3Sub(s,y)}),r.forEach(e=>{const t=e[0],r=e[1],c=r[0];let u=null,i=0;for(let e=1;e.05&&n>i&&(i=n,u=t)}u||(u=vec3.orthogonal(a,c));const m=vec3.cross(a,c,u);vec3.normalize(m,m);const g=vec3.cross(l,m,c),p=sphere({center:[t[0],t[1],t[2]],radius:o,segments:n,axes:[c,m,g]});s=unionGeom3Sub(s,p)}),retessellate(s)};module.exports=expandShell; -},{"../../geometries/geom3":165,"../../geometries/poly3":203,"../../maths/constants":218,"../../maths/mat4":267,"../../maths/vec3":346,"../../primitives/sphere":510,"../../utils/fnNumberSort":523,"../booleans/unionGeom3Sub":412,"../modifiers/retessellate":480,"./extrudePolygon":418}],418:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../geometries/poly3":204,"../../maths/constants":219,"../../maths/mat4":268,"../../maths/vec3":347,"../../primitives/sphere":511,"../../utils/fnNumberSort":524,"../booleans/unionGeom3Sub":413,"../modifiers/retessellate":481,"./extrudePolygon":419}],419:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,r)=>{vec3.dot(poly3.plane(r),e)>0&&(r=poly3.invert(r));const t=[r],o=poly3.transform(mat4.fromTranslation(mat4.create(),e),r),s=r.vertices.length;for(let e=0;e{if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");const o=t.map(t=>path2.isA(t)?offsetPath2(e,t):geom2.isA(t)?offsetGeom2(e,t):t);return 1===o.length?o[0]:o};module.exports=offset; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"../../utils/flatten":522,"./offsetGeom2":422,"./offsetPath2":423}],421:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"../../utils/flatten":523,"./offsetGeom2":423,"./offsetPath2":424}],422:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),intersect=require("../../maths/utils/intersect"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),area=require("../../maths/utils/area"),offsetFromPoints=(e,t)=>{let{delta:s,corners:c,closed:n,segments:a}=Object.assign({},{delta:1,corners:"edge",closed:!1,segments:16},e);if(Math.abs(s)0&&s>=0||r<0&&s<0;s=Math.abs(s);let i=null,l=[];const u=[],v=vec2.create(),f=t.length;for(let e=0;ee.set(t,s));const t=line2.create(),s=line2.create();u.forEach(c=>{line2.fromPoints(t,c.s0[0],c.s0[1]),line2.fromPoints(s,c.s1[0],c.s1[1]);const n=line2.intersectPointOfLines(t,s);if(Number.isFinite(n[0])&&Number.isFinite(n[1])){const t=c.s0[1],s=e.get(t);l[s]=n,l[(s+1)%l.length]=void 0}else{const t=c.s1[0],s=e.get(t);l[s]=void 0}}),l=l.filter(e=>void 0!==e)}if("round"===c){let e=Math.floor(a/4);const t=vec2.create();u.forEach(c=>{let n=vec2.angle(vec2.subtract(t,c.s1[0],c.c));if(n-=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),o&&n<0&&(n+=Math.PI)<0&&(n+=Math.PI),!o&&n>0&&(n-=Math.PI)>0&&(n-=Math.PI),0!==n){const r=n/(e=Math.floor(a*(Math.abs(n)/TAU))),o=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),i=[];for(let t=1;t0){const e=c.s0[1];let t=l.findIndex(t=>vec2.equals(e,t));t=(t+1)%l.length,l.splice(t,0,...i)}}else{const e=c.s1[0],t=l.findIndex(t=>vec2.equals(e,t));l.splice(t,1)}})}return l};module.exports=offsetFromPoints; -},{"../../maths/constants":218,"../../maths/line2":229,"../../maths/utils/area":292,"../../maths/utils/intersect":295,"../../maths/vec2":315}],422:[function(require,module,exports){ +},{"../../maths/constants":219,"../../maths/line2":230,"../../maths/utils/area":293,"../../maths/utils/intersect":296,"../../maths/vec2":316}],423:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),poly2=require("../../geometries/poly2"),offsetFromPoints=require("./offsetFromPoints"),offsetGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:0},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o),m=n.map(o=>{const m=n.reduce((e,r)=>e+poly2.arePointsInside(o,poly2.create(r)),0);return offsetFromPoints(e={delta:m%2==0?r:-r,corners:s,closed:!0,segments:t},o)}).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(m)};module.exports=offsetGeom2; -},{"../../geometries/geom2":149,"../../geometries/poly2":197,"./offsetFromPoints":421}],423:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/poly2":198,"./offsetFromPoints":422}],424:[function(require,module,exports){ const path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),offsetPath2=(e,o)=>{const s={delta:1,corners:"edge",closed:o.isClosed,segments:16},{delta:t,corners:r,closed:n,segments:c}=Object.assign({},s,e);if("edge"!==r&&"chamfer"!==r&&"round"!==r)throw new Error('corners must be "edge", "chamfer", or "round"');const d=offsetFromPoints(e={delta:t,corners:r,closed:n,segments:c},path2.toPoints(o));return path2.fromPoints({closed:n},d)};module.exports=offsetPath2; -},{"../../geometries/path2":186,"./offsetFromPoints":421}],424:[function(require,module,exports){ +},{"../../geometries/path2":187,"./offsetFromPoints":422}],425:[function(require,module,exports){ const{area:area}=require("../../../maths/utils"),{toOutlines:toOutlines}=require("../../../geometries/geom2"),{arePointsInside:arePointsInside}=require("../../../geometries/poly2"),assignHoles=e=>{const s=toOutlines(e),o=[],t=[];s.forEach((e,s)=>{const n=area(e);n<0?t.push(s):n>0&&o.push(s)});const n=[],r=[];return o.forEach((e,o)=>{const i=s[e];n[o]=[],t.forEach((e,t)=>{const a=s[e];arePointsInside([a[0]],{vertices:i})&&(n[o].push(e),r[t]||(r[t]=[]),r[t].push(o))})}),t.forEach((e,s)=>{if(r[s]&&r[s].length>1){const o=minIndex(r[s],e=>n[e].length);r[s].forEach((s,t)=>{t!==o&&(n[s]=n[s].filter(s=>s!==e))})}}),n.map((e,t)=>({solid:s[o[t]],holes:e.map(e=>s[e])}))},minIndex=(e,s)=>{let o,t;return e.forEach((e,n)=>{const r=s(e);(void 0===t||r{const i=[];for(let n=0,o=t.length;ne.x-t.x);for(let e=0;e{const n=findHoleBridge(e,t);if(!n)return t;const l=splitPolygon(n,e),i=filterPoints(n,n.next);return filterPoints(l,l.next),t===n?i:t},findHoleBridge=(e,t)=>{let n=t;const l=e.x,i=e.y;let o,r=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){const e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=l&&e>r){if(r=e,e===l){if(i===n.y)return n;if(i===n.next.y)return n.next}o=n.x=n.x&&n.x>=s&&l!==n.x&&pointInTriangle(io.x||n.x===o.x&§orContainsSector(o,n)))&&(o=n,a=t)}n=n.next}while(n!==x);return o},sectorContainsSector=(e,t)=>area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0,getLeftmost=e=>{let t=e,n=e;do{(t.x{const t=r&&r.length,i=t?r[0]*n:e.length;let x=linkedPolygon(e,0,i,n,!0);const l=[];if(!x||x.next===x.prev)return l;let o,a,y,s,p;if(t&&(x=eliminateHoles(e,r,x,n)),e.length>80*n){o=y=e[0],a=s=e[1];for(let r=n;ry&&(y=n),t>s&&(s=t)}p=0!==(p=Math.max(y-o,s-a))?1/p:0}return earcutLinked(x,l,n,o,a,p),l},earcutLinked=(e,r,n,t,i,x,l)=>{if(!e)return;!l&&x&&indexCurve(e,t,i,x);let o,a,y=e;for(;e.prev!==e.next;)if(o=e.prev,a=e.next,x?isEarHashed(e,t,i,x):isEar(e))r.push(o.i/n),r.push(e.i/n),r.push(a.i/n),removeNode(e),e=a.next,y=a.next;else if((e=a)===y){l?1===l?(e=cureLocalIntersections(filterPoints(e),r,n),earcutLinked(e,r,n,t,i,x,2)):2===l&&splitEarcut(e,r,n,t,i,x):earcutLinked(filterPoints(e),r,n,t,i,x,1);break}},isEar=e=>{const r=e.prev,n=e,t=e.next;if(area(r,n,t)>=0)return!1;let i=e.next.next;for(;i!==e.prev;){if(pointInTriangle(r.x,r.y,n.x,n.y,t.x,t.y,i.x,i.y)&&area(i.prev,i,i.next)>=0)return!1;i=i.next}return!0},isEarHashed=(e,r,n,t)=>{const i=e.prev,x=e,l=e.next;if(area(i,x,l)>=0)return!1;const o=i.xx.x?i.x>l.x?i.x:l.x:x.x>l.x?x.x:l.x,s=i.y>x.y?i.y>l.y?i.y:l.y:x.y>l.y?x.y:l.y,p=zOrder(o,a,r,n,t),u=zOrder(y,s,r,n,t);let d=e.prevZ,v=e.nextZ;for(;d&&d.z>=p&&v&&v.z<=u;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;d&&d.z>=p;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;v&&v.z<=u;){if(v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0},splitEarcut=(e,r,n,t,i,x)=>{let l=e;do{let e=l.next.next;for(;e!==l.prev;){if(l.i!==e.i&&isValidDiagonal(l,e)){let o=splitPolygon(l,e);return l=filterPoints(l,l.next),o=filterPoints(o,o.next),earcutLinked(l,r,n,t,i,x),void earcutLinked(o,r,n,t,i,x)}e=e.next}l=l.next}while(l!==e)},indexCurve=(e,r,n,t)=>{let i=e;do{null===i.z&&(i.z=zOrder(i.x,i.y,r,n,t)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,sortLinked(i,e=>e.z)},zOrder=(e,r,n,t,i)=>(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(r=1431655765&((r=858993459&((r=252645135&((r=16711935&((r=32767*(r-t)*i)|r<<8))|r<<4))|r<<2))|r<<1))<<1;module.exports=triangulate; -},{"./eliminateHoles":425,"./linkedList":427,"./linkedPolygon":429,"./triangle":431}],427:[function(require,module,exports){ +},{"./eliminateHoles":426,"./linkedList":428,"./linkedPolygon":430,"./triangle":432}],428:[function(require,module,exports){ const sortLinked=require("./linkedListSort");class Node{constructor(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}}const insertNode=(e,t,n,r)=>{const o=new Node(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o},removeNode=e=>{e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)};module.exports={Node:Node,insertNode:insertNode,removeNode:removeNode,sortLinked:sortLinked}; -},{"./linkedListSort":428}],428:[function(require,module,exports){ +},{"./linkedListSort":429}],429:[function(require,module,exports){ const sortLinked=(e,t)=>{let l,n,o,r,x,Z=1;do{n=e,e=null;let u=null;for(x=0;n;){x++,o=n;let d=0;for(l=0;l0||s>0&&o;)0!==d&&(0===s||!o||t(n)<=t(o))?(r=n,n=n.nextZ,d--):(r=o,o=o.nextZ,s--),u?u.nextZ=r:e=r,r.prevZ=u,u=r;n=o}u.nextZ=null,Z*=2}while(x>1);return e};module.exports=sortLinked; -},{}],429:[function(require,module,exports){ +},{}],430:[function(require,module,exports){ const{Node:Node,insertNode:insertNode,removeNode:removeNode}=require("./linkedList"),{area:area}=require("./triangle"),linkedPolygon=(e,n,t,r,i)=>{let o;if(i===signedArea(e,n,t,r)>0)for(let i=n;i=n;i-=r)o=insertNode(i,e[i],e[i+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o},filterPoints=(e,n)=>{if(!e)return e;n||(n=e);let t,r=e;do{if(t=!1,r.steiner||!equals(r,r.next)&&0!==area(r.prev,r,r.next))r=r.next;else{if(removeNode(r),(r=n=r.prev)===r.next)break;t=!0}}while(t||r!==n);return n},cureLocalIntersections=(e,n,t)=>{let r=e;do{const i=r.prev,o=r.next.next;!equals(i,o)&&intersects(i,r,r.next,o)&&locallyInside(i,o)&&locallyInside(o,i)&&(n.push(i.i/t),n.push(r.i/t),n.push(o.i/t),removeNode(r),removeNode(r.next),r=e=o),r=r.next}while(r!==e);return filterPoints(r)},intersectsPolygon=(e,n)=>{let t=e;do{if(t.i!==e.i&&t.next.i!==e.i&&t.i!==n.i&&t.next.i!==n.i&&intersects(t,t.next,e,n))return!0;t=t.next}while(t!==e);return!1},locallyInside=(e,n)=>area(e.prev,e,e.next)<0?area(e,n,e.next)>=0&&area(e,e.prev,n)>=0:area(e,n,e.prev)<0||area(e,e.next,n)<0,middleInside=(e,n)=>{let t=e,r=!1;const i=(e.x+n.x)/2,o=(e.y+n.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==e);return r},splitPolygon=(e,n)=>{const t=new Node(e.i,e.x,e.y),r=new Node(n.i,n.x,n.y),i=e.next,o=n.prev;return e.next=n,n.prev=e,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r},isValidDiagonal=(e,n)=>e.next.i!==n.i&&e.prev.i!==n.i&&!intersectsPolygon(e,n)&&(locallyInside(e,n)&&locallyInside(n,e)&&middleInside(e,n)&&(area(e.prev,e,n.prev)||area(e,n.prev,n))||equals(e,n)&&area(e.prev,e,e.next)>0&&area(n.prev,n,n.next)>0),intersects=(e,n,t,r)=>{const i=Math.sign(area(e,n,t)),o=Math.sign(area(e,n,r)),l=Math.sign(area(t,r,e)),a=Math.sign(area(t,r,n));return i!==o&&l!==a||(!(0!==i||!onSegment(e,t,n))||(!(0!==o||!onSegment(e,r,n))||(!(0!==l||!onSegment(t,e,r))||!(0!==a||!onSegment(t,n,r)))))},onSegment=(e,n,t)=>n.x<=Math.max(e.x,t.x)&&n.x>=Math.min(e.x,t.x)&&n.y<=Math.max(e.y,t.y)&&n.y>=Math.min(e.y,t.y),signedArea=(e,n,t,r)=>{let i=0;for(let o=n,l=t-r;oe.x===n.x&&e.y===n.y;module.exports={cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon}; -},{"./linkedList":427,"./triangle":431}],430:[function(require,module,exports){ +},{"./linkedList":428,"./triangle":432}],431:[function(require,module,exports){ const geom2=require("../../../geometries/geom2"),plane=require("../../../maths/plane"),vec2=require("../../../maths/vec2"),vec3=require("../../../maths/vec3"),calculatePlane=require("../slice/calculatePlane"),assignHoles=require("./assignHoles");class PolygonHierarchy{constructor(e){this.plane=calculatePlane(e);const s=vec3.orthogonal(vec3.create(),this.plane),c=vec3.cross(vec3.create(),this.plane,s);this.v=vec3.normalize(c,c),this.u=vec3.cross(vec3.create(),this.v,this.plane),this.basisMap=new Map;const t=e.edges.map(e=>e.map(e=>this.to2D(e))),a=geom2.create(t);this.roots=assignHoles(a)}to2D(e){const s=vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v));return this.basisMap.set(s,e),s}to3D(e){const s=this.basisMap.get(e);if(s)return s;{console.log("Warning: point not in original slice");const s=vec3.scale(vec3.create(),this.u,e[0]),c=vec3.scale(vec3.create(),this.v,e[1]),t=vec3.scale(vec3.create(),plane,plane[3]),a=vec3.add(s,s,t);return vec3.add(c,c,a)}}}module.exports=PolygonHierarchy; -},{"../../../geometries/geom2":149,"../../../maths/plane":287,"../../../maths/vec2":315,"../../../maths/vec3":346,"../slice/calculatePlane":444,"./assignHoles":424}],431:[function(require,module,exports){ +},{"../../../geometries/geom2":150,"../../../maths/plane":288,"../../../maths/vec2":316,"../../../maths/vec3":347,"../slice/calculatePlane":445,"./assignHoles":425}],432:[function(require,module,exports){ const pointInTriangle=(n,a,e,r,i,o,t,x)=>(i-t)*(a-x)-(n-t)*(o-x)>=0&&(n-t)*(r-x)-(e-t)*(a-x)>=0&&(e-t)*(o-x)-(i-t)*(r-x)>=0,area=(n,a,e)=>(a.y-n.y)*(e.x-a.x)-(a.x-n.x)*(e.y-a.y);module.exports={area:area,pointInTriangle:pointInTriangle}; -},{}],432:[function(require,module,exports){ +},{}],433:[function(require,module,exports){ const mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),repairSlice=require("./slice/repair"),extrudeWalls=require("./extrudeWalls"),defaultCallback=(e,r,l)=>{let t=null;return geom2.isA(l)&&(t=slice.fromSides(geom2.toSides(l))),poly3.isA(l)&&(t=slice.fromPoints(poly3.toPoints(l))),0===e||1===e?slice.transform(mat4.fromTranslation(mat4.create(),[0,0,e]),t):null},extrudeFromSlices=(e,r)=>{const l={numberOfSlices:2,capStart:!0,capEnd:!0,close:!1,repair:!0,callback:defaultCallback},{numberOfSlices:t,capStart:o,capEnd:c,close:s,repair:i,callback:a}=Object.assign({},l,e);if(t<2)throw new Error("numberOfSlices must be 2 or more");i&&(r=repairSlice(r));const n=t-1;let u=null,m=null,f=null,g=[];for(let e=0;e{const r={angle:TAU,startAngle:0,pitch:10,endOffset:0,segmentsPerRotation:32},{angle:a,endOffset:s,segmentsPerRotation:o,startAngle:i}=Object.assign({},r,e);let n;n=!e.pitch&&e.height?e.height/(a/TAU):e.pitch?e.pitch:r.pitch;if(o<3)throw new Error("The number of segments per rotation needs to be at least 3.");const m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const c=m.filter(e=>e[0][0]>=0);let l=slice.fromSides(m);0===c.length&&(l=slice.reverse(l));const h=Math.round(o/TAU*Math.abs(a)),g=h>=2?h:2,u=mat4.create();let f;return extrudeFromSlices({numberOfSlices:g+1,callback:(e,t,r)=>{const o=i+a/g*t,m=s/g*t,c=(o-i)/TAU*n;return mat4.multiply(u,mat4.fromTranslation(mat4.create(),[m,0,c*Math.sign(a)]),mat4.fromXRotation(mat4.create(),-TAU/4*Math.sign(a))),f=mat4.create(),mat4.multiply(f,mat4.fromZRotation(mat4.create(),o),u),slice.transform(f,r)}},l)};module.exports=extrudeHelical; -},{"../../geometries/geom2":149,"../../maths/constants":218,"../../maths/mat4":267,"./extrudeFromSlices":432,"./slice":450}],434:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../maths/constants":219,"../../maths/mat4":268,"./extrudeFromSlices":433,"./slice":451}],435:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeLinearPath2=require("./extrudeLinearPath2"),extrudeLinear=(e,...t)=>{const{height:r,twistAngle:i,twistSteps:n,repair:a}=Object.assign({},{height:1,twistAngle:0,twistSteps:1,repair:!0},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");e={offset:[0,0,r],twistAngle:i,twistSteps:n,repair:a};const s=t.map(t=>path2.isA(t)?extrudeLinearPath2(e,t):geom2.isA(t)?extrudeLinearGeom2(e,t):t);return 1===s.length?s[0]:s};module.exports=extrudeLinear; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"../../utils/flatten":522,"./extrudeLinearGeom2":435,"./extrudeLinearPath2":436}],435:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"../../utils/flatten":523,"./extrudeLinearGeom2":436,"./extrudeLinearPath2":437}],436:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeGeom2=(e,t)=>{let{offset:r,twistAngle:s,twistSteps:o,repair:i}=Object.assign({},{offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0},e);if(o<1)throw new Error("twistSteps must be 1 or more");0===s&&(o=1);const c=vec3.clone(r),m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const a=slice.fromSides(m);c[2]<0&&slice.reverse(a,a);const n=mat4.create();return extrudeFromSlices(e={numberOfSlices:o+1,capStart:!0,capEnd:!0,repair:i,callback:(e,t,r)=>{const i=t/o*s,m=vec3.scale(vec3.create(),c,t/o);return mat4.multiply(n,mat4.fromZRotation(n,i),mat4.fromTranslation(mat4.create(),m)),slice.transform(n,r)}},a)};module.exports=extrudeGeom2; -},{"../../geometries/geom2":149,"../../maths/mat4":267,"../../maths/vec3":346,"./extrudeFromSlices":432,"./slice":450}],436:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../maths/mat4":268,"../../maths/vec3":347,"./extrudeFromSlices":433,"./slice":451}],437:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudePath2=(e,r)=>{if(!r.isClosed)throw new Error("extruded path must be closed");const t=path2.toPoints(r),o=geom2.fromPoints(t);return extrudeLinearGeom2(e,o)};module.exports=extrudePath2; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"./extrudeLinearGeom2":435}],437:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"./extrudeLinearGeom2":436}],438:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeRectangularPath2=require("./extrudeRectangularPath2"),extrudeRectangularGeom2=require("./extrudeRectangularGeom2"),extrudeRectangular=(e,...t)=>{const{size:r,height:a}=Object.assign({},{size:1,height:1},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");if(r<=0)throw new Error("size must be positive");if(a<=0)throw new Error("height must be positive");const u=t.map(t=>path2.isA(t)?extrudeRectangularPath2(e,t):geom2.isA(t)?extrudeRectangularGeom2(e,t):t);return 1===u.length?u[0]:u};module.exports=extrudeRectangular; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"../../utils/flatten":522,"./extrudeRectangularGeom2":438,"./extrudeRectangularPath2":439}],438:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"../../utils/flatten":523,"./extrudeRectangularGeom2":439,"./extrudeRectangularPath2":440}],439:[function(require,module,exports){ const{area:area}=require("../../maths/utils"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularGeom2=(e,r)=>{const{size:t,height:o}=Object.assign({},{size:1,height:1},e);e.delta=t,e.offset=[0,0,o];const a=geom2.toOutlines(r);if(0===a.length)throw new Error("the given geometry cannot be empty");const n=a.map(r=>(area(r)<0&&r.reverse(),expand(e,path2.fromPoints({closed:!0},r)))).reduce((e,r)=>e.concat(geom2.toSides(r)),[]),i=geom2.create(n);return extrudeLinearGeom2(e,i)};module.exports=extrudeRectangularGeom2; -},{"../../geometries/geom2":149,"../../geometries/path2":186,"../../maths/utils":293,"../expansions/expand":413,"./extrudeLinearGeom2":435}],439:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/path2":187,"../../maths/utils":294,"../expansions/expand":414,"./extrudeLinearGeom2":436}],440:[function(require,module,exports){ const path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularPath2=(e,t)=>{const{size:r,height:n}=Object.assign({},{size:1,height:1},e);if(e.delta=r,e.offset=[0,0,n],0===path2.toPoints(t).length)throw new Error("the given geometry cannot be empty");const a=expand(e,t);return extrudeLinearGeom2(e,a)};module.exports=extrudeRectangularPath2; -},{"../../geometries/path2":186,"../expansions/expand":413,"./extrudeLinearGeom2":435}],440:[function(require,module,exports){ +},{"../../geometries/path2":187,"../expansions/expand":414,"./extrudeLinearGeom2":436}],441:[function(require,module,exports){ const{TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),{mirrorX:mirrorX}=require("../transforms/mirror"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeRotate=(e,t)=>{const r={segments:12,startAngle:0,angle:TAU,overflow:"cap"};let{segments:a,startAngle:o,angle:s,overflow:m}=Object.assign({},r,e);if(a<3)throw new Error("segments must be greater then 3");o=Math.abs(o)>TAU?o%TAU:o,s=Math.abs(s)>TAU?s%TAU:s;let n=o+s;if((n=Math.abs(n)>TAU?n%TAU:n)a*e&&a++}let i=geom2.toSides(t);if(0===i.length)throw new Error("the given geometry cannot be empty");const c=i.filter(e=>e[0][0]<0),g=i.filter(e=>e[0][0]>=0);c.length>0&&g.length>0&&"cap"===m&&(c.length>g.length?(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.min(t[0],0),t[1]],r=[Math.min(r[0],0),r[1]]]}),t=geom2.create(i),t=mirrorX(t)):g.length>=c.length&&(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.max(t[0],0),t[1]],r=[Math.max(r[0],0),r[1]]]}),t=geom2.create(i)));const h=l/a,u=Math.abs(l){let s=h*t+o;return l===TAU&&t===a&&(s=o),mat4.multiply(f,mat4.fromZRotation(f,s),mat4.fromXRotation(mat4.create(),TAU/4)),slice.transform(f,r)}},A)};module.exports=extrudeRotate; -},{"../../geometries/geom2":149,"../../maths/constants":218,"../../maths/mat4":267,"../transforms/mirror":487,"./extrudeFromSlices":432,"./slice":450}],441:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../maths/constants":219,"../../maths/mat4":268,"../transforms/mirror":488,"./extrudeFromSlices":433,"./slice":451}],442:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),gcd=(e,t)=>e===t?e:ee*t/gcd(e,t),repartitionEdges=(e,t)=>{const r=e/t.length;if(1===r)return t;const s=vec3.fromValues(r,r,r),c=[];return t.forEach(e=>{const t=vec3.subtract(vec3.create(),e[1],e[0]);vec3.divide(t,t,s);let l=e[0];for(let e=1;e<=r;++e){const e=vec3.add(vec3.create(),l,t);c.push([l,e]),l=e}}),c},EPSAREA=EPS*EPS/2*Math.sin(Math.PI/3),extrudeWalls=(e,t)=>{let r=slice.toEdges(e),s=slice.toEdges(t);if(r.length!==s.length){const e=lcm(r.length,s.length);e!==r.length&&(r=repartitionEdges(e,r)),e!==s.length&&(s=repartitionEdges(e,s))}const c=[];return r.forEach((e,t)=>{const r=s[t],l=poly3.create([e[0],e[1],r[1]]),o=poly3.measureArea(l);Number.isFinite(o)&&o>EPSAREA&&c.push(l);const n=poly3.create([e[0],r[1],r[0]]),i=poly3.measureArea(n);Number.isFinite(i)&&i>EPSAREA&&c.push(n)}),c};module.exports=extrudeWalls; -},{"../../geometries/poly3":203,"../../maths/constants":218,"../../maths/vec3":346,"./slice":450}],442:[function(require,module,exports){ +},{"../../geometries/poly3":204,"../../maths/constants":219,"../../maths/vec3":347,"./slice":451}],443:[function(require,module,exports){ module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:require("./extrudeLinear"),extrudeRectangular:require("./extrudeRectangular"),extrudeRotate:require("./extrudeRotate"),extrudeHelical:require("./extrudeHelical"),project:require("./project"),slice:require("./slice")}; -},{"./extrudeFromSlices":432,"./extrudeHelical":433,"./extrudeLinear":434,"./extrudeRectangular":437,"./extrudeRotate":440,"./project":443,"./slice":450}],443:[function(require,module,exports){ +},{"./extrudeFromSlices":433,"./extrudeHelical":434,"./extrudeLinear":435,"./extrudeRectangular":438,"./extrudeRotate":441,"./project":444,"./slice":451}],444:[function(require,module,exports){ const flatten=require("../../utils/flatten"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),plane=require("../../maths/plane"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),measureEpsilon=require("../../measurements/measureEpsilon"),unionGeom2=require("../booleans/unionGeom2"),projectGeom3=(e,o)=>{const r=plane.fromNormalAndPoint(plane.create(),e.axis,e.origin);if(Number.isNaN(r[0])||Number.isNaN(r[1])||Number.isNaN(r[2])||Number.isNaN(r[3]))throw new Error("project: invalid axis or origin");const t=measureEpsilon(o),a=t*t*Math.sqrt(3)/4;if(0===t)return geom2.create();const n=geom3.toPolygons(o);let s=[];for(let e=0;eplane.projectionOfPoint(r,e)),t=poly3.create(o),i=poly3.plane(t);aboutEqualNormals(r,i)&&(poly3.measureArea(t)poly3.transform(e,o))}const i=(s=s.sort((e,o)=>poly3.measureArea(o)-poly3.measureArea(e))).map(e=>geom2.fromPoints(e.vertices));return unionGeom2(i)},project=(e,...o)=>{const{axis:r,origin:t}=Object.assign({},{axis:[0,0,1],origin:[0,0,0]},e);if(0===(o=flatten(o)).length)throw new Error("wrong number of arguments");e={axis:r,origin:t};const a=o.map(o=>geom3.isA(o)?projectGeom3(e,o):o);return 1===a.length?a[0]:a};module.exports=project; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/poly3":203,"../../maths/mat4":267,"../../maths/plane":287,"../../maths/utils/aboutEqualNormals":291,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"../booleans/unionGeom2":410}],444:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/poly3":204,"../../maths/mat4":268,"../../maths/plane":288,"../../maths/utils/aboutEqualNormals":292,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"../booleans/unionGeom2":411}],445:[function(require,module,exports){ const plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),calculatePlane=e=>{const c=e.edges;if(c.length<3)throw new Error("slices must have 3 or more edges to calculate a plane");const a=c.reduce((e,c)=>vec3.add(vec3.create(),e,c[0]),vec3.create());let t;vec3.scale(a,a,1/c.length);let l=0;c.forEach(e=>{if(!vec3.equals(e[0],e[1])){const c=vec3.squaredDistance(a,e[0]);c>l&&(t=e,l=c)}});const r=c.find(e=>vec3.equals(e[1],t[0]));return plane.fromPoints(plane.create(),r[0],t[0],t[1])};module.exports=calculatePlane; -},{"../../../maths/plane":287,"../../../maths/vec3":346}],445:[function(require,module,exports){ +},{"../../../maths/plane":288,"../../../maths/vec3":347}],446:[function(require,module,exports){ const create=require("./create"),vec3=require("../../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.edges=r.edges.map(e=>[vec3.clone(e[0]),vec3.clone(e[1])]),c};module.exports=clone; -},{"../../../maths/vec3":346,"./create":446}],446:[function(require,module,exports){ +},{"../../../maths/vec3":347,"./create":447}],447:[function(require,module,exports){ const create=e=>(e||(e=[]),{edges:e});module.exports=create; -},{}],447:[function(require,module,exports){ +},{}],448:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),equals=(e,s)=>{const r=e.edges,t=s.edges;return r.length===t.length&&r.reduce((e,s,r)=>{const u=t[r],c=vec3.squaredDistance(s[0],u[0]);return e&&c{if(!Array.isArray(e))throw new Error("the given points must be an array");if(e.length<3)throw new Error("the given points must contain THREE or more points");const r=[];let t=e[e.length-1];return e.forEach(e=>{2===e.length&&r.push([vec3.fromVec2(vec3.create(),t),vec3.fromVec2(vec3.create(),e)]),3===e.length&&r.push([t,e]),t=e}),create(r)};module.exports=fromPoints; -},{"../../../maths/vec3":346,"./create":446}],449:[function(require,module,exports){ +},{"../../../maths/vec3":347,"./create":447}],450:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),fromSides=e=>{if(!Array.isArray(e))throw new Error("the given sides must be an array");const r=[];return e.forEach(e=>{r.push([vec3.fromVec2(vec3.create(),e[0]),vec3.fromVec2(vec3.create(),e[1])])}),create(r)};module.exports=fromSides; -},{"../../../maths/vec3":346,"./create":446}],450:[function(require,module,exports){ +},{"../../../maths/vec3":347,"./create":447}],451:[function(require,module,exports){ module.exports={calculatePlane:require("./calculatePlane"),clone:require("./clone"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromSides:require("./fromSides"),isA:require("./isA"),reverse:require("./reverse"),toEdges:require("./toEdges"),toPolygons:require("./toPolygons"),toString:require("./toString"),transform:require("./transform")}; -},{"./calculatePlane":444,"./clone":445,"./create":446,"./equals":447,"./fromPoints":448,"./fromSides":449,"./isA":451,"./reverse":453,"./toEdges":454,"./toPolygons":455,"./toString":456,"./transform":457}],451:[function(require,module,exports){ +},{"./calculatePlane":445,"./clone":446,"./create":447,"./equals":448,"./fromPoints":449,"./fromSides":450,"./isA":452,"./reverse":454,"./toEdges":455,"./toPolygons":456,"./toString":457,"./transform":458}],452:[function(require,module,exports){ const isA=e=>!!(e&&"object"==typeof e&&"edges"in e&&Array.isArray(e.edges));module.exports=isA; -},{}],452:[function(require,module,exports){ +},{}],453:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),repair=e=>{if(!e.edges)return e;let t=e.edges;const r=new Map,c=new Map;(t=t.filter(e=>!vec3.equals(e[0],e[1]))).forEach(e=>{const t=e[0].toString(),s=e[1].toString();r.set(t,e[0]),r.set(s,e[1]),c.set(t,(c.get(t)||0)+1),c.set(s,(c.get(s)||0)-1)});const s=[],a=[];return c.forEach((e,t)=>{e<0&&s.push(t),e>0&&a.push(t)}),s.forEach(e=>{const c=r.get(e);let s,n=1/0;a.forEach(e=>{const t=r.get(e),a=vec3.distance(c,t);at[0].toString()===e?[s,t[1]]:t[1].toString()===e?[t[0],s]:t)}),create(t)};module.exports=repair; -},{"../../../maths/vec3":346,"./create":446}],453:[function(require,module,exports){ +},{"../../../maths/vec3":347,"./create":447}],454:[function(require,module,exports){ const create=require("./create"),reverse=(...e)=>{let r,t;return 1===e.length?(r=create(),t=e[0]):(r=e[0],t=e[1]),r.edges=t.edges.map(e=>[e[1],e[0]]),r};module.exports=reverse; -},{"./create":446}],454:[function(require,module,exports){ +},{"./create":447}],455:[function(require,module,exports){ const toEdges=e=>e.edges;module.exports=toEdges; -},{}],455:[function(require,module,exports){ +},{}],456:[function(require,module,exports){ const poly3=require("../../../geometries/poly3"),earcut=require("../earcut"),PolygonHierarchy=require("../earcut/polygonHierarchy"),toPolygons=o=>{const e=new PolygonHierarchy(o),r=[];return e.roots.forEach(({solid:o,holes:t})=>{let l=o.length;const n=[];t.forEach((o,e)=>{n.push(l),l+=o.length});const s=[o,...t].flat(),c=s.flat(),a=o=>e.to3D(s[o]),h=earcut(c,n);for(let o=0;oe.reduce((e,t)=>e+=`[${vec3.toString(t[0])}, ${vec3.toString(t[1])}], `,""),toString=e=>`[${edgesToString(e.edges)}]`;module.exports=toString; -},{"../../../maths/vec3":346}],457:[function(require,module,exports){ +},{"../../../maths/vec3":347}],458:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.edges.map(r=>[vec3.transform(vec3.create(),r[0],e),vec3.transform(vec3.create(),r[1],e)]);return create(t)};module.exports=transform; -},{"../../../maths/vec3":346,"./create":446}],458:[function(require,module,exports){ +},{"../../../maths/vec3":347,"./create":447}],459:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),hullPath2=require("./hullPath2"),hullGeom2=require("./hullGeom2"),hullGeom3=require("./hullGeom3"),hull=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only hulls of the same type are supported");const l=e[0];return path2.isA(l)?hullPath2(e):geom2.isA(l)?hullGeom2(e):geom3.isA(l)?hullGeom3(e):l};module.exports=hull; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../utils/areAllShapesTheSameType":520,"../../utils/flatten":522,"./hullGeom2":460,"./hullGeom3":461,"./hullPath2":462}],459:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../utils/areAllShapesTheSameType":521,"../../utils/flatten":523,"./hullGeom2":461,"./hullGeom3":462,"./hullPath2":463}],460:[function(require,module,exports){ const flatten=require("../../utils/flatten"),union=require("../booleans/union"),hull=require("./hull"),hullChain=(...n)=>{if((n=flatten(n)).length<2)throw new Error("wrong number of arguments");const e=[];for(let l=1;l{e=flatten(e);const t=toUniquePoints(e),o=hullPoints2(t);return o.length<3?geom2.create():geom2.fromPoints(o)};module.exports=hullGeom2; -},{"../../geometries/geom2":149,"../../utils/flatten":522,"./hullPoints2":463,"./toUniquePoints":474}],461:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../utils/flatten":523,"./hullPoints2":464,"./toUniquePoints":475}],462:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),toUniquePoints=require("./toUniquePoints"),hullPoints3=require("./hullPoints3"),hullGeom3=(...e)=>{e=flatten(e);const t=toUniquePoints(e);return 0===t.length?geom3.create():geom3.create(hullPoints3(t))};module.exports=hullGeom3; -},{"../../geometries/geom3":165,"../../utils/flatten":522,"./hullPoints3":464,"./toUniquePoints":474}],462:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../utils/flatten":523,"./hullPoints3":465,"./toUniquePoints":475}],463:[function(require,module,exports){ const flatten=require("../../utils/flatten"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullPath2=(...t)=>{t=flatten(t);const e=toUniquePoints(t),o=hullPoints2(e);return path2.fromPoints({closed:!0},o)};module.exports=hullPath2; -},{"../../geometries/path2":186,"../../utils/flatten":522,"./hullPoints2":463,"./toUniquePoints":474}],463:[function(require,module,exports){ +},{"../../geometries/path2":187,"../../utils/flatten":523,"./hullPoints2":464,"./toUniquePoints":475}],464:[function(require,module,exports){ const vec2=require("../../maths/vec2"),hullPoints2=e=>{let t=vec2.fromValues(1/0,1/0);e.forEach(e=>{(e[1]{const o=fakeAtan2(e[1]-t[1],e[0]-t[0]),s=vec2.squaredDistance(e,t);n.push({point:e,angle:o,distSq:s})}),n.sort((e,t)=>e.angle!==t.angle?e.angle-t.angle:e.distSq-t.distSq);const o=[];return n.forEach(e=>{let t=o.length;for(;t>1&&ccw(o[t-2],o[t-1],e.point)<=Number.EPSILON;)o.pop(),t=o.length;o.push(e.point)}),o},ccw=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),fakeAtan2=(e,t)=>0===e&&0===t?-1/0:-t/e;module.exports=hullPoints2; -},{"../../maths/vec2":315}],464:[function(require,module,exports){ +},{"../../maths/vec2":316}],465:[function(require,module,exports){ const poly3=require("../../geometries/poly3"),quickhull=require("./quickhull"),hullPoints3=l=>{return quickhull(l,{skipTriangulation:!0}).map(u=>{const e=u.map(u=>l[u]);return poly3.create(e)})};module.exports=hullPoints3; -},{"../../geometries/poly3":203,"./quickhull":472}],465:[function(require,module,exports){ +},{"../../geometries/poly3":204,"./quickhull":473}],466:[function(require,module,exports){ module.exports={hull:require("./hull"),hullChain:require("./hullChain"),hullPoints2:require("./hullPoints2"),hullPoints3:require("./hullPoints3")}; -},{"./hull":458,"./hullChain":459,"./hullPoints2":463,"./hullPoints3":464}],466:[function(require,module,exports){ +},{"./hull":459,"./hullChain":460,"./hullPoints2":464,"./hullPoints3":465}],467:[function(require,module,exports){ const add=require("../../../maths/vec3/add"),copy=require("../../../maths/vec3/copy"),cross=require("../../../maths/vec3/cross"),dot=require("../../../maths/vec3/dot"),length=require("../../../maths/vec3/length"),normalize=require("../../../maths/vec3/normalize"),scale=require("../../../maths/vec3/scale"),subtract=require("../../../maths/vec3/subtract"),HalfEdge=require("./HalfEdge"),VISIBLE=0,NON_CONVEX=1,DELETED=2;class Face{constructor(){this.normal=[],this.centroid=[],this.offset=0,this.outside=null,this.mark=VISIBLE,this.edge=null,this.nVertices=0}getEdge(e){if("number"!=typeof e)throw Error("requires a number");let t=this.edge;for(;e>0;)t=t.next,e-=1;for(;e<0;)t=t.prev,e+=1;return t}computeNormal(){const e=this.edge,t=e.next;let r=t.next;const s=subtract([],t.head().point,e.head().point),o=[],i=[];for(this.nVertices=2,this.normal=[0,0,0];r!==e;)copy(i,s),subtract(s,r.head().point,e.head().point),add(this.normal,this.normal,cross(o,i,s)),r=r.next,this.nVertices+=1;this.area=length(this.normal),this.normal=scale(this.normal,this.normal,1/this.area)}computeNormalMinArea(e){if(this.computeNormal(),this.areat&&(e=r,t=s),r=r.next}while(r!==this.edge);const s=e.tail().point,o=e.head().point,i=subtract([],o,s),n=Math.sqrt(t);scale(i,i,1/n);const a=dot(this.normal,i);scale(i,i,-a),add(this.normal,this.normal,i),normalize(this.normal,this.normal)}}computeCentroid(){this.centroid=[0,0,0];let e=this.edge;do{add(this.centroid,this.centroid,e.head().point),e=e.next}while(e!==this.edge);scale(this.centroid,this.centroid,1/this.nVertices)}computeNormalAndCentroid(e){void 0!==e?this.computeNormalMinArea(e):this.computeNormal(),this.computeCentroid(),this.offset=dot(this.normal,this.centroid)}distanceToPlane(e){return dot(this.normal,e)-this.offset}connectHalfEdges(e,t){let r;if(e.opposite.face===t.opposite.face){const s=t.opposite.face;let o;e===this.edge&&(this.edge=t),3===s.nVertices?(o=t.opposite.prev.opposite,s.mark=DELETED,r=s):(o=t.opposite.next,s.edge===o.prev&&(s.edge=o),o.prev=o.prev.prev,o.prev.next=o),t.prev=e.prev,t.prev.next=t,t.setOpposite(o),s.computeNormalAndCentroid()}else e.next=t,t.prev=e;return r}mergeAdjacentFaces(e,t){const r=e.opposite,s=r.face;t.push(s),s.mark=DELETED;let o,i,n=e.prev,a=e.next,c=r.prev,h=r.next;for(;n.opposite.face===s;)n=n.prev,h=h.next;for(;a.opposite.face===s;)a=a.next,c=c.prev;for(o=h;o!==c.next;o=o.next)o.face=this;return this.edge=a,(i=this.connectHalfEdges(c,a))&&t.push(i),(i=this.connectHalfEdges(n,h))&&t.push(i),this.computeNormalAndCentroid(),t}collectIndices(){const e=[];let t=this.edge;do{e.push(t.head().index),t=t.next}while(t!==this.edge);return e}static createTriangle(e,t,r,s=0){const o=new Face,i=new HalfEdge(e,o),n=new HalfEdge(t,o),a=new HalfEdge(r,o);return i.next=a.prev=n,n.next=i.prev=a,a.next=n.prev=i,o.edge=i,o.computeNormalAndCentroid(s),o}}module.exports={VISIBLE:VISIBLE,NON_CONVEX:1,DELETED:DELETED,Face:Face}; -},{"../../../maths/vec3/add":333,"../../../maths/vec3/copy":336,"../../../maths/vec3/cross":338,"../../../maths/vec3/dot":341,"../../../maths/vec3/length":347,"../../../maths/vec3/normalize":353,"../../../maths/vec3/scale":358,"../../../maths/vec3/subtract":362,"./HalfEdge":467}],467:[function(require,module,exports){ +},{"../../../maths/vec3/add":334,"../../../maths/vec3/copy":337,"../../../maths/vec3/cross":339,"../../../maths/vec3/dot":342,"../../../maths/vec3/length":348,"../../../maths/vec3/normalize":354,"../../../maths/vec3/scale":359,"../../../maths/vec3/subtract":363,"./HalfEdge":468}],468:[function(require,module,exports){ const distance=require("../../../maths/vec3/distance"),squaredDistance=require("../../../maths/vec3/squaredDistance");class HalfEdge{constructor(t,e){this.vertex=t,this.face=e,this.next=null,this.prev=null,this.opposite=null}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){return this.tail()?distance(this.tail().point,this.head().point):-1}lengthSquared(){return this.tail()?squaredDistance(this.tail().point,this.head().point):-1}setOpposite(t){this.opposite=t,t.opposite=this}}module.exports=HalfEdge; -},{"../../../maths/vec3/distance":339,"../../../maths/vec3/squaredDistance":360}],468:[function(require,module,exports){ +},{"../../../maths/vec3/distance":340,"../../../maths/vec3/squaredDistance":361}],469:[function(require,module,exports){ const dot=require("../../../maths/vec3/dot"),pointLineDistance=require("./point-line-distance"),getPlaneNormal=require("./get-plane-normal"),VertexList=require("./VertexList"),Vertex=require("./Vertex"),{Face:Face,VISIBLE:VISIBLE,NON_CONVEX:NON_CONVEX,DELETED:DELETED}=require("./Face"),MERGE_NON_CONVEX_WRT_LARGER_FACE=1,MERGE_NON_CONVEX=2;class QuickHull{constructor(e){if(!Array.isArray(e))throw TypeError("input is not a valid array");if(e.length<4)throw Error("cannot build a simplex out of <4 points");this.tolerance=-1,this.nFaces=0,this.nPoints=e.length,this.faces=[],this.newFaces=[],this.claimed=new VertexList,this.unclaimed=new VertexList,this.vertices=[];for(let t=0;tthis.tolerance?this.addVertexToFace(s,t):this.unclaimed.add(s)}}else this.unclaimed.addAll(i)}resolveUnclaimedPoints(e){let t=this.unclaimed.first();for(let i=t;i;i=t){t=i.next;let s,o=this.tolerance;for(let t=0;to&&(o=e,s=a),o>1e3*this.tolerance)break}}s&&this.addVertexToFace(i,s)}}computeExtremes(){const e=[],t=[],i=[],s=[];let o,a;for(o=0;o<3;o+=1)i[o]=s[o]=this.vertices[0];for(o=0;o<3;o+=1)e[o]=t[o]=this.vertices[0].point[o];for(o=1;ot[a]&&(t[a]=n[a],s[a]=c)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e[0]),Math.abs(t[0]))+Math.max(Math.abs(e[1]),Math.abs(t[1]))+Math.max(Math.abs(e[2]),Math.abs(t[2]))),[i,s]}createInitialSimplex(){const e=this.vertices,[t,i]=this.computeExtremes();let s,o,a,c,n=0,r=0;for(a=0;a<3;a+=1){const e=i[a].point[a]-t[a].point[a];e>n&&(n=e,r=a)}const l=t[r],h=i[r];for(n=0,a=0;an&&(n=t,s=e)}}const d=getPlaneNormal([],l.point,h.point,s.point),p=dot(l.point,d);for(n=-1,a=0;an&&(n=t,o=e)}}const f=[];if(dot(o.point,d)-p<0)for(f.push(Face.createTriangle(l,h,s),Face.createTriangle(o,h,l),Face.createTriangle(o,s,h),Face.createTriangle(o,l,s)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge(e)),f[a+1].getEdge(1).setOpposite(f[e+1].getEdge(0))}else for(f.push(Face.createTriangle(l,s,h),Face.createTriangle(o,l,h),Face.createTriangle(o,h,s),Face.createTriangle(o,s,l)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge((3-a)%3)),f[a+1].getEdge(0).setOpposite(f[e+1].getEdge(1))}for(a=0;a<4;a+=1)this.faces.push(f[a]);for(a=0;an&&(n=i,e=f[c])}e&&this.addVertexToFace(t,e)}}}reindexFaceAndVertices(){const e=[];for(let t=0;ti&&(i=o,e=t)}return e}}computeHorizon(e,t,i,s){let o;this.deleteFaceVertices(i),i.mark=DELETED,o=t?t.next:t=i.getEdge(0);do{const t=o.opposite,i=t.face;i.mark===VISIBLE&&(i.distanceToPlane(e)>this.tolerance?this.computeHorizon(e,t,i,s):s.push(o)),o=o.next}while(o!==t)}addAdjoiningFace(e,t){const i=Face.createTriangle(e,t.tail(),t.head());return this.faces.push(i),i.getEdge(-1).setOpposite(t.opposite),i.getEdge(0)}addNewFaces(e,t){let i,s;this.newFaces=[];for(let o=0;o=e.nVertices)throw Error("merge recursion limit exceeded");const a=i.opposite.face;let c=!1;if(t===MERGE_NON_CONVEX?(this.oppositeFaceDistance(i)>-this.tolerance||this.oppositeFaceDistance(i.opposite)>-this.tolerance)&&(c=!0):e.area>a.area?this.oppositeFaceDistance(i)>-this.tolerance?c=!0:this.oppositeFaceDistance(i.opposite)>-this.tolerance&&(s=!1):this.oppositeFaceDistance(i.opposite)>-this.tolerance?c=!0:this.oppositeFaceDistance(i)>-this.tolerance&&(s=!1),c){const t=e.mergeAdjacentFaces(i,[]);for(let i=0;i{const a=[0,0,0];return subtract(r,e,s),subtract(a,s,t),cross(r,r,a),normalize(r,r)};module.exports=planeNormal; -},{"../../../maths/vec3/cross":338,"../../../maths/vec3/normalize":353,"../../../maths/vec3/subtract":362}],472:[function(require,module,exports){ +},{"../../../maths/vec3/cross":339,"../../../maths/vec3/normalize":354,"../../../maths/vec3/subtract":363}],473:[function(require,module,exports){ const QuickHull=require("./QuickHull"),runner=(u,l={})=>{const e=new QuickHull(u);return e.build(),e.collectFaces(l.skipTriangulation)};module.exports=runner; -},{"./QuickHull":468}],473:[function(require,module,exports){ +},{"./QuickHull":469}],474:[function(require,module,exports){ const cross=require("../../../maths/vec3/cross"),subtract=require("../../../maths/vec3/subtract"),squaredLength=require("../../../maths/vec3/squaredLength"),distanceSquared=(e,t,r)=>{const s=[],a=[];subtract(s,r,t),subtract(a,e,t);const n=squaredLength(cross([],a,s)),c=squaredLength(s);if(0===c)throw Error("a and b are the same point");return n/c},pointLineDistance=(e,t,r)=>Math.sqrt(distanceSquared(e,t,r));module.exports=pointLineDistance; -},{"../../../maths/vec3/cross":338,"../../../maths/vec3/squaredLength":361,"../../../maths/vec3/subtract":362}],474:[function(require,module,exports){ +},{"../../../maths/vec3/cross":339,"../../../maths/vec3/squaredLength":362,"../../../maths/vec3/subtract":363}],475:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),toUniquePoints=o=>{const e=new Set,t=[],r=o=>{const r=o.toString();e.has(r)||(t.push(o),e.add(r))};return o.forEach(o=>{geom2.isA(o)?geom2.toPoints(o).forEach(r):geom3.isA(o)?geom3.toPoints(o).forEach(o=>o.forEach(r)):path2.isA(o)&&path2.toPoints(o).forEach(r)}),t};module.exports=toUniquePoints; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186}],475:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187}],476:[function(require,module,exports){ const flatten=require("../../utils/flatten"),measureEpsilon=require("../../measurements/measureEpsilon"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),snapPolygons=require("./snapPolygons"),mergePolygons=require("./mergePolygons"),insertTjunctions=require("./insertTjunctions"),triangulatePolygons=require("./triangulatePolygons"),generalizePath2=(e,r)=>r,generalizeGeom2=(e,r)=>r,generalizeGeom3=(e,r)=>{const{snap:n,simplify:o,triangulate:t}=Object.assign({},{snap:!1,simplify:!1,triangulate:!1},e),i=measureEpsilon(r);let s=geom3.toPolygons(r);n&&(s=snapPolygons(i,s)),o&&(s=mergePolygons(i,s)),t&&(s=insertTjunctions(s),s=triangulatePolygons(i,s));const g=Object.assign({},r);return g.polygons=s,g},generalize=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const n=r.map(r=>{if(path2.isA(r))return generalizePath2(0,r);if(geom2.isA(r))return generalizeGeom2(0,r);if(geom3.isA(r))return generalizeGeom3(e,r);throw new Error("invalid geometry")});return 1===n.length?n[0]:n};module.exports=generalize; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"./insertTjunctions":477,"./mergePolygons":478,"./snapPolygons":482,"./triangulatePolygons":483}],476:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"./insertTjunctions":478,"./mergePolygons":479,"./snapPolygons":483,"./triangulatePolygons":484}],477:[function(require,module,exports){ module.exports={generalize:require("./generalize"),snap:require("./snap"),retessellate:require("./retessellate")}; -},{"./generalize":475,"./retessellate":480,"./snap":481}],477:[function(require,module,exports){ +},{"./generalize":476,"./retessellate":481,"./snap":482}],478:[function(require,module,exports){ const constants=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),assert=!1,getTag=e=>`${e}`,addSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r);const l=`${o}/${g}`,a=`${g}/${o}`;if(e.has(a))return deleteSide(e,t,s,r,n,null),null;const i={vertex0:n,vertex1:r,polygonindex:c};return e.has(l)?e.get(l).push(i):e.set(l,[i]),t.has(o)?t.get(o).push(l):t.set(o,[l]),s.has(g)?s.get(g).push(l):s.set(g,[l]),l},deleteSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r),l=`${o}/${g}`;let a=-1;const i=e.get(l);for(let e=0;e{const t=new Map;for(let s=0;s=3){let e=n.vertices[0],c=getTag(e);for(let o=0;o0){const s=new Map,n=new Map,r=new Map;for(const[e,c]of t)r.set(e,!0),c.forEach(t=>{const r=getTag(t.vertex0),c=getTag(t.vertex1);s.has(r)?s.get(r).push(e):s.set(r,[e]),n.has(c)?n.get(c).push(e):n.set(c,[e])});const c=e.slice(0);for(;0!==t.size;){for(const e of t.keys())r.set(e,!0);let e=!1;for(;;){const o=Array.from(r.keys());if(0===o.length)break;const g=o[0];let l=!0;if(t.has(g)){const o=t.get(g);0;const a=o[0];for(let o=0;o<2;o++){const g=0===o?a.vertex0:a.vertex1,i=0===o?a.vertex1:a.vertex0,v=getTag(g),d=getTag(i);let h=[];0===o?n.has(v)&&(h=n.get(v)):s.has(v)&&(h=s.get(v));for(let a=0;a0&&x<1){const g=vec3.scale(vec3.create(),h,x);if(vec3.add(g,g,a),vec3.squaredDistance(g,v){const n=poly3.toPoints(e),t=[];for(let e=0;e{const t=`${n.v1}:${n.v2}`;e.set(t,n)},deleteEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.delete(t)},findOppositeEdge=(e,n)=>{const t=`${n.v2}:${n.v1}`;return e.get(t)},calculateAnglesBetween=(e,n,t)=>{let l=e.prev.v1,r=e.prev.v2,o=n.next.v2;const v=calculateAngle(l,r,o,t);return l=n.prev.v1,r=n.prev.v2,o=e.next.v2,[v,calculateAngle(l,r,o,t)]},v1=vec3.create(),v2=vec3.create(),calculateAngle=(e,n,t,l)=>{const r=vec3.subtract(v1,n,e),o=vec3.subtract(v2,t,n);return vec3.cross(r,r,o),vec3.dot(r,l)},createPolygonAnd=e=>{let n;const t=[];for(;e.next;){const n=e.next;t.push(e.v1),e.v1=null,e.v2=null,e.next=null,e.prev=null,e=n}return t.length>0&&(n=poly3.create(t)),n},mergeCoplanarPolygons=e=>{if(e.length<2)return e;const n=e[0].plane,t=e.slice(),l=new Map;for(;t.length>0;){const e=t.shift(),r=createEdges(e);for(let e=0;e=0&&e[1]>=0){const n=o.next,r=t.next;t.prev.next=o.next,t.next.prev=o.prev,o.prev.next=t.next,o.next.prev=t.prev,t.v1=null,t.v2=null,t.next=null,t.prev=null,deleteEdge(l,o),o.v1=null,o.v2=null,o.next=null,o.prev=null;const v=(e,n,t)=>{const l={v1:t.v1,v2:n.v2,next:n.next,prev:t.prev};t.prev.next=l,n.next.prev=l,deleteEdge(e,n),n.v1=null,n.v2=null,n.next=null,n.prev=null,deleteEdge(e,t),t.v1=null,t.v2=null,t.next=null,t.prev=null};0===e[0]&&v(l,n,n.prev),0===e[1]&&v(l,r,r.prev)}}else t.next&&insertEdge(l,t)}}const r=[];return l.forEach(e=>{const n=createPolygonAnd(e);n&&r.push(n)}),l.clear(),r},coplanar=(e,n)=>Math.abs(e[3]-n[3])<1.5e-7&&aboutEqualNormals(e,n),mergePolygons=(e,n)=>{const t=[];n.forEach(e=>{const n=t.find(n=>coplanar(n[0],poly3.plane(e)));if(n){n[1].push(e)}else t.push([poly3.plane(e),[e]])});let l=[];return t.forEach(e=>{const n=e[1],t=mergeCoplanarPolygons(n);l=l.concat(t)}),l};module.exports=mergePolygons; -},{"../../geometries/poly3":203,"../../maths/utils/aboutEqualNormals":291,"../../maths/vec3":346}],479:[function(require,module,exports){ +},{"../../geometries/poly3":204,"../../maths/utils/aboutEqualNormals":292,"../../maths/vec3":347}],480:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),OrthoNormalBasis=require("../../maths/OrthoNormalBasis"),interpolateBetween2DPointsForY=require("../../maths/utils/interpolateBetween2DPointsForY"),{insertSorted:insertSorted,fnNumberSort:fnNumberSort}=require("../../utils"),poly3=require("../../geometries/poly3"),reTesselateCoplanarPolygons=t=>{if(t.length<2)return t;const e=[],o=t.length,n=poly3.plane(t[0]),l=new OrthoNormalBasis(n),i=[],r=[],s=new Map,f=new Map,p=new Map,h=10/EPS;for(let e=0;e0){let t,i;for(let r=0;ri)&&(i=u);let m=f.get(u);m||(m={},f.set(u,m)),m[e]=!0}if(t>=i)n=[],g=0,c=-1;else{let o=s.get(t);o||(o=[],s.set(t,o)),o.push(e)}}n.reverse(),c=g-c-1,i.push(n),r.push(c)}const g=[];f.forEach((t,e)=>g.push(e)),g.sort(fnNumberSort);let c=[],a=[];for(let t=0;t=l&&(t=0),n[t][1]!==p)break;r=t}let f=s-1;if(f<0&&(f=l-1),n[f][1]===p&&(s=f),r!==e.leftvertexindex&&r===s)c.splice(t,1),--t;else{e.leftvertexindex=r,e.rightvertexindex=s,e.topleft=n[r],e.topright=n[s];let t=r+1;t>=l&&(t=0),e.bottomleft=n[t];let o=s-1;o<0&&(o=l-1),e.bottomright=n[o]}}}let u;if(t>=g.length-1)c=[],u=null;else{const e=.5*(p+(u=Number(g[t+1]))),o=s.get(p);for(const t in o){const n=o[t],l=i[n],s=l.length,f=r[n];let h=f;for(;;){let t=h+1;if(t>=s&&(t=0),l[t][1]!==p)break;if(t===f)break;h=t}let g=f;for(;;){let t=g-1;if(t<0&&(t=s-1),l[t][1]!==p)break;if(t===h)break;g=t}let a=h+1;a>=s&&(a=0);let u=g-1;u<0&&(u=s-1);const m={polygonindex:n,leftvertexindex:h,rightvertexindex:g,topleft:l[h],topright:l[g],bottomleft:l[a],bottomright:l[u]};insertSorted(c,m,(t,o)=>{const n=interpolateBetween2DPointsForY(t.topleft,t.bottomleft,e),l=interpolateBetween2DPointsForY(o.topleft,o.bottomleft,e);return n>l?1:n0){const t=o[o.length-1],e=vec2.distance(f.topleft,t.topright),n=vec2.distance(f.bottomleft,t.bottomright);e0){const t=new Set,i=new Set;for(let e=0;e=0;(g||s>=0)&&a&&(n.outpolygon=o.outpolygon,n.leftlinecontinues=g,n.rightlinecontinues=c,t.add(e));break}}}for(let o=0;oEPS&&t.outpolygon.leftpoints.push(t.bottomleft),t.outpolygon.leftpoints.reverse();const i=t.outpolygon.rightpoints.concat(t.outpolygon.leftpoints).map(t=>l.to3D(t)),r=poly3.fromPointsAndPlane(i,n);r.vertices.length&&e.push(r)}}for(let t=0;tEPS&&e.outpolygon.rightpoints.push(e.topright))}a=o}return e};module.exports=reTesselateCoplanarPolygons; -},{"../../geometries/poly3":203,"../../maths/OrthoNormalBasis":217,"../../maths/constants":218,"../../maths/line2":229,"../../maths/utils/interpolateBetween2DPointsForY":294,"../../maths/vec2":315,"../../utils":524}],480:[function(require,module,exports){ +},{"../../geometries/poly3":204,"../../maths/OrthoNormalBasis":218,"../../maths/constants":219,"../../maths/line2":230,"../../maths/utils/interpolateBetween2DPointsForY":295,"../../maths/vec2":316,"../../utils":525}],481:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),{NEPS:NEPS}=require("../../maths/constants"),reTesselateCoplanarPolygons=require("./reTesselateCoplanarPolygons"),retessellate=e=>{if(e.isRetesselated)return e;const s=geom3.toPolygons(e).map((e,s)=>({vertices:e.vertices,plane:poly3.plane(e),index:s})),o=classifyPolygons(s),l=[];o.forEach(e=>{if(Array.isArray(e)){const s=reTesselateCoplanarPolygons(e);l.push(...s)}else l.push(e)});const n=geom3.create(l);return n.isRetesselated=!0,n},classifyPolygons=e=>{let s=[e];const o=[];for(let e=3;e>=0;e--){const l=[],n=3===e?1.5e-8:NEPS;s.forEach(s=>{s.sort(byPlaneComponent(e,n));let t=0;for(let r=1;rn&&(r-t==1?o.push(s[t]):l.push(s.slice(t,r)),t=r);s.length-t==1?o.push(s[t]):l.push(s.slice(t))}),s=l}const l=[];return s.forEach(e=>{e[0]&&(l[e[0].index]=e)}),o.forEach(e=>{l[e.index]=e}),l},byPlaneComponent=(e,s)=>(o,l)=>o.plane[e]-l.plane[e]>s?1:l.plane[e]-o.plane[e]>s?-1:0;module.exports=retessellate; -},{"../../geometries/geom3":165,"../../geometries/poly3":203,"../../maths/constants":218,"./reTesselateCoplanarPolygons":479}],481:[function(require,module,exports){ +},{"../../geometries/geom3":166,"../../geometries/poly3":204,"../../maths/constants":219,"./reTesselateCoplanarPolygons":480}],482:[function(require,module,exports){ const flatten=require("../../utils/flatten"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureEpsilon=require("../../measurements/measureEpsilon"),snapPolygons=require("./snapPolygons"),snapPath2=e=>{const s=measureEpsilon(e),r=path2.toPoints(e).map(e=>vec2.snap(vec2.create(),e,s));return path2.create(r)},snapGeom2=e=>{const s=measureEpsilon(e);let r=geom2.toSides(e).map(e=>[vec2.snap(vec2.create(),e[0],s),vec2.snap(vec2.create(),e[1],s)]);return r=r.filter(e=>!vec2.equals(e[0],e[1])),geom2.create(r)},snapGeom3=e=>{const s=measureEpsilon(e),r=geom3.toPolygons(e),o=snapPolygons(s,r);return geom3.create(o)},snap=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>path2.isA(e)?snapPath2(e):geom2.isA(e)?snapGeom2(e):geom3.isA(e)?snapGeom3(e):e);return 1===s.length?s[0]:s};module.exports=snap; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../maths/vec2":315,"../../measurements/measureEpsilon":387,"../../utils/flatten":522,"./snapPolygons":482}],482:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../maths/vec2":316,"../../measurements/measureEpsilon":388,"../../utils/flatten":523,"./snapPolygons":483}],483:[function(require,module,exports){ const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),isValidPoly3=(e,o)=>{const r=Math.abs(poly3.measureArea(o));return Number.isFinite(r)&&r>e},snapPolygons=(e,o)=>{let r=o.map(o=>{const r=o.vertices.map(o=>vec3.snap(vec3.create(),o,e)),t=[];for(let e=0;eisValidPoly3(t,e))};module.exports=snapPolygons; -},{"../../geometries/poly3":203,"../../maths/vec3":346}],483:[function(require,module,exports){ +},{"../../geometries/poly3":204,"../../maths/vec3":347}],484:[function(require,module,exports){ const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),triangulatePolygon=(e,o,r)=>{const t=o.vertices.length;if(t>3){if(t>4){const c=[0,0,0];o.vertices.forEach(e=>vec3.add(c,c,e)),vec3.snap(c,vec3.divide(c,c,[t,t,t]),e);for(let e=0;e{const r=[];return o.forEach(o=>{triangulatePolygon(e,o,r)}),r};module.exports=triangulatePolygons; -},{"../../geometries/poly3":203,"../../maths/vec3":346}],484:[function(require,module,exports){ +},{"../../geometries/poly3":204,"../../maths/vec3":347}],485:[function(require,module,exports){ const flatten=require("../../utils/flatten"),padArrayToLength=require("../../utils/padArrayToLength"),measureAggregateBoundingBox=require("../../measurements/measureAggregateBoundingBox"),{translate:translate}=require("./translate"),validateOptions=e=>{if(!Array.isArray(e.modes)||e.modes.length>3)throw new Error("align(): modes must be an array of length <= 3");if(e.modes=padArrayToLength(e.modes,"none",3),3!==e.modes.filter(e=>["center","max","min","none"].includes(e)).length)throw new Error('align(): all modes must be one of "center", "max" or "min"');if(!Array.isArray(e.relativeTo)||e.relativeTo.length>3)throw new Error("align(): relativeTo must be an array of length <= 3");if(e.relativeTo=padArrayToLength(e.relativeTo,0,3),3!==e.relativeTo.filter(e=>Number.isFinite(e)||null==e).length)throw new Error("align(): all relativeTo values must be a number, or null.");if("boolean"!=typeof e.grouped)throw new Error("align(): grouped must be a boolean value.");return e},populateRelativeToFromBounds=(e,r,t)=>{for(let n=0;n<3;n++)null==e[n]&&("center"===r[n]?e[n]=(t[0][n]+t[1][n])/2:"max"===r[n]?e[n]=t[1][n]:"min"===r[n]&&(e[n]=t[0][n]));return e},alignGeometries=(e,r,t)=>{const n=measureAggregateBoundingBox(e),o=[0,0,0];for(let e=0;e<3;e++)"center"===r[e]?o[e]=t[e]-(n[0][e]+n[1][e])/2:"max"===r[e]?o[e]=t[e]-n[1][e]:"min"===r[e]&&(o[e]=t[e]-n[0][e]);return translate(o,e)},align=(e,...r)=>{e=Object.assign({},{modes:["center","center","min"],relativeTo:[0,0,0],grouped:!1},e),e=validateOptions(e);let{modes:t,relativeTo:n,grouped:o}=e;if(0===(r=flatten(r)).length)throw new Error("align(): No geometries were provided to act upon");if(n.filter(e=>null==e).length){const e=measureAggregateBoundingBox(r);n=populateRelativeToFromBounds(n,t,e)}return 1===(r=o?alignGeometries(r,t,n):r.map(e=>alignGeometries(e,t,n))).length?r[0]:r};module.exports=align; -},{"../../measurements/measureAggregateBoundingBox":378,"../../utils/flatten":522,"../../utils/padArrayToLength":526,"./translate":491}],485:[function(require,module,exports){ +},{"../../measurements/measureAggregateBoundingBox":379,"../../utils/flatten":523,"../../utils/padArrayToLength":527,"./translate":492}],486:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureBoundingBox=require("../../measurements/measureBoundingBox"),{translate:translate}=require("./translate"),centerGeometry=(e,r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e),a=measureBoundingBox(r),o=[0,0,0];return t[0]&&(o[0]=n[0]-(a[0][0]+(a[1][0]-a[0][0])/2)),t[1]&&(o[1]=n[1]-(a[0][1]+(a[1][1]-a[0][1])/2)),t[2]&&(o[2]=n[2]-(a[0][2]+(a[1][2]-a[0][2])/2)),translate(o,r)},center=(e,...r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e);if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");if(3!==n.length)throw new Error("relativeTo must be an array of length 3");e={axes:t,relativeTo:n};const a=r.map(r=>path2.isA(r)?centerGeometry(e,r):geom2.isA(r)?centerGeometry(e,r):geom3.isA(r)?centerGeometry(e,r):r);return 1===a.length?a[0]:a},centerX=(...e)=>center({axes:[!0,!1,!1]},e),centerY=(...e)=>center({axes:[!1,!0,!1]},e),centerZ=(...e)=>center({axes:[!1,!1,!0]},e);module.exports={center:center,centerX:centerX,centerY:centerY,centerZ:centerZ}; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../measurements/measureBoundingBox":382,"../../utils/flatten":522,"./translate":491}],486:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../measurements/measureBoundingBox":383,"../../utils/flatten":523,"./translate":492}],487:[function(require,module,exports){ module.exports={align:require("./align"),center:require("./center").center,centerX:require("./center").centerX,centerY:require("./center").centerY,centerZ:require("./center").centerZ,mirror:require("./mirror").mirror,mirrorX:require("./mirror").mirrorX,mirrorY:require("./mirror").mirrorY,mirrorZ:require("./mirror").mirrorZ,rotate:require("./rotate").rotate,rotateX:require("./rotate").rotateX,rotateY:require("./rotate").rotateY,rotateZ:require("./rotate").rotateZ,scale:require("./scale").scale,scaleX:require("./scale").scaleX,scaleY:require("./scale").scaleY,scaleZ:require("./scale").scaleZ,transform:require("./transform"),translate:require("./translate").translate,translateX:require("./translate").translateX,translateY:require("./translate").translateY,translateZ:require("./translate").translateZ}; -},{"./align":484,"./center":485,"./mirror":487,"./rotate":488,"./scale":489,"./transform":490,"./translate":491}],487:[function(require,module,exports){ +},{"./align":485,"./center":486,"./mirror":488,"./rotate":489,"./scale":490,"./transform":491,"./translate":492}],488:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),plane=require("../../maths/plane"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),mirror=(r,...e)=>{const{origin:o,normal:m}=Object.assign({},{origin:[0,0,0],normal:[0,0,1]},r);if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const i=plane.fromNormalAndPoint(plane.create(),m,o);if(Number.isNaN(i[0]))throw new Error("the given origin and normal do not define a proper plane");const n=mat4.mirrorByPlane(mat4.create(),i),t=e.map(r=>path2.isA(r)?path2.transform(n,r):geom2.isA(r)?geom2.transform(n,r):geom3.isA(r)?geom3.transform(n,r):r);return 1===t.length?t[0]:t},mirrorX=(...r)=>mirror({normal:[1,0,0]},r),mirrorY=(...r)=>mirror({normal:[0,1,0]},r),mirrorZ=(...r)=>mirror({normal:[0,0,1]},r);module.exports={mirror:mirror,mirrorX:mirrorX,mirrorY:mirrorY,mirrorZ:mirrorZ}; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../maths/mat4":267,"../../maths/plane":287,"../../utils/flatten":522}],488:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../maths/mat4":268,"../../maths/plane":288,"../../utils/flatten":523}],489:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),rotate=(t,...e)=>{if(!Array.isArray(t))throw new Error("angles must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=t[2],o=t[1],a=t[0],m=mat4.fromTaitBryanRotation(mat4.create(),r,o,a),n=e.map(t=>path2.isA(t)?path2.transform(m,t):geom2.isA(t)?geom2.transform(m,t):geom3.isA(t)?geom3.transform(m,t):t);return 1===n.length?n[0]:n},rotateX=(t,...e)=>rotate([t,0,0],e),rotateY=(t,...e)=>rotate([0,t,0],e),rotateZ=(t,...e)=>rotate([0,0,t],e);module.exports={rotate:rotate,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ}; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../maths/mat4":267,"../../utils/flatten":522}],489:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../maths/mat4":268,"../../utils/flatten":523}],490:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),scale=(e,...r)=>{if(!Array.isArray(e))throw new Error("factors must be an array");if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");for(e=e.slice();e.length<3;)e.push(1);if(e[0]<=0||e[1]<=0||e[2]<=0)throw new Error("factors must be positive");const a=mat4.fromScaling(mat4.create(),e),t=r.map(e=>path2.isA(e)?path2.transform(a,e):geom2.isA(e)?geom2.transform(a,e):geom3.isA(e)?geom3.transform(a,e):e);return 1===t.length?t[0]:t},scaleX=(e,...r)=>scale([e,1,1],r),scaleY=(e,...r)=>scale([1,e,1],r),scaleZ=(e,...r)=>scale([1,1,e],r);module.exports={scale:scale,scaleX:scaleX,scaleY:scaleY,scaleZ:scaleZ}; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../maths/mat4":267,"../../utils/flatten":522}],490:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../maths/mat4":268,"../../utils/flatten":523}],491:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),transform=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?path2.transform(e,r):geom2.isA(r)?geom2.transform(e,r):geom3.isA(r)?geom3.transform(e,r):r);return 1===t.length?t[0]:t};module.exports=transform; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../utils/flatten":522}],491:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../utils/flatten":523}],492:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),translate=(t,...e)=>{if(!Array.isArray(t))throw new Error("offset must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=mat4.fromTranslation(mat4.create(),t),a=e.map(t=>path2.isA(t)?path2.transform(r,t):geom2.isA(t)?geom2.transform(r,t):geom3.isA(t)?geom3.transform(r,t):t);return 1===a.length?a[0]:a},translateX=(t,...e)=>translate([t,0,0],e),translateY=(t,...e)=>translate([0,t,0],e),translateZ=(t,...e)=>translate([0,0,t],e);module.exports={translate:translate,translateX:translateX,translateY:translateY,translateZ:translateZ}; -},{"../../geometries/geom2":149,"../../geometries/geom3":165,"../../geometries/path2":186,"../../maths/mat4":267,"../../utils/flatten":522}],492:[function(require,module,exports){ +},{"../../geometries/geom2":150,"../../geometries/geom3":166,"../../geometries/path2":187,"../../maths/mat4":268,"../../utils/flatten":523}],493:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),path2=require("../geometries/path2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),arc=e=>{const r={center:[0,0],radius:1,startAngle:0,endAngle:TAU,makeTangent:!1,segments:32};let{center:t,radius:s,startAngle:n,endAngle:a,makeTangent:o,segments:c}=Object.assign({},r,e);if(!isNumberArray(t,2))throw new Error("center must be an array of X and Y values");if(!isGT(s,0))throw new Error("radius must be greater than zero");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(a,0))throw new Error("endAngle must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");let i=TAU;(n%=TAU)<(a%=TAU)&&(i=a-n),n>a&&(i=a+(TAU-n));const m=Math.acos((s*s+s*s-EPS*EPS)/(2*s*s)),l=vec2.clone(t);let u;const A=[];if(i.25&&(r=.25);const t=o?e+2:e;for(let a=0;a<=t;a++){let t=a;o&&((t=(a-1)*(e-2*r)/e+r)<0&&(t=0),t>e&&(t=e));const c=n+t*(i/e);u=vec2.fromAngleRadians(vec2.create(),c),vec2.scale(u,u,s),vec2.add(u,u,l),A.push(u)}}return path2.fromPoints({closed:!1},A)};module.exports=arc; -},{"../geometries/path2":186,"../maths/constants":218,"../maths/vec2":315,"./commonChecks":494}],493:[function(require,module,exports){ +},{"../geometries/path2":187,"../maths/constants":219,"../maths/vec2":316,"./commonChecks":495}],494:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),ellipse=require("./ellipse"),{isGTE:isGTE}=require("./commonChecks"),circle=e=>{const s={center:[0,0],radius:1,startAngle:0,endAngle:TAU,segments:32};let{center:r,radius:t,startAngle:n,endAngle:i,segments:l}=Object.assign({},s,e);if(!isGTE(t,0))throw new Error("radius must be positive");return ellipse({center:r,radius:t=[t,t],startAngle:n,endAngle:i,segments:l})};module.exports=circle; -},{"../maths/constants":218,"./commonChecks":494,"./ellipse":499}],494:[function(require,module,exports){ +},{"../maths/constants":219,"./commonChecks":495,"./ellipse":500}],495:[function(require,module,exports){ const isNumberArray=(i,r)=>!!(Array.isArray(i)&&i.length>=r)&&i.every(i=>Number.isFinite(i)),isGT=(i,r)=>Number.isFinite(i)&&i>r,isGTE=(i,r)=>Number.isFinite(i)&&i>=r;module.exports={isNumberArray:isNumberArray,isGT:isGT,isGTE:isGTE}; -},{}],495:[function(require,module,exports){ +},{}],496:[function(require,module,exports){ const cuboid=require("./cuboid"),{isGTE:isGTE}=require("./commonChecks"),cube=e=>{let{center:i,size:r}=Object.assign({},{center:[0,0,0],size:2},e);if(!isGTE(r,0))throw new Error("size must be positive");return cuboid({center:i,size:r=[r,r,r]})};module.exports=cube; -},{"./commonChecks":494,"./cuboid":496}],496:[function(require,module,exports){ +},{"./commonChecks":495,"./cuboid":497}],497:[function(require,module,exports){ const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=e=>{const{center:r,size:o}=Object.assign({},{center:[0,0,0],size:[2,2,2]},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(o,3))throw new Error("size must be an array of width, depth and height values");if(!o.every(e=>e>=0))throw new Error("size values must be positive");return 0===o[0]||0===o[1]||0===o[2]?geom3.create():geom3.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(e=>{const t=e[0].map(e=>{return[r[0]+o[0]/2*(2*!!(1&e)-1),r[1]+o[1]/2*(2*!!(2&e)-1),r[2]+o[2]/2*(2*!!(4&e)-1)]});return poly3.create(t)}))};module.exports=cuboid; -},{"../geometries/geom3":165,"../geometries/poly3":203,"./commonChecks":494}],497:[function(require,module,exports){ +},{"../geometries/geom3":166,"../geometries/poly3":204,"./commonChecks":495}],498:[function(require,module,exports){ const geom3=require("../geometries/geom3"),cylinderElliptic=require("./cylinderElliptic"),{isGTE:isGTE}=require("./commonChecks"),cylinder=e=>{const{center:i,height:r,radius:s,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,segments:32},e);if(!isGTE(s,0))throw new Error("radius must be positive");return 0===r||0===s?geom3.create():cylinderElliptic({center:i,height:r,startRadius:[s,s],endRadius:[s,s],segments:t})};module.exports=cylinder; -},{"../geometries/geom3":165,"./commonChecks":494,"./cylinderElliptic":498}],498:[function(require,module,exports){ +},{"../geometries/geom3":166,"./commonChecks":495,"./cylinderElliptic":499}],499:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinderElliptic=e=>{const r={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:TAU,segments:32};let{center:s,height:t,startRadius:a,startAngle:i,endRadius:o,endAngle:n,segments:u}=Object.assign({},r,e);if(!isNumberArray(s,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(t,0))throw new Error("height must be greater then zero");if(!isNumberArray(a,2))throw new Error("startRadius must be an array of X and Y values");if(!a.every(e=>e>=0))throw new Error("startRadius values must be positive");if(!isNumberArray(o,2))throw new Error("endRadius must be an array of X and Y values");if(!o.every(e=>e>=0))throw new Error("endRadius values must be positive");if(o.every(e=>0===e)&&a.every(e=>0===e))throw new Error("at least one radius must be positive");if(!isGTE(i,0))throw new Error("startAngle must be positive");if(!isGTE(n,0))throw new Error("endAngle must be positive");if(!isGTE(u,4))throw new Error("segments must be four or more");let c=TAU;(i%=TAU)<(n%=TAU)&&(c=n-i),i>n&&(c=n+(TAU-i));const l=Math.min(a[0],a[1],o[0],o[1]),m=Math.acos((l*l+l*l-EPS*EPS)/(2*l*l));if(c{const t=r*c+i;return vec3.scale(A,g,s[0]*cos(t)),vec3.scale(w,p,s[1]*sin(t)),vec3.add(A,A,w),vec3.scale(E,f,e),vec3.add(E,E,d),vec3.add(vec3.create(),A,E)},T=(...e)=>{const r=e.map(e=>vec3.add(vec3.create(),e,s));return poly3.create(r)},b=[];for(let e=0;e0&&a[1]>0&&b.push(T(d,y(0,s,a),y(0,r,a))),(a[0]>0||a[1]>0)&&b.push(T(y(0,r,a),y(0,s,a),y(1,r,o))),o[0]>0&&o[1]>0&&b.push(T(v,y(1,r,o),y(1,s,o))),(o[0]>0||o[1]>0)&&b.push(T(y(1,r,o),y(0,s,a),y(1,s,o))))}return c{const r={center:[0,0],radius:[1,1],startAngle:0,endAngle:TAU,segments:32};let{center:s,radius:t,startAngle:n,endAngle:o,segments:i}=Object.assign({},r,e);if(!isNumberArray(s,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("radius must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("radius values must be positive");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(o,0))throw new Error("endAngle must be positive");if(!isGTE(i,3))throw new Error("segments must be three or more");if(0===t[0]||0===t[1])return geom2.create();let a=TAU;(n%=TAU)<(o%=TAU)&&(a=o-n),n>o&&(a=o+(TAU-n));const m=Math.min(t[0],t[1]);if(a{const{center:c,radius:r,segments:s,axes:a}=Object.assign({},{center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(r,3))throw new Error("radius must be an array of X, Y and Z values");if(!r.every(e=>e>=0))throw new Error("radius values must be positive");if(!isGTE(s,4))throw new Error("segments must be four or more");if(0===r[0]||0===r[1]||0===r[2])return geom3.create();const t=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[0]),r[0]),v=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[1]),r[1]),o=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[2]),r[2]),i=Math.round(s/4);let l;const u=[],d=vec3.create(),n=vec3.create();for(let e=0;e<=s;e++){const r=TAU*e/s,a=vec3.add(vec3.create(),vec3.scale(d,t,cos(r)),vec3.scale(n,v,sin(r)));if(e>0){let e,r;for(let s=0;s<=i;s++){const t=TAU/4*s/i,v=cos(t),m=sin(t);if(s>0){let t,h=[];t=vec3.subtract(vec3.create(),vec3.scale(d,l,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),t=vec3.subtract(vec3.create(),vec3.scale(d,a,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),s{let{radius:r,frequency:t}=Object.assign({},{radius:1,frequency:6},e);if(!isGTE(r,0))throw new Error("radius must be positive");if(!isGTE(t,6))throw new Error("frequency must be six or more");if(0===r)return geom3.create();t=Math.floor(t/6);const o=[[.850651,0,-.525731],[.850651,-0,.525731],[-.850651,-0,.525731],[-.850651,0,-.525731],[0,-.525731,.850651],[0,.525731,.850651],[0,.525731,-.850651],[0,-.525731,-.850651],[-.525731,-.850651,-0],[.525731,-.850651,-0],[.525731,.850651,0],[-.525731,.850651,0]],s=[[0,9,1],[1,10,0],[6,7,0],[10,6,0],[7,9,0],[5,1,4],[4,1,9],[5,10,1],[2,8,3],[3,11,2],[2,5,4],[4,8,2],[2,11,5],[3,7,6],[6,11,3],[8,7,3],[9,8,4],[11,10,5],[10,11,6],[8,9,7]],n=(e,r,t)=>{const o=e[0],s=e[1],n=e[2];let c=t;const f=[],l=[];for(let e=0;e{const o=1-t,s=[];for(let n=0;n<3;n++)s[n]=e[n]*o+r[n]*t;return s};let c=[],f=[],l=0;for(let e=0;e{if(!Array.isArray(r))throw new Error("points must be an array");return path2.fromPoints({},r)};module.exports=line; -},{"../geometries/path2":186}],504:[function(require,module,exports){ -const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"==e&&(c=geom2.reverse(c)),c};module.exports=polygon; +},{"../geometries/path2":187}],505:[function(require,module,exports){ +const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"===e&&(c=geom2.reverse(c)),c};module.exports=polygon; -},{"../geometries/geom2":149}],505:[function(require,module,exports){ +},{"../geometries/geom2":150}],506:[function(require,module,exports){ const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.create(r.map(r=>o[r]));return t&&t[e]&&(a.color=t[e]),a});return geom3.create(s)};module.exports=polyhedron; -},{"../geometries/geom3":165,"../geometries/poly3":203,"./commonChecks":494}],506:[function(require,module,exports){ +},{"../geometries/geom3":166,"../geometries/poly3":204,"./commonChecks":495}],507:[function(require,module,exports){ const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),rectangle=e=>{const{center:r,size:t}=Object.assign({},{center:[0,0],size:[2,2]},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(0===t[0]||0===t[1])return geom2.create();const a=[t[0]/2,t[1]/2],c=[a[0],-a[1]],s=[vec2.subtract(vec2.create(),r,a),vec2.add(vec2.create(),r,c),vec2.add(vec2.create(),r,a),vec2.subtract(vec2.create(),r,c)];return geom2.fromPoints(s)};module.exports=rectangle; -},{"../geometries/geom2":149,"../maths/vec2":315,"./commonChecks":494}],507:[function(require,module,exports){ +},{"../geometries/geom2":150,"../maths/vec2":316,"./commonChecks":495}],508:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=require("./cuboid"),createCorners=(e,r,t,s,c,o)=>{const a=TAU/4*c/s,n=cos(a),i=sin(a),u=s-c;let l=t*n,h=r[2]-(t-t*i);o||(h=t-t*i-r[2]),l=l>EPS?l:0;const d=vec3.add(vec3.create(),e,[r[0]-t,r[1]-t,h]),v=vec3.add(vec3.create(),e,[t-r[0],r[1]-t,h]),m=vec3.add(vec3.create(),e,[t-r[0],t-r[1],h]),p=vec3.add(vec3.create(),e,[r[0]-t,t-r[1],h]),f=[],g=[],E=[],b=[];for(let e=0;e<=u;e++){const r=u>0?TAU/4*e/u:0,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,l);const s=vec3.fromVec2(vec3.create(),t);f.push(vec3.add(vec3.create(),d,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),g.push(vec3.add(vec3.create(),v,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),E.push(vec3.add(vec3.create(),m,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),b.push(vec3.add(vec3.create(),p,s))}return o?[f,g,E,b]:(f.reverse(),g.reverse(),E.reverse(),b.reverse(),[b,E,g,f])},stitchCorners=(e,r)=>{const t=[];for(let s=0;s{const t=[];for(let s=0;s{e=(e=[e[3],e[2],e[1],e[0]]).map(e=>e.slice().reverse());const t=[];e.forEach(e=>{e.forEach(e=>t.push(e))});const s=[];r.forEach(e=>{e.forEach(e=>s.push(e))});const c=[];for(let e=0;e{let{center:r,size:t,roundRadius:s,segments:c}=Object.assign({},{center:[0,0,0],size:[2,2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(t,3))throw new Error("size must be an array of X, Y and Z values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(!isGTE(s,0))throw new Error("roundRadius must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");if(0===t[0]||0===t[1]||0===t[2])return geom3.create();if(0===s)return cuboid({center:r,size:t});if(s>(t=t.map(e=>e/2))[0]-EPS||s>t[1]-EPS||s>t[2]-EPS)throw new Error("roundRadius must be smaller than the radius of all dimensions");c=Math.floor(c/4);let o=null,a=null,n=[];for(let e=0;e<=c;e++){const i=createCorners(r,t,s,c,e,!0),u=createCorners(r,t,s,c,e,!1);if(0===e&&(n=n.concat(stitchSides(u,i))),o&&(n=n.concat(stitchCorners(o,i),stitchWalls(o,i))),a&&(n=n.concat(stitchCorners(a,u),stitchWalls(a,u))),e===c){let e=i.map(e=>e[0]);n.push(poly3.create(e)),e=u.map(e=>e[0]),n.push(poly3.create(e))}o=i,a=u}return geom3.create(n)};module.exports=roundedCuboid; -},{"../geometries/geom3":165,"../geometries/poly3":203,"../maths/constants":218,"../maths/utils/trigonometry":297,"../maths/vec2":315,"../maths/vec3":346,"./commonChecks":494,"./cuboid":496}],508:[function(require,module,exports){ +},{"../geometries/geom3":166,"../geometries/poly3":204,"../maths/constants":219,"../maths/utils/trigonometry":298,"../maths/vec2":316,"../maths/vec3":347,"./commonChecks":495,"./cuboid":497}],509:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinder=require("./cylinder"),roundedCylinder=e=>{const{center:c,height:r,radius:s,roundRadius:a,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,roundRadius:.2,segments:32},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isGTE(r,0))throw new Error("height must be positive");if(!isGTE(s,0))throw new Error("radius must be positive");if(!isGTE(a,0))throw new Error("roundRadius must be positive");if(a>s)throw new Error("roundRadius must be smaller than the radius");if(!isGTE(t,4))throw new Error("segments must be four or more");if(0===r||0===s)return geom3.create();if(0===a)return cylinder({center:c,height:r,radius:s});const v=[0,0,-r/2],o=[0,0,r/2],i=vec3.subtract(vec3.create(),o,v);if(2*a>vec3.length(i)-EPS)throw new Error("height must be larger than twice roundRadius");let u;u=Math.abs(i[0])>Math.abs(i[1])?vec3.fromValues(0,1,0):vec3.fromValues(1,0,0);const d=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),i),a),n=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),d,u)),s),l=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),n,d)),s);vec3.add(v,v,d),vec3.subtract(o,o,d);const h=Math.floor(.25*t),m=e=>{const r=e.map(e=>vec3.add(e,e,c));return poly3.create(r)},p=[],b=vec3.create(),f=vec3.create();let g;for(let e=0;e<=t;e++){const c=TAU*e/t,r=vec3.add(vec3.create(),vec3.scale(b,n,cos(c)),vec3.scale(f,l,sin(c)));if(e>0){let e,c,s=[];s.push(vec3.add(vec3.create(),v,r)),s.push(vec3.add(vec3.create(),v,g)),s.push(vec3.add(vec3.create(),o,g)),s.push(vec3.add(vec3.create(),o,r)),p.push(m(s));for(let a=0;a<=h;a++){const t=TAU/4*a/h,i=cos(t),u=sin(t);if(a>0){let t;s=[],t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,g,e),vec3.scale(f,d,c))),s.push(t),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,e),vec3.scale(f,d,c))),s.push(t),a{let{center:r,size:t,roundRadius:a,segments:c}=Object.assign({},{center:[0,0],size:[2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(!isGTE(a,0))throw new Error("roundRadius must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");if(0===t[0]||0===t[1])return geom2.create();if(0===a)return rectangle({center:r,size:t});if(a>(t=t.map(e=>e/2))[0]-EPS||a>t[1]-EPS)throw new Error("roundRadius must be smaller than the radius of all dimensions");const s=Math.floor(c/4),o=vec2.add(vec2.create(),r,[t[0]-a,t[1]-a]),n=vec2.add(vec2.create(),r,[a-t[0],t[1]-a]),i=vec2.add(vec2.create(),r,[a-t[0],a-t[1]]),u=vec2.add(vec2.create(),r,[t[0]-a,a-t[1]]),d=[],v=[],m=[],l=[];for(let e=0;e<=s;e++){const r=TAU/4*e/s,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,a),d.push(vec2.add(vec2.create(),o,t)),vec2.rotate(t,t,vec2.create(),TAU/4),v.push(vec2.add(vec2.create(),n,t)),vec2.rotate(t,t,vec2.create(),TAU/4),m.push(vec2.add(vec2.create(),i,t)),vec2.rotate(t,t,vec2.create(),TAU/4),l.push(vec2.add(vec2.create(),u,t))}return geom2.fromPoints(d.concat(v,m,l))};module.exports=roundedRectangle; -},{"../geometries/geom2":149,"../maths/constants":218,"../maths/vec2":315,"./commonChecks":494,"./rectangle":506}],510:[function(require,module,exports){ +},{"../geometries/geom2":150,"../maths/constants":219,"../maths/vec2":316,"./commonChecks":495,"./rectangle":507}],511:[function(require,module,exports){ const ellipsoid=require("./ellipsoid"),{isGTE:isGTE}=require("./commonChecks"),sphere=e=>{let{center:s,radius:r,segments:i,axes:t}=Object.assign({},{center:[0,0,0],radius:1,segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isGTE(r,0))throw new Error("radius must be positive");return ellipsoid({center:s,radius:r=[r,r,r],segments:i,axes:t})};module.exports=sphere; -},{"./commonChecks":494,"./ellipsoid":500}],511:[function(require,module,exports){ +},{"./commonChecks":495,"./ellipsoid":501}],512:[function(require,module,exports){ const rectangle=require("./rectangle"),{isGTE:isGTE}=require("./commonChecks"),square=e=>{let{center:r,size:s}=Object.assign({},{center:[0,0],size:2},e);if(!isGTE(s,0))throw new Error("size must be positive");return rectangle({center:r,size:s=[s,s]})};module.exports=square; -},{"./commonChecks":494,"./rectangle":506}],512:[function(require,module,exports){ +},{"./commonChecks":495,"./rectangle":507}],513:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),getRadiusRatio=(e,r)=>e>0&&r>1&&r{const o=TAU/e,i=[];for(let a=0;a{let{center:r,vertices:t,outerRadius:s,innerRadius:o,density:i,startAngle:a}=Object.assign({},{center:[0,0],vertices:5,outerRadius:1,innerRadius:0,density:2,startAngle:0},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isGTE(t,2))throw new Error("vertices must be two or more");if(!isGT(s,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(o,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(a,0))throw new Error("startAngle must be greater than zero");if(t=Math.floor(t),i=Math.floor(i),a%=TAU,0===o){if(!isGTE(i,2))throw new Error("density must be two or more");o=s*getRadiusRatio(t,i)}const n=vec2.clone(r),u=getPoints(t,s,a,n),c=getPoints(t,o,a+Math.PI/t,n),h=[];for(let e=0;e{const r={innerRadius:1,innerSegments:32,outerRadius:4,outerSegments:32,innerRotation:0,startAngle:0,outerRotation:TAU},{innerRadius:t,innerSegments:o,outerRadius:n,outerSegments:s,innerRotation:i,startAngle:a,outerRotation:u}=Object.assign({},r,e);if(!isGT(t,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(o,3))throw new Error("innerSegments must be three or more");if(!isGT(n,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(s,3))throw new Error("outerSegments must be three or more");if(!isGTE(a,0))throw new Error("startAngle must be positive");if(!isGT(u,0))throw new Error("outerRotation must be greater than zero");if(t>=n)throw new Error("inner circle is two large to rotate about the outer circle");let m=circle({radius:t,segments:o});return 0!==i&&(m=rotate([0,0,i],m)),m=translate([n,0],m),extrudeRotate({startAngle:a,angle:u,segments:s},m)};module.exports=torus; -},{"../maths/constants":218,"../operations/extrusions/extrudeRotate":440,"../operations/transforms/rotate":488,"../operations/transforms/translate":491,"./circle":493,"./commonChecks":494}],514:[function(require,module,exports){ +},{"../maths/constants":219,"../operations/extrusions/extrudeRotate":441,"../operations/transforms/rotate":489,"../operations/transforms/translate":492,"./circle":494,"./commonChecks":495}],515:[function(require,module,exports){ const{NEPS:NEPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),solveAngleFromSSS=(e,r,t)=>Math.acos((e*e+r*r-t*t)/(2*e*r)),solveSideFromSAS=(e,r,t)=>r>NEPS?Math.sqrt(e*e+t*t-2*e*t*Math.cos(r)):Math.sqrt((e-t)*(e-t)+e*t*r*r*(1-r*r/12)),solveAAA=e=>{if(Math.abs(e[0]+e[1]+e[2]-Math.PI)>NEPS)throw new Error("AAA triangles require angles that sum to PI");const r=e[0],t=e[1],s=Math.PI-r-t,a=1/Math.sin(s)*Math.sin(r),n=1/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,a,n,1)},solveAAS=e=>{const r=e[0],t=e[1],s=Math.PI+NEPS-r-t;if(s{const r=e[0],t=e[2],s=Math.PI+NEPS-r-t;if(s{const r=e[0],t=e[1],s=e[2],a=solveSideFromSAS(r,t,s),n=solveAngleFromSSS(a,r,s),o=Math.PI-n-t;return createTriangle(n,t,o,s,a,r)},solveSSA=e=>{const r=e[0],t=e[1],s=e[2],a=Math.asin(t*Math.sin(s)/r),n=Math.PI-a-s,o=r/Math.sin(s)*Math.sin(n);return createTriangle(a,n,s,t,o,r)},solveSSS=e=>{const r=e[1],t=e[2],s=e[0];if(r+t<=s||t+s<=r||s+r<=t)throw new Error("SSS triangle is incorrect, as the longest side is longer than the sum of the other sides");const a=solveAngleFromSSS(t,s,r),n=solveAngleFromSSS(s,r,t),o=Math.PI-a-n;return createTriangle(a,n,o,r,t,s)},createTriangle=(e,r,t,s,a,n)=>{const o=vec2.fromValues(0,0),i=vec2.fromValues(n,0),S=vec2.fromValues(s,0);return vec2.add(S,vec2.rotate(S,S,[0,0],Math.PI-r),i),geom2.fromPoints([o,i,S])},triangle=e=>{let{type:r,values:t}=Object.assign({},{type:"SSS",values:[1,1,1]},e);if("string"!=typeof r)throw new Error("triangle type must be a string");if("A"!==(r=r.toUpperCase())[0]&&"S"!==r[0]||"A"!==r[1]&&"S"!==r[1]||"A"!==r[2]&&"S"!==r[2])throw new Error("triangle type must contain three letters; A or S");if(!isNumberArray(t,3))throw new Error("triangle values must contain three values");if(!t.every(e=>e>0))throw new Error("triangle values must be greater than zero");switch(r){case"AAA":return solveAAA(t);case"AAS":return solveAAS(t);case"ASA":return solveASA(t);case"SAS":return solveSAS(t);case"SSA":return solveSSA(t);case"SSS":return solveSSS(t);default:throw new Error("invalid triangle type, try again")}};module.exports=triangle; -},{"../geometries/geom2":149,"../maths/constants":218,"../maths/vec2":315,"./commonChecks":494}],515:[function(require,module,exports){ +},{"../geometries/geom2":150,"../maths/constants":219,"../maths/vec2":316,"./commonChecks":495}],516:[function(require,module,exports){ module.exports={height:14,32:[16],33:[10,5,21,5,7,void 0,5,2,4,1,5,0,6,1,5,2],34:[16,4,21,4,14,void 0,12,21,12,14],35:[21,11,25,4,-7,void 0,17,25,10,-7,void 0,4,12,18,12,void 0,3,6,17,6],36:[20,8,25,8,-4,void 0,12,25,12,-4,void 0,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],37:[24,21,21,3,0,void 0,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,void 0,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7],38:[26,23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2],39:[10,5,19,4,20,5,21,6,20,6,18,5,16,4,15],40:[14,11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7],41:[14,3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7],42:[16,8,21,8,9,void 0,3,18,13,12,void 0,13,18,3,12],43:[26,13,18,13,0,void 0,4,9,22,9],44:[10,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],45:[26,4,9,22,9],46:[10,5,2,4,1,5,0,6,1,5,2],47:[22,20,25,2,-7],48:[20,9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21],49:[20,6,17,8,18,11,21,11,0],50:[20,4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0],51:[20,5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],52:[20,13,21,3,7,18,7,void 0,13,21,13,0],53:[20,15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],54:[20,16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7],55:[20,17,21,7,0,void 0,3,21,17,21],56:[20,8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21],57:[20,16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3],58:[10,5,14,4,13,5,12,6,13,5,14,void 0,5,2,4,1,5,0,6,1,5,2],59:[10,5,14,4,13,5,12,6,13,5,14,void 0,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],60:[24,20,18,4,9,20,0],61:[26,4,12,22,12,void 0,4,6,22,6],62:[24,4,18,20,9,4,0],63:[18,3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,void 0,9,2,8,1,9,0,10,1,9,2],64:[27,18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,void 0,12,16,10,14,9,11,9,8,10,6,11,5,void 0,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,void 0,19,16,18,8,18,6,19,5],65:[18,9,21,1,0,void 0,9,21,17,0,void 0,4,7,14,7],66:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,void 0,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0],67:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5],68:[21,4,21,4,0,void 0,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0],69:[19,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11,void 0,4,0,17,0],70:[18,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11],71:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,void 0,13,8,18,8],72:[22,4,21,4,0,void 0,18,21,18,0,void 0,4,11,18,11],73:[8,4,21,4,0],74:[16,12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7],75:[21,4,21,4,0,void 0,18,21,4,7,void 0,9,12,18,0],76:[17,4,21,4,0,void 0,4,0,16,0],77:[24,4,21,4,0,void 0,4,21,12,0,void 0,20,21,12,0,void 0,20,21,20,0],78:[22,4,21,4,0,void 0,4,21,18,0,void 0,18,21,18,0],79:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21],80:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10],81:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,void 0,12,4,18,-2],82:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,void 0,11,11,18,0],83:[20,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],84:[16,8,21,8,0,void 0,1,21,15,21],85:[22,4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21],86:[18,1,21,9,0,void 0,17,21,9,0],87:[24,2,21,7,0,void 0,12,21,7,0,void 0,12,21,17,0,void 0,22,21,17,0],88:[20,3,21,17,0,void 0,17,21,3,0],89:[18,1,21,9,11,9,0,void 0,17,21,9,11],90:[20,17,21,3,0,void 0,3,21,17,21,void 0,3,0,17,0],91:[14,4,25,4,-7,void 0,5,25,5,-7,void 0,4,25,11,25,void 0,4,-7,11,-7],92:[14,0,21,14,-3],93:[14,9,25,9,-7,void 0,10,25,10,-7,void 0,3,25,10,25,void 0,3,-7,10,-7],94:[16,6,15,8,18,10,15,void 0,3,12,8,17,13,12,void 0,8,17,8,0],95:[16,0,-2,16,-2],96:[10,6,21,5,20,4,18,4,16,5,15,6,16,5,17],97:[19,15,14,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],98:[19,4,21,4,0,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],99:[18,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],100:[19,15,21,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],101:[18,3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],102:[12,10,21,8,21,6,20,5,17,5,0,void 0,2,14,9,14],103:[19,15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],104:[19,4,21,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],105:[8,3,21,4,20,5,21,4,22,3,21,void 0,4,14,4,0],106:[10,5,21,6,20,7,21,6,22,5,21,void 0,6,14,6,-3,5,-6,3,-7,1,-7],107:[17,4,21,4,0,void 0,14,14,4,4,void 0,8,8,15,0],108:[8,4,21,4,0],109:[30,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0,void 0,15,10,18,13,20,14,23,14,25,13,26,10,26,0],110:[19,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],111:[19,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14],112:[19,4,14,4,-7,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],113:[19,15,14,15,-7,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],114:[13,4,14,4,0,void 0,4,8,5,11,7,13,9,14,12,14],115:[17,14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3],116:[12,5,21,5,4,6,1,8,0,10,0,void 0,2,14,9,14],117:[19,4,14,4,4,5,1,7,0,10,0,12,1,15,4,void 0,15,14,15,0],118:[16,2,14,8,0,void 0,14,14,8,0],119:[22,3,14,7,0,void 0,11,14,7,0,void 0,11,14,15,0,void 0,19,14,15,0],120:[17,3,14,14,0,void 0,14,14,3,0],121:[16,2,14,8,0,void 0,14,14,8,0,6,-4,4,-6,2,-7,1,-7],122:[17,14,14,3,0,void 0,3,14,14,14,void 0,3,0,14,0],123:[14,9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,void 0,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,void 0,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7],124:[8,4,25,4,-7],125:[14,5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,void 0,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,void 0,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7],126:[24,3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,void 0,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]}; -},{}],516:[function(require,module,exports){ +},{}],517:[function(require,module,exports){ module.exports={vectorChar:require("./vectorChar"),vectorText:require("./vectorText")}; -},{"./vectorChar":517,"./vectorText":519}],517:[function(require,module,exports){ +},{"./vectorChar":518,"./vectorText":520}],518:[function(require,module,exports){ const vectorParams=require("./vectorParams"),vectorChar=(t,e)=>{const{xOffset:r,yOffset:s,input:h,font:o,height:c,extrudeOffset:n}=vectorParams(t,e);let a=h.charCodeAt(0);a&&o[a]||(a=63);const f=[].concat(o[a]),i=(c-n)/o.height,u=n/2,g=f.shift()*i,l=[];let v=[];for(let t=0,e=f.length;t{e||"string"!=typeof t||(t={input:t}),t=t||{};const s=Object.assign({},defaultsVectorParams,t);return s.input=e||s.input,s};module.exports=vectorParams; -},{"./fonts/single-line/hershey/simplex.js":515}],519:[function(require,module,exports){ +},{"./fonts/single-line/hershey/simplex.js":516}],520:[function(require,module,exports){ const vectorChar=require("./vectorChar"),vectorParams=require("./vectorParams"),translateLine=(t,e)=>{const{x:n,y:s}=Object.assign({x:0,y:0},t||{}),r=e.segments;let h=null,a=null;for(let t=0,e=r.length;t{const{xOffset:n,yOffset:s,input:r,font:h,height:a,align:o,extrudeOffset:i,lineSpacing:c,letterSpacing:g}=vectorParams(t,e);let l,f,m,x,u,d,[v,w]=[n,s],O={width:0,segments:[]};const p=[];let y=[],C=0;const L=v,P=()=>{p.push(O),C=Math.max(C,O.width),O={width:0,segments:[]}};for(l=0,f=r.length;lO.width&&(d=C-O.width,"right"===o?O=translateLine({x:d},O):"center"===o&&(O=translateLine({x:d/2},O))),y=y.concat(O.segments);return y};module.exports=vectorText; -},{"./vectorChar":517,"./vectorParams":518}],520:[function(require,module,exports){ +},{"./vectorChar":518,"./vectorParams":519}],521:[function(require,module,exports){ const geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),areAllShapesTheSameType=e=>{let r;for(const o of e){let e=0;if(geom2.isA(o)&&(e=1),geom3.isA(o)&&(e=2),path2.isA(o)&&(e=3),r&&e!==r)return!1;r=e}return!0};module.exports=areAllShapesTheSameType; -},{"../geometries/geom2":149,"../geometries/geom3":165,"../geometries/path2":186}],521:[function(require,module,exports){ +},{"../geometries/geom2":150,"../geometries/geom3":166,"../geometries/path2":187}],522:[function(require,module,exports){ const degToRad=d=>.017453292519943295*d;module.exports=degToRad; -},{}],522:[function(require,module,exports){ +},{}],523:[function(require,module,exports){ const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten; -},{}],523:[function(require,module,exports){ +},{}],524:[function(require,module,exports){ const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort; -},{}],524:[function(require,module,exports){ +},{}],525:[function(require,module,exports){ module.exports={areAllShapesTheSameType:require("./areAllShapesTheSameType"),degToRad:require("./degToRad"),flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),insertSorted:require("./insertSorted"),radiusToSegments:require("./radiusToSegments"),radToDeg:require("./radToDeg")}; -},{"./areAllShapesTheSameType":520,"./degToRad":521,"./flatten":522,"./fnNumberSort":523,"./insertSorted":525,"./radToDeg":527,"./radiusToSegments":528}],525:[function(require,module,exports){ +},{"./areAllShapesTheSameType":521,"./degToRad":522,"./flatten":523,"./fnNumberSort":524,"./insertSorted":526,"./radToDeg":528,"./radiusToSegments":529}],526:[function(require,module,exports){ const insertSorted=(t,e,o)=>{let r=0,s=t.length;for(;s>r;){const l=Math.floor((r+s)/2);o(e,t[l])>0?r=l+1:s=l}t.splice(r,0,e)};module.exports=insertSorted; -},{}],526:[function(require,module,exports){ +},{}],527:[function(require,module,exports){ const padArrayToLength=(r,e,o)=>{for(r=r.slice();r.length57.29577951308232*o;module.exports=radToDeg; -},{}],528:[function(require,module,exports){ +},{}],529:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),radiusToSegments=(t,e,s)=>{const a=e>0?t*TAU/e:0,n=s>0?TAU/s:0;return Math.ceil(Math.max(a,n,4))};module.exports=radiusToSegments; -},{"../maths/constants":218}],529:[function(require,module,exports){ +},{"../maths/constants":219}],530:[function(require,module,exports){ const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten; -},{}],530:[function(require,module,exports){ +},{}],531:[function(require,module,exports){ const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort; -},{}],531:[function(require,module,exports){ +},{}],532:[function(require,module,exports){ const head=r=>{if(Array.isArray(r)&&0!==r.length)return r[0]};module.exports=head; -},{}],532:[function(require,module,exports){ +},{}],533:[function(require,module,exports){ module.exports={flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),head:require("./head"),insertSorted:require("./insertSorted"),nth:require("./nth"),padToLength:require("./padToLength"),toArray:require("./toArray")}; -},{"./flatten":529,"./fnNumberSort":530,"./head":531,"./insertSorted":533,"./nth":534,"./padToLength":535,"./toArray":536}],533:[function(require,module,exports){ +},{"./flatten":530,"./fnNumberSort":531,"./head":532,"./insertSorted":534,"./nth":535,"./padToLength":536,"./toArray":537}],534:[function(require,module,exports){ const insertSorted=(t,e,o)=>{let r=0,n=t.length;for(;n>r;){const s=Math.floor((r+n)/2);o(e,t[s])>0?r=s+1:n=s}return t.splice(r,0,e),t};module.exports=insertSorted; -},{}],534:[function(require,module,exports){ +},{}],535:[function(require,module,exports){ const nth=(r,t)=>{if(Array.isArray(r)&&!(r.length{for(e=e.slice();e.lengthArray.isArray(r)?r:null==r?[]:[r];module.exports=toArray; },{}]},{},[24])(24) diff --git a/packages/core/package.json b/packages/core/package.json index aa23ecee0..d16df4f49 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/core", - "version": "2.6.10", + "version": "2.6.11", "description": "Core functionality for JSCAD Applications", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -36,9 +36,9 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/io": "2.4.9", - "@jscad/io-utils": "2.0.28", - "@jscad/modeling": "2.12.3", + "@jscad/io": "2.4.10", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "json5": "2.2.3", "strip-bom": "4.0.0" }, diff --git a/packages/io/3mf-serializer/CHANGELOG.md b/packages/io/3mf-serializer/CHANGELOG.md index cc70326b2..eb3a19b8f 100644 --- a/packages/io/3mf-serializer/CHANGELOG.md +++ b/packages/io/3mf-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.13](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/3mf-serializer@2.1.12...@jscad/3mf-serializer@2.1.13) (2024-11-10) + +**Note:** Version bump only for package @jscad/3mf-serializer + + + + + ## [2.1.12](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/3mf-serializer@2.1.11...@jscad/3mf-serializer@2.1.12) (2024-10-06) **Note:** Version bump only for package @jscad/3mf-serializer diff --git a/packages/io/3mf-serializer/package.json b/packages/io/3mf-serializer/package.json index b0f6d71dd..ebe26beea 100644 --- a/packages/io/3mf-serializer/package.json +++ b/packages/io/3mf-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/3mf-serializer", - "version": "2.1.12", + "version": "2.1.13", "description": "3MF serializer for JSCAD project", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -28,7 +28,7 @@ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "fflate": "0.7.3", "onml": "1.2.0" }, diff --git a/packages/io/amf-deserializer/CHANGELOG.md b/packages/io/amf-deserializer/CHANGELOG.md index b72cfa223..cc5ad5667 100644 --- a/packages/io/amf-deserializer/CHANGELOG.md +++ b/packages/io/amf-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/amf-deserializer@2.3.8...@jscad/amf-deserializer@2.3.9) (2024-11-10) + +**Note:** Version bump only for package @jscad/amf-deserializer + + + + + ## [2.3.8](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/amf-deserializer@2.3.7...@jscad/amf-deserializer@2.3.8) (2024-10-06) **Note:** Version bump only for package @jscad/amf-deserializer diff --git a/packages/io/amf-deserializer/package.json b/packages/io/amf-deserializer/package.json index fe75c41b5..d294feb37 100644 --- a/packages/io/amf-deserializer/package.json +++ b/packages/io/amf-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/amf-deserializer", - "version": "2.3.8", + "version": "2.3.9", "description": "AMF Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -31,8 +31,8 @@ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", - "@jscad/io-utils": "2.0.28", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { diff --git a/packages/io/amf-serializer/CHANGELOG.md b/packages/io/amf-serializer/CHANGELOG.md index 5f526056f..9b9f1169e 100644 --- a/packages/io/amf-serializer/CHANGELOG.md +++ b/packages/io/amf-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.19](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/amf-serializer@2.1.18...@jscad/amf-serializer@2.1.19) (2024-11-10) + +**Note:** Version bump only for package @jscad/amf-serializer + + + + + ## [2.1.18](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/amf-serializer@2.1.17...@jscad/amf-serializer@2.1.18) (2024-10-06) **Note:** Version bump only for package @jscad/amf-serializer diff --git a/packages/io/amf-serializer/package.json b/packages/io/amf-serializer/package.json index 960885748..d396f0502 100644 --- a/packages/io/amf-serializer/package.json +++ b/packages/io/amf-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/amf-serializer", - "version": "2.1.18", + "version": "2.1.19", "description": "AMF Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "onml": "1.3.0" }, "devDependencies": { diff --git a/packages/io/dxf-deserializer/CHANGELOG.md b/packages/io/dxf-deserializer/CHANGELOG.md index 60774204e..675dbbad7 100644 --- a/packages/io/dxf-deserializer/CHANGELOG.md +++ b/packages/io/dxf-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.26](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/dxf-deserializer@2.3.25...@jscad/dxf-deserializer@2.3.26) (2024-11-10) + +**Note:** Version bump only for package @jscad/dxf-deserializer + + + + + ## [2.3.25](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/dxf-deserializer@2.3.24...@jscad/dxf-deserializer@2.3.25) (2024-10-06) **Note:** Version bump only for package @jscad/dxf-deserializer diff --git a/packages/io/dxf-deserializer/package.json b/packages/io/dxf-deserializer/package.json index 4f1e516bb..c6c1346e9 100644 --- a/packages/io/dxf-deserializer/package.json +++ b/packages/io/dxf-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/dxf-deserializer", - "version": "2.3.25", + "version": "2.3.26", "description": "DXF Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -28,8 +28,8 @@ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", - "@jscad/io-utils": "2.0.28" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/dxf-serializer/CHANGELOG.md b/packages/io/dxf-serializer/CHANGELOG.md index 658d50162..e87a52e02 100644 --- a/packages/io/dxf-serializer/CHANGELOG.md +++ b/packages/io/dxf-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.19](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/dxf-serializer@2.1.18...@jscad/dxf-serializer@2.1.19) (2024-11-10) + +**Note:** Version bump only for package @jscad/dxf-serializer + + + + + ## [2.1.18](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/dxf-serializer@2.1.17...@jscad/dxf-serializer@2.1.18) (2024-10-06) **Note:** Version bump only for package @jscad/dxf-serializer diff --git a/packages/io/dxf-serializer/package.json b/packages/io/dxf-serializer/package.json index e229ef047..eadebd55f 100644 --- a/packages/io/dxf-serializer/package.json +++ b/packages/io/dxf-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/dxf-serializer", - "version": "2.1.18", + "version": "2.1.19", "description": "DXF Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3" + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/io-utils/CHANGELOG.md b/packages/io/io-utils/CHANGELOG.md index 0aceb513e..4ff56e5b4 100644 --- a/packages/io/io-utils/CHANGELOG.md +++ b/packages/io/io-utils/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.29](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/io-utils@2.0.28...@jscad/io-utils@2.0.29) (2024-11-10) + +**Note:** Version bump only for package @jscad/io-utils + + + + + ## [2.0.28](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/io-utils@2.0.27...@jscad/io-utils@2.0.28) (2024-10-06) **Note:** Version bump only for package @jscad/io-utils diff --git a/packages/io/io-utils/package.json b/packages/io/io-utils/package.json index 34a9e15d9..24e3f541e 100644 --- a/packages/io/io-utils/package.json +++ b/packages/io/io-utils/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/io-utils", - "version": "2.0.28", + "version": "2.0.29", "description": "Utilities for JSCAD IO Packages", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,7 +33,7 @@ ], "license": "MIT", "devDependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "ava": "3.15.0", "nyc": "15.1.0" }, diff --git a/packages/io/io/CHANGELOG.md b/packages/io/io/CHANGELOG.md index a98a030c5..3d775c899 100644 --- a/packages/io/io/CHANGELOG.md +++ b/packages/io/io/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.10](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/io@2.4.9...@jscad/io@2.4.10) (2024-11-10) + +**Note:** Version bump only for package @jscad/io + + + + + ## [2.4.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/io@2.4.8...@jscad/io@2.4.9) (2024-10-06) **Note:** Version bump only for package @jscad/io diff --git a/packages/io/io/package.json b/packages/io/io/package.json index 33976e402..795abbaa8 100644 --- a/packages/io/io/package.json +++ b/packages/io/io/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/io", - "version": "2.4.9", + "version": "2.4.10", "description": "Meta Package for JSCAD IO Packages", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -30,24 +30,24 @@ ], "license": "MIT", "dependencies": { - "@jscad/3mf-serializer": "2.1.12", - "@jscad/amf-deserializer": "2.3.8", - "@jscad/amf-serializer": "2.1.18", + "@jscad/3mf-serializer": "2.1.13", + "@jscad/amf-deserializer": "2.3.9", + "@jscad/amf-serializer": "2.1.19", "@jscad/array-utils": "2.1.4", - "@jscad/dxf-deserializer": "2.3.25", - "@jscad/dxf-serializer": "2.1.18", - "@jscad/io-utils": "2.0.28", - "@jscad/json-deserializer": "2.0.29", - "@jscad/json-serializer": "2.0.28", - "@jscad/modeling": "2.12.3", - "@jscad/obj-deserializer": "2.0.28", - "@jscad/obj-serializer": "2.1.18", - "@jscad/stl-deserializer": "2.1.25", - "@jscad/stl-serializer": "2.1.18", - "@jscad/svg-deserializer": "2.5.9", - "@jscad/svg-serializer": "2.3.16", - "@jscad/x3d-deserializer": "2.2.8", - "@jscad/x3d-serializer": "2.4.8" + "@jscad/dxf-deserializer": "2.3.26", + "@jscad/dxf-serializer": "2.1.19", + "@jscad/io-utils": "2.0.29", + "@jscad/json-deserializer": "2.0.30", + "@jscad/json-serializer": "2.0.29", + "@jscad/modeling": "2.12.4", + "@jscad/obj-deserializer": "2.0.29", + "@jscad/obj-serializer": "2.1.19", + "@jscad/stl-deserializer": "2.1.26", + "@jscad/stl-serializer": "2.1.19", + "@jscad/svg-deserializer": "2.5.10", + "@jscad/svg-serializer": "2.3.17", + "@jscad/x3d-deserializer": "2.2.9", + "@jscad/x3d-serializer": "2.4.9" }, "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } diff --git a/packages/io/json-deserializer/CHANGELOG.md b/packages/io/json-deserializer/CHANGELOG.md index abcded31d..bbfd6cb00 100644 --- a/packages/io/json-deserializer/CHANGELOG.md +++ b/packages/io/json-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.30](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/json-deserializer@2.0.29...@jscad/json-deserializer@2.0.30) (2024-11-10) + +**Note:** Version bump only for package @jscad/json-deserializer + + + + + ## [2.0.29](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/json-deserializer@2.0.28...@jscad/json-deserializer@2.0.29) (2024-10-06) **Note:** Version bump only for package @jscad/json-deserializer diff --git a/packages/io/json-deserializer/package.json b/packages/io/json-deserializer/package.json index 4c1048a5f..bd1a4c9f5 100644 --- a/packages/io/json-deserializer/package.json +++ b/packages/io/json-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/json-deserializer", - "version": "2.0.29", + "version": "2.0.30", "description": "JSON Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -29,10 +29,10 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/io-utils": "2.0.28" + "@jscad/io-utils": "2.0.29" }, "devDependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "ava": "3.15.0", "nyc": "15.1.0" }, diff --git a/packages/io/json-serializer/CHANGELOG.md b/packages/io/json-serializer/CHANGELOG.md index f975d3f82..d33b26a09 100644 --- a/packages/io/json-serializer/CHANGELOG.md +++ b/packages/io/json-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.29](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/json-serializer@2.0.28...@jscad/json-serializer@2.0.29) (2024-11-10) + +**Note:** Version bump only for package @jscad/json-serializer + + + + + ## [2.0.28](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/json-serializer@2.0.27...@jscad/json-serializer@2.0.28) (2024-10-06) **Note:** Version bump only for package @jscad/json-serializer diff --git a/packages/io/json-serializer/package.json b/packages/io/json-serializer/package.json index ba17e6d09..5c0f5d3d2 100644 --- a/packages/io/json-serializer/package.json +++ b/packages/io/json-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/json-serializer", - "version": "2.0.28", + "version": "2.0.29", "description": "JSON Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -28,7 +28,7 @@ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3" + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/obj-deserializer/CHANGELOG.md b/packages/io/obj-deserializer/CHANGELOG.md index 02787fc90..f4dcf3d76 100644 --- a/packages/io/obj-deserializer/CHANGELOG.md +++ b/packages/io/obj-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.29](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/obj-deserializer@2.0.28...@jscad/obj-deserializer@2.0.29) (2024-11-10) + +**Note:** Version bump only for package @jscad/obj-deserializer + + + + + ## [2.0.28](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/obj-deserializer@2.0.27...@jscad/obj-deserializer@2.0.28) (2024-10-06) **Note:** Version bump only for package @jscad/obj-deserializer diff --git a/packages/io/obj-deserializer/package.json b/packages/io/obj-deserializer/package.json index 957875fda..9c9baf160 100644 --- a/packages/io/obj-deserializer/package.json +++ b/packages/io/obj-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/obj-deserializer", - "version": "2.0.28", + "version": "2.0.29", "description": "OBJ Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -32,8 +32,8 @@ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", - "@jscad/io-utils": "2.0.28" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/obj-serializer/CHANGELOG.md b/packages/io/obj-serializer/CHANGELOG.md index f7154e3f8..c3461fb76 100644 --- a/packages/io/obj-serializer/CHANGELOG.md +++ b/packages/io/obj-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.19](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/obj-serializer@2.1.18...@jscad/obj-serializer@2.1.19) (2024-11-10) + +**Note:** Version bump only for package @jscad/obj-serializer + + + + + ## [2.1.18](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/obj-serializer@2.1.17...@jscad/obj-serializer@2.1.18) (2024-10-06) **Note:** Version bump only for package @jscad/obj-serializer diff --git a/packages/io/obj-serializer/package.json b/packages/io/obj-serializer/package.json index ab48a8f20..20c8db577 100644 --- a/packages/io/obj-serializer/package.json +++ b/packages/io/obj-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/obj-serializer", - "version": "2.1.18", + "version": "2.1.19", "description": "OBJ Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -28,7 +28,7 @@ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3" + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/stl-deserializer/CHANGELOG.md b/packages/io/stl-deserializer/CHANGELOG.md index a915ea41e..846c59256 100644 --- a/packages/io/stl-deserializer/CHANGELOG.md +++ b/packages/io/stl-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.26](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/stl-deserializer@2.1.25...@jscad/stl-deserializer@2.1.26) (2024-11-10) + +**Note:** Version bump only for package @jscad/stl-deserializer + + + + + ## [2.1.25](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/stl-deserializer@2.1.24...@jscad/stl-deserializer@2.1.25) (2024-10-06) **Note:** Version bump only for package @jscad/stl-deserializer diff --git a/packages/io/stl-deserializer/package.json b/packages/io/stl-deserializer/package.json index d01a81f86..ae8b3b509 100644 --- a/packages/io/stl-deserializer/package.json +++ b/packages/io/stl-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/stl-deserializer", - "version": "2.1.25", + "version": "2.1.26", "description": "STL Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -32,8 +32,8 @@ ], "license": "MIT", "dependencies": { - "@jscad/io-utils": "2.0.28", - "@jscad/modeling": "2.12.3" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/stl-serializer/CHANGELOG.md b/packages/io/stl-serializer/CHANGELOG.md index 753aec663..52d9e08e6 100644 --- a/packages/io/stl-serializer/CHANGELOG.md +++ b/packages/io/stl-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.19](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/stl-serializer@2.1.18...@jscad/stl-serializer@2.1.19) (2024-11-10) + +**Note:** Version bump only for package @jscad/stl-serializer + + + + + ## [2.1.18](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/stl-serializer@2.1.17...@jscad/stl-serializer@2.1.18) (2024-10-06) **Note:** Version bump only for package @jscad/stl-serializer diff --git a/packages/io/stl-serializer/package.json b/packages/io/stl-serializer/package.json index 74a3ebdf2..cd3ff6f92 100644 --- a/packages/io/stl-serializer/package.json +++ b/packages/io/stl-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/stl-serializer", - "version": "2.1.18", + "version": "2.1.19", "description": "STL Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3" + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", diff --git a/packages/io/svg-deserializer/CHANGELOG.md b/packages/io/svg-deserializer/CHANGELOG.md index 9ed5b1878..098b9c921 100644 --- a/packages/io/svg-deserializer/CHANGELOG.md +++ b/packages/io/svg-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.5.10](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/svg-deserializer@2.5.9...@jscad/svg-deserializer@2.5.10) (2024-11-10) + +**Note:** Version bump only for package @jscad/svg-deserializer + + + + + ## [2.5.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/svg-deserializer@2.5.8...@jscad/svg-deserializer@2.5.9) (2024-10-06) **Note:** Version bump only for package @jscad/svg-deserializer diff --git a/packages/io/svg-deserializer/package.json b/packages/io/svg-deserializer/package.json index c0a0eec85..48b5c98c2 100644 --- a/packages/io/svg-deserializer/package.json +++ b/packages/io/svg-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/svg-deserializer", - "version": "2.5.9", + "version": "2.5.10", "description": "SVG Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,8 +33,8 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", - "@jscad/io-utils": "2.0.28", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { diff --git a/packages/io/svg-serializer/CHANGELOG.md b/packages/io/svg-serializer/CHANGELOG.md index 47c528ec2..fb30ada18 100644 --- a/packages/io/svg-serializer/CHANGELOG.md +++ b/packages/io/svg-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.3.17](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/svg-serializer@2.3.16...@jscad/svg-serializer@2.3.17) (2024-11-10) + +**Note:** Version bump only for package @jscad/svg-serializer + + + + + ## [2.3.16](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/svg-serializer@2.3.15...@jscad/svg-serializer@2.3.16) (2024-10-06) **Note:** Version bump only for package @jscad/svg-serializer diff --git a/packages/io/svg-serializer/package.json b/packages/io/svg-serializer/package.json index 7daeff1e8..f52e83914 100644 --- a/packages/io/svg-serializer/package.json +++ b/packages/io/svg-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/svg-serializer", - "version": "2.3.16", + "version": "2.3.17", "description": "SVG Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -32,7 +32,7 @@ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "onml": "1.3.0" }, "devDependencies": { diff --git a/packages/io/x3d-deserializer/CHANGELOG.md b/packages/io/x3d-deserializer/CHANGELOG.md index f76681a74..ab3aba033 100644 --- a/packages/io/x3d-deserializer/CHANGELOG.md +++ b/packages/io/x3d-deserializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.2.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.8...@jscad/x3d-deserializer@2.2.9) (2024-11-10) + +**Note:** Version bump only for package @jscad/x3d-deserializer + + + + + ## [2.2.8](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-deserializer@2.2.7...@jscad/x3d-deserializer@2.2.8) (2024-10-06) **Note:** Version bump only for package @jscad/x3d-deserializer diff --git a/packages/io/x3d-deserializer/package.json b/packages/io/x3d-deserializer/package.json index 1f5afe9ea..05cac8334 100644 --- a/packages/io/x3d-deserializer/package.json +++ b/packages/io/x3d-deserializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/x3d-deserializer", - "version": "2.2.8", + "version": "2.2.9", "description": "X3D Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -27,8 +27,8 @@ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", - "@jscad/io-utils": "2.0.28", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { diff --git a/packages/io/x3d-serializer/CHANGELOG.md b/packages/io/x3d-serializer/CHANGELOG.md index a9c206afe..555feb8b0 100644 --- a/packages/io/x3d-serializer/CHANGELOG.md +++ b/packages/io/x3d-serializer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-serializer@2.4.8...@jscad/x3d-serializer@2.4.9) (2024-11-10) + +**Note:** Version bump only for package @jscad/x3d-serializer + + + + + ## [2.4.8](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/x3d-serializer@2.4.7...@jscad/x3d-serializer@2.4.8) (2024-10-06) **Note:** Version bump only for package @jscad/x3d-serializer diff --git a/packages/io/x3d-serializer/package.json b/packages/io/x3d-serializer/package.json index cdade6752..ba8ab1fdc 100644 --- a/packages/io/x3d-serializer/package.json +++ b/packages/io/x3d-serializer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/x3d-serializer", - "version": "2.4.8", + "version": "2.4.9", "description": "X3D Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -33,7 +33,7 @@ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "onml": "1.3.0" }, "devDependencies": { diff --git a/packages/modeling/CHANGELOG.md b/packages/modeling/CHANGELOG.md index 0386c6c9f..f1c684e69 100644 --- a/packages/modeling/CHANGELOG.md +++ b/packages/modeling/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.12.4](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/modeling@2.12.3...@jscad/modeling@2.12.4) (2024-11-10) + +**Note:** Version bump only for package @jscad/modeling + + + + + ## [2.12.3](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/modeling@2.12.2...@jscad/modeling@2.12.3) (2024-10-06) diff --git a/packages/modeling/dist/jscad-modeling.min.js b/packages/modeling/dist/jscad-modeling.min.js index 39e93a0cc..9238cff27 100644 --- a/packages/modeling/dist/jscad-modeling.min.js +++ b/packages/modeling/dist/jscad-modeling.min.js @@ -275,7 +275,7 @@ const signedDistanceToPoint=require("../../maths/plane/signedDistanceToPoint"),{ module.exports={colors:require("./colors"),curves:require("./curves"),geometries:require("./geometries"),maths:require("./maths"),measurements:require("./measurements"),primitives:require("./primitives"),text:require("./text"),utils:require("./utils"),booleans:require("./operations/booleans"),expansions:require("./operations/expansions"),extrusions:require("./operations/extrusions"),hulls:require("./operations/hulls"),modifiers:require("./operations/modifiers"),transforms:require("./operations/transforms")}; },{"./colors":8,"./curves":19,"./geometries":50,"./maths":95,"./measurements":252,"./operations/booleans":266,"./operations/expansions":295,"./operations/extrusions":318,"./operations/hulls":341,"./operations/modifiers":352,"./operations/transforms":362,"./primitives":378,"./text":392,"./utils":400}],93:[function(require,module,exports){ -const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.GetCartesian=function(e,t){const i=e+"/"+t;let s,n;if("X/Y"===i)s=[0,0,1],n=[1,0,0];else if("Y/-X"===i)s=[0,0,1],n=[0,1,0];else if("-X/-Y"===i)s=[0,0,1],n=[-1,0,0];else if("-Y/X"===i)s=[0,0,1],n=[0,-1,0];else if("-X/Y"===i)s=[0,0,-1],n=[-1,0,0];else if("-Y/-X"===i)s=[0,0,-1],n=[0,-1,0];else if("X/-Y"===i)s=[0,0,-1],n=[1,0,0];else if("Y/X"===i)s=[0,0,-1],n=[0,1,0];else if("X/Z"===i)s=[0,-1,0],n=[1,0,0];else if("Z/-X"===i)s=[0,-1,0],n=[0,0,1];else if("-X/-Z"===i)s=[0,-1,0],n=[-1,0,0];else if("-Z/X"===i)s=[0,-1,0],n=[0,0,-1];else if("-X/Z"===i)s=[0,1,0],n=[-1,0,0];else if("-Z/-X"===i)s=[0,1,0],n=[0,0,-1];else if("X/-Z"===i)s=[0,1,0],n=[1,0,0];else if("Z/X"===i)s=[0,1,0],n=[0,0,1];else if("Y/Z"===i)s=[1,0,0],n=[0,1,0];else if("Z/-Y"===i)s=[1,0,0],n=[0,0,1];else if("-Y/-Z"===i)s=[1,0,0],n=[0,-1,0];else if("-Z/Y"===i)s=[1,0,0],n=[0,0,-1];else if("-Y/Z"===i)s=[-1,0,0],n=[0,-1,0];else if("-Z/-Y"===i)s=[-1,0,0],n=[0,0,-1];else if("Y/-Z"===i)s=[-1,0,0],n=[0,1,0];else{if("Z/Y"!==i)throw new Error("OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.");s=[-1,0,0],n=[0,0,1]}return new OrthoNormalBasis(new Plane(new Vector3D(s),0),new Vector3D(n))},OrthoNormalBasis.Z0Plane=function(){const e=new Plane(new Vector3D([0,0,1]),0);return new OrthoNormalBasis(e,new Vector3D([1,0,0]))},OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),i=vec3.scale(vec3.create(),this.v,e[1]),s=vec3.add(t,t,this.planeorigin);return vec3.add(i,i,s)},line3Dto2D:function(e){const t=e.point,i=e.direction.plus(t),s=this.to2D(t),n=this.to2D(i);return Line2D.fromPoints(s,n)},line2Dto3D:function(e){const t=e.origin(),i=e.direction().plus(t),s=this.to3D(t),n=this.to3D(i);return Line3D.fromPoints(s,n)},transform:function(e){const t=this.plane.transform(e),i=this.u.transform(e),s=new Vector3D(0,0,0).transform(e),n=i.minus(s);return new OrthoNormalBasis(t,n)}},module.exports=OrthoNormalBasis; +const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),s=vec3.scale(vec3.create(),this.v,e[1]),i=vec3.add(t,t,this.planeorigin);return vec3.add(s,s,i)}},module.exports=OrthoNormalBasis; },{"./mat4":143,"./vec2":191,"./vec3":222}],94:[function(require,module,exports){ const spatialResolution=1e5,EPS=1e-5,NEPS=1e-13,TAU=2*Math.PI;module.exports={EPS:EPS,NEPS:NEPS,TAU:TAU,spatialResolution:1e5}; @@ -1136,7 +1136,7 @@ module.exports={arc:require("./arc"),circle:require("./circle"),cube:require("./ const path2=require("../geometries/path2"),line=r=>{if(!Array.isArray(r))throw new Error("points must be an array");return path2.fromPoints({},r)};module.exports=line; },{"../geometries/path2":62}],380:[function(require,module,exports){ -const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"==e&&(c=geom2.reverse(c)),c};module.exports=polygon; +const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"===e&&(c=geom2.reverse(c)),c};module.exports=polygon; },{"../geometries/geom2":25}],381:[function(require,module,exports){ const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.create(r.map(r=>o[r]));return t&&t[e]&&(a.color=t[e]),a});return geom3.create(s)};module.exports=polyhedron; diff --git a/packages/modeling/package.json b/packages/modeling/package.json index ec2ec7ef7..ebc69e220 100644 --- a/packages/modeling/package.json +++ b/packages/modeling/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/modeling", - "version": "2.12.3", + "version": "2.12.4", "description": "Constructive Solid Geometry (CSG) Library for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", diff --git a/packages/utils/regl-renderer/CHANGELOG.md b/packages/utils/regl-renderer/CHANGELOG.md index 15a5a6057..7e8e153e4 100644 --- a/packages/utils/regl-renderer/CHANGELOG.md +++ b/packages/utils/regl-renderer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.6.11](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.6.10...@jscad/regl-renderer@2.6.11) (2024-11-10) + +**Note:** Version bump only for package @jscad/regl-renderer + + + + + ## [2.6.10](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/regl-renderer@2.6.9...@jscad/regl-renderer@2.6.10) (2024-10-06) **Note:** Version bump only for package @jscad/regl-renderer diff --git a/packages/utils/regl-renderer/package.json b/packages/utils/regl-renderer/package.json index e59dd528f..f4cdc3d9e 100644 --- a/packages/utils/regl-renderer/package.json +++ b/packages/utils/regl-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/regl-renderer", - "version": "2.6.10", + "version": "2.6.11", "description": "Renderer for JSCAD Geometries", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -36,7 +36,7 @@ }, "devDependencies": { "@jscad/img-utils": "2.0.5", - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "ava": "3.15.0", "browserify": "16.5.1", "budo": "11.6.4", diff --git a/packages/vtree/CHANGELOG.md b/packages/vtree/CHANGELOG.md index a7c7d1abd..107e8c2de 100644 --- a/packages/vtree/CHANGELOG.md +++ b/packages/vtree/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.0.30](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/vtree@2.0.29...@jscad/vtree@2.0.30) (2024-11-10) + +**Note:** Version bump only for package @jscad/vtree + + + + + ## [2.0.29](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/vtree@2.0.28...@jscad/vtree@2.0.29) (2024-10-06) **Note:** Version bump only for package @jscad/vtree diff --git a/packages/vtree/package.json b/packages/vtree/package.json index b4f14f4cd..5e7ab9b94 100644 --- a/packages/vtree/package.json +++ b/packages/vtree/package.json @@ -1,6 +1,6 @@ { "name": "@jscad/vtree", - "version": "2.0.29", + "version": "2.0.30", "description": "Experimental Object Caching for JSCAD", "main": "index.js", "scripts": { @@ -19,12 +19,12 @@ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "object-hash": "2.0.3" }, "devDependencies": { - "@jscad/io-utils": "2.0.28", - "@jscad/stl-serializer": "2.1.18", + "@jscad/io-utils": "2.0.29", + "@jscad/stl-serializer": "2.1.19", "decache": "4.4.0", "just-diff": "2.1.1", "serialize-to-js": "3.0.2", diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index 58fcbd1cc..b76403b60 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.6.9](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/web@2.6.8...@jscad/web@2.6.9) (2024-11-10) + +**Note:** Version bump only for package @jscad/web + + + + + ## [2.6.8](https://github.com/jscad/OpenJSCAD.org/compare/@jscad/web@2.6.7...@jscad/web@2.6.8) (2024-10-06) **Note:** Version bump only for package @jscad/web diff --git a/packages/web/dist/jscad-web.min.js b/packages/web/dist/jscad-web.min.js index 7c495b4cb..3b680f039 100644 --- a/packages/web/dist/jscad-web.min.js +++ b/packages/web/dist/jscad-web.min.js @@ -7,7 +7,7 @@ },{}],3:[function(require,module,exports){ module.exports={ "name": "@jscad/core", - "version": "2.6.10", + "version": "2.6.11", "description": "Core functionality for JSCAD Applications", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -43,9 +43,9 @@ module.exports={ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/io": "2.4.9", - "@jscad/io-utils": "2.0.28", - "@jscad/modeling": "2.12.3", + "@jscad/io": "2.4.10", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "json5": "2.2.3", "strip-bom": "4.0.0" }, @@ -69,19 +69,19 @@ module.exports={rebuildGeometry:require("./rebuildGeometry"),rebuildGeometryCli: },{"./rebuildGeometry":6,"./rebuildGeometryCli":7,"./rebuildGeometryWorker":8,"./serializeSolids":9}],5:[function(require,module,exports){ const isGeom2=require("@jscad/modeling").geometries.geom2.isA,isGeom3=require("@jscad/modeling").geometries.geom3.isA,isPath2=require("@jscad/modeling").geometries.path2.isA,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),serializeSolids=require("./serializeSolids"),isResultGeometry=e=>!!(Array.isArray(e)&&e.length>0)&&e.reduce((e,i)=>e||isGeom3(i)||isGeom2(i)||isPath2(i),!1),instanciateDesign=(e,i,r)=>{const{serialize:s}=r;let t;const o=flatten(toArray(e.main(i)));if(isResultGeometry(o))return{solids:t=s?serializeSolids(o):o};throw new Error("bad output from script: expected geom3/geom2/path2 objects")};module.exports=instanciateDesign; -},{"./serializeSolids":9,"@jscad/array-utils":527,"@jscad/modeling":211}],6:[function(require,module,exports){ +},{"./serializeSolids":9,"@jscad/array-utils":528,"@jscad/modeling":212}],6:[function(require,module,exports){ const loadDesign=require("../code-loading/loadDesign"),instanciateDesign=require("./instanciateDesign"),applyParameterDefinitions=require("../parameters/applyParameterDefinitions"),rebuildSolids=(e,a)=>{let{mainPath:i,apiMainPath:n,serialize:s,lookup:o,lookupCounts:r,parameterValues:l}=Object.assign({},{mainPath:"",apiMainPath:"@jscad/modeling",serialize:!1,lookup:null,lookupCounts:null,parameterValues:{}},e);try{const t=e.filesAndFolders,u=loadDesign(i,n,t,l);a(null,{type:"params",parameterDefaults:u.parameterValues,parameterDefinitions:u.parameterDefinitions}),l=applyParameterDefinitions(l,u.parameterDefinitions),l=Object.assign({},u.parameterValues,l);const m={lookup:o,lookupCounts:r,serialize:s},p=instanciateDesign(u.rootModule,l,m);a(null,{type:"solids",solids:p.solids,lookup:p.lookup,lookupCounts:p.lookupCounts})}catch(e){a({type:"errors",name:e.name?e.name:"Error",message:e.message?e.message:e.toString(),description:e.description?e.description:"",number:e.number?e.number:"",fileName:e.fileName?e.fileName:"",lineNumber:e.lineNumber?e.lineNumber:"",columnNumber:e.columnNumber?e.columnNumber:"",stack:e.stack?e.stack:""},null)}};module.exports=rebuildSolids; },{"../code-loading/loadDesign":11,"../parameters/applyParameterDefinitions":22,"./instanciateDesign":5}],7:[function(require,module,exports){ const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),requireDesignFromModule=require("../code-loading/requireDesignFromModule"),getAllParameterDefintionsAndValues=require("../parameters/getParameterDefinitionsAndValues"),makeWebRequire=require("../code-loading/webRequire"),rebuildSolids=e=>{let{apiMainPath:r,mainPath:a,parameterValues:i,useFakeFs:t}=Object.assign({},{apiMainPath:"@jscad/modeling"},e),s=require;if(t){const i=path.parse(a),t=`${i.name}.js`,u=`/${i.name}.js`,n=[{ext:"js",fullPath:u,name:t,source:e.source}];s=makeWebRequire(n,{apiMainPath:r}),a=u}const u=requireDesignFromModule(a,s),n=getAllParameterDefintionsAndValues(u,i);return toArray(u.main(n.parameterValues))};module.exports=rebuildSolids; -},{"../code-loading/requireDesignFromModule":14,"../code-loading/webRequire":18,"../parameters/getParameterDefinitionsAndValues":23,"@jscad/array-utils":527,"path":713}],8:[function(require,module,exports){ +},{"../code-loading/requireDesignFromModule":14,"../code-loading/webRequire":18,"../parameters/getParameterDefinitionsAndValues":23,"@jscad/array-utils":528,"path":714}],8:[function(require,module,exports){ const rebuildGeometryWorker=e=>{const o=require("./rebuildGeometry");e.onmessage=function(t){if(t.data instanceof Object){const{data:r}=t;"generate"===r.cmd&&o(r,(o,t)=>{t&&e.postMessage(t),o&&e.postMessage(o)})}}};module.exports=rebuildGeometryWorker; },{"./rebuildGeometry":6}],9:[function(require,module,exports){ const{geom2:geom2,geom3:geom3,path2:path2}=require("@jscad/modeling").geometries,serializeSolids=e=>e=e.map(e=>(geom2.isA(e)&&geom2.toSides(e),geom3.isA(e)&&geom3.toPolygons(e),path2.isA(e)&&path2.toPoints(e),e));module.exports=serializeSolids; -},{"@jscad/modeling":211}],10:[function(require,module,exports){ +},{"@jscad/modeling":212}],10:[function(require,module,exports){ module.exports={makeFakeFs:require("./makeFakeFs.js"),requireDesignUtilsFs:require("./requireDesignUtilsFs")}; },{"./makeFakeFs.js":12,"./requireDesignUtilsFs":15}],11:[function(require,module,exports){ @@ -99,25 +99,25 @@ const validateDesignModule=require("./validateDesignModule"),normalizeDesignModu },{"./normalizeDesignModule":13,"./validateDesignModule":17}],15:[function(require,module,exports){ const path=require("path"),{toArray:toArray}=require("@jscad/array-utils"),splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/,splitPath=e=>splitPathRe.exec(e).slice(1),parsePath=e=>{assertPath(e);const t=splitPath(e);if(!t||4!==t.length)throw new TypeError("Invalid path '"+e+"'");return t[1]=t[1]||"",t[2]=t[2]||"",t[3]=t[3]||"",{root:t[0],dir:t[0]+t[1].slice(0,t[1].length-1),base:t[2],ext:t[3],name:t[2].slice(0,t[2].length-t[3].length)}},assertPath=e=>{if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+e)},getDesignEntryPoint=(e,t)=>{if(!t)return;const a=toArray(t)[0];let r;const n=e.statSync(a);if(n.isFile())return a;if(n.isDirectory()){const t=path.join(a,"package.json");if(e.existsSync(t)){const r=JSON.parse(e.readFileSync(t)).main;if(r)return path.join(a,r)}const n=e.readdirSync(a),i=["main","index",parsePath(path.basename(a)).name],s=i.map(e=>e+".js"),o=i.map(e=>e+".jscad"),c=n.filter(e=>s.concat(o).includes(e));return c.length>0&&(r=path.join(a,c[0])),r}return a},packageNameFromDir=(e,t,a)=>{const r=path.join(t,"package.json");if(e.existsSync(r)){const t=JSON.parse(e.readFileSync(r)).name;if(t)return t}return a?parsePath(path.basename(a)).name:path.basename(t)},getDesignName=(e,t)=>{if(!t)return"undefined";const a=toArray(t)[0],r=e.statSync(a);if(r.isFile()){const t=path.dirname(a);return packageNameFromDir(e,t,a)}return r.isDirectory()?packageNameFromDir(e,a):void 0};module.exports={getDesignEntryPoint:getDesignEntryPoint,getDesignName:getDesignName}; -},{"@jscad/array-utils":527,"path":713}],16:[function(require,module,exports){ +},{"@jscad/array-utils":528,"path":714}],16:[function(require,module,exports){ const{deserializers:deserializers}=require("@jscad/io"),modulifyTransform=(e,r)=>Object.assign({},r,{source:r.source}),createJscadEntry=(e,r)=>{const s=e.name.substring(0,e.name.lastIndexOf(".")+1)+"jscad",t="/"+s;return Object.assign({},e,{ext:"jscad",name:s,fullPath:t,source:r})},transformSources=(e,r)=>{if(r&&r.length>1)return r;const s={js:[modulifyTransform],jscad:[modulifyTransform]};return r&&(r=r.map(r=>(r=>{if(r.source&&r.ext){const t=Object.assign({},e,{filename:r.name,output:"script"});if(r.ext in deserializers){const e=(0,deserializers[r.ext])(t,r.source);return createJscadEntry(r,e)}if(r.ext in s)return s[r.ext].reduce((e,r)=>r(t,e),r)}return r})(r))),r};module.exports=transformSources; -},{"@jscad/io":69}],17:[function(require,module,exports){ +},{"@jscad/io":70}],17:[function(require,module,exports){ const validateDesignModule=n=>{if(!n)throw new Error("undefined root module passed !");if("function"==typeof n&&console.warn("please use named exports for your main() function ! auto updating"),!("main"in n))throw new Error("no main() function found in the input script")};module.exports=validateDesignModule; },{}],18:[function(require,module,exports){ const path=require("path"),posix=path.posix?path.posix:path,getFileExtensionFromString=require("../utils/getFileExtensionFromString"),{combineParameterDefinitions:combineParameterDefinitions,getParameterDefinitionsFromSource:getParameterDefinitionsFromSource}=require("../parameters/getParameterDefinitionsFromSource"),findMatch=(e,t)=>{for(let r=0;r{const r=require("strip-bom");t.extensions[".js"]=((t,n)=>{const i=e.readFileSync(n,"utf8");t._compile(r(i),n)})},registerJsonExtension=(e,t)=>{t.extensions[".json"]=((t,r)=>{const n=e.readFileSync(r,"utf8");t.exports=JSON.parse(n)})},makeWebRequire=(e,t)=>{const r={apiMainPath:"@jscad/modeling",fakeFs:require("./makeFakeFs")(e)},{apiMainPath:n,fakeFs:i}=Object.assign({},r,t),s="@jscad/modeling"===n?require("@jscad/modeling"):require(n),o={"@jscad/io":{exports:require("@jscad/io")},"@jscad/array-utils":{exports:require("@jscad/array-utils")},"@jscad/modeling":{exports:s},fs:{exports:i}},a={},l={},u=(t,r)=>{const n=o[r];if(n)return n.exports;t&&!r.startsWith("/")||(t="/");const i=t=>{let r=getFileExtensionFromString(t);r||(r="js",t+=".js"),r="."+r;const n=findMatch(t,e);if(!n)return null;if(n.children)return null;if(a[r]){if(l[t])return l[t];const e={exports:{},_compile:(t,r)=>{try{new Function("require","module",t)(u.bind(null,n.fullPath),e)}catch(e){const t=e.message;r=r.replace("/","");const n=e.lineNumber?e.lineNumber-2:0,i=e.columnNumber?e.columnNumber:0;throw e.stack.startsWith("Object")?e.stack=`${e.stack}\nObject. (${r}:${n}:${i})`:((e=new SyntaxError(t,r,n)).columnNumber=i,e.stack=`Object. (${r}:${n}:${i})`),e}const i=t.includes("@jscad-params")?getParameterDefinitionsFromSource(t,r):[],s=e.exports.getParameterDefinitions;e.exports.getParameterDefinitions=(()=>combineParameterDefinitions(i,s&&s()||[]))}};return a[r](e,n.fullPath),l[t]=e.exports,l[t]}return null},s=t=>{if(!findMatch(t,e))return null;"/"===t&&(t="");let r=t+"/index.js",n=i(r);return n||((n=i(r=t+"/index.json"))||null)},c=t=>{let r,n=findMatch(t,e);if(!n)return null;if(!n.children)return null;if(n=findMatch(t+"/package.json",e)){const e=JSON.parse(n.source).main;if(e){const n=posix.normalize(t+"/"+e);return(r=i(n))?r:(r=s(n))||null}}return(r=s(t))||null};if(r.startsWith("./")||r.startsWith("/")||r.startsWith("../")){r=posix.normalize(posix.dirname(t)+posix.sep+r);let e=i(r);if(e)return e;if(e=c(r))return e;throw new Error(`Cannot find relative path to module ${r}`)}const m=((e,t)=>{const r=(e=>{const t=e.split("/"),r=[];for(let e=t.length-1;e>0;e--){if("node_modules"===t[e])continue;const n=posix.sep+posix.join(...t.slice(1,e+1),"node_modules");r.push(n)}return r})(t);for(let t=0;t{}),registerJsExtension(i,c),registerJsonExtension(i,c),c};module.exports=makeWebRequire; -},{"../parameters/getParameterDefinitionsFromSource":24,"../utils/getFileExtensionFromString":28,"./makeFakeFs":12,"@jscad/array-utils":527,"@jscad/io":69,"@jscad/modeling":211,"path":713,"strip-bom":2}],19:[function(require,module,exports){ +},{"../parameters/getParameterDefinitionsFromSource":24,"../utils/getFileExtensionFromString":28,"./makeFakeFs":12,"@jscad/array-utils":528,"@jscad/io":70,"@jscad/modeling":212,"path":714,"strip-bom":2}],19:[function(require,module,exports){ module.exports={evaluation:require("./code-evaluation"),io:require("./io"),loading:require("./code-loading"),parameters:require("./parameters"),utils:require("./utils"),web:require("./web")}; },{"./code-evaluation":4,"./code-loading":10,"./io":20,"./parameters":27,"./utils":29,"./web":31}],20:[function(require,module,exports){ module.exports={registerAllExtensions:require("./registerExtensions").registerAllExtensions,unRegisterAllExtensions:require("./registerExtensions").unRegisterAllExtensions}; },{"./registerExtensions":21}],21:[function(require,module,exports){ -const{deserializers:deserializers}=require("@jscad/io"),registerJscadExtension=(e,s)=>{const i=require("strip-bom");s.extensions[".jscad"]=((s,r)=>{const t=e.readFileSync(r,"utf8");s._compile(i(t),r)})},unRegisterJscadExtension=(e,s)=>{delete s.extensions[".jscad"]},registerDeserializer=(e,s,i)=>{const r=deserializers[e],t="."+e;i.extensions[t]=((e,i)=>{const t=s.readFileSync(i,"utf8"),n=r({filename:i,output:"geometry"},t);e.exports=n})},unregisterDeserializer=(e,s,i)=>{const r="."+e;delete i.extensions[r]},registerAllExtensions=(e,s)=>{registerJscadExtension(e,s);for(const i of Object.keys(deserializers))registerDeserializer(i,e,s)},unRegisterAllExtensions=(e,s)=>{unRegisterJscadExtension(0,s);for(const e of Object.keys(deserializers))unregisterDeserializer(e,0,s)};module.exports={registerAllExtensions:registerAllExtensions,unRegisterAllExtensions:unRegisterAllExtensions}; +const{deserializers:deserializers}=require("@jscad/io"),registerJscadExtension=(e,s)=>{const i=require("strip-bom");s.extensions[".jscad"]=((s,r)=>{const t=e.readFileSync(r,"utf8");s._compile(i(t),r)})},unRegisterJscadExtension=(e,s)=>{delete s.extensions[".jscad"]},registerDeserializer=(e,s,i)=>{const r=deserializers[e],t="."+e;i.extensions[t]=((e,i)=>{const t=s.readFileSync(i),n=t.buffer?t.buffer.slice(t.byteOffset,t.byteOffset+t.length):t,o=r({filename:i,output:"geometry"},n);e.exports=o})},unregisterDeserializer=(e,s,i)=>{const r="."+e;delete i.extensions[r]},registerAllExtensions=(e,s)=>{registerJscadExtension(e,s);for(const i of Object.keys(deserializers))registerDeserializer(i,e,s)},unRegisterAllExtensions=(e,s)=>{unRegisterJscadExtension(0,s);for(const e of Object.keys(deserializers))unregisterDeserializer(e,0,s)};module.exports={registerAllExtensions:registerAllExtensions,unRegisterAllExtensions:unRegisterAllExtensions}; -},{"@jscad/io":69,"strip-bom":2}],22:[function(require,module,exports){ +},{"@jscad/io":70,"strip-bom":2}],22:[function(require,module,exports){ const applyParameterDefinitions=(e,a,r=!1)=>{return Object.keys(e).reduce((t,i)=>{let s=e[i];const n=a.filter(e=>e.name===i),o=n.length>0?n[0]:{type:"unknown"};switch(o.type){case"choice":s=valueForChoices(s,o);break;case"float":case"number":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseFloat(s);break;case"int":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseInt(s);break;case"checkbox":s=!!s;break;case"radio":s=valueForChoices(s,o);break;case"slider":if(isNaN(parseFloat(s))||!isFinite(s))throw new Error("Parameter ("+i+") is not a valid number ("+s+")");s=parseFloat(s);break;default:if(r)throw new Error(`Parameter (${i}) has no matching definition`)}return t[i]=s,t},{})},isNumber=e=>!isNaN(parseFloat(e))&&isFinite(e),valueForChoices=(e,a)=>{let r=e;const t=a.captions?a.captions.indexOf(r):a.values.indexOf(r);return r=t>-1&&a.values.length>=t?a.values[t]:r,r=a.values.length>0&&isNumber(a.values[0])?parseFloat(r):r,r=a.values.length>0&&"boolean"==typeof r?!!r:r};module.exports=applyParameterDefinitions; },{}],23:[function(require,module,exports){ @@ -150,7 +150,7 @@ module.exports={walkFileTree:require("./walkFileTree")}; },{"./walkFileTree":32}],32:[function(require,module,exports){ const{flatten:flatten}=require("@jscad/array-utils"),{formats:formats}=require("@jscad/io/formats"),getFileExtensionFromString=require("../utils/getFileExtensionFromString"),binaryMimetypes={bmp:"image/bmp",gif:"image/gif",jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",tif:"image/tiff",tiff:"image/tiff",otc:"font/otf",otf:"font/otf",ttc:"font/ttf",ttf:"font/ttf",woff:"font/woff",woff2:"font/woff",stl:"application/sla"},readFileAsync=(e,t)=>{const r=e.fullPath?e.fullPath:t.fullPath?t.fullPath:"",i=getFileExtensionFromString(e.name),n=e.mimetype;return new Promise((t,s)=>{const o=new FileReader;o.onload=(s=>{const o=s.target.result;o.byteLength?t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o}):"string"==typeof o&&t({name:e.name,ext:i,fullPath:r,mimetype:n,source:o})}),o.onerror=(e=>{s(new Error(`Failed to load file: ${r} [${o.error}]`))}),binaryMimetypes[i]?o.readAsArrayBuffer(e):o.readAsText(e)})},isSupportedFormat=e=>{const t=getFileExtensionFromString(e.name),r=formats[t]?formats[t].mimetype:binaryMimetypes[t];return e.mimetype=e.type&&e.type.length?e.type:r,e.mimetype&&e.mimetype.length},pseudoArraytoArray=e=>{const t=[];for(let r=0;rnull!=e,processEntries=e=>{const t=pseudoArraytoArray(e.filter(isEmpty)).filter(isEmpty).reduce((e,t)=>{if(t.name.startsWith("."))return e;if(t.isFile)e.push(processFile(t));else if(t.isDirectory)e.push(processDirectory(t));else if(t instanceof File){const r=t.webkitRelativePath?t.webkitRelativePath:void 0,i=isSupportedFormat(t)?readFileAsync(t,{fullPath:r}):void 0;if(!i)throw new Error("Unsuported format (or folder in Safari)!");e.push(i)}return e},[]);return Promise.all(t).then(e=>e.filter(e=>null!=e))},processFile=e=>{return new Promise((t,r)=>{e.file(r=>{isSupportedFormat(r)?t(readFileAsync(r,e)):t(void 0)},t=>{const i=`${t.message} (${t.code})`;r(new Error(`Failed to load file: ${e.fullPath} [${i}]`))})})},processDirectory=e=>{return new Promise((t,r)=>{if(e.entries)e.entries.length?processEntries(e.entries).then(t):t([]);else{e.createReader().readEntries(e=>{e.length?processEntries(e).then(t):t([])},r)}}).then(flatten).then(t=>({children:t=t.map(t=>(t.fullPath.startsWith("/")||(t.fullPath=e.fullPath+"/"+t.name),t)),fullPath:e.fullPath,name:e.name}))},transformFileList=e=>{const t=require("path");if(1===e.length){const r=e[0],i=r.webkitRelativePath?r.webkitRelativePath:r.name;if(i.split(t.sep).length<2){const e=t.sep,n={fullPath:e,name:e,isDirectory:!0,entries:[]};return r.fullPath=t.normalize(e+i),n.entries.push(r),[n]}}let r;const i=new Map,n=(e,n)=>{if(!i.has(e)){const s={fullPath:e,name:n,isDirectory:!0,entries:[]};r||(r=s),i.set(e,s);const o=e.split(t.sep);if(o.length>1){const e=t.sep+t.join(...o.slice(0,-1)),r=i.get(e);r&&r.entries.push(s)}}};for(let r=0;re||t.startsWith("."),!1))continue;if(!isSupportedFormat(s))continue;const l=o.slice(0,-1);for(let e=0;e{let t=e;return e.length&&e[0]instanceof File&&(t=transformFileList(e)),processEntries(t)};module.exports=walkFileTree; -},{"../utils/getFileExtensionFromString":28,"@jscad/array-utils":527,"@jscad/io/formats":68,"path":713}],33:[function(require,module,exports){ +},{"../utils/getFileExtensionFromString":28,"@jscad/array-utils":528,"@jscad/io/formats":69,"path":714}],33:[function(require,module,exports){ "use strict";var node_worker_1=require("./node-worker.cjs"),u8=Uint8Array,u16=Uint16Array,u32=Uint32Array,fleb=new u8([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),fdeb=new u8([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),clim=new u8([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),freb=function(t,n){for(var e=new u16(31),r=0;r<31;++r)e[r]=n+=1<>>1|(21845&i)<<1;x=(61680&(x=(52428&x)>>>2|(13107&x)<<2))>>>4|(3855&x)<<4,rev[i]=((65280&x)>>>8|(255&x)<<8)>>>1}var hMap=function(t,n,e){for(var r=t.length,i=0,s=new u16(n);i>>f]=u}else for(o=new u16(r),i=0;i>>15-t[i]);return o},flt=new u8(288);for(i=0;i<144;++i)flt[i]=8;for(i=144;i<256;++i)flt[i]=9;for(i=256;i<280;++i)flt[i]=7;for(i=280;i<288;++i)flt[i]=8;var fdt=new u8(32);for(i=0;i<32;++i)fdt[i]=5;var flm=hMap(flt,9,0),flrm=hMap(flt,9,1),fdm=hMap(fdt,5,0),fdrm=hMap(fdt,5,1),max=function(t){for(var n=t[0],e=1;en&&(n=t[e]);return n},bits=function(t,n,e){var r=n/8|0;return(t[r]|t[r+1]<<8)>>(7&n)&e},bits16=function(t,n){var e=n/8|0;return(t[e]|t[e+1]<<8|t[e+2]<<16)>>(7&n)},shft=function(t){return(t+7)/8|0},slc=function(t,n,e){(null==n||n<0)&&(n=0),(null==e||e>t.length)&&(e=t.length);var r=new(2==t.BYTES_PER_ELEMENT?u16:4==t.BYTES_PER_ELEMENT?u32:u8)(e-n);return r.set(t.subarray(n,e)),r};exports.FlateErrorCode={UnexpectedEOF:0,InvalidBlockType:1,InvalidLengthLiteral:2,InvalidDistance:3,StreamFinished:4,NoStreamHandler:5,InvalidHeader:6,NoCallback:7,InvalidUTF8:8,ExtraFieldTooLong:9,InvalidDate:10,FilenameTooLong:11,StreamFinishing:12,InvalidZipData:13,UnknownCompressionMethod:14};var ec=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],err=function(t,n,e){var r=new Error(n||ec[t]);if(r.code=t,Error.captureStackTrace&&Error.captureStackTrace(r,err),!e)throw r;return r},inflt=function(t,n,e){var r=t.length;if(!r||e&&e.f&&!e.l)return n||new u8(0);var i=!n||e,s=!e||e.i;e||(e={}),n||(n=new u8(3*r));var o=function(t){var e=n.length;if(t>e){var r=new u8(Math.max(2*e,t));r.set(n),n=r}},a=e.f||0,f=e.p||0,u=e.b||0,l=e.l,c=e.d,h=e.m,p=e.n,v=8*r;do{if(!l){a=bits(t,f,1);var d=bits(t,f+1,3);if(f+=3,!d){var b=t[(A=shft(f)+4)-4]|t[A-3]<<8,y=A+b;if(y>r){s&&err(0);break}i&&o(u+b),n.set(t.subarray(A,y),u),e.b=u+=b,e.p=f=8*y,e.f=a;continue}if(1==d)l=flrm,c=fdrm,h=9,p=5;else if(2==d){var g=bits(t,f,31)+257,m=bits(t,f+10,15)+4,z=g+bits(t,f+5,31)+1;f+=14;for(var w=new u8(z),x=new u8(19),S=0;S>>4)<16)w[S++]=A;else{var I=0,M=0;for(16==A?(M=3+bits(t,f,3),f+=2,I=w[S-1]):17==A?(M=3+bits(t,f,7),f+=3):18==A&&(M=11+bits(t,f,127),f+=7);M--;)w[S++]=I}}var Z=w.subarray(0,g),C=w.subarray(g);h=max(Z),p=max(C),l=hMap(Z,h,1),c=hMap(C,p,1)}else err(1);if(f>v){s&&err(0);break}}i&&o(u+131072);for(var G=(1<>>4;if((f+=15&I)>v){s&&err(0);break}if(I||err(2),_<256)n[u++]=_;else{if(256==_){F=f,l=null;break}var P=_-254;if(_>264){var O=fleb[S=_-257];P=bits(t,f,(1<>>4;L||err(3),f+=15&L;C=fd[N];if(N>3){O=fdeb[N];C+=bits16(t,f)&(1<v){s&&err(0);break}i&&o(u+131072);for(var q=u+P;u>>8},wbits16=function(t,n,e){e<<=7&n;var r=n/8|0;t[r]|=e,t[r+1]|=e>>>8,t[r+2]|=e>>>16},hTree=function(t,n){for(var e=[],r=0;rh&&(h=s[r].s);var p=new u16(h+1),v=ln(e[l-1],p,0);if(v>n){r=0;var d=0,b=v-n,y=1<n))break;d+=y-(1<>>=b;d>0;){var m=s[r].s;p[m]=0&&d;--r){var z=s[r].s;p[z]==n&&(--p[z],++d)}v=n}return[new u8(p),v]},ln=function(t,n,e){return-1==t.s?Math.max(ln(t.l,n,e+1),ln(t.r,n,e+1)):n[t.s]=e},lc=function(t){for(var n=t.length;n&&!t[--n];);for(var e=new u16(++n),r=0,i=t[0],s=1,o=function(t){e[r++]=t},a=1;a<=n;++a)if(t[a]==i&&a!=n)++s;else{if(!i&&s>2){for(;s>138;s-=138)o(32754);s>2&&(o(s>10?s-11<<5|28690:s-3<<5|12305),s=0)}else if(s>3){for(o(i),--s;s>6;s-=6)o(8304);s>2&&(o(s-3<<5|8208),s=0)}for(;s--;)o(i);s=1,i=t[a]}return[e.subarray(0,r),n]},clen=function(t,n){for(var e=0,r=0;r>>8,t[i+2]=255^t[i],t[i+3]=255^t[i+1];for(var s=0;s4&&!T[clim[k-1]];--k);var I,M,Z,C,G=u+5<<3,E=clen(i,flt)+clen(s,fdt)+o,F=clen(i,h)+clen(s,d)+o+14+3*k+clen(S,T)+(2*S[16]+3*S[17]+7*S[18]);if(G<=E&&G<=F)return wfblk(n,l,t.subarray(f,f+u));if(wbits(n,l,1+(F15&&(wbits(n,l,L[U]>>>5&127),l+=L[U]>>>12)}}}else I=flm,M=flt,Z=fdm,C=fdt;for(U=0;U255){N=r[U]>>>18&31;wbits16(n,l,I[N+257]),l+=M[N+257],N>7&&(wbits(n,l,r[U]>>>23&31),l+=fleb[N]);var q=31&r[U];wbits16(n,l,Z[q]),l+=C[q],q>3&&(wbits16(n,l,r[U]>>>5&8191),l+=fdeb[q])}else wbits16(n,l,I[r[U]]),l+=M[r[U]];return wbits16(n,l,I[256]),l+M[256]},deo=new u32([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),et=new u8(0),dflt=function(t,n,e,r,i,s){var o=t.length,a=new u8(r+o+5*(1+Math.ceil(o/7e3))+i),f=a.subarray(r,a.length-i),u=0;if(!n||o<8)for(var l=0;l<=o;l+=65535){var c=l+65535;c>=o&&(f[u>>3]=s),u=wfblk(f,u+1,t.subarray(l,c))}else{for(var h=deo[n-1],p=h>>>13,v=8191&h,d=(1<7e3||T>24576)&&C>423){u=wblk(t,f,0,w,x,S,D,T,k,l-k,u),T=U=D=0,k=l;for(var G=0;G<286;++G)x[G]=0;for(G=0;G<30;++G)S[G]=0}var E=2,F=0,_=v,P=M-Z&32767;if(C>2&&I==z(l-P))for(var O=Math.min(p,C)-1,L=Math.min(32767,l),N=Math.min(258,C);P<=L&&--_&&M!=Z;){if(t[l+E]==t[l+E-P]){for(var q=0;qE){if(E=q,F=P,q>O)break;var B=Math.min(P,q-2),H=0;for(G=0;GH&&(H=j,Z=Y)}}}P+=(M=Z)-(Z=b[M])+32768&32767}if(F){w[T++]=268435456|revfl[E]<<18|revfd[F];var R=31&revfl[E],J=31&revfd[F];D+=fleb[R]+fdeb[J],++x[257+R],++S[J],A=l+E,++U}else w[T++]=t[l],++x[t[l]]}}u=wblk(t,f,s,w,x,S,D,T,k,l-k,u),!s&&7&u&&(u=wfblk(f,u+1,et))}return slc(a,0,r+shft(u)+i)},crct=function(){for(var t=new Int32Array(256),n=0;n<256;++n){for(var e=n,r=9;--r;)e=(1&e&&-306674912)^e>>>1;t[n]=e}return t}(),crc=function(){var t=-1;return{p:function(n){for(var e=t,r=0;r>>8;t=e},d:function(){return~t}}},adler=function(){var t=1,n=0;return{p:function(e){for(var r=t,i=n,s=0|e.length,o=0;o!=s;){for(var a=Math.min(o+2655,s);o>16),i=(65535&i)+15*(i>>16)}t=r,n=i},d:function(){return(255&(t%=65521))<<24|t>>>8<<16|(255&(n%=65521))<<8|n>>>8}}},dopt=function(t,n,e,r,i){return dflt(t,null==n.level?6:n.level,null==n.mem?Math.ceil(1.5*Math.max(8,Math.min(13,Math.log(t.length)))):12+n.mem,e,r,!i)},mrg=function(t,n){var e={};for(var r in t)e[r]=t[r];for(var r in n)e[r]=n[r];return e},wcln=function(t,n,e){for(var r=t(),i=t.toString(),s=i.slice(i.indexOf("[")+1,i.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o>>0},b8=function(t,n){return b4(t,n)+4294967296*b4(t,n+4)},wbytes=function(t,n,e){for(;e;++n)t[n]=e,e>>>=8},gzh=function(t,n){var e=n.filename;if(t[0]=31,t[1]=139,t[2]=8,t[8]=n.level<2?4:9==n.level?2:0,t[9]=3,0!=n.mtime&&wbytes(t,4,Math.floor(new Date(n.mtime||Date.now())/1e3)),e){t[3]=8;for(var r=0;r<=e.length;++r)t[r+10]=e.charCodeAt(r)}},gzs=function(t){31==t[0]&&139==t[1]&&8==t[2]||err(6,"invalid gzip data");var n=t[3],e=10;4&n&&(e+=t[10]|2+(t[11]<<8));for(var r=(n>>3&1)+(n>>4&1);r>0;r-=!t[e++]);return e+(2&n)},gzl=function(t){var n=t.length;return(t[n-4]|t[n-3]<<8|t[n-2]<<16|t[n-1]<<24)>>>0},gzhl=function(t){return 10+(t.filename&&t.filename.length+1||0)},zlh=function(t,n){var e=n.level,r=0==e?0:e<6?1:9==e?3:2;t[0]=120,t[1]=r<<6|(r?32-2*r:1)},zlv=function(t){(8!=(15&t[0])||t[0]>>>4>7||(t[0]<<8|t[1])%31)&&err(6,"invalid zlib data"),32&t[1]&&err(6,"invalid zlib data: preset dictionaries not supported")};function AsyncCmpStrm(t,n){return n||"function"!=typeof t||(n=t,t={}),this.ondata=n,t}var Deflate=function(){function t(t,n){n||"function"!=typeof t||(n=t,t={}),this.ondata=n,this.o=t||{}}return t.prototype.p=function(t,n){this.ondata(dopt(t,this.o,0,0,!n),n)},t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.d=n,this.p(t,n||!1)},t}();exports.Deflate=Deflate;var AsyncDeflate=function(){return function(t,n){astrmify([bDflt,function(){return[astrm,Deflate]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Deflate(t.data);onmessage=astrm(n)},6)}}();function deflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt],function(t){return pbf(deflateSync(t.data[0],t.data[1]))},0,e)}function deflateSync(t,n){return dopt(t,n||{},0,0)}exports.AsyncDeflate=AsyncDeflate,exports.deflate=deflate,exports.deflateSync=deflateSync;var Inflate=function(){function t(t){this.s={},this.p=new u8(0),this.ondata=t}return t.prototype.e=function(t){this.ondata||err(5),this.d&&err(4);var n=this.p.length,e=new u8(n+t.length);e.set(this.p),e.set(t,n),this.p=e},t.prototype.c=function(t){this.d=this.s.i=t||!1;var n=this.s.b,e=inflt(this.p,this.o,this.s);this.ondata(slc(e,n,this.s.b),this.d),this.o=slc(e,this.s.b-32768),this.s.b=this.o.length,this.p=slc(this.p,this.s.p/8|0),this.s.p&=7},t.prototype.push=function(t,n){this.e(t),this.c(n)},t}();exports.Inflate=Inflate;var AsyncInflate=function(){return function(t){this.ondata=t,astrmify([bInflt,function(){return[astrm,Inflate]}],this,0,function(){var t=new Inflate;onmessage=astrm(t)},7)}}();function inflate(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt],function(t){return pbf(inflateSync(t.data[0],gu8(t.data[1])))},1,e)}function inflateSync(t,n){return inflt(t,n)}exports.AsyncInflate=AsyncInflate,exports.inflate=inflate,exports.inflateSync=inflateSync;var Gzip=function(){function t(t,n){this.c=crc(),this.l=0,this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t),this.l+=t.length;var e=dopt(t,this.o,this.v&&gzhl(this.o),n&&8,!n);this.v&&(gzh(e,this.o),this.v=0),n&&(wbytes(e,e.length-8,this.c.d()),wbytes(e,e.length-4,this.l)),this.ondata(e,n)},t}();exports.Gzip=Gzip,exports.Compress=Gzip;var AsyncGzip=function(){return function(t,n){astrmify([bDflt,gze,function(){return[astrm,Deflate,Gzip]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Gzip(t.data);onmessage=astrm(n)},8)}}();function gzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,gze,function(){return[gzipSync]}],function(t){return pbf(gzipSync(t.data[0],t.data[1]))},2,e)}function gzipSync(t,n){n||(n={});var e=crc(),r=t.length;e.p(t);var i=dopt(t,n,gzhl(n),8),s=i.length;return gzh(i,n),wbytes(i,s-8,e.d()),wbytes(i,s-4,r),i}exports.AsyncGzip=AsyncGzip,exports.AsyncCompress=AsyncGzip,exports.gzip=gzip,exports.compress=gzip,exports.gzipSync=gzipSync,exports.compressSync=gzipSync;var Gunzip=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){var e=this.p.length>3?gzs(this.p):4;if(e>=this.p.length&&!n)return;this.p=this.p.subarray(e),this.v=0}n&&(this.p.length<8&&err(6,"invalid gzip data"),this.p=this.p.subarray(0,-8)),Inflate.prototype.c.call(this,n)},t}();exports.Gunzip=Gunzip;var AsyncGunzip=function(){return function(t){this.ondata=t,astrmify([bInflt,guze,function(){return[astrm,Inflate,Gunzip]}],this,0,function(){var t=new Gunzip;onmessage=astrm(t)},9)}}();function gunzip(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,guze,function(){return[gunzipSync]}],function(t){return pbf(gunzipSync(t.data[0]))},3,e)}function gunzipSync(t,n){return inflt(t.subarray(gzs(t),-8),n||new u8(gzl(t)))}exports.AsyncGunzip=AsyncGunzip,exports.gunzip=gunzip,exports.gunzipSync=gunzipSync;var Zlib=function(){function t(t,n){this.c=adler(),this.v=1,Deflate.call(this,t,n)}return t.prototype.push=function(t,n){Deflate.prototype.push.call(this,t,n)},t.prototype.p=function(t,n){this.c.p(t);var e=dopt(t,this.o,this.v&&2,n&&4,!n);this.v&&(zlh(e,this.o),this.v=0),n&&wbytes(e,e.length-4,this.c.d()),this.ondata(e,n)},t}();exports.Zlib=Zlib;var AsyncZlib=function(){return function(t,n){astrmify([bDflt,zle,function(){return[astrm,Deflate,Zlib]}],this,AsyncCmpStrm.call(this,t,n),function(t){var n=new Zlib(t.data);onmessage=astrm(n)},10)}}();function zlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bDflt,zle,function(){return[zlibSync]}],function(t){return pbf(zlibSync(t.data[0],t.data[1]))},4,e)}function zlibSync(t,n){n||(n={});var e=adler();e.p(t);var r=dopt(t,n,2,4);return zlh(r,n),wbytes(r,r.length-4,e.d()),r}exports.AsyncZlib=AsyncZlib,exports.zlib=zlib,exports.zlibSync=zlibSync;var Unzlib=function(){function t(t){this.v=1,Inflate.call(this,t)}return t.prototype.push=function(t,n){if(Inflate.prototype.e.call(this,t),this.v){if(this.p.length<2&&!n)return;this.p=this.p.subarray(2),this.v=0}n&&(this.p.length<4&&err(6,"invalid zlib data"),this.p=this.p.subarray(0,-4)),Inflate.prototype.c.call(this,n)},t}();exports.Unzlib=Unzlib;var AsyncUnzlib=function(){return function(t){this.ondata=t,astrmify([bInflt,zule,function(){return[astrm,Inflate,Unzlib]}],this,0,function(){var t=new Unzlib;onmessage=astrm(t)},11)}}();function unzlib(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),cbify(t,n,[bInflt,zule,function(){return[unzlibSync]}],function(t){return pbf(unzlibSync(t.data[0],gu8(t.data[1])))},5,e)}function unzlibSync(t,n){return inflt((zlv(t),t.subarray(2,-4)),n)}exports.AsyncUnzlib=AsyncUnzlib,exports.unzlib=unzlib,exports.unzlibSync=unzlibSync;var Decompress=function(){function t(t){this.G=Gunzip,this.I=Inflate,this.Z=Unzlib,this.ondata=t}return t.prototype.push=function(t,n){if(this.ondata||err(5),this.s)this.s.push(t,n);else{if(this.p&&this.p.length){var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length)}else this.p=t;if(this.p.length>2){var r=this,i=function(){r.ondata.apply(r,arguments)};this.s=31==this.p[0]&&139==this.p[1]&&8==this.p[2]?new this.G(i):8!=(15&this.p[0])||this.p[0]>>4>7||(this.p[0]<<8|this.p[1])%31?new this.I(i):new this.Z(i),this.s.push(this.p,n),this.p=null}}},t}();exports.Decompress=Decompress;var AsyncDecompress=function(){function t(t){this.G=AsyncGunzip,this.I=AsyncInflate,this.Z=AsyncUnzlib,this.ondata=t}return t.prototype.push=function(t,n){Decompress.prototype.push.call(this,t,n)},t}();function decompress(t,n,e){return e||(e=n,n={}),"function"!=typeof e&&err(7),31==t[0]&&139==t[1]&&8==t[2]?gunzip(t,n,e):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflate(t,n,e):unzlib(t,n,e)}function decompressSync(t,n){return 31==t[0]&&139==t[1]&&8==t[2]?gunzipSync(t,n):8!=(15&t[0])||t[0]>>4>7||(t[0]<<8|t[1])%31?inflateSync(t,n):unzlibSync(t,n)}exports.AsyncDecompress=AsyncDecompress,exports.decompress=decompress,exports.decompressSync=decompressSync;var fltn=function(t,n,e,r){for(var i in t){var s=t[i],o=n+i,a=r;Array.isArray(s)&&(a=mrg(r,s[1]),s=s[0]),s instanceof u8?e[o]=[s,a]:(e[o+="/"]=[new u8(0),a],fltn(s,o,e,r))}},te="undefined"!=typeof TextEncoder&&new TextEncoder,td="undefined"!=typeof TextDecoder&&new TextDecoder,tds=0;try{td.decode(et,{stream:!0}),tds=1}catch(t){}var dutf8=function(t){for(var n="",e=0;;){var r=t[e++],i=(r>127)+(r>223)+(r>239);if(e+i>t.length)return[n,slc(t,e-1)];i?3==i?(r=((15&r)<<18|(63&t[e++])<<12|(63&t[e++])<<6|63&t[e++])-65536,n+=String.fromCharCode(55296|r>>10,56320|1023&r)):n+=1&i?String.fromCharCode((31&r)<<6|63&t[e++]):String.fromCharCode((15&r)<<12|(63&t[e++])<<6|63&t[e++]):n+=String.fromCharCode(r)}},DecodeUTF8=function(){function t(t){this.ondata=t,tds?this.t=new TextDecoder:this.p=et}return t.prototype.push=function(t,n){if(this.ondata||err(5),n=!!n,this.t)return this.ondata(this.t.decode(t,{stream:!0}),n),void(n&&(this.t.decode().length&&err(8),this.t=null));this.p||err(4);var e=new u8(this.p.length+t.length);e.set(this.p),e.set(t,this.p.length);var r=dutf8(e),i=r[0],s=r[1];n?(s.length&&err(8),this.p=null):this.p=s,this.ondata(i,n)},t}();exports.DecodeUTF8=DecodeUTF8;var EncodeUTF8=function(){function t(t){this.ondata=t}return t.prototype.push=function(t,n){this.ondata||err(5),this.d&&err(4),this.ondata(strToU8(t),this.d=n||!1)},t}();function strToU8(t,n){if(n){for(var e=new u8(t.length),r=0;r>1)),o=0,a=function(t){s[o++]=t};for(r=0;rs.length){var f=new u8(o+8+(i-r<<1));f.set(s),s=f}var u=t.charCodeAt(r);u<128||n?a(u):u<2048?(a(192|u>>6),a(128|63&u)):u>55295&&u<57344?(a(240|(u=65536+(1047552&u)|1023&t.charCodeAt(++r))>>18),a(128|u>>12&63),a(128|u>>6&63),a(128|63&u)):(a(224|u>>12),a(128|u>>6&63),a(128|63&u))}return slc(s,0,o)}function strFromU8(t,n){if(n){for(var e="",r=0;r65535&&err(9),n+=r+4}return n},wzh=function(t,n,e,r,i,s,o,a){var f=r.length,u=e.extra,l=a&&a.length,c=exfl(u);wbytes(t,n,null!=o?33639248:67324752),n+=4,null!=o&&(t[n++]=20,t[n++]=e.os),t[n]=20,n+=2,t[n++]=e.flag<<1|(null==s&&8),t[n++]=i&&8,t[n++]=255&e.compression,t[n++]=e.compression>>8;var h=new Date(null==e.mtime?Date.now():e.mtime),p=h.getFullYear()-1980;if((p<0||p>119)&&err(10),wbytes(t,n,p<<25|h.getMonth()+1<<21|h.getDate()<<16|h.getHours()<<11|h.getMinutes()<<5|h.getSeconds()>>>1),n+=4,null!=s&&(wbytes(t,n,e.crc),wbytes(t,n+4,s),wbytes(t,n+8,e.size)),wbytes(t,n+12,f),wbytes(t,n+14,c),n+=16,null!=o&&(wbytes(t,n,l),wbytes(t,n+6,e.attrs),wbytes(t,n+10,o),n+=14),t.set(r,n),n+=f,c)for(var v in u){var d=u[v],b=d.length;wbytes(t,n,+v),wbytes(t,n+2,b),t.set(d,n+4),n+=4+b}return l&&(t.set(a,n),n+=l),n},wzf=function(t,n,e,r,i){wbytes(t,n,101010256),wbytes(t,n+8,e),wbytes(t,n+10,e),wbytes(t,n+12,r),wbytes(t,n+16,i)},ZipPassThrough=function(){function t(t){this.filename=t,this.c=crc(),this.size=0,this.compression=0}return t.prototype.process=function(t,n){this.ondata(null,t,n)},t.prototype.push=function(t,n){this.ondata||err(5),this.c.p(t),this.size+=t.length,n&&(this.crc=this.c.d()),this.process(t,n||!1)},t}();exports.ZipPassThrough=ZipPassThrough;var ZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new Deflate(n,function(t,n){e.ondata(null,t,n)}),this.compression=8,this.flag=dbf(n.level)}return t.prototype.process=function(t,n){try{this.d.push(t,n)}catch(t){this.ondata(t,null,n)}},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.ZipDeflate=ZipDeflate;var AsyncZipDeflate=function(){function t(t,n){var e=this;n||(n={}),ZipPassThrough.call(this,t),this.d=new AsyncDeflate(n,function(t,n,r){e.ondata(t,n,r)}),this.compression=8,this.flag=dbf(n.level),this.terminate=this.d.terminate}return t.prototype.process=function(t,n){this.d.push(t,n)},t.prototype.push=function(t,n){ZipPassThrough.prototype.push.call(this,t,n)},t}();exports.AsyncZipDeflate=AsyncZipDeflate;var Zip=function(){function t(t){this.ondata=t,this.u=[],this.d=1}return t.prototype.add=function(t){var n=this;if(this.ondata||err(5),2&this.d)this.ondata(err(4+8*(1&this.d),0,1),null,!1);else{var e=strToU8(t.filename),r=e.length,i=t.comment,s=i&&strToU8(i),o=r!=t.filename.length||s&&i.length!=s.length,a=r+exfl(t.extra)+30;r>65535&&this.ondata(err(11,0,1),null,!1);var f=new u8(a);wzh(f,0,t,e,o);var u=[f],l=function(){for(var t=0,e=u;t65535&&U(err(11,0,1),null),S)if(b<16e4)try{U(null,deflateSync(f,v))}catch(t){U(t,null)}else l.push(deflate(f,v,U));else U(null,f)},d=0;d65535&&err(11);var b=l?deflateSync(f,u):f,y=b.length,g=crc();g.p(f),r.push(mrg(u,{size:f.length,crc:g.d(),c:b,f:S,m:p,u:c!=o.length||p&&h.length!=v,o:i,compression:l})),i+=30+c+d+y,s+=76+2*(c+d)+(v||0)+y}for(var m=new u8(s+22),z=i,w=s-i,x=0;x0){var r=Math.min(this.c,t.length),i=t.subarray(0,r);if(this.c-=r,this.d?this.d.push(i,!this.c):this.k[0].push(i),(t=t.subarray(r)).length)return this.push(t,n)}else{var s=0,o=0,a=void 0,f=void 0;this.p.length?t.length?((f=new u8(this.p.length+t.length)).set(this.p),f.set(t,this.p.length)):f=this.p:f=t;for(var u=f.length,l=this.c,c=l&&this.d,h=function(){var t,n=b4(f,o);if(67324752==n){s=1,a=o,p.d=null,p.c=0;var r=b2(f,o+6),i=b2(f,o+8),c=2048&r,h=8&r,v=b2(f,o+26),d=b2(f,o+28);if(u>o+30+v+d){var b=[];p.k.unshift(b),s=2;var y,g=b4(f,o+18),m=b4(f,o+22),z=strFromU8(f.subarray(o+30,o+=30+v),!c);4294967295==g?(t=h?[-2]:z64e(f,o),g=t[0],m=t[1]):h&&(g=-1),o+=d,p.c=g;var w={name:z,compression:i,start:function(){if(w.ondata||err(5),g){var t=e.o[i];t||w.ondata(err(14,"unknown compression type "+i,1),null,!1),(y=g<0?new t(z):new t(z,g,m)).ondata=function(t,n,e){w.ondata(t,n,e)};for(var n=0,r=b;n=0&&(w.size=g,w.originalSize=m),p.onfile(w)}return"break"}if(l){if(134695760==n)return a=o+=12+(-2==l&&8),s=3,p.c=0,"break";if(33639248==n)return a=o-=4,s=3,p.c=0,"break"}},p=this;o65558)return o(err(13,0,1),null),i;var f=b2(t,a+8);if(f){var u=f,l=b4(t,a+16),c=4294967295==l;if(c){if(a=b4(t,a-12),101075792!=b4(t,a))return o(err(13,0,1),null),i;u=f=b4(t,a+32),l=b4(t,a+48)}for(var h=n&&n.filter,p=function(n){var e=zh(t,l,c),a=e[0],u=e[1],p=e[2],v=e[3],d=e[4],b=e[5],y=slzh(t,b);l=d;var g=function(t,n){t?(i(),o(t,null)):(n&&(s[v]=n),--f||o(null,s))};if(!h||h({name:v,size:u,originalSize:p,compression:a}))if(a)if(8==a){var m=t.subarray(y,y+u);if(u<32e4)try{g(null,inflateSync(m,new u8(p)))}catch(t){g(t,null)}else r.push(inflate(m,{size:p},g))}else g(err(14,"unknown compression type "+a,1),null);else g(null,slc(t,y,y+u));else g(null,null)},v=0;v65558)&&err(13);var i=b2(t,r+8);if(!i)return{};var s=b4(t,r+16),o=4294967295==s;o&&(r=b4(t,r-12),101075792!=b4(t,r)&&err(13),i=b4(t,r+32),s=b4(t,r+48));for(var a=n&&n.filter,f=0;f0&&(e="\n",r=indenter(t)),function n(t){var i,o,c;return o="",c=!0,t.some(function(t,r,u){if(0===r)return i="<"+t,1===u.length||void 0;if(1===r){if(isObject(t))return Object.keys(t).forEach(function(n){i+=" "+n+'="'+t[n]+'"'}),2===u.length||void(i+=">");i+=">"}switch(typeof t){case"string":case"number":case"boolean":case"undefined":return void(o+=t+e)}c=!1,o+=n(t)})?i+"/>"+e:c?i+clean(o)+""+e:i+e+r(o)+""+e}(n)}module.exports=stringify; },{}],36:[function(require,module,exports){ -const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,stringify=require("onml/lib/stringify"),{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="model/3mf",fileExtension="3mf",serialize=(e,...t)=>{e=Object.assign({},{unit:"millimeter",metadata:!0,defaultcolor:[1,160/255,0,1],compress:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to 3MF");t.length!==o.length&&console.warn("some objects could not be serialized to 3MF"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},o));const r=["model",{unit:e.unit,"xml:lang":"und"},["metadata",{name:"Application"},"JSCAD"]];e.metadata&&r.push(["metadata",{name:"CreationDate"},(new Date).toISOString()]),r.push(translateResources(t,e)),r.push(translateBuild(t,e));const n=`\n${stringify(r,2)}`;if(e.compress){const e={"3D":{"3dmodel.model":strToU8(n)},_rels:{".rels":strToU8(rels)},"[Content_Types].xml":strToU8(contenttype)};return[zipSync(e,{comment:"created by JSCAD"}).buffer]}return[n]},contenttype='\n\n \n \n \n \n',rels='\n\n \n \n',translateResources=(e,t)=>{let o=["resources",{},translateMaterials(e,t)];return o=o.concat(translateObjects(e,t))},translateMaterials=(e,t)=>{let o=["basematerials",{id:"0"}];const r=[];return e.forEach((e,o)=>{let n=colors.rgbToHex(t.defaultcolor).toUpperCase();e.color&&(n=colors.rgbToHex(e.color).toUpperCase()),r.push(["base",{name:`mat${o}`,displaycolor:n}])}),o=o.concat(r)},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{if(geometries.geom3.isA(e)){geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}}),o},translateBuild=(e,t)=>{let o=["build",{}];const r=[];return e.forEach((e,t)=>{r.push(["item",{objectid:`${t+1}`}])}),o=o.concat(r)},convertToObject=(e,t)=>{const o=e.name?e.name:`Part ${t.id}`;return["object",{id:`${t.id+1}`,type:"model",pid:"0",pindex:`${t.id}`,name:o},convertToMesh(e,t)]},convertToMesh=(e,t)=>{return["mesh",{},convertToVertices(e,t),convertToVolumes(e,t)]},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{x:e[0],y:e[1],z:e[2]}]},convertToVolumes=(e,t)=>{let o=0;const r=geometries.geom3.toPolygons(e);let n=["triangles",{}];return r.forEach(e=>{if(e.vertices.length<3)return;const t=convertToTriangles(e,o);n=n.concat(t),o+=e.vertices.length}),n},convertToTriangles=(e,t)=>{const o=[];for(let r=0;r{e=Object.assign({},{unit:"millimeter",metadata:!0,defaultcolor:[1,160/255,0,1],compress:!0},e);const o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to 3MF");t.length!==o.length&&console.warn("some objects could not be serialized to 3MF"),t=toArray(modifiers.generalize({snap:!0,triangulate:!0},o));const r=["model",{unit:e.unit,"xml:lang":"und"},["metadata",{name:"Application"},"JSCAD"]];e.metadata&&r.push(["metadata",{name:"CreationDate"},(new Date).toISOString()]),r.push(translateResources(t,e)),r.push(translateBuild(t,e));const n=`\n${stringify(r,2)}`;if(e.compress){const e={"3D":{"3dmodel.model":strToU8(n)},_rels:{".rels":strToU8(rels)},"[Content_Types].xml":strToU8(contenttype)};return[zipSync(e,{comment:"created by JSCAD"}).buffer]}return[n]},contenttype='\n\n \n \n \n \n',rels='\n\n \n \n',translateResources=(e,t)=>{let o=["resources",{},translateMaterials(e,t)];return o=o.concat(translateObjects(e,t))},translateMaterials=(e,t)=>{let o=["basematerials",{id:"0"}];const r=[];return e.forEach((e,o)=>{let n=colors.rgbToHex(t.defaultcolor).toUpperCase();e.color&&(n=colors.rgbToHex(e.color).toUpperCase()),r.push(["base",{name:`mat${o}`,displaycolor:n}])}),o=o.concat(r)},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{if(geometries.geom3.isA(e)){geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}}),o},translateBuild=(e,t)=>{let o=["build",{}];const r=[];return e.forEach((e,t)=>{r.push(["item",{objectid:`${t+1}`}])}),o=o.concat(r)},convertToObject=(e,t)=>{const o=e.name?e.name:`Part ${t.id}`;return["object",{id:`${t.id+1}`,type:"model",pid:"0",pindex:`${t.id}`,name:o},convertToMesh(e,t)]},convertToMesh=(e,t)=>{return["mesh",{},convertToVertices(e,t),convertToVolumes(e,t)]},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{x:e[0],y:e[1],z:e[2]}]},convertToVolumes=(e,t)=>{let o=0;const r=geometries.geom3.toPolygons(e);let n=["triangles",{}];return r.forEach(e=>{if(e.vertices.length<3)return;const t=convertToTriangles(e,o);n=n.concat(t),o+=e.vertices.length}),n},convertToTriangles=(e,t)=>{const o=[];for(let r=0;r=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; },{}],38:[function(require,module,exports){ @@ -177,7 +177,7 @@ const zipSync=require("fflate").zipSync,strToU8=require("fflate").strToU8,string },{"xmlchars/xml/1.0/ed5":37,"xmlchars/xml/1.1/ed2":38,"xmlchars/xmlns/1.0/ed3":39}],41:[function(require,module,exports){ module.exports={ "name": "@jscad/amf-deserializer", - "version": "2.3.8", + "version": "2.3.9", "description": "AMF Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -208,7 +208,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -228,12 +229,12 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),instantia const amfMesh=a=>{const e={type:"mesh",objects:[]};return e},amfVertices=a=>{const e={type:"vertices",objects:[]};return e},amfCoordinates=a=>{const e={type:"coordinates",objects:[]};return e},amfNormal=a=>{const e={type:"normal",objects:[]};return e},amfX=a=>({type:"x",value:"0"}),amfY=a=>({type:"y",value:"0"}),amfZ=a=>({type:"z",value:"0"}),amfVolume=a=>{const e={type:"volume"};return a.materialid&&(e.materialid=a.materialid),e.objects=[],e},amfTriangle=a=>{const e={type:"triangle",objects:[]};return e},amfV1=a=>({type:"v1",value:"0"}),amfV2=a=>({type:"v2",value:"0"}),amfV3=a=>({type:"v3",value:"0"}),amfVertex=a=>{const e={type:"vertex",objects:[]};return e},amfEdge=a=>{const e={type:"edge",objects:[]};return e},amfMetadata=a=>{const e={type:"metadata"};return a.type&&(e.mtype=a.type),a.id&&(e.id=a.id),e},amfMaterial=a=>{const e={type:"material"};return a.id&&(e.id=a.id),e.objects=[],e},amfColor=a=>{const e={type:"color",objects:[]};return e},amfR=a=>({type:"r",value:"1"}),amfG=a=>({type:"g",value:"1"}),amfB=a=>({type:"b",value:"1"}),amfA=a=>({type:"a",value:"1"}),amfMap=a=>{const e={type:"map"};return a.gtexid&&(e.gtexid=a.gtexid),a.btexid&&(e.btexid=a.btexid),a.rtexid&&(e.rtexid=a.rtexid),e.objects=[],e},amfU1=a=>({type:"u1",value:"0"}),amfU2=a=>({type:"u2",value:"0"}),amfU3=a=>({type:"u3",value:"0"});module.exports={amfMesh:amfMesh,amfVertices:amfVertices,amfCoordinates:amfCoordinates,amfX:amfX,amfY:amfY,amfZ:amfZ,amfNormal:amfNormal,amfVolume:amfVolume,amfTriangle:amfTriangle,amfV1:amfV1,amfV2:amfV2,amfV3:amfV3,amfVertex:amfVertex,amfEdge:amfEdge,amfMetadata:amfMetadata,amfMaterial:amfMaterial,amfColor:amfColor,amfR:amfR,amfG:amfG,amfB:amfB,amfA:amfA,amfMap:amfMap,amfU1:amfU1,amfU2:amfU2,amfU3:amfU3}; },{}],45:[function(require,module,exports){ -const version=require("../package.json").version,translate=require("./translate"),instantiate=require("./deserialize"),deserialize=(e,t)=>{const a={filename:"amf",output:"script",version:version,addMetaData:!0};return"script"===(e=Object.assign({},a,e)).output?translate(e,t):instantiate(e,t)},extension="amf";module.exports={deserialize:deserialize,extension:"amf"}; +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,translate=require("./translate"),instantiate=require("./deserialize"),deserialize=(e,i)=>{const t={filename:"amf",output:"script",version:version,addMetaData:!0};return e=Object.assign({},t,e),i=ensureString(i),"script"===e.output?translate(e,i):instantiate(e,i)},extension="amf";module.exports={deserialize:deserialize,extension:"amf"}; -},{"../package.json":41,"./deserialize":43,"./translate":48}],46:[function(require,module,exports){ +},{"../package.json":41,"./deserialize":43,"./translate":48,"@jscad/io-utils":66}],46:[function(require,module,exports){ const{maths:maths,geometries:geometries}=require("@jscad/modeling");let lastmaterial;const findMaterial=(e,t)=>{if(lastmaterial&&lastmaterial.id===t)return lastmaterial;for(let o=0;o{for(let o=0;o{for(let t=0;t{const o=findMaterial(e,t);return o?getColor(o.objects):null},createObject=(e,t,o,s)=>{const l=[],a=[],r=[],n=o.amfMaterials,c=(e,t)=>{if("coordinates"===e.type){const t=parseFloat(getValue(e.objects,"x")),o=parseFloat(getValue(e.objects,"y")),s=parseFloat(getValue(e.objects,"z"));l.push([t,o,s])}},i=(e,t)=>{"vertex"===e.type&&e.objects.forEach(c)},g=(e,t)=>{if("triangle"===e.type){const t=parseInt(getValue(e.objects,"v1")),o=parseInt(getValue(e.objects,"v2")),s=parseInt(getValue(e.objects,"v3"));a.push([t,o,s]);const l=getColor(e.objects);l?r.push(l):r.push(u)}};let u=null;const p=(e,t)=>{switch(e.type){case"vertices":e.objects.forEach(i);break;case"volume":u=getColor(e.objects),e.materialid&&(u=findColorByMaterial(n,e.materialid)),e.objects.forEach(g)}},h=(e,t)=>{"mesh"===e.type&&e.objects.forEach(p)};if(!0===s.instantiate){const t=s.amf.scale,o=1!==t?([e,o,s])=>maths.vec3.fromValues(e*t,o*t,s*t):e=>maths.vec3.clone(e);e.objects.forEach(h);const n=getColor(e.objects),c=a.length,i=l.length,g=[];for(let e=0;e=i||t.push(o(l[a[e][s]]));const s=geometries.poly3.fromPoints(t),n=r[e]?r[e]:void 0;n&&(s.color=n),g.push(s)}let u=geometries.geom3.create(g);return n&&(u=u.color=n),u}let m="";if(e.objects.length>0){e.objects.forEach(h);const t=getColor(e.objects),o=a.length,n=l.length;m+=`\n// Object ${e.id}\n// faces : ${o}\n// vertices: ${n}\nconst createObject${e.id} = () => {\n let polygons = []\n let polygon\n`;for(let e=0;e=n||(m+=` [${l[a[e][t]]}],\n`);m+=" ])\n";const t=r[e];t&&(m+=` polygon.color = [${t}]\n`),m+=" polygons.push(polygon)\n"}m+=" let shape = geometries.geom3.create(polygons)\n";const c=s.scale?s.scale:1;1!==c&&(m+=` shape = transforms.scale([${c},${c},${c}], shape)\n`),t&&(m+=` shape = colors.colorize([${t}], shape)\n`),m+=" return shape\n}\n"}return m};module.exports=createObject; -},{"@jscad/modeling":211}],47:[function(require,module,exports){ +},{"@jscad/modeling":212}],47:[function(require,module,exports){ const saxes=require("saxes"),{amfMesh:amfMesh,amfVertices:amfVertices,amfCoordinates:amfCoordinates,amfX:amfX,amfY:amfY,amfZ:amfZ,amfNormal:amfNormal,amfVolume:amfVolume,amfTriangle:amfTriangle,amfV1:amfV1,amfV2:amfV2,amfV3:amfV3,amfVertex:amfVertex,amfEdge:amfEdge,amfMetadata:amfMetadata,amfMaterial:amfMaterial,amfColor:amfColor,amfR:amfR,amfG:amfG,amfB:amfB,amfA:amfA,amfMap:amfMap,amfU1:amfU1,amfU2:amfU2,amfU3:amfU3}=require("./helpers"),{inchMM:inchMM}=require("./constants");let amfLast=null,amfDefinition=0;const amfObjects=[],amfMaterials=[],amfTextures=[],amfConstels=[];let amfObj=null;const amfAmf=a=>{const e={type:"amf",unit:"mm",scale:1};switch(a.unit&&(e.unit=a.unit.toLowerCase()),e.unit.toLowerCase()){case"inch":e.scale=inchMM;break;case"foot":e.scale=12*inchMM;break;case"meter":e.scale=1e3;break;case"micron":e.scale=.001}return e.objects=[],e},amfObject=a=>{const e={type:"object",id:`JSCAD${amfObjects.length}`};return a.id&&(e.id=a.id),e.objects=[],e},createAmfParser=(a,e)=>{const f=new saxes.SaxesParser;f.on("error",a=>{console.log(`ERROR: AMF file line ${a.line}, column ${a.column}, bad character [${a.c}]`)}),f.on("opentag",a=>{const e={AMF:amfAmf,OBJECT:a=>{const e=amfObject(a);return 0===amfDefinition&&(amfDefinition=1),e},MESH:amfMesh,VERTICES:amfVertices,VERTEX:amfVertex,EDGE:amfEdge,VOLUME:amfVolume,MATERIAL:a=>{const e=amfMaterial(a);return 0===amfDefinition&&(amfDefinition=2),e},TEXTURE:a=>{0===amfDefinition&&(amfDefinition=3)},CONSTELLATION:a=>{0===amfDefinition&&(amfDefinition=4)},METADATA:a=>{const e=amfMetadata(a);return 0===amfDefinition&&(amfDefinition=5),e},COORDINATES:amfCoordinates,NORMAL:amfNormal,NX:amfX,X:amfX,NY:amfY,Y:amfY,NZ:amfZ,Z:amfZ,TRIANGLE:amfTriangle,V1:amfV1,VTEX1:amfV1,V2:amfV2,VTEX2:amfV2,V3:amfV3,VTEX3:amfV3,COLOR:amfColor,R:amfR,G:amfG,B:amfB,A:amfA,MAP:amfMap,TEXMAP:amfMap,U1:amfU1,UTEX1:amfU1,WTEX1:amfU1,U2:amfU2,UTEX2:amfU2,WTEX2:amfU2,U3:amfU3,UTEX3:amfU3,WTEX3:amfU3,COMPOSITE:()=>void 0,undefined:()=>console.log(`WARNING: unsupported AMF element: ${a.name}`)},f=a.name.toUpperCase(),m=e[f]?e[f](a.attributes,{amfObjects:amfObjects}):null;if(m){switch(amfDefinition){case 0:"objects"in m&&amfObjects.push(m);break;case 1:if(amfObjects.length>0){const a=amfObjects.pop();"objects"in a&&a.objects.push(m),amfObjects.push(a),"objects"in m&&amfObjects.push(m)}break;case 2:if("material"===m.type)amfMaterials.push(m);else if(amfMaterials.length>0){const a=amfMaterials.pop();"objects"in a&&a.objects.push(m),amfMaterials.push(a),"objects"in m&&amfMaterials.push(m)}break;case 3:case 4:case 5:break;default:console.log("WARNING: invalid AMF definition")}amfLast=m}}),f.on("closetag",a=>{switch(a.name.toUpperCase()){case"AMF":case"OBJECT":case"MESH":case"VERTICES":case"VERTEX":case"EDGE":case"COORDINATES":case"NORMAL":case"VOLUME":case"TRIANGLE":case"MATERIAL":case"COLOR":case"MAP":case"TEXMAP":break;case"TEXTURE":return void(3===amfDefinition&&(amfDefinition=0));case"CONSTELLATION":return void(4===amfDefinition&&(amfDefinition=0));case"METADATA":return void(5===amfDefinition&&(amfDefinition=0));default:return}let e=null;switch(amfDefinition){case 0:case 1:amfObjects.length>0&&"object"===(e=amfObjects.pop()).type&&(amfDefinition=0),0===amfObjects.length&&(amfObj=e);break;case 2:amfMaterials.length>0&&"material"===(e=amfMaterials.pop()).type&&(amfMaterials.push(e),amfDefinition=0);break;case 3:case 4:case 5:amfDefinition=0}}),f.on("text",a=>{null!==a&&(a=a.trim()).length>0&&amfLast&&0!==amfDefinition&&(amfLast.value=a,amfLast=null)}),f.on("end",()=>{}),f.write(a).close()},parse=(a,e)=>(createAmfParser(a),{amfObj:amfObj,amfMaterials:amfMaterials,amfTextures:amfTextures,amfConstels:amfConstels});module.exports=parse; },{"./constants":42,"./helpers":44,"saxes":40}],48:[function(require,module,exports){ @@ -242,7 +243,7 @@ const createObject=require("./objectBuilder"),parse=require("./parse"),translate },{"./constants":42,"./objectBuilder":46,"./parse":47}],49:[function(require,module,exports){ const stringify=require("onml/lib/stringify"),{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/amf+xml",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,unit:"millimeter"},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to AMF");t.length!==o.length&&console.warn("some objects could not be serialized to AMF"),o=toArray(modifiers.generalize({snap:!0,triangulate:!0},o)),e.statusCallback&&e.statusCallback({progress:0});let r=["amf",{unit:e.unit,version:"1.1"},["metadata",{type:"author"},"Created by JSCAD"]];r=r.concat(translateObjects(o,e));const n=`\n${stringify(r,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[n]},translateObjects=(e,t)=>{const o=[];return e.forEach((e,r)=>{geometries.geom3.toPolygons(e).length>0&&(t.id=r,o.push(convertToObject(e,t)))}),o},convertToObject=(e,t)=>{return["object",{id:t.id},convertToMesh(e,t)]},convertToMesh=(e,t)=>{let o=["mesh",{},convertToVertices(e,t)];return o=o.concat(convertToVolumes(e,t))},convertToVertices=(e,t)=>{const o=[];return geometries.geom3.toPolygons(e).forEach(e=>{for(let r=0;r{return["vertex",{},convertToCoordinates(e,t)]},convertToCoordinates=(e,t)=>{return["coordinates",{},["x",{},e[0]],["y",{},e[1]],["z",{},e[2]]]},convertToVolumes=(e,t)=>{const o=convertColor(e.color),r=geometries.geom3.toPolygons(e),n=[];let s=["volume",{}];o&&s.push(o);let l=0;return r.forEach(e=>{if(e.vertices.length<3)return;const o=convertToTriangles(e,l,t);s=s.concat(o),l+=e.vertices.length}),n.push(s),n},convertColor=e=>e?(e.length<4&&e.push(1),["color",{},["r",{},e[0]],["g",{},e[1]],["b",{},e[2]],["a",{},e[3]]]):null,convertToColor=(e,t)=>{const o=e.color;return convertColor(o)},convertToTriangles=(e,t,o)=>{const r=convertToColor(e),n=[];for(let o=0;ot&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; },{}],51:[function(require,module,exports){ @@ -258,15 +259,15 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255 const{BYBLOCK:BYBLOCK,BYLAYER:BYLAYER}=require("./autocad"),findLayer=(r,o)=>{const e=r.lnam||"0";for(const r of o)if(r.name===e)return r;return null},getColorNumber=(r,o)=>{let e=r.cnmb||-1;if(e===BYLAYER){e=-1;const n=findLayer(r,o);null!==n&&(e=n.cnmb||-1)}return e},mod=(r,o)=>{const e=r%o;return Math.floor(e>=0?e:e+o)},getColor=(r,o)=>{if(r<1)return null;const e=o[r=mod(r,o.length)];return[e[0]/255,e[1]/255,e[2]/255,e[3]/255]};module.exports={findLayer:findLayer,getColor:getColor,getColorNumber:getColorNumber}; },{"./autocad":52}],55:[function(require,module,exports){ -const version=require("./package.json").version,{BYLAYER:BYLAYER,getTLA:getTLA}=require("./autocad"),colorIndex=require("./colorindex2017"),dxf=require("./DxfReader"),{instantiateAsciiDxf:instantiateAsciiDxf}=require("./instantiate"),translateAsciiDxf=require("./translate"),handleError=(e,t)=>{if(!0===e.options.strict)throw t;console.log(`error: line ${t.line}, column ${t.column}, bad character [${t.c}]`)},handleStart=(e,t)=>{},handleEnd=(e,t)=>{},handleEntity=(e,t,a)=>{let s=null;switch(a){case"LAYER":(s={type:"layer"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(67)]=0,e.objstack.push(s);break;case"LINE":(s={type:"line"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=0,e.objstack.push(s);break;case"LWPOLYLINE":(s={type:"lwpolyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(38)]=0,s[getTLA(39)]=0,s[getTLA(43)]=0,s[getTLA(70)]=0,s[getTLA(90)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"MESH":(s={type:"mesh"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(91)]=0,s[getTLA(92)]=0,s[getTLA(93)]=0,s[getTLA(94)]=0,s[getTLA(95)]=0,s.state=0,e.objstack.push(s);break;case"POLYLINE":(s={type:"polyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(39)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,s[getTLA(75)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ARC":(s={type:"arc"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"CIRCLE":(s={type:"circle"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ELLIPSE":(s={type:"ellipse"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"VERTEX":(s={type:"vertex"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(42)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,e.objstack.push(s);break;case"3DFACE":(s={type:"3dface"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(70)]=0,e.objstack.push(s);break;case"SEQEND":s={type:"seqend"},e.objstack.push(s);break;default:s={},e.objstack.push(s)}},handleVariable=(e,t,a)=>{const s={type:"variable",name:a};e.objstack.push(s)},handleInt=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleDouble=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleXcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type?(void 0===s.pptxs&&(s.pptxs=[],s.bulgs=[]),s.pptxs.push(parseFloat(a)),s.bulgs.push(0)):"mesh"===s.type?(void 0===s.pptxs&&(s.pptxs=[]),s.pptxs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleYcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type||"mesh"===s.type?(void 0===s.pptys&&(s.pptys=[]),s.pptys.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleZcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("mesh"===s.type?(void 0===s.pptzs&&(s.pptzs=[]),s.pptzs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleBulge=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("lwpolyline"===s.type){const e=s.bulgs;if(void 0!==e){s.pptxs.length===e.length&&(e[e.length-1]=parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleLen=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){const e=s.state;switch(t){case 91:s[getTLA(t)]=parseFloat(a),s.state=1;break;case 92:1===e?(s.vlen=parseFloat(a),s.state=2):(s.plen=parseFloat(a),s.state=6);break;case 93:s[getTLA(t)]=parseFloat(a),s.state=3;break;case 94:s[getTLA(t)]=parseFloat(a),s.state=4;break;case 95:s[getTLA(t)]=parseFloat(a),s.state=5;break;default:s.state=7}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleValue=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){switch(s.state){case 3:void 0===s.fvals&&(s.fvals=[]),s.fvals.push(parseFloat(a));break;case 4:void 0===s.evals&&(s.evals=[]),s.evals.push(parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleString=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=a),e.objstack.push(s)},handleName=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&void 0===s[getTLA(t)]&&(s[getTLA(t)]=a),e.objstack.push(s)},createReader=(e,t)=>{const a=dxf.reader(t);return a.on("error",handleError),a.on("start",handleStart),a.on("end",handleEnd),a.absorb(0,handleEntity),a.absorb(1,handleString),a.absorb(2,handleName),a.absorb(3,handleName),a.absorb(6,handleString),a.absorb(7,handleString),a.absorb(8,handleString),a.absorb(9,handleVariable),a.absorb(10,handleXcoord),a.absorb(11,handleDouble),a.absorb(12,handleDouble),a.absorb(13,handleDouble),a.absorb(20,handleYcoord),a.absorb(21,handleDouble),a.absorb(22,handleDouble),a.absorb(23,handleDouble),a.absorb(30,handleZcoord),a.absorb(31,handleDouble),a.absorb(32,handleDouble),a.absorb(33,handleDouble),a.absorb(39,handleDouble),a.absorb(40,handleDouble),a.absorb(41,handleDouble),a.absorb(42,handleBulge),a.absorb(50,handleDouble),a.absorb(51,handleDouble),a.absorb(62,handleInt),a.absorb(70,handleInt),a.absorb(71,handleInt),a.absorb(72,handleInt),a.absorb(73,handleInt),a.absorb(74,handleInt),a.absorb(75,handleInt),a.absorb(90,handleValue),a.absorb(91,handleLen),a.absorb(92,handleLen),a.absorb(93,handleLen),a.absorb(94,handleLen),a.absorb(95,handleLen),a.absorb(210,handleInt),a.absorb(220,handleInt),a.absorb(230,handleInt),a.objstack=[],a.objstack.push({type:"dxf"}),a.write(e).close(),a},instantiate=(e,t)=>{const a=createReader(e,t);return instantiateAsciiDxf(a,t)},translate=(e,t)=>{const a=createReader(e,t);let s=`// Produced by JSCAD IO Library : DXF Deserializer (${t.version})\n\n`;return s+=translateAsciiDxf(a,t)},deserialize=(e,t)=>{const a={filename:"dxf",version:version,output:"script",strict:!0,colorindex:colorIndex,dxf:{angdir:0,insunits:4,pfacevmax:4}};return"script"===(e=Object.assign({},a,e)).output?translate(t,e):instantiate(t,e)},extension="dxf";module.exports={deserialize:deserialize,extension:"dxf"}; +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,{BYLAYER:BYLAYER,getTLA:getTLA}=require("./autocad"),colorIndex=require("./colorindex2017"),dxf=require("./DxfReader"),{instantiateAsciiDxf:instantiateAsciiDxf}=require("./instantiate"),translateAsciiDxf=require("./translate"),handleError=(e,t)=>{if(!0===e.options.strict)throw t;console.log(`error: line ${t.line}, column ${t.column}, bad character [${t.c}]`)},handleStart=(e,t)=>{},handleEnd=(e,t)=>{},handleEntity=(e,t,a)=>{let s=null;switch(a){case"LAYER":(s={type:"layer"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(67)]=0,e.objstack.push(s);break;case"LINE":(s={type:"line"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=0,e.objstack.push(s);break;case"LWPOLYLINE":(s={type:"lwpolyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(38)]=0,s[getTLA(39)]=0,s[getTLA(43)]=0,s[getTLA(70)]=0,s[getTLA(90)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"MESH":(s={type:"mesh"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(91)]=0,s[getTLA(92)]=0,s[getTLA(93)]=0,s[getTLA(94)]=0,s[getTLA(95)]=0,s.state=0,e.objstack.push(s);break;case"POLYLINE":(s={type:"polyline"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(39)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,s[getTLA(75)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ARC":(s={type:"arc"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"CIRCLE":(s={type:"circle"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(39)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"ELLIPSE":(s={type:"ellipse"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(210)]=0,s[getTLA(220)]=0,s[getTLA(230)]=1,e.objstack.push(s);break;case"VERTEX":(s={type:"vertex"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(10)]=0,s[getTLA(20)]=0,s[getTLA(30)]=0,s[getTLA(40)]=0,s[getTLA(41)]=0,s[getTLA(42)]=0,s[getTLA(70)]=0,s[getTLA(71)]=0,s[getTLA(72)]=0,s[getTLA(73)]=0,s[getTLA(74)]=0,e.objstack.push(s);break;case"3DFACE":(s={type:"3dface"})[getTLA(48)]=1,s[getTLA(60)]=0,s[getTLA(62)]=BYLAYER,s[getTLA(67)]=0,s[getTLA(70)]=0,e.objstack.push(s);break;case"SEQEND":s={type:"seqend"},e.objstack.push(s);break;default:s={},e.objstack.push(s)}},handleVariable=(e,t,a)=>{const s={type:"variable",name:a};e.objstack.push(s)},handleInt=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleDouble=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleXcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type?(void 0===s.pptxs&&(s.pptxs=[],s.bulgs=[]),s.pptxs.push(parseFloat(a)),s.bulgs.push(0)):"mesh"===s.type?(void 0===s.pptxs&&(s.pptxs=[]),s.pptxs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleYcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("lwpolyline"===s.type||"mesh"===s.type?(void 0===s.pptys&&(s.pptys=[]),s.pptys.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleZcoord=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&("mesh"===s.type?(void 0===s.pptzs&&(s.pptzs=[]),s.pptzs.push(parseFloat(a))):s[getTLA(t)]=parseFloat(a)),e.objstack.push(s)},handleBulge=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("lwpolyline"===s.type){const e=s.bulgs;if(void 0!==e){s.pptxs.length===e.length&&(e[e.length-1]=parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleLen=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){const e=s.state;switch(t){case 91:s[getTLA(t)]=parseFloat(a),s.state=1;break;case 92:1===e?(s.vlen=parseFloat(a),s.state=2):(s.plen=parseFloat(a),s.state=6);break;case 93:s[getTLA(t)]=parseFloat(a),s.state=3;break;case 94:s[getTLA(t)]=parseFloat(a),s.state=4;break;case 95:s[getTLA(t)]=parseFloat(a),s.state=5;break;default:s.state=7}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleValue=(e,t,a)=>{const s=e.objstack.pop();if("type"in s)if("mesh"===s.type){switch(s.state){case 3:void 0===s.fvals&&(s.fvals=[]),s.fvals.push(parseFloat(a));break;case 4:void 0===s.evals&&(s.evals=[]),s.evals.push(parseFloat(a))}}else s[getTLA(t)]=parseFloat(a);e.objstack.push(s)},handleString=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&(s[getTLA(t)]=a),e.objstack.push(s)},handleName=(e,t,a)=>{const s=e.objstack.pop();"type"in s&&void 0===s[getTLA(t)]&&(s[getTLA(t)]=a),e.objstack.push(s)},createReader=(e,t)=>{const a=dxf.reader(t);return a.on("error",handleError),a.on("start",handleStart),a.on("end",handleEnd),a.absorb(0,handleEntity),a.absorb(1,handleString),a.absorb(2,handleName),a.absorb(3,handleName),a.absorb(6,handleString),a.absorb(7,handleString),a.absorb(8,handleString),a.absorb(9,handleVariable),a.absorb(10,handleXcoord),a.absorb(11,handleDouble),a.absorb(12,handleDouble),a.absorb(13,handleDouble),a.absorb(20,handleYcoord),a.absorb(21,handleDouble),a.absorb(22,handleDouble),a.absorb(23,handleDouble),a.absorb(30,handleZcoord),a.absorb(31,handleDouble),a.absorb(32,handleDouble),a.absorb(33,handleDouble),a.absorb(39,handleDouble),a.absorb(40,handleDouble),a.absorb(41,handleDouble),a.absorb(42,handleBulge),a.absorb(50,handleDouble),a.absorb(51,handleDouble),a.absorb(62,handleInt),a.absorb(70,handleInt),a.absorb(71,handleInt),a.absorb(72,handleInt),a.absorb(73,handleInt),a.absorb(74,handleInt),a.absorb(75,handleInt),a.absorb(90,handleValue),a.absorb(91,handleLen),a.absorb(92,handleLen),a.absorb(93,handleLen),a.absorb(94,handleLen),a.absorb(95,handleLen),a.absorb(210,handleInt),a.absorb(220,handleInt),a.absorb(230,handleInt),a.objstack=[],a.objstack.push({type:"dxf"}),a.write(e).close(),a},instantiate=(e,t)=>{const a=createReader(e,t);return instantiateAsciiDxf(a,t)},translate=(e,t)=>{const a=createReader(e,t);let s=`// Produced by JSCAD IO Library : DXF Deserializer (${t.version})\n\n`;return s+=translateAsciiDxf(a,t)},deserialize=(e,t)=>{const a={filename:"dxf",version:version,output:"script",strict:!0,colorindex:colorIndex,dxf:{angdir:0,insunits:4,pfacevmax:4}};return e=Object.assign({},a,e),t=ensureString(t),"script"===e.output?translate(t,e):instantiate(t,e)},extension="dxf";module.exports={deserialize:deserialize,extension:"dxf"}; -},{"./DxfReader":51,"./autocad":52,"./colorindex2017":53,"./instantiate":56,"./package.json":57,"./translate":58}],56:[function(require,module,exports){ +},{"./DxfReader":51,"./autocad":52,"./colorindex2017":53,"./instantiate":56,"./package.json":57,"./translate":58,"@jscad/io-utils":66}],56:[function(require,module,exports){ const{geometries:geometries,maths:maths,primitives:primitives}=require("@jscad/modeling"),EPS=1e-5,{getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),instantiatePolygon=(e,t,s)=>{const n=[];if(n.push(maths.vec3.fromValues(e.pptx,e.ppty,e.pptz)),n.push(maths.vec3.fromValues(e.sptx,e.spty,e.sptz)),n.push(maths.vec3.fromValues(e.tptx,e.tpty,e.tptz)),e.fptx){let t=!1;e.tptx!==e.fptx&&(t=!0),e.tpty!==e.fpty&&(t=!0),e.tptz!==e.fptz&&(t=!0),t&&n.push(maths.vec3.fromValues(e.fptx,e.fpty,e.fptz))}const r=getColorNumber(e,t),a=getColor(r,s.colorindex),o=geometries.poly3.create(n);return a&&(o.color=a),o},instantiateLine=(e,t,s)=>{if(e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),s=maths.vec2.fromValues(e.sptx,e.spty);return primitives.line([t,s])}const n=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),r=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);return primitives.line([n,r])},instantiateVector=e=>{const t=parseInt("00000000000100000",2),s=parseInt("00000000001000000",2),n=parseInt("00000000010000000",2),r=e.lflg,a={};return(r&t)===t?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&s)===s?a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz):(r&n)===n?(a.vec=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),a.fvia=e.fvia,a.fvib=e.fvib,a.fvic=e.fvic,a.fvid=e.fvid):(a.vec=maths.vec2.fromValues(e.pptx,e.ppty),a.bulg=e.bulg),a},addSection=(e,t,s,n)=>{if(0===n)e=geometries.path2.appendPoints([[t,s]],e);else{const r=geometries.path2.toPoints(e),a=r[r.length-1],o=maths.vec2.fromValues(t,s),i=maths.vec2.distance(a,o)*((1+Math.pow(n,2))/(4*n)),p=n<0,l=!1,c=4*Math.atan(n),m=16;e=geometries.path2.appendArc({endpoint:[t,s],radius:[i,i],xaxisrotation:c,clockwise:p,large:l,segments:m},e)}return e},instantiatePath2D=(e,t,s)=>{const n=parseInt("00000000000000001",2),r=e.vlen,a=e.pptxs,o=e.pptys,i=e.bulgs,p=e.lflg;let l=geometries.path2.create();const c=(p&n)===n;return r!==a.length||r!==o.length||r!==i.length?l:(a.forEach((e,t,s)=>{let n=0;t>0&&(n=i[t-1]),l=addSection(l,a[t],o[t],n)}),c&&!l.isClosed&&(l=addSection(l,a[0],o[0],i[r-1]),l=geometries.path2.close(l)),l)},instantiateArc=(e,t,s)=>{e.lthk;const n=e.pptx,r=e.ppty,a=e.swid;let o=e.ang0;o*=.017453292519943295;let i=e.ang1;i*=.017453292519943295;return primitives.arc({center:[n,r],radius:a,startAngle:o,endAngle:i,segments:16})},instantiateCircle=(e,t,s)=>{const n=e.lthk,r=e.pptx,a=e.ppty,o=e.swid,i=getColorNumber(e,t),p=getColor(i,s.colorindex);if(0===n){const e=primitives.circle({center:[r,a],radius:o,segments:16});return p&&(e.color=p),e}const l=primitives.circle({center:[r,a],radius:o,segments:16}).extrude({offset:[0,0,n]});return p&&(l.color=p),l},instantiateEllipse=(e,t,s)=>{const n=e.pptx,r=e.ppty,a=e.pptz,o=e.sptx,i=e.spty,p=e.sptz,l=e.swid;if(0===a&&0===p){const e=maths.vec2.fromValues(0,0),t=maths.vec2.fromValues(o,i),s=maths.vec2.distance(e,t),a=s*l;let p=180*Math.atan2(i,o)/Math.PI;p{const t=[];let s=0;for(;s0;)r.push(e[s++]),n--;t.push(r)}return t},instantiatePoints=(e,t,s)=>{const n=[];let r=0;for(;r{const n=e.vlen,r=e.pptxs,a=e.pptys,o=e.pptzs,i=e.flen,p=e.fvals,l=getColorNumber(e,t),c=getColor(l,s.colorindex),m=[];if(n===r.length&&n===a.length&&n===o.length&&i===p.length){const e=instantiateFaces(p),t=instantiatePoints(r,a,o);let n=0;for(;n{const t=parseInt("00000000000000001",2),s=parseInt("00000000000001000",2),n=parseInt("00000000000010000",2),r=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),o=e.lflg;let i=null;return(o&s)===s?i=null:(o&n)===n?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(o&a)===a?((i=geometries.geom3.create()).closedM=(o&t)===t,i.closedN=(o&r)===r):(i=geometries.path2.create()).closedM=(o&t)===t,"cnmb"in e&&(i.cnmb=e.cnmb),i},completeCurrent=(e,t,s,n,r)=>{if(geometries.path2.isA(t)){const s=n.map(e=>e.vec);e.push(geometries.path2.fromPoints({closed:t.closed},s))}return geometries.geom3.isA(t)&&e.push(geometries.geom3.create(s)),null},instantiateAsciiDxf=(e,t)=>{const s=[];let n=null;const r=[],a=[],o=[];let i=null;for(const p of e.objstack)if(i=null,"type"in p){switch(p.type){case"dxf":break;case"layer":n=completeCurrent(a,n,r,o),s.push(p);break;case"variable":n=completeCurrent(a,n,r,o);break;case"3dface":i=instantiatePolygon(p,s,t),null===n&&(n=geometries.geom3.create());break;case"mesh":n=completeCurrent(a,n,r,o),a.push(instantiateMesh(p,s,t));break;case"arc":n=completeCurrent(a,n,r,o),a.push(instantiateArc(p));break;case"circle":n=completeCurrent(a,n,r,o),a.push(instantiateCircle(p,s,t));break;case"ellipse":n=completeCurrent(a,n,r,o),a.push(instantiateEllipse(p));break;case"line":n=completeCurrent(a,n,r,o),a.push(instantiateLine(p));break;case"polyline":null===(n=completeCurrent(a,n,r,o))&&(n=getPolyType(p));break;case"vertex":i=instantiateVector(p);break;case"seqend":n=completeCurrent(a,n,r,o);break;case"lwpolyline":n=completeCurrent(a,n,r,o),a.push(instantiatePath2D(p))}geometries.poly3.isA(i)&&r.push(i),i&&"vec"in i&&3===i.vec.length&&o.push(i),i&&"vec"in i&&2===i.vec.length&&o.push(i)}return n=completeCurrent(a,n,r,o),a};module.exports={instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector,instantiateAsciiDxf:instantiateAsciiDxf}; -},{"./helpers":54,"@jscad/modeling":211}],57:[function(require,module,exports){ +},{"./helpers":54,"@jscad/modeling":212}],57:[function(require,module,exports){ module.exports={ "name": "@jscad/dxf-deserializer", - "version": "2.3.25", + "version": "2.3.26", "description": "DXF Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -294,7 +295,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", @@ -306,7 +308,7 @@ module.exports={ },{}],58:[function(require,module,exports){ const{maths:maths,geometries:geometries}=require("@jscad/modeling"),{instantiatePolygon:instantiatePolygon,instantiateVector:instantiateVector}=require("./instantiate"),{findLayer:findLayer,getColor:getColor,getColorNumber:getColorNumber}=require("./helpers"),translateVector2D=e=>{return`${e[0]},${e[1]}`},translateVector3D=e=>{return`${e[0]},${e[1]},${e[2]}`},translatePolygon=e=>{const t=geometries.poly3.toPoints(e);let n="createPolygon([";return t.forEach(e=>{n+=`[${translateVector3D(e)}],`}),n+=`],${translateColor(e)})`},translateColor=e=>{let t="null";if("color"in e){const n=e.color;t=`[${n[0]},${n[1]},${n[2]},${n[3]}]`}return t},translateLine=(e,t,n)=>{const r=e.name,s=getColorNumber(e,t),a=getColor(s,n.colorindex);let l="";if(!e.pptz||e.pptz===e.sptz&&0===e.pptz){const t=maths.vec2.fromValues(e.pptx,e.ppty),n=maths.vec2.fromValues(e.sptx,e.spty);l=` let ${r} = primitives.line([[${translateVector2D(t)}],[${translateVector2D(n)}]])\n`}else{const t=maths.vec3.fromValues(e.pptx,e.ppty,e.pptz),n=maths.vec3.fromValues(e.sptx,e.spty,e.sptz);l=` let ${r} = primitives.line([[${translateVector3D(t)}],[${translateVector3D(n)}]])\n`}a&&(l+=` ${r} = colors.colorize([${a[0]}, ${a[1]}, ${a[2]}, 1], ${r})\n`),e.script=l,addToLayer(e,t)},translateSection=(e,t,n,r,s,a)=>{if(0===r)return`geometries.path2.appendPoints([[${t},${n}]], ${e})\n`;const l=maths.vec2.fromValues(s,a),o=maths.vec2.fromValues(t,n),i=maths.vec2.distance(l,o)*((1+Math.pow(r,2))/(4*r)),c=r<0;return`geometries.path2.appendArc({endpoint: [${t},${n}],radius: [${i},${i}],xaxisrotation: ${4*Math.atan(r)},clockwise: ${c},large: false,segments: 16}, ${e})\n`},translatePath2D=(e,t,n)=>{const r=parseInt("00000000000000001",2),s=e.vlen,a=e.pptxs,l=e.pptys,o=e.bulgs,i=e.lflg,c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);let $=` let ${c} = geometries.path2.create()\n`;const u=(i&r)===r;if(s===a.length&&s===l.length&&s===o.length){$+=` ${c} = geometries.path2.appendPoints([[${a[0]}, ${l[0]}]], ${c})\n`;for(let e=0;e{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid;let o=e.ang0,i=e.ang1;const c=e.name,p=getColorNumber(e,t),m=getColor(p,n.colorindex);o*=.017453292519943295,i*=.017453292519943295;if(0===r){let n=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;return m&&(n+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=n,void addToLayer(e,t)}let $=` let ${c} = primitives.arc({center: [${s}, ${a}], radius: ${l}, startAngle: ${o}, endAngle: ${i}, segements: 16})\n`;m&&($+=` ${c} = colors.colorize([${m[0]}, ${m[1]}, ${m[2]}, 1], ${c})\n`),e.script=$,addToLayer(e,t)},translateCircle=(e,t,n)=>{const r=e.lthk,s=e.pptx,a=e.ppty,l=e.swid,o=e.name,i=getColorNumber(e,t),c=getColor(i,n.colorindex);if(0===r){let n=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16})\n`;return c&&(n+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=n,void addToLayer(e,t)}let p=` let ${o} = primitives.circle({center: [${s}, ${a}], radius: ${l}, segments: 16}).extrude({offset: [0,0,${r}]}))\n`;c&&(p+=` ${o} = colors.colorize([${c[0]}, ${c[1]}, ${c[2]}, 1], ${o})\n`),e.script=p,addToLayer(e,t)},translateEllipse=(e,t,n)=>{const r=e.pptx,s=e.ppty,a=e.pptz,l=e.sptx,o=e.spty,i=e.sptz,c=e.swid,p=e.name,m=getColorNumber(e,t),$=getColor(m,n.colorindex);if(0===a&&0===i){const n=maths.vec2.fromValues(0,0),a=maths.vec2.fromValues(l,o),i=maths.vec2.distance(n,a);let m=` let ${p} = primitives.ellipse({center: [0, 0, 0], radius: [${i}, ${i*c}], segments: 16})\n let ${p}matrix = maths.mat4.multiply(maths.mat4.create(), maths.mat4.fromTranslation(maths.mat4.create(), [${r}, ${s}, 0]), maths.mat4.fromZRotation(maths.mat4.create(), ${Math.atan2(o,l)}))\n ${p} = geometries.geom2.transform(${p}matrix, ${p})\n`;$&&(m+=` ${p} = colors.colorize([${$[0]}, ${$[1]}, ${$[2]}, 1], ${p})\n`),e.script=m,addToLayer(e,t)}},instantiateFaces=e=>{const t=[];let n=0;for(;n0;)s.push(e[n++]),r--;t.push(s)}return t},instantiatePoints=(e,t,n)=>{const r=[];let s=0;for(;s{const r=e.vlen,s=e.pptxs,a=e.pptys,l=e.pptzs,o=e.flen,i=e.fvals,c=getColorNumber(e,t),p=getColor(c,n.colorindex),m=[];if(r===s.length&&r===a.length&&r===l.length)if(o===i.length){const e=instantiateFaces(i),t=instantiatePoints(s,a,l);let r=0;for(;r{for(const t of e)if("0"===t.name)return t;const t={type:"layer",lnam:"layer0",name:"0",lscl:1,visb:0,spac:0,objects:[]};return e.push(t),t},addToLayer=(e,t)=>{let n=findLayer(e,t);null===n&&(n=findLayer0(t)),"objects"in n||(n.objects=[]),n.objects.push(e)},getPolyType=e=>{const t=parseInt("00000000000000001",2),n=parseInt("00000000000001000",2),r=parseInt("00000000000010000",2),s=parseInt("00000000000100000",2),a=parseInt("00000000001000000",2),l=e.lflg;let o=null;if((l&n)===n){o={type:"3dline",isclosed:(l&t)===t}}else if((l&r)===r)(o={type:"3dpolymesh"}).fvia=e.fvia,o.fvib=e.fvib,o.closedM=(l&t)===t,o.closedN=(l&s)===s;else if((l&a)===a)(o={type:"3dpolyfaces"}).fvia=e.fvia,o.fvib=e.fvib;else{o={type:"2dline",isclosed:(l&t)===t}}return"cnmb"in e&&(o.cnmb=e.cnmb),"lnam"in e&&(o.lnam=e.lnam),o},instantiateFacets=(e,t,n,r,s)=>{const a=(e,r)=>{return n[(e-1)*t+(r-1)].vec},l=[];if(e*t!==n.length)return l;if(e<2|t<2)return l;let o=1;for(;o{const a=[];if(e+t!==n.length)return a;let l=e;for(;l0&&(e=n[t[0]-1],r.push(e.vec),t[1]>0&&(e=n[t[1]-1],r.push(e.vec),t[2]>0&&(e=n[t[2]-1],r.push(e.vec),t[3]>0&&(e=n[t[3]-1],r.push(e.vec))))),r.length>2){1===s.dxf.angdir&&(r=r.reverse());const e=geometries.poly3.create(r);a.push(e)}l++}return a},translateAs2Dline=(e,t,n,r)=>{e.vlen=n.length,e.pptxs=[],e.pptys=[],e.bulgs=[];for(const t of n)e.pptxs.push(t.vec[0]),e.pptys.push(t.vec[1]),e.bulgs.push(t.bulg);return e.isclosed?e.lflg=parseInt("00000000000000001",2):e.lflg=0,translatePath2D(e,t,r),null},translateCurrent=(e,t,n,r)=>{if(null===e)return null;const s=e.type,a=getColorNumber(e,t),l=getColor(a,r.colorindex);if("2dline"===s)return translateAs2Dline(e,t,n,r);if("3dline"===s)return null;if("3dpolymesh"===s){const t=e.fvia,s=e.fvib;n=instantiateFacets(t,s,n,l,r)}if("3dpolyfaces"===s&&"fvia"in e){const t=e.fvia,s=e.fvib;n=instantiatePolyFaces(t,s,n,0,r)}const o=e.name;let i=` const ${o}_polygons = [\n`;for(const e of n)i+=" "+translatePolygon(e)+",\n";return i+=` ]\n let ${o} = geometries.geom3.create(${o}_polygons)\n`,l&&(i+=` ${o}.color = [${l}]\n`),e.script=i,addToLayer(e,t),null},translateLayer=e=>{let t=`function ${e.lnam||"Unknown"}() {\n`;for(const n of e.objects)t+=n.script;t+=" return [";for(const n of e.objects)t+=n.name+",";return t+="]\n}\n"},saveVariable=(e,t)=>{switch(e.name||"Unknown"){case"$ANGDIR":"lflg"in e&&(t.dxf.angdir=e.lflg)}},translateAsciiDxf=(e,t)=>{const n=[];let r=null,s=[],a=0,l=null;for(const o of e.objstack)if(l=null,"type"in o){if("name"in o){let e=o.name;e=(e=(e=e.replace(/ /g,"_")).replace(/-/g,"_")).replace(/\./g,"_"),o.name=e}else o.name="jscad"+a,a+=1;switch(o.type){case"dxf":break;case"layer":r=translateCurrent(r,n,s,t),s=[],o.objects=[],o.lnam="layer"+n.length,n.push(o);break;case"variable":r=translateCurrent(r,n,s,t),s=[],saveVariable(o,t);break;case"3dface":l=instantiatePolygon(o,n,t),null===r&&((r={type:"3dfaces"}).name="jscad"+a,a+=1);break;case"mesh":r=translateCurrent(r,n,s,t),s=[],translateMesh(o,n,t);break;case"arc":r=translateCurrent(r,n,s,t),s=[],translateArc(o,n,t);break;case"circle":r=translateCurrent(r,n,s,t),s=[],translateCircle(o,n,t);break;case"ellipse":r=translateCurrent(r,n,s,t),s=[],translateEllipse(o,n,t);break;case"line":r=translateCurrent(r,n,s,t),s=[],translateLine(o,n,t);break;case"polyline":r=translateCurrent(r,n,s,t),s=[],null===r&&((r=getPolyType(o)).name="jscad"+a,a+=1);break;case"vertex":l=instantiateVector(o);break;case"seqend":r=translateCurrent(r,n,s,t),s=[];break;case"lwpolyline":r=translateCurrent(r,n,s,t),s=[],translatePath2D(o,n,t)}geometries.poly3.isA(l)&&s.push(l),l&&"vec"in l&&3===l.vec.length&&s.push(l),l&&"vec"in l&&2===l.vec.length&&s.push(l)}r=translateCurrent(r,n,s,t);let o="const {colors, geometries, maths, primitives, transforms} = require('@jscad/modeling')\n\nconst main = () => {\n let layers = []\n return layers.concat(";return n.forEach(e=>{const t=e.lnam||"Unknown";o+=`${t}(),`}),o+="[])\n}\n",o+="\nfunction createPolygon(listofpoints, color) {\n let polygon = geometries.poly3.fromPoints(listofpoints)\n if (color) polygon.color = color\n return polygon\n}\n",n.forEach(e=>{o+=translateLayer(e)}),o+="module.exports = {main}\n"};module.exports=translateAsciiDxf; -},{"./helpers":54,"./instantiate":56,"@jscad/modeling":211}],59:[function(require,module,exports){ +},{"./helpers":54,"./instantiate":56,"@jscad/modeling":212}],59:[function(require,module,exports){ const dxfHeaders=function(){return" 0\nSECTION\n 2\nHEADER\n 9\n$ACADVER\n 1\nAC1027\n 9\n$ACADMAINTVER\n 70\n8\n 9\n$DWGCODEPAGE\n 3\nANSI_1252\n 9\n$LASTSAVEDBY\n 1\nunknown\n 9\n$REQUIREDVERSIONS\n160\n0\n 9\n$INSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$EXTMIN\n 10\n1e+20\n 20\n1e+20\n 30\n1e+20\n 9\n$EXTMAX\n 10\n-1e+20\n 20\n-1e+20\n 30\n-1e+20\n 9\n$LIMMIN\n 10\n0.0\n 20\n0.0\n 9\n$LIMMAX\n 10\n12.0\n 20\n9.0\n 9\n$ORTHOMODE\n 70\n0\n 9\n$REGENMODE\n 70\n1\n 9\n$FILLMODE\n 70\n1\n 9\n$QTEXTMODE\n 70\n0\n 9\n$MIRRTEXT\n 70\n0\n 9\n$LTSCALE\n 40\n1.0\n 9\n$ATTMODE\n 70\n1\n 9\n$TEXTSIZE\n 40\n0.2\n 9\n$TRACEWID\n 40\n0.05\n 9\n$TEXTSTYLE\n 7\nNotes\n 9\n$CLAYER\n 8\n0\n 9\n$CELTYPE\n 6\nByLayer\n 9\n$CECOLOR\n 62\n256\n 9\n$CELTSCALE\n 40\n1.0\n 9\n$DISPSILH\n 70\n0\n 9\n$DIMSCALE\n 40\n1.0\n 9\n$DIMASZ\n 40\n3.0\n 9\n$DIMEXO\n 40\n1.5\n 9\n$DIMDLI\n 40\n6.0\n 9\n$DIMRND\n 40\n0.0\n 9\n$DIMDLE\n 40\n0.0\n 9\n$DIMEXE\n 40\n3.0\n 9\n$DIMTP\n 40\n0.0\n 9\n$DIMTM\n 40\n0.0\n 9\n$DIMTXT\n 40\n3.0\n 9\n$DIMCEN\n 40\n3.0\n 9\n$DIMTSZ\n 40\n0.0\n 9\n$DIMTOL\n 70\n0\n 9\n$DIMLIM\n 70\n0\n 9\n$DIMTIH\n 70\n0\n 9\n$DIMTOH\n 70\n0\n 9\n$DIMSE1\n 70\n0\n 9\n$DIMSE2\n 70\n0\n 9\n$DIMTAD\n 70\n1\n 9\n$DIMZIN\n 70\n3\n 9\n$DIMBLK\n 1\n\n 9\n$DIMASO\n 70\n1\n 9\n$DIMSHO\n 70\n1\n 9\n$DIMPOST\n 1\n\n 9\n$DIMAPOST\n 1\n\n 9\n$DIMALT\n 70\n0\n 9\n$DIMALTD\n 70\n2\n 9\n$DIMALTF\n 40\n25.4\n 9\n$DIMLFAC\n 40\n1.0\n 9\n$DIMTOFL\n 70\n0\n 9\n$DIMTVP\n 40\n0.0\n 9\n$DIMTIX\n 70\n0\n 9\n$DIMSOXD\n 70\n0\n 9\n$DIMSAH\n 70\n0\n 9\n$DIMBLK1\n 1\n\n 9\n$DIMBLK2\n 1\n\n 9\n$DIMSTYLE\n 2\nCivil-Metric\n 9\n$DIMCLRD\n 70\n0\n 9\n$DIMCLRE\n 70\n0\n 9\n$DIMCLRT\n 70\n0\n 9\n$DIMTFAC\n 40\n1.0\n 9\n$DIMGAP\n 40\n2.0\n 9\n$DIMJUST\n 70\n0\n 9\n$DIMSD1\n 70\n0\n 9\n$DIMSD2\n 70\n0\n 9\n$DIMTOLJ\n 70\n1\n 9\n$DIMTZIN\n 70\n0\n 9\n$DIMALTZ\n 70\n0\n 9\n$DIMALTTZ\n 70\n0\n 9\n$DIMUPT\n 70\n0\n 9\n$DIMDEC\n 70\n2\n 9\n$DIMTDEC\n 70\n2\n 9\n$DIMALTU\n 70\n2\n 9\n$DIMALTTD\n 70\n2\n 9\n$DIMTXSTY\n 7\nStandard\n 9\n$DIMAUNIT\n 70\n0\n 9\n$DIMADEC\n 70\n2\n 9\n$DIMALTRND\n 40\n0.0\n 9\n$DIMAZIN\n 70\n2\n 9\n$DIMDSEP\n 70\n46\n 9\n$DIMATFIT\n 70\n3\n 9\n$DIMFRAC\n 70\n1\n 9\n$DIMLDRBLK\n 1\n\n 9\n$DIMLUNIT\n 70\n2\n 9\n$DIMLWD\n 70\n-2\n 9\n$DIMLWE\n 70\n-2\n 9\n$DIMTMOVE\n 70\n0\n 9\n$DIMFXL\n 40\n1.0\n 9\n$DIMFXLON\n 70\n0\n 9\n$DIMJOGANG\n 40\n0.785398163397\n 9\n$DIMTFILL\n 70\n0\n 9\n$DIMTFILLCLR\n 70\n0\n 9\n$DIMARCSYM\n 70\n0\n 9\n$DIMLTYPE\n 6\n\n 9\n$DIMLTEX1\n 6\n\n 9\n$DIMLTEX2\n 6\n\n 9\n$DIMTXTDIRECTION\n 70\n0\n 9\n$LUNITS\n 70\n2\n 9\n$LUPREC\n 70\n4\n 9\n$SKETCHINC\n 40\n0.1\n 9\n$FILLETRAD\n 40\n0.0\n 9\n$AUNITS\n 70\n4\n 9\n$AUPREC\n 70\n5\n 9\n$MENU\n 1\n.\n 9\n$ELEVATION\n 40\n0.0\n 9\n$PELEVATION\n 40\n0.0\n 9\n$THICKNESS\n 40\n0.0\n 9\n$LIMCHECK\n 70\n0\n 9\n$CHAMFERA\n 40\n0.0\n 9\n$CHAMFERB\n 40\n0.0\n 9\n$CHAMFERC\n 40\n0.0\n 9\n$CHAMFERD\n 40\n0.0\n 9\n$SKPOLY\n 70\n0\n 9\n$TDCREATE\n 40\n2457986.69756\n 9\n$TDUCREATE\n 40\n2455631.2632\n 9\n$TDUPDATE\n 40\n2457986.69756\n 9\n$TDUUPDATE\n 40\n2456436.43179\n 9\n$TDINDWG\n 40\n0.0003490741\n 9\n$TDUSRTIMER\n 40\n0.0003487153\n 9\n$USRTIMER\n 70\n1\n 9\n$ANGBASE\n 50\n0.0\n 9\n$ANGDIR\n 70\n0\n 9\n$PDMODE\n 70\n0\n 9\n$PDSIZE\n 40\n0.0\n 9\n$PLINEWID\n 40\n0.0\n 9\n$SPLFRAME\n 70\n0\n 9\n$SPLINETYPE\n 70\n6\n 9\n$SPLINESEGS\n 70\n8\n 9\n$HANDSEED\n 5\n5C7\n 9\n$SURFTAB1\n 70\n6\n 9\n$SURFTAB2\n 70\n6\n 9\n$SURFTYPE\n 70\n6\n 9\n$SURFU\n 70\n6\n 9\n$SURFV\n 70\n6\n 9\n$UCSBASE\n 2\n\n 9\n$UCSNAME\n 2\n\n 9\n$UCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$UCSORTHOREF\n 2\n\n 9\n$UCSORTHOVIEW\n 70\n0\n 9\n$UCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$UCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSBASE\n 2\n\n 9\n$PUCSNAME\n 2\n\n 9\n$PUCSORG\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSXDIR\n 10\n1.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSYDIR\n 10\n0.0\n 20\n1.0\n 30\n0.0\n 9\n$PUCSORTHOREF\n 2\n\n 9\n$PUCSORTHOVIEW\n 70\n0\n 9\n$PUCSORGTOP\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBOTTOM\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGLEFT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGRIGHT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGFRONT\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PUCSORGBACK\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$USERI1\n 70\n0\n 9\n$USERI2\n 70\n0\n 9\n$USERI3\n 70\n0\n 9\n$USERI4\n 70\n0\n 9\n$USERI5\n 70\n0\n 9\n$USERR1\n 40\n0.0\n 9\n$USERR2\n 40\n0.0\n 9\n$USERR3\n 40\n0.0\n 9\n$USERR4\n 40\n0.0\n 9\n$USERR5\n 40\n0.0\n 9\n$WORLDVIEW\n 70\n1\n 9\n$SHADEDGE\n 70\n3\n 9\n$SHADEDIF\n 70\n70\n 9\n$TILEMODE\n 70\n1\n 9\n$MAXACTVP\n 70\n64\n 9\n$PINSBASE\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 9\n$PLIMCHECK\n 70\n0\n 9\n$PEXTMIN\n 10\n0.628866766397\n 20\n0.799999952316\n 30\n0.0\n 9\n$PEXTMAX\n 10\n9.02886638493\n 20\n7.19999957085\n 30\n0.0\n 9\n$PLIMMIN\n 10\n-0.700541819174\n 20\n-0.228100386192\n 9\n$PLIMMAX\n 10\n10.2994579405\n 20\n8.27189937351\n 9\n$UNITMODE\n 70\n0\n 9\n$VISRETAIN\n 70\n1\n 9\n$PLINEGEN\n 70\n0\n 9\n$PSLTSCALE\n 70\n1\n 9\n$TREEDEPTH\n 70\n3020\n 9\n$CMLSTYLE\n 2\nStandard\n 9\n$CMLJUST\n 70\n0\n 9\n$CMLSCALE\n 40\n1.0\n 9\n$PROXYGRAPHICS\n 70\n1\n 9\n$MEASUREMENT\n 70\n1\n 9\n$CELWEIGHT\n370\n-1\n 9\n$ENDCAPS\n280\n0\n 9\n$JOINSTYLE\n280\n0\n 9\n$LWDISPLAY\n290\n0\n 9\n$INSUNITS\n 70\n4\n 9\n$HYPERLINKBASE\n 1\n\n 9\n$STYLESHEET\n 1\n\n 9\n$XEDIT\n290\n1\n 9\n$CEPSNTYPE\n380\n0\n 9\n$PSTYLEMODE\n290\n1\n 9\n$FINGERPRINTGUID\n 2\n{39DB1BDD-BC6C-46D3-A333-DFCC0DC4782D}\n 9\n$VERSIONGUID\n 2\n{69EEBB2D-7039-498F-9366-3F994E4A07E7}\n 9\n$EXTNAMES\n290\n1\n 9\n$PSVPSCALE\n 40\n0.0\n 9\n$OLESTARTUP\n290\n0\n 9\n$SORTENTS\n280\n127\n 9\n$INDEXCTL\n280\n0\n 9\n$HIDETEXT\n280\n1\n 9\n$XCLIPFRAME\n280\n0\n 9\n$HALOGAP\n280\n0\n 9\n$OBSCOLOR\n 70\n257\n 9\n$OBSLTYPE\n280\n0\n 9\n$INTERSECTIONDISPLAY\n280\n0\n 9\n$INTERSECTIONCOLOR\n 70\n257\n 9\n$DIMASSOC\n280\n2\n 9\n$PROJECTNAME\n 1\n\n 9\n$CAMERADISPLAY\n290\n0\n 9\n$LENSLENGTH\n 40\n50.0\n 9\n$CAMERAHEIGHT\n 40\n0.0\n 9\n$STEPSPERSEC\n 40\n2.0\n 9\n$STEPSIZE\n 40\n6.0\n 9\n$3DDWFPREC\n 40\n2.0\n 9\n$PSOLWIDTH\n 40\n0.25\n 9\n$PSOLHEIGHT\n 40\n4.0\n 9\n$LOFTANG1\n 40\n1.57079632679\n 9\n$LOFTANG2\n 40\n1.57079632679\n 9\n$LOFTMAG1\n 40\n0.0\n 9\n$LOFTMAG2\n 40\n0.0\n 9\n$LOFTPARAM\n 70\n7\n 9\n$LOFTNORMALS\n280\n1\n 9\n$LATITUDE\n 40\n37.795\n 9\n$LONGITUDE\n 40\n-122.394\n 9\n$NORTHDIRECTION\n 40\n0.0\n 9\n$TIMEZONE\n 70\n-8000\n 9\n$LIGHTGLYPHDISPLAY\n280\n1\n 9\n$TILEMODELIGHTSYNCH\n280\n1\n 9\n$CMATERIAL\n347\n96\n 9\n$SOLIDHIST\n280\n1\n 9\n$SHOWHIST\n280\n1\n 9\n$DWFFRAME\n280\n2\n 9\n$DGNFRAME\n280\n0\n 9\n$REALWORLDSCALE\n290\n1\n 9\n$INTERFERECOLOR\n 62\n1\n 9\n$INTERFEREOBJVS\n345\nA3\n 9\n$INTERFEREVPVS\n346\nA0\n 9\n$CSHADOW\n280\n0\n 9\n$SHADOWPLANELOCATION\n 40\n0.0\n 0\nENDSEC"},dxfClasses=function(){return' 0\nSECTION\n 2\nCLASSES\n 0\nCLASS\n 1\nACDBDICTIONARYWDFLT\n 2\nAcDbDictionaryWithDefault\n 3\nObjectDBX Classes\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nDICTIONARYVAR\n 2\nAcDbDictionaryVar\n 3\nObjectDBX Classes\n 90\n0\n 91\n15\n280\n0\n281\n0\n 0\nCLASS\n 1\nTABLESTYLE\n 2\nAcDbTableStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nMATERIAL\n 2\nAcDbMaterial\n 3\nObjectDBX Classes\n 90\n1153\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nVISUALSTYLE\n 2\nAcDbVisualStyle\n 3\nObjectDBX Classes\n 90\n4095\n 91\n26\n280\n0\n281\n0\n 0\nCLASS\n 1\nSCALE\n 2\nAcDbScale\n 3\nObjectDBX Classes\n 90\n1153\n 91\n17\n280\n0\n281\n0\n 0\nCLASS\n 1\nMLEADERSTYLE\n 2\nAcDbMLeaderStyle\n 3\nACDB_MLEADERSTYLE_CLASS\n 90\n4095\n 91\n3\n280\n0\n281\n0\n 0\nCLASS\n 1\nCELLSTYLEMAP\n 2\nAcDbCellStyleMap\n 3\nObjectDBX Classes\n 90\n1152\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nEXACXREFPANELOBJECT\n 2\nExAcXREFPanelObject\n 3\nEXAC_ESW\n 90\n1025\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nNPOCOLLECTION\n 2\nAcDbImpNonPersistentObjectsCollection\n 3\nObjectDBX Classes\n 90\n1153\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nLAYER_INDEX\n 2\nAcDbLayerIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nSPATIAL_INDEX\n 2\nAcDbSpatialIndex\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nIDBUFFER\n 2\nAcDbIdBuffer\n 3\nObjectDBX Classes\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nDIMASSOC\n 2\nAcDbDimAssoc\n 3\n"AcDbDimAssoc|Product Desc: AcDim ARX App For Dimension|Company: Autodesk, Inc.|WEB Address: www.autodesk.com"\n 90\n0\n 91\n0\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBSECTIONVIEWSTYLE\n 2\nAcDbSectionViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nACDBDETAILVIEWSTYLE\n 2\nAcDbDetailViewStyle\n 3\nObjectDBX Classes\n 90\n1025\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF\n 2\nAcDbRasterImageDef\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nRASTERVARIABLES\n 2\nAcDbRasterVariables\n 3\nISM\n 90\n0\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGEDEF_REACTOR\n 2\nAcDbRasterImageDefReactor\n 3\nISM\n 90\n1\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nIMAGE\n 2\nAcDbRasterImage\n 3\nISM\n 90\n2175\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nPDFDEFINITION\n 2\nAcDbPdfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n0\n 0\nCLASS\n 1\nPDFUNDERLAY\n 2\nAcDbPdfReference\n 3\nObjectDBX Classes\n 90\n4095\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDWFDEFINITION\n 2\nAcDbDwfDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDWFUNDERLAY\n 2\nAcDbDwfReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nCLASS\n 1\nDGNDEFINITION\n 2\nAcDbDgnDefinition\n 3\nObjectDBX Classes\n 90\n1153\n 91\n2\n280\n0\n281\n0\n 0\nCLASS\n 1\nDGNUNDERLAY\n 2\nAcDbDgnReference\n 3\nObjectDBX Classes\n 90\n1153\n 91\n1\n280\n0\n281\n1\n 0\nENDSEC'},dxfTables=function(){return" 0\nSECTION\n 2\nTABLES\n 0\nTABLE\n 2\nVPORT\n 5\n8\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLTYPE\n 5\n5F\n330\n0\n100\nAcDbSymbolTable\n 70\n7\n 0\nLTYPE\n 5\n14\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByBlock\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n15\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nByLayer\n 70\n0\n 3\n\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n16\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nContinuous\n 70\n0\n 3\nSolid line\n 72\n65\n 73\n0\n 40\n0.0\n 0\nLTYPE\n 5\n1B1\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nCENTER\n 70\n0\n 3\nCenter ____ _ ____ _ ____ _ ____ _ ____ _ ____\n 72\n65\n 73\n4\n 40\n2.0\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B2\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nDASHED\n 70\n0\n 3\nDashed __ __ __ __ __ __ __ __ __ __ __ __ __ _\n 72\n65\n 73\n2\n 40\n0.75\n 49\n0.5\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n1B3\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nPHANTOM\n 70\n0\n 3\nPhantom ______ __ __ ______ __ __ ______\n 72\n65\n 73\n6\n 40\n2.5\n 49\n1.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 49\n0.25\n 74\n0\n 49\n-0.25\n 74\n0\n 0\nLTYPE\n 5\n39E\n330\n5F\n100\nAcDbSymbolTableRecord\n100\nAcDbLinetypeTableRecord\n 2\nHIDDEN\n 70\n0\n 3\nHidden __ __ __ __ __ __ __ __ __ __ __ __ __ __\n 72\n65\n 73\n2\n 40\n9.525\n 49\n6.35\n 74\n0\n 49\n-3.175\n 74\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nLAYER\n 5\n2\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nLAYER\n 5\n10\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\n0\n 70\n0\n 6\nContinuous\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n1B4\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nView Port\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nLAYER\n 5\n21D\n330\n2\n100\nAcDbSymbolTableRecord\n100\nAcDbLayerTableRecord\n 2\nDefpoints\n 70\n0\n 6\nContinuous\n290\n0\n370\n-3\n390\nF\n347\n98\n348\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nSTYLE\n 5\n3\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n 0\nSTYLE\n 5\n11\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nStandard\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\nDC\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nSTYLE\n 5\n178\n330\n3\n100\nAcDbSymbolTableRecord\n100\nAcDbTextStyleTableRecord\n 2\nNotes\n 70\n0\n 40\n3.0\n 41\n1.0\n 50\n0.0\n 71\n0\n 42\n0.2\n 3\narial.ttf\n 4\n\n 0\nENDTAB\n 0\nTABLE\n 2\nVIEW\n 5\n6\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nUCS\n 5\n7\n330\n0\n100\nAcDbSymbolTable\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nAPPID\n 5\n9\n330\n0\n100\nAcDbSymbolTable\n 70\n12\n 0\nAPPID\n 5\n12\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD\n 70\n0\n 0\nAPPID\n 5\nDD\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnoPO\n 70\n0\n 0\nAPPID\n 5\nDE\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcadAnnotative\n 70\n0\n 0\nAPPID\n 5\nDF\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMJAG\n 70\n0\n 0\nAPPID\n 5\nE0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMTALN\n 70\n0\n 0\nAPPID\n 5\n107\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_MLEADERVER\n 70\n0\n 0\nAPPID\n 5\n1B5\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nAcAecLayerStandard\n 70\n0\n 0\nAPPID\n 5\n1BA\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_EXEMPT_FROM_CAD_STANDARDS\n 70\n0\n 0\nAPPID\n 5\n237\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_DSTYLE_DIMBREAK\n 70\n0\n 0\nAPPID\n 5\n28E\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_PSEXT\n 70\n0\n 0\nAPPID\n 5\n4B0\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nACAD_NAV_VCDISPLAY\n 70\n0\n 0\nAPPID\n 5\n4E3\n330\n9\n100\nAcDbSymbolTableRecord\n100\nAcDbRegAppTableRecord\n 2\nHATCHBACKGROUNDCOLOR\n 70\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nDIMSTYLE\n 5\nA\n330\n0\n100\nAcDbSymbolTable\n 70\n3\n100\nAcDbDimStyleTable\n 71\n3\n340\n242\n340\n27\n340\nE1\n 0\nDIMSTYLE\n105\n27\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nStandard\n 70\n0\n 41\n3.0\n 42\n2.0\n 43\n9.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\nE1\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nAnnotative\n 70\n0\n 40\n0.0\n 41\n3.0\n 42\n2.5\n 43\n10.0\n 44\n5.0\n140\n3.0\n141\n2.0\n147\n2.0\n340\n11\n1001\nAcadAnnotative\n1000\nAnnotativeData\n1002\n{\n1070\n1\n1070\n1\n1002\n}\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n90.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nDIMSTYLE\n105\n242\n330\nA\n100\nAcDbSymbolTableRecord\n100\nAcDbDimStyleTableRecord\n 2\nCivil-Metric\n 70\n0\n 41\n3.0\n 42\n1.5\n 43\n6.0\n 44\n3.0\n 73\n0\n 74\n0\n 77\n1\n 78\n3\n 79\n2\n140\n3.0\n141\n3.0\n147\n2.0\n179\n2\n271\n2\n272\n2\n276\n1\n340\n11\n1001\nACAD_DSTYLE_DIMBREAK\n1070\n391\n1040\n3.0\n1001\nACAD_DSTYLE_DIMJAG\n1070\n388\n1040\n38.0\n1001\nACAD_DSTYLE_DIMTALN\n1070\n392\n1070\n0\n 0\nENDTAB\n 0\nTABLE\n 2\nBLOCK_RECORD\n 5\n1\n330\n0\n100\nAcDbSymbolTable\n 70\n4\n 0\nBLOCK_RECORD\n 5\n1F\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Model_Space\n340\n530\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n58\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n*Paper_Space\n340\n531\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n238\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_ArchTick\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nBLOCK_RECORD\n 5\n23C\n330\n1\n100\nAcDbSymbolTableRecord\n100\nAcDbBlockTableRecord\n 2\n_Open30\n340\n0\n 70\n0\n280\n1\n281\n0\n 0\nENDTAB\n 0\nENDSEC"},dxfBlocks=function(){return" 0\nSECTION\n 2\nBLOCKS\n 0\nBLOCK\n 5\n23A\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_ArchTick\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_ArchTick\n 1\n\n 0\nENDBLK\n 5\n23B\n330\n238\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n20\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Model_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Model_Space\n 1\n\n 0\nENDBLK\n 5\n21\n330\n1F\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n5A\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockBegin\n 2\n*Paper_Space\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n*Paper_Space\n 1\n\n 0\nENDBLK\n 5\n5B\n330\n58\n100\nAcDbEntity\n 67\n1\n 8\n0\n100\nAcDbBlockEnd\n 0\nBLOCK\n 5\n240\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockBegin\n 2\n_Open30\n 70\n0\n 10\n0.0\n 20\n0.0\n 30\n0.0\n 3\n_Open30\n 1\n\n 0\nENDBLK\n 5\n241\n330\n23C\n100\nAcDbEntity\n 8\n0\n100\nAcDbBlockEnd\n 0\nENDSEC"},dxfObjects=function(){return" 0\nSECTION\n 2\nOBJECTS\n 0\nDICTIONARY\n 5\nC\n330\n0\n100\nAcDbDictionary\n281\n1\n 3\nACAD_COLOR\n350\n524\n 3\nACAD_GROUP\n350\n525\n 3\nACAD_LAYOUT\n350\n526\n 3\nACAD_MATERIAL\n350\n527\n 3\nACAD_MLEADERSTYLE\n350\n528\n 3\nACAD_MLINESTYLE\n350\n529\n 3\nACAD_PLOTSETTINGS\n350\n52A\n 3\nACAD_PLOTSTYLENAME\n350\n52C\n 3\nACAD_SCALELIST\n350\n52D\n 3\nACAD_TABLESTYLE\n350\n52E\n 3\nACAD_VISUALSTYLE\n350\n52F\n 0\nDICTIONARY\n 5\n524\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n525\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n526\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nModel\n350\n530\n 3\nLayout1\n350\n531\n 0\nDICTIONARY\n 5\n527\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n528\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n529\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52A\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nACDBPLACEHOLDER\n 5\n52B\n330\n52C\n 0\nACDBDICTIONARYWDFLT\n 5\n52C\n330\nC\n100\nAcDbDictionary\n281\n1\n 3\nNormal\n350\n52B\n100\nAcDbDictionaryWithDefault\n340\n52B\n 0\nDICTIONARY\n 5\n52D\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52E\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nDICTIONARY\n 5\n52F\n330\nC\n100\nAcDbDictionary\n281\n1\n 0\nLAYOUT\n 5\n530\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n14.53\n 70\n11952\n 72\n0\n 73\n1\n 74\n0\n 7\n\n 75\n0\n147\n0.069\n148\n114.98\n149\n300.29\n100\nAcDbLayout\n 1\nModel\n 70\n1\n 71\n0\n 10\n0.0\n 20\n0.0\n 11\n12.0\n 21\n9.0\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.0\n 24\n0.0\n 34\n0.0\n 15\n0.0\n 25\n0.0\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n1F\n 0\nLAYOUT\n 5\n531\n330\n526\n100\nAcDbPlotSettings\n 1\n\n 2\nDWFx ePlot (XPS Compatible).pc3\n 4\nANSI_A_(8.50_x_11.00_Inches)\n 6\n\n 40\n5.8\n 41\n17.8\n 42\n5.8\n 43\n17.8\n 44\n215.9\n 45\n279.4\n 46\n0.0\n 47\n0.0\n 48\n0.0\n 49\n0.0\n140\n0.0\n141\n0.0\n142\n1.0\n143\n1.0\n 70\n688\n 72\n0\n 73\n1\n 74\n5\n 7\nacad.ctb\n 75\n16\n147\n1.0\n148\n0.0\n149\n0.0\n100\nAcDbLayout\n 1\nLayout1\n 70\n1\n 71\n1\n 10\n-0.7\n 20\n-0.23\n 11\n10.3\n 21\n8.27\n 12\n0.0\n 22\n0.0\n 32\n0.0\n 14\n0.63\n 24\n0.8\n 34\n0.0\n 15\n9.0\n 25\n7.2\n 35\n0.0\n146\n0.0\n 13\n0.0\n 23\n0.0\n 33\n0.0\n 16\n1.0\n 26\n0.0\n 36\n0.0\n 17\n0.0\n 27\n1.0\n 37\n0.0\n 76\n0\n330\n58\n 0\nENDSEC"};module.exports={dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects}; },{}],60:[function(require,module,exports){ @@ -315,7 +317,7 @@ const colorIndex=[[0,0,0,255],[255,0,0,255],[255,255,0,255],[0,255,0,255],[0,255 },{}],61:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom3:geom3,geom2:geom2,path2:path2}=geometries,{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{dxfHeaders:dxfHeaders,dxfClasses:dxfClasses,dxfTables:dxfTables,dxfBlocks:dxfBlocks,dxfObjects:dxfObjects}=require("./autocad_AC2017"),colorindex2017=require("./colorindex2017"),mimeType="application/dxf",serialize=(n,...e)=>{const t={geom2To:"lwpolyline",geom3To:"3dface",pathTo:"lwpolyline",statusCallback:null,colorIndex:colorindex2017};if((n=Object.assign({},t,n)).entityId=0,0===(e=(e=flatten(e)).filter(n=>geom3.isA(n)||geom2.isA(n)||path2.isA(n))).length)throw new Error("only JSCAD geometries can be serialized to DXF");return e=toArray(modifiers.generalize({snap:!0,triangulate:!0},e)),[`999\nCreated by JSCAD\n${dxfHeaders(n)}\n${dxfClasses(n)}\n${dxfTables(n)}\n${dxfBlocks(n)}\n${dxfEntities(e,n)}\n${dxfObjects(n)}\n 0\nEOF\n`]},dxfEntities=(n,e)=>{const t=n.map((n,t)=>{if(geom2.isA(n)){const t=n.color,o=n.name,s=geom2.toOutlines(n).map(n=>({closed:!0,points:n,color:t,name:o}));return"polyline"===e.geom2To?PathsToPolyine(s,e):PathsToLwpolyline(s,e)}if(geom3.isA(n))return"polyline"===e.geom3To?PolygonsToPolyline(n,e):PolygonsTo3DFaces(n,e);if(path2.isA(n)){const t=n.color,o=n.name,s={closed:n.isClosed,points:path2.toPoints(n),color:t,name:o};return PathsToLwpolyline([s],e)}return""});let o=" 0\nSECTION\n 2\nENTITIES\n";return t.forEach(n=>{n&&(o+=n)}),o+=" 0\nENDSEC"},PathsToLwpolyline=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{if(o.points.length<1)return;const l=o.points.length+(o.closed?1:0);t+=` 0\nLWPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 67\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDbPolyline\n 90\n${l}\n 70\n${o.closed?1:0}\n`;for(let n=0;n=o.points.length&&(e-=o.points.length);const s=o.points[e];t+=` 10\n${s[0]}\n 20\n${s[1]}\n`}e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PathsToPolyine=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";return n.forEach((o,s)=>{const l=o.points.length+(o.closed?1:0);t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(o,e)}\n 8\n0\n 62\n${getColorNumber(o,e)}\n 100\nAcDb2dPolyline\n`;for(let n=0;n=o.points.length&&(s-=o.points.length);const l=o.points[s];t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb2dVertex\n 10\n${l[0]}\n 20\n${l[1]}\n`}t+=` 0\nSEQEND\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n`,e.statusCallback&&e.statusCallback({progress:100*s/n.length})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},PolygonsTo3DFaces=(n,e)=>{e.statusCallback&&e.statusCallback({progress:0});let t="";const o=geom3.toPolygons(n),s=getColorNumber(n,e);return o.forEach((n,o)=>{const l=n.color?getColorNumber(n,e):s;polygonToTriangles(n).forEach((n,o)=>{t+=triangleTo3DFaces(n,e,l)})}),e.statusCallback&&e.statusCallback({progress:100}),[t]},polygonToTriangles=n=>{const e=n.vertices.length-2;if(e<1)return[];const t=n.vertices[0],o=[];for(let s=0;s{const o=n[0],s=n[1],l=n[2],r=n[2];return` 0\n3DFACE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 62\n${t}\n 100\nAcDbFace\n 70\n0\n 10\n${o[0]}\n 20\n${o[1]}\n 30\n${o[2]}\n 11\n${s[0]}\n 21\n${s[1]}\n 31\n${s[2]}\n 12\n${l[0]}\n 22\n${l[1]}\n 32\n${l[2]}\n 13\n${r[0]}\n 23\n${r[1]}\n 33\n${r[2]}\n`},PolygonsToPolyline=(n,e)=>{let t="";const o=polygons2polyfaces(geom3.toPolygons(n));return o.faces.length>0&&(t+=` 0\nPOLYLINE\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 3\n${getName(n,e)}\n 8\n0\n 62\n${getColorNumber(n,e)}\n 100\nAcDb3dPolyline\n 70\n64\n 71\n${o.vertices.length}\n 72\n${o.faces.length}\n`,o.vertices.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n${n[0]}\n 20\n${n[1]}\n 30\n${n[2]}\n 70\n192\n`}),o.faces.forEach(n=>{t+=` 0\nVERTEX\n 5\n${getEntityId(e)}\n 100\nAcDbEntity\n 8\n0\n 100\nAcDbVertex\n 100\nAcDb3dPolylineVertex\n 10\n0\n 20\n0\n 30\n0\n 70\n128\n 71\n${n[0]}\n 72\n${n[1]}\n 73\n${n[2]}\n 74\n${n[3]}\n`})),[t]},polygons2polyfaces=n=>{const e=[],t=[];for(let o=0;o{n.entityId++;const e="00000"+n.entityId.toString(16).toUpperCase();return"CAD"+e.substr(e.length-5)},getName=(n,e)=>{if(n.name)return n.name;const t="00000"+e.entityId.toString(16).toUpperCase();return"CAD"+t.substr(t.length-5)},getColorNumber=(n,e)=>{let t=256;if(n.color){const o=Math.floor(255*n.color[0]),s=Math.floor(255*n.color[1]),l=Math.floor(255*n.color[2]),r=e.colorIndex;let a=765;for(let n=1;n>3;this._checkSize(r);const i=Math.pow(2,e-1)-1,h=this._readBits(t+e,1,s),d=this._readBits(t,e,s);let o=0,n=2,_=0,a=0;do{const e=this._readByte(++_,s);let r=1<<(a=t%8||8);for(;r>>=1;)e&r&&(o+=1/n),n*=2}while(t-=a);return this._pos+=s,d===1+(i<<1)?o?NaN:h?-1/0:1/0:(1+-2*h)*(d||o?d?Math.pow(2,d-i)*(1+o):Math.pow(2,1-i)*o:0)}_decodeInt(t,e){const r=this._readBits(0,t,t/8),s=Math.pow(2,t),i=e&&r>=s/2?r-s:r;return this._pos+=t/8,i}_shl(t,e){for(++e;--e;t=1073741824==(1073741824&(t%=2147483648))?2*t:2*(t-1073741824)+2147483647+1);return t}_readByte(t,e){return 255&this._buffer.charCodeAt(this._pos+e-t-1)}_readBits(t,e,r){const s=(t+e)%8,i=t%8,h=r-(t>>3)-1;let d=r+(-(t+e)>>3),o=h-d,n=this._readByte(h,r)>>i&(1<<(o?8-i:e))-1;for(o&&s&&(n+=(this._readByte(d++,r)&(1<{"string"==typeof e?this.length+=e.length:e instanceof ArrayBuffer&&(this.length+=e.byteLength)}),t.type&&(this.type=t.type.toLowerCase()),t.endings,t.encoding&&(this.encoding=t.encoding.toLowerCase()),t.length&&(this.length=t.length),this.buffer=Buffer.allocUnsafe(this.length);for(let t=0;t{const{data:e,mimeType:l}=o;return new Blob(e,{type:l})};module.exports=convertToBlob; -},{"./makeBlob":66}],65:[function(require,module,exports){ -module.exports={convertToBlob:require("./convertToBlob"),makeBlob:require("./makeBlob"),BinaryReader:require("./BinaryReader"),Blob:require("./Blob")}; +},{"./makeBlob":67}],65:[function(require,module,exports){ +const ensureString=(e,n="utf-8")=>"string"==typeof e?e:new TextDecoder(n).decode(new Uint8Array(e));module.exports=ensureString; -},{"./BinaryReader":62,"./Blob":63,"./convertToBlob":64,"./makeBlob":66}],66:[function(require,module,exports){ +},{}],66:[function(require,module,exports){ +module.exports={convertToBlob:require("./convertToBlob"),makeBlob:require("./makeBlob"),BinaryReader:require("./BinaryReader"),Blob:require("./Blob"),ensureString:require("./ensureString")}; + +},{"./BinaryReader":62,"./Blob":63,"./convertToBlob":64,"./ensureString":65,"./makeBlob":67}],67:[function(require,module,exports){ const nodeBlob=require("./Blob.js"),makeBlob=()=>{return"undefined"!=typeof window?window.Blob:nodeBlob};module.exports=makeBlob; -},{"./Blob.js":63}],67:[function(require,module,exports){ +},{"./Blob.js":63}],68:[function(require,module,exports){ const amfDeSerializer=require("@jscad/amf-deserializer"),dxfDeSerializer=require("@jscad/dxf-deserializer"),jsonDeSerializer=require("@jscad/json-deserializer"),objDeSerializer=require("@jscad/obj-deserializer"),stlDeSerializer=require("@jscad/stl-deserializer"),svgDeSerializer=require("@jscad/svg-deserializer"),x3dDeSerializer=require("@jscad/x3d-deserializer"),deserializers={};deserializers[amfDeSerializer.extension]=amfDeSerializer.deserialize,deserializers[dxfDeSerializer.extension]=dxfDeSerializer.deserialize,deserializers[jsonDeSerializer.extension]=jsonDeSerializer.deserialize,deserializers[objDeSerializer.extension]=objDeSerializer.deserialize,deserializers[stlDeSerializer.extension]=stlDeSerializer.deserialize,deserializers[svgDeSerializer.extension]=svgDeSerializer.deserialize,deserializers[x3dDeSerializer.extension]=x3dDeSerializer.deserialize,module.exports=deserializers; -},{"@jscad/amf-deserializer":45,"@jscad/dxf-deserializer":55,"@jscad/json-deserializer":71,"@jscad/obj-deserializer":74,"@jscad/stl-deserializer":77,"@jscad/svg-deserializer":89,"@jscad/x3d-deserializer":104}],68:[function(require,module,exports){ +},{"@jscad/amf-deserializer":45,"@jscad/dxf-deserializer":55,"@jscad/json-deserializer":72,"@jscad/obj-deserializer":75,"@jscad/stl-deserializer":78,"@jscad/svg-deserializer":90,"@jscad/x3d-deserializer":105}],69:[function(require,module,exports){ const{geometries:geometries}=require("@jscad/modeling"),formats={stl:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!0,convertGeom3:!1,convertGeom2:!1},stla:{displayName:"STL (ASCII)",description:"STereoLithography, ASCII",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},stlb:{displayName:"STL (Binary)",description:"STereoLithography, Binary",extension:"stl",mimetype:"application/sla",deserializable:!1,convertGeom3:!0,convertGeom2:!1},amf:{displayName:"AMF (experimental)",description:"Additive Manufacturing File Format",extension:"amf",mimetype:"application/amf+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!1},dxf:{displayName:"DXF (ASCII)",description:"AutoCAD Drawing Exchange Format",extension:"dxf",mimetype:"application/dxf",deserializable:!0,convertGeom3:!0,convertGeom2:!0},jscad:{displayName:"JSCAD",description:"JSCAD Design Source",extension:"jscad",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},json:{displayName:"json",description:"JavaScript Object Notation Format",extension:"json",mimetype:"application/json",deserializable:!0,convertGeom3:!0,convertGeom2:!0},js:{displayName:"js",description:"JavaScript Source",extension:"js",mimetype:"application/javascript",deserializable:!0,convertGeom3:!0,convertGeom2:!0},obj:{displayName:"OBJ",description:"Wavefront OBJ File",extension:"obj",mimetype:"text/plain",deserializable:!0,convertGeom3:!0,convertGeom2:!1},svg:{displayName:"SVG",description:"Scalable Vector Graphics Format",extension:"svg",mimetype:"image/svg+xml",deserializable:!0,convertGeom3:!1,convertGeom2:!0},x3d:{displayName:"X3D",description:"X3D File Format",extension:"x3d",mimetype:"model/x3d+xml",deserializable:!0,convertGeom3:!0,convertGeom2:!0},"3mf":{displayName:"3MF",description:"3D Manufacturing Format",extension:"3mf",mimetype:"model/3mf",deserializable:!1,convertGeom3:!0,convertGeom2:!1}},conversionFormats=["amf","js","jscad","obj","scad","stl","dxf","svg","ttf","woff"],supportedFormatsForObjects=e=>{const o=[];let t=!1,s=!1;for(let o=0;o{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.indexOf(formats[o].extension)<0&&e.push(formats[o].extension);return e},supportedOutputFormats=()=>{const e=[];for(const o in formats)!0!==formats[o].convertGeom3&&!0!==formats[o].convertGeom2||e.push(o);return e},supportedInputExtensions=()=>{const e=[];for(const o in formats)!0===formats[o].deserializable&&e.push(formats[o].extension);return e};module.exports={formats:formats,conversionFormats:conversionFormats,supportedInputExtensions:supportedInputExtensions,supportedOutputExtensions:supportedOutputExtensions,supportedOutputFormats:supportedOutputFormats,supportedFormatsForObjects:supportedFormatsForObjects}; -},{"@jscad/modeling":211}],69:[function(require,module,exports){ +},{"@jscad/modeling":212}],70:[function(require,module,exports){ const{makeBlob:makeBlob,convertToBlob:convertToBlob}=require("@jscad/io-utils"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=require("./prepareOutput"),deserializers=require("./deserializers"),solidsAsBlob=(e,r)=>convertToBlob(prepareOutput(e,r));module.exports={makeBlob:makeBlob,solidsAsBlob:solidsAsBlob,amfSerializer:amfSerializer,dxfSerializer:dxfSerializer,jsonSerializer:jsonSerializer,objSerializer:objSerializer,stlSerializer:stlSerializer,svgSerializer:svgSerializer,x3dSerializer:x3dSerializer,m3fSerializer:m3fSerializer,deserializers:deserializers}; -},{"./deserializers":67,"./prepareOutput":70,"@jscad/3mf-serializer":36,"@jscad/amf-serializer":49,"@jscad/dxf-serializer":61,"@jscad/io-utils":65,"@jscad/json-serializer":73,"@jscad/obj-serializer":76,"@jscad/stl-serializer":81,"@jscad/svg-serializer":93,"@jscad/x3d-serializer":119}],70:[function(require,module,exports){ +},{"./deserializers":68,"./prepareOutput":71,"@jscad/3mf-serializer":36,"@jscad/amf-serializer":49,"@jscad/dxf-serializer":61,"@jscad/io-utils":66,"@jscad/json-serializer":74,"@jscad/obj-serializer":77,"@jscad/stl-serializer":82,"@jscad/svg-serializer":94,"@jscad/x3d-serializer":120}],71:[function(require,module,exports){ const{toArray:toArray}=require("@jscad/array-utils"),{formats:formats}=require("./formats"),amfSerializer=require("@jscad/amf-serializer"),dxfSerializer=require("@jscad/dxf-serializer"),jsonSerializer=require("@jscad/json-serializer"),objSerializer=require("@jscad/obj-serializer"),stlSerializer=require("@jscad/stl-serializer"),svgSerializer=require("@jscad/svg-serializer"),x3dSerializer=require("@jscad/x3d-serializer"),m3fSerializer=require("@jscad/3mf-serializer"),prepareOutput=(e,r)=>{const i={format:void 0,version:"0.0.0"},{format:a,version:s}=Object.assign({},i,r),l={producer:"JSCAD "+s,date:new Date,version:s},t={amf:amfSerializer,stl:stlSerializer,stla:{mimeType:stlSerializer.mimeType,serialize:(e,r)=>stlSerializer.serialize(Object.assign({},{binary:!1},e),r)},stlb:stlSerializer,dxf:dxfSerializer,obj:objSerializer,svg:svgSerializer,x3d:x3dSerializer,"3mf":m3fSerializer,json:jsonSerializer,js:{mimeType:formats.js.mimetype,serialize:(e,r)=>toArray(r)},jscad:{mimeType:formats.jscad.mimetype,serialize:(e,r)=>toArray(r)},undefined:()=>{throw new Error("Not supported : only jscad, stl, amf, dxf, svg or json as output format")}},o=Object.assign({},l,r);return{data:t[a].serialize(o,e),mimeType:t[a].mimeType}};module.exports=prepareOutput; -},{"./formats":68,"@jscad/3mf-serializer":36,"@jscad/amf-serializer":49,"@jscad/array-utils":527,"@jscad/dxf-serializer":61,"@jscad/json-serializer":73,"@jscad/obj-serializer":76,"@jscad/stl-serializer":81,"@jscad/svg-serializer":93,"@jscad/x3d-serializer":119}],71:[function(require,module,exports){ -const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"json",output:"script",version:version,addMetaData:!0};e=Object.assign({},n,e);let r=JSON.parse(t);return r=flatten(toArray(r)),"script"===e.output?translate(e,r):r},translate=(e,t)=>{const{addMetaData:n,filename:r,version:s}=e;let a=n?`//\n// Produced by JSCAD IO Library : JSON Deserializer (${s})\n// date: ${new Date}\n// source: ${r}\n//\n`:"";return a+=`\nconst { geometries } = require('@jscad/modeling')\n\nconst main = () => {\n const objects = [${translateToList(t)} ]\n return objects\n}\n\n${translateToObjects(t)}\n\nmodule.exports = { main }\n`},translateToList=e=>e.reduce((e,t,n)=>e+` json${n},`,""),translateToObjects=e=>e.reduce((e,t,n)=>e+translateToObject(t,n),""),translateToObject=(e,t)=>`const json${t} = ${JSON.stringify(e)}\n`,extension="json";module.exports={deserialize:deserialize,extension:"json"}; +},{"./formats":69,"@jscad/3mf-serializer":36,"@jscad/amf-serializer":49,"@jscad/array-utils":528,"@jscad/dxf-serializer":61,"@jscad/json-serializer":74,"@jscad/obj-serializer":77,"@jscad/stl-serializer":82,"@jscad/svg-serializer":94,"@jscad/x3d-serializer":120}],72:[function(require,module,exports){ +const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"json",output:"script",version:version,addMetaData:!0};e=Object.assign({},n,e),t=ensureString(t);let r=JSON.parse(t);return r=flatten(toArray(r)),"script"===e.output?translate(e,r):r},translate=(e,t)=>{const{addMetaData:n,filename:r,version:s}=e;let a=n?`//\n// Produced by JSCAD IO Library : JSON Deserializer (${s})\n// date: ${new Date}\n// source: ${r}\n//\n`:"";return a+=`\nconst { geometries } = require('@jscad/modeling')\n\nconst main = () => {\n const objects = [${translateToList(t)} ]\n return objects\n}\n\n${translateToObjects(t)}\n\nmodule.exports = { main }\n`},translateToList=e=>e.reduce((e,t,n)=>e+` json${n},`,""),translateToObjects=e=>e.reduce((e,t,n)=>e+translateToObject(t,n),""),translateToObject=(e,t)=>`const json${t} = ${JSON.stringify(e)}\n`,extension="json";module.exports={deserialize:deserialize,extension:"json"}; -},{"./package.json":72,"@jscad/array-utils":527}],72:[function(require,module,exports){ +},{"./package.json":73,"@jscad/array-utils":528,"@jscad/io-utils":66}],73:[function(require,module,exports){ module.exports={ "name": "@jscad/json-deserializer", - "version": "2.0.29", + "version": "2.0.30", "description": "JSON Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -378,26 +383,27 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/array-utils": "2.1.4" + "@jscad/array-utils": "2.1.4", + "@jscad/io-utils": "2.0.29" }, "devDependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "ava": "3.15.0", "nyc": "15.1.0" }, "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],73:[function(require,module,exports){ +},{}],74:[function(require,module,exports){ const{utils:utils}=require("@jscad/modeling"),replacer=(r,s)=>{switch(r){case"transforms":case"plane":return Array.from(s);case"points":case"vertices":return s.map(r=>Array.from(r));case"sides":return s.map(r=>[Array.from(r[0]),Array.from(r[1])])}return s},serialize=(r,...s)=>{r=Object.assign({},{statusCallback:null},r),s=utils.flatten(s),r.statusCallback&&r.statusCallback({progress:0});const e=JSON.stringify(s,replacer);return r.statusCallback&&r.statusCallback({progress:100}),[e]},mimeType="application/json";module.exports={serialize:serialize,mimeType:mimeType}; -},{"@jscad/modeling":211}],74:[function(require,module,exports){ -const{colors:colors,primitives:primitives}=require("@jscad/modeling"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"obj",output:"script",orientation:"outward",version:version,addMetaData:!0};e=Object.assign({},n,e);const{output:s}=e;e&&e.statusCallback&&e.statusCallback({progress:0});const{positions:o,groups:r}=getGroups(t,e),a="script"===s?stringify(o,r,e):objectify(o,r,e);return e&&e.statusCallback&&e.statusCallback({progress:100}),a},getGroups=(e,t)=>{let n=[];const s=[];let o=null;n.push({faces:[],colors:[],name:"default",line:0});const r=(e,t)=>{const s={faces:[],colors:[],name:""};t&&t.length>0&&(s.name=t.join(" ")),n.push(s)},a=(e,t)=>{const n=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]);s.push([n,o,r])},l=(e,t)=>{const r=t.map(e=>{const t=e.match(/[0-9+\-eE]+/g);let n=parseInt(t[0]);return n<0?n=s.length+n:n--,n}),a=n.pop();a.faces.push(r),a.colors.push(o),n.push(a)},i=(e,t)=>{if(o=null,t&&t.length>0){const e=colors.colorNameToRgb(t[0]);e&&(o=[e[0],e[1],e[2],1])}},c=e.split(/\n/);for(let e=0;e0){let e=t.match(/\S+/g);if(e){const t=e[0];switch(e=e.slice(1),t){case"g":r(0,e);break;case"v":a(0,e);break;case"f":l(0,e);break;case"usemtl":i(0,e)}}}}return n=n.filter(e=>e.faces.length>0),{positions:s,groups:n}},objectify=(e,t,n)=>{return t.map(t=>primitives.polyhedron({orientation:n.orientation,points:e,faces:t.faces,colors:t.colors}))},translatePoints=e=>{let t=" let points = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateFaces=e=>{let t=" let faces = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateColors=e=>{let t=" let colors = [\n";return e.forEach(e=>{t+=e?` [${e}],\n`:" null,\n"}),t+=" ]"},translateGroupsToCalls=e=>{let t="";return e.forEach((e,n)=>t+=` group${n}(points), // ${e.name}\n`),t},translateGroupsToFunctions=(e,t)=>{let n="";return e.forEach((e,s)=>{const o=e.faces,r=e.colors;n+=`\n// group : ${e.name}\n// faces: ${o.length}\n`,n+=`const group${s} = (points) => {\n${translateFaces(o)}\n${translateColors(r)}\n return primitives.polyhedron({ orientation: '${t.orientation}', points, faces, colors })\n}\n`}),n},stringify=(e,t,n)=>{const{filename:s,addMetaData:o,version:r}=n;let a=o?`//\n// Produced by JSCAD IO Library : OBJ Deserializer (${r})\n// date: ${new Date}\n// source: ${s}\n//\n `:"";return a+=`const {primitives} = require('@jscad/modeling')\n\n// groups: ${t.length}\n// points: ${e.length}\nconst main = () => {\n // points are common to all geometries\n${translatePoints(e)}\n\n let geometries = [\n${translateGroupsToCalls(t)} ]\n return geometries\n}\n\n${translateGroupsToFunctions(t,n)}\nmodule.exports = {main}\n`},extension="obj";module.exports={deserialize:deserialize,extension:"obj"}; +},{"@jscad/modeling":212}],75:[function(require,module,exports){ +const{colors:colors,primitives:primitives}=require("@jscad/modeling"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("./package.json").version,deserialize=(e,t)=>{const n={filename:"obj",output:"script",orientation:"outward",version:version,addMetaData:!0};e=Object.assign({},n,e);const{output:s}=e;t=ensureString(t),e&&e.statusCallback&&e.statusCallback({progress:0});const{positions:o,groups:r}=getGroups(t,e),a="script"===s?stringify(o,r,e):objectify(o,r,e);return e&&e.statusCallback&&e.statusCallback({progress:100}),a},getGroups=(e,t)=>{let n=[];const s=[];let o=null;n.push({faces:[],colors:[],name:"default",line:0});const r=(e,t)=>{const s={faces:[],colors:[],name:""};t&&t.length>0&&(s.name=t.join(" ")),n.push(s)},a=(e,t)=>{const n=parseFloat(t[0]),o=parseFloat(t[1]),r=parseFloat(t[2]);s.push([n,o,r])},i=(e,t)=>{const r=t.map(e=>{const t=e.match(/[0-9+\-eE]+/g);let n=parseInt(t[0]);return n<0?n=s.length+n:n--,n}),a=n.pop();a.faces.push(r),a.colors.push(o),n.push(a)},l=(e,t)=>{if(o=null,t&&t.length>0){const e=colors.colorNameToRgb(t[0]);e&&(o=[e[0],e[1],e[2],1])}},c=e.split(/\n/);for(let e=0;e0){let e=t.match(/\S+/g);if(e){const t=e[0];switch(e=e.slice(1),t){case"g":r(0,e);break;case"v":a(0,e);break;case"f":i(0,e);break;case"usemtl":l(0,e)}}}}return n=n.filter(e=>e.faces.length>0),{positions:s,groups:n}},objectify=(e,t,n)=>{return t.map(t=>primitives.polyhedron({orientation:n.orientation,points:e,faces:t.faces,colors:t.colors}))},translatePoints=e=>{let t=" let points = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateFaces=e=>{let t=" let faces = [\n";return e.forEach(e=>t+=` [${e}],\n`),t+=" ]"},translateColors=e=>{let t=" let colors = [\n";return e.forEach(e=>{t+=e?` [${e}],\n`:" null,\n"}),t+=" ]"},translateGroupsToCalls=e=>{let t="";return e.forEach((e,n)=>t+=` group${n}(points), // ${e.name}\n`),t},translateGroupsToFunctions=(e,t)=>{let n="";return e.forEach((e,s)=>{const o=e.faces,r=e.colors;n+=`\n// group : ${e.name}\n// faces: ${o.length}\n`,n+=`const group${s} = (points) => {\n${translateFaces(o)}\n${translateColors(r)}\n return primitives.polyhedron({ orientation: '${t.orientation}', points, faces, colors })\n}\n`}),n},stringify=(e,t,n)=>{const{filename:s,addMetaData:o,version:r}=n;let a=o?`//\n// Produced by JSCAD IO Library : OBJ Deserializer (${r})\n// date: ${new Date}\n// source: ${s}\n//\n `:"";return a+=`const {primitives} = require('@jscad/modeling')\n\n// groups: ${t.length}\n// points: ${e.length}\nconst main = () => {\n // points are common to all geometries\n${translatePoints(e)}\n\n let geometries = [\n${translateGroupsToCalls(t)} ]\n return geometries\n}\n\n${translateGroupsToFunctions(t,n)}\nmodule.exports = {main}\n`},extension="obj";module.exports={deserialize:deserialize,extension:"obj"}; -},{"./package.json":75,"@jscad/modeling":211}],75:[function(require,module,exports){ +},{"./package.json":76,"@jscad/io-utils":66,"@jscad/modeling":212}],76:[function(require,module,exports){ module.exports={ "name": "@jscad/obj-deserializer", - "version": "2.0.28", + "version": "2.0.29", "description": "OBJ Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -429,7 +435,8 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3" + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4" }, "devDependencies": { "ava": "3.15.0", @@ -438,16 +445,16 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],76:[function(require,module,exports){ +},{}],77:[function(require,module,exports){ const{colors:colors,geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),mimeType="application/object",serialize=(e,...t)=>{e=Object.assign({},{statusCallback:null,triangulate:!0},e);let o=(t=flatten(t)).filter(e=>geometries.geom3.isA(e));if(0===o.length)throw new Error("only 3D geometries can be serialized to OBJ");t.length!==o.length&&console.warn("some objects could not be serialized to OBJ"),o=toArray(modifiers.generalize({snap:!0,triangulate:e.triangulate},o)),e.statusCallback&&e.statusCallback({progress:0});let r="# Wavefront OBJ file generated by JSCAD\n";const s=[];let a="default";return o.forEach((t,l)=>{e.statusCallback&&e.statusCallback({progress:100*l/o.length}),r+="\n";const i=getColorName(t),n=geometries.geom3.toPolygons(t).filter(e=>e.vertices.length>=3);n.forEach(e=>{e.vertices.forEach(e=>{const t=convertVertex(e);s.indexOf(t)<0&&(s.push(t),r+=`${t}\n`)})}),r+="\n",n.forEach(e=>{const t=e.vertices.map(e=>s.indexOf(convertVertex(e))+1),o=getColorName(e)||i||"default";o!==a&&(r+=`usemtl ${o}\n`,a=o),r+=`f ${t.join(" ")}\n`})}),e.statusCallback&&e.statusCallback({progress:100}),[r]},convertVertex=e=>`v ${e[0]} ${e[1]} ${e[2]}`,getColorName=e=>{let t;if(e.color){const o=e.color[0],r=e.color[1],s=e.color[2];let a=765;for(const e in colors.cssColors){const l=colors.cssColors[e],i=Math.abs(o-l[0])+Math.abs(r-l[1])+Math.abs(s-l[2]);if(i{const t={filename:"stl",version:packageVersion,addMetaData:!0,output:"script"};(e=Object.assign({},t,e))&&e.statusCallback&&e.statusCallback({progress:0});const{filename:r,version:a,output:n,addMetaData:o}=e;s=isBuffer(s)?bufferToBinaryString(s):s;const l=isDataBinaryRobust(s);e&&e.statusCallback&&e.statusCallback({progress:33});e&&e.statusCallback&&e.statusCallback({progress:66});const i=("script"===n?formatAsJscad:formatAsCsg)((l?deserializeBinarySTL:deserializeAsciiSTL)(s,r,a,"script"===n?({vertices:e,triangles:s,normals:t,colors:r,index:a})=>toScript(e,s,null,r,a):({vertices:e,triangles:s,normals:t,colors:r})=>toPolyhedron(e,s,null,r)),o,a,r);return e&&e.statusCallback&&e.statusCallback({progress:100}),i},bufferToBinaryString=e=>{let s="";const t=new Uint8Array(e),r=t.byteLength;for(let e=0;evoid 0!==e.byteLength&&"function"==typeof e.slice,ensureString=e=>{if("string"!=typeof e){const s=new Uint8Array(e);let t="";for(let r=0;r{const s=ensureString(e);return null===/vertex[\s]+([-+]?[0-9]+\.?[0-9]*([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+[\s]+([-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)+/g.exec(s)},formatAsJscad=(e,s,t,r)=>{let a="";return s&&(a=`\n //\n // producer: JSCAD STL Deserializer ${t}\n // date: ${new Date}\n // source: ${r}\n // objects: ${e.length}\n //\n `),a+="const {primitives} = require('@jscad/modeling')\n",a+=e.join("\n"),a+=`\nconst main = () => {\n return [${e.map((e,s)=>`solid${s+1}()`)}]\n}\n\nmodule.exports = {main}\n`},formatAsCsg=e=>e,deserializeBinarySTL=(e,s,t,r)=>{const a=[],n=[],o=[],l=[];let i=0,c=0,u=null;const p=parseInt("01000000000000000",2),h=parseInt("00000000000011111",2),d=parseInt("00000001111100000",2),g=parseInt("00111110000000000",2),m=new BinaryReader(e);let f=0,v=0,b=0,S=0,F=0,y=0;for(let e=0;e<80;e++)switch(f){case 6:b=m.readUInt8(),f+=1;continue;case 7:S=m.readUInt8(),f+=1;continue;case 8:F=m.readUInt8(),f+=1;continue;case 9:y=m.readUInt8(),f+=1;continue;default:switch(v=m.readChar()){case"C":case"O":case"L":case"R":case"=":f+=1}}10===f&&(u=[b/255,S/255,F/255,y/255]);const C=m.readUInt32();for(let e=0;e0&&console.log("bad triangle vertice coords/normal: ",v),c+=v;const b=[];b.push(i++),b.push(i++),b.push(i++);const S=m.readUInt16();let F=null;if(10===f){const e=(S&h)/31,s=((S&d)>>>5)/31,t=((S&g)>>>10)/31,r=255;F=0===(S&p)?[e,s,t,r]:u,l.push(F)}if(0===v){const a=maths.vec3.subtract(maths.vec3.create(),t,s),n=maths.vec3.subtract(maths.vec3.create(),r,s),o=maths.vec3.cross(maths.vec3.create(),a,n);if(maths.vec3.dot(e,o)>0){const e=r;r=s,s=e}}a.push(s),a.push(t),a.push(r),n.push(b),o.push(e)}return c&&console.warn(`WARNING: import errors: ${c} (some triangles might be misaligned or missing)`),[r({vertices:a,triangles:n,normals:o,colors:l,index:1})]},deserializeAsciiSTL=(e,s,t,r)=>{let a=0;const n=e.split("endsolid"),o=[];for(let s=1;s0){const e=g;g=c,c=e}}n.push(c),n.push(d),n.push(g),i.push(o),l.push(m),a++}p&&console.warn(`WARNING: import errors: ${p} (some triangles might be misaligned or missing)`),o.push(r({vertices:n,triangles:l,colors:c,index:s}))}}return o},toPolyhedron=(e,s,t,r)=>{r&&s.length!==r.length&&(r=void 0);const a={orientation:"inward",points:e,faces:s,colors:r};return primitives.polyhedron(a)},toScript=(e,s,t,r,a)=>{let n=`\n//\n// solid ${a} : ${e.length} points, ${s.length} faces, ${r.length} colors\n//\nconst solid${a} = () => {\n`;n+=" const points = [\n";for(let s=0;s{e.statusCallback&&e.statusCallback({progress:0});const o=`solid JSCAD\n${convertToStl(t,e)}\nendsolid JSCAD\n`;return e.statusCallback&&e.statusCallback({progress:100}),[o]},convertToStl=(t,e)=>{const o=[];return t.forEach((r,n)=>{o.push(convertToFacets(r,e)),e.statusCallback&&e.statusCallback({progress:100*n/t.length})}),o.join("\n")},convertToFacets=(t,e)=>{const o=[];return geometries.geom3.toPolygons(t).forEach((t,e)=>{o.push(convertToFacet(t))}),o.join("\n")},vector3DtoStlString=t=>`${t[0]} ${t[1]} ${t[2]}`,vertextoStlString=t=>`vertex ${vector3DtoStlString(t)}`,convertToFacet=t=>{const e=[];if(t.vertices.length>=3){const o=vertextoStlString(t.vertices[0]);for(let r=0;r{r.statusCallback&&r.statusCallback({progress:0});const t=new ArrayBuffer(4),s=new Int32Array(t,0,1),a=new Int8Array(t,0,4);if(s[0]=287454020,68!==a[0])throw new Error("Binary STL output is currently only supported on little-endian (Intel) processors");let n=0,o=0;e.forEach((e,r)=>{geometries.geom3.toPolygons(e).forEach(e=>{const r=e.vertices.length;n+=r>=3?r-2:0,o+=1})});const l=new Uint8Array(80);for(let e=0;e<80;e++)l[e]=65;const i=new Uint32Array(1);i[0]=n;const c=new ArrayBuffer(50*n),y=new Int8Array(c),f=new ArrayBuffer(50),u=new Int8Array(f),g=new Float32Array(f,0,12),w=new Uint16Array(f,48,1);let A=0;return e.forEach(e=>{geometries.geom3.toPolygons(e).forEach((e,t)=>{const s=e.vertices,a=s.length,n=geometries.poly3.plane(e);for(let e=0;e0?e:0)];g[r++]=a[0],g[r++]=a[1],g[r++]=a[2]}w[0]=0,y.set(u,A),A+=50}r.statusCallback&&r.statusCallback({progress:100*t/o})})}),r.statusCallback&&r.statusCallback({progress:100}),[l.buffer,i.buffer,c]};module.exports={serializeBinary:serializeBinary}; -},{"@jscad/modeling":211}],81:[function(require,module,exports){ +},{"@jscad/modeling":212}],82:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{serializeBinary:serializeBinary}=require("./CSGToStlb"),{serializeText:serializeText}=require("./CSGToStla"),mimeType="application/sla",serialize=(e,...i)=>{e=Object.assign({},{binary:!0,statusCallback:null},e);let r=(i=flatten(i)).filter(e=>geometries.geom3.isA(e));if(0===r.length)throw new Error("only 3D geometries can be serialized to STL");return i.length!==r.length&&console.warn("some objects could not be serialized to STL"),r=toArray(modifiers.generalize({snap:!0,triangulate:!0},r)),e.binary?serializeBinary(r,e):serializeText(r,e)};module.exports={mimeType:mimeType,serialize:serialize}; -},{"./CSGToStla":79,"./CSGToStlb":80,"@jscad/array-utils":527,"@jscad/modeling":211}],82:[function(require,module,exports){ +},{"./CSGToStla":80,"./CSGToStlb":81,"@jscad/array-utils":528,"@jscad/modeling":212}],83:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],83:[function(require,module,exports){ +},{}],84:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="-퟿-�𐀀-􏿿",exports.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.RESTRICTED_CHAR_RE=new RegExp("^["+exports.RESTRICTED_CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isRestrictedChar(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}function isCharAndNotRestricted(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isRestrictedChar=isRestrictedChar,exports.isCharAndNotRestricted=isCharAndNotRestricted,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],84:[function(require,module,exports){ +},{}],85:[function(require,module,exports){ "use strict";function isNCNameStartChar(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNCNameChar(e){return isNCNameStartChar(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}Object.defineProperty(exports,"__esModule",{value:!0}),exports.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NC_NAME_CHAR="-"+exports.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.NC_NAME_START_CHAR_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]$","u"),exports.NC_NAME_CHAR_RE=new RegExp("^["+exports.NC_NAME_CHAR+"]$","u"),exports.NC_NAME_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]["+exports.NC_NAME_CHAR+"]*$","u"),exports.isNCNameStartChar=isNCNameStartChar,exports.isNCNameChar=isNCNameChar; -},{}],85:[function(require,module,exports){ +},{}],86:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ed5=require("xmlchars/xml/1.0/ed5"),ed2=require("xmlchars/xml/1.1/ed2"),NSed3=require("xmlchars/xmlns/1.0/ed3");var isS=ed5.isS,isChar10=ed5.isChar,isNameStartChar=ed5.isNameStartChar,isNameChar=ed5.isNameChar,S_LIST=ed5.S_LIST,NAME_RE=ed5.NAME_RE,isChar11=ed2.isChar,isNCNameStartChar=NSed3.isNCNameStartChar,isNCNameChar=NSed3.isNCNameChar,NC_NAME_RE=NSed3.NC_NAME_RE;const XML_NAMESPACE="http://www.w3.org/XML/1998/namespace",XMLNS_NAMESPACE="http://www.w3.org/2000/xmlns/",rootNS={__proto__:null,xml:XML_NAMESPACE,xmlns:XMLNS_NAMESPACE},XML_ENTITIES={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},EOC=-1,NL_LIKE=-2,S_BEGIN=0,S_BEGIN_WHITESPACE=1,S_DOCTYPE=2,S_DOCTYPE_QUOTE=3,S_DTD=4,S_DTD_QUOTED=5,S_DTD_OPEN_WAKA=6,S_DTD_OPEN_WAKA_BANG=7,S_DTD_COMMENT=8,S_DTD_COMMENT_ENDING=9,S_DTD_COMMENT_ENDED=10,S_DTD_PI=11,S_DTD_PI_ENDING=12,S_TEXT=13,S_ENTITY=14,S_OPEN_WAKA=15,S_OPEN_WAKA_BANG=16,S_COMMENT=17,S_COMMENT_ENDING=18,S_COMMENT_ENDED=19,S_CDATA=20,S_CDATA_ENDING=21,S_CDATA_ENDING_2=22,S_PI_FIRST_CHAR=23,S_PI_REST=24,S_PI_BODY=25,S_PI_ENDING=26,S_XML_DECL_NAME_START=27,S_XML_DECL_NAME=28,S_XML_DECL_EQ=29,S_XML_DECL_VALUE_START=30,S_XML_DECL_VALUE=31,S_XML_DECL_SEPARATOR=32,S_XML_DECL_ENDING=33,S_OPEN_TAG=34,S_OPEN_TAG_SLASH=35,S_ATTRIB=36,S_ATTRIB_NAME=37,S_ATTRIB_NAME_SAW_WHITE=38,S_ATTRIB_VALUE=39,S_ATTRIB_VALUE_QUOTED=40,S_ATTRIB_VALUE_CLOSED=41,S_ATTRIB_VALUE_UNQUOTED=42,S_CLOSE_TAG=43,S_CLOSE_TAG_SAW_WHITE=44,TAB=9,NL=10,CR=13,SPACE=32,BANG=33,DQUOTE=34,AMP=38,SQUOTE=39,MINUS=45,FORWARD_SLASH=47,SEMICOLON=59,LESS=60,EQUAL=61,GREATER=62,QUESTION=63,OPEN_BRACKET=91,CLOSE_BRACKET=93,NEL=133,LS=8232,isQuote=t=>34===t||39===t,QUOTES=[34,39],DOCTYPE_TERMINATOR=[...QUOTES,OPEN_BRACKET,GREATER],DTD_TERMINATOR=[...QUOTES,LESS,CLOSE_BRACKET],XML_DECL_NAME_TERMINATOR=[EQUAL,QUESTION,...S_LIST],ATTRIB_VALUE_UNQUOTED_TERMINATOR=[...S_LIST,GREATER,AMP,LESS];function nsPairCheck(t,s,e){switch(s){case"xml":e!==XML_NAMESPACE&&t.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);break;case"xmlns":e!==XMLNS_NAMESPACE&&t.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`)}switch(e){case XMLNS_NAMESPACE:t.fail(""===s?`the default namespace may not be set to ${e}.`:`may not assign a prefix (even "xmlns") to the URI ${XMLNS_NAMESPACE}.`);break;case XML_NAMESPACE:switch(s){case"xml":break;case"":t.fail(`the default namespace may not be set to ${e}.`);break;default:t.fail("may not assign the xml namespace to another prefix.")}}}function nsMappingCheck(t,s){for(const e of Object.keys(s))nsPairCheck(t,e,s[e])}const isNCName=t=>NC_NAME_RE.test(t),isName=t=>NAME_RE.test(t),FORBIDDEN_START=0,FORBIDDEN_BRACKET=1,FORBIDDEN_BRACKET_BRACKET=2;exports.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const EVENT_NAME_TO_HANDLER_NAME={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class SaxesParser{constructor(t){this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;const s=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,s){this.nameStartCheck=isNCNameStartChar,this.nameCheck=isNCNameChar,this.isName=isNCName,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},rootNS);const t=this.opt.additionalNamespaces;null!=t&&(nsMappingCheck(this,t),Object.assign(this.ns,t))}else this.nameStartCheck=isNameStartChar,this.nameCheck=isNameChar,this.isName=isName,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var t;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=FORBIDDEN_START,this.attribList=[];const{fragmentOpt:s}=this;this.state=s?S_TEXT:S_BEGIN,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=s,this.xmlDeclPossible=!s,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:e}=this.opt;if(void 0===e){if(!0===this.opt.forceXMLVersion)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");e="1.0"}this.setXMLVersion(e),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(XML_ENTITIES),null===(t=this.readyHandler)||void 0===t||t.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(t,s){this[EVENT_NAME_TO_HANDLER_NAME[t]]=s}off(t){this[EVENT_NAME_TO_HANDLER_NAME[t]]=void 0}makeError(t){var s;let e=null!==(s=this.fileName)&&void 0!==s?s:"";return this.trackPosition&&(e.length>0&&(e+=":"),e+=`${this.line}:${this.column}`),e.length>0&&(e+=": "),new Error(e+t)}fail(t){const s=this.makeError(t),e=this.errorHandler;if(void 0===e)throw s;return e(s),this}write(t){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let s=!1;null===t?(s=!0,t=""):"object"==typeof t&&(t=t.toString()),void 0!==this.carriedFromPrevious&&(t=`${this.carriedFromPrevious}${t}`,this.carriedFromPrevious=void 0);let e=t.length;const i=t.charCodeAt(e-1);!s&&(i===CR||i>=55296&&i<=56319)&&(this.carriedFromPrevious=t[e-1],e--,t=t.slice(0,e));const{stateTable:a}=this;for(this.chunk=t,this.i=0;this.i=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>=SPACE||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:return t.charCodeAt(s+1)===NL&&(this.i=s+2),this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCode11(){const{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>31&&e<127||e>159&&e!==LS||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:{const e=t.charCodeAt(s+1);e!==NL&&e!==NEL||(this.i=s+2)}case NEL:case LS:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCodeNorm(){const t=this.getCode();return t===NL_LIKE?NL:t}unget(){this.i=this.prevI,this.column--}captureTo(t){let{i:s}=this;const{chunk:e}=this;for(;;){const i=this.getCode(),a=i===NL_LIKE,h=a?NL:i;if(h===EOC||t.includes(h))return this.text+=e.slice(s,this.prevI),h;a&&(this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i)}}captureToChar(t){let{i:s}=this;const{chunk:e}=this;for(;;){let i=this.getCode();switch(i){case NL_LIKE:this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i,i=NL;break;case EOC:return this.text+=e.slice(s),!1}if(i===t)return this.text+=e.slice(s,this.prevI),!0}}captureNameChars(){const{chunk:t,i:s}=this;for(;;){const e=this.getCode();if(e===EOC)return this.name+=t.slice(s),EOC;if(!isNameChar(e))return this.name+=t.slice(s,this.prevI),e===NL_LIKE?NL:e}}skipSpaces(){for(;;){const t=this.getCodeNorm();if(t===EOC||!isS(t))return t}}setXMLVersion(t){this.currentXMLVersion=t,"1.0"===t?(this.isChar=isChar10,this.getCode=this.getCode10):(this.isChar=isChar11,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=S_BEGIN_WHITESPACE}sBeginWhitespace(){const t=this.i,s=this.skipSpaces();switch(this.prevI!==t&&(this.xmlDeclPossible=!1),s){case LESS:if(this.state=S_OPEN_WAKA,0!==this.text.length)throw new Error("no-empty text at start");break;case EOC:break;default:this.unget(),this.state=S_TEXT,this.xmlDeclPossible=!1}}sDoctype(){var t;const s=this.captureTo(DOCTYPE_TERMINATOR);switch(s){case GREATER:null===(t=this.doctypeHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT,this.doctype=!0;break;case EOC:break;default:this.text+=String.fromCodePoint(s),s===OPEN_BRACKET?this.state=S_DTD:isQuote(s)&&(this.state=S_DOCTYPE_QUOTE,this.q=s)}}sDoctypeQuote(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.q=null,this.state=S_DOCTYPE)}sDTD(){const t=this.captureTo(DTD_TERMINATOR);t!==EOC&&(this.text+=String.fromCodePoint(t),t===CLOSE_BRACKET?this.state=S_DOCTYPE:t===LESS?this.state=S_DTD_OPEN_WAKA:isQuote(t)&&(this.state=S_DTD_QUOTED,this.q=t))}sDTDQuoted(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.state=S_DTD,this.q=null)}sDTDOpenWaka(){const t=this.getCodeNorm();switch(this.text+=String.fromCodePoint(t),t){case BANG:this.state=S_DTD_OPEN_WAKA_BANG,this.openWakaBang="";break;case QUESTION:this.state=S_DTD_PI;break;default:this.state=S_DTD}}sDTDOpenWakaBang(){const t=String.fromCodePoint(this.getCodeNorm()),s=this.openWakaBang+=t;this.text+=t,"-"!==s&&(this.state="--"===s?S_DTD_COMMENT:S_DTD,this.openWakaBang="")}sDTDComment(){this.captureToChar(MINUS)&&(this.text+="-",this.state=S_DTD_COMMENT_ENDING)}sDTDCommentEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),this.state=t===MINUS?S_DTD_COMMENT_ENDED:S_DTD_COMMENT}sDTDCommentEnded(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER?this.state=S_DTD:(this.fail("malformed comment."),this.state=S_DTD_COMMENT)}sDTDPI(){this.captureToChar(QUESTION)&&(this.text+="?",this.state=S_DTD_PI_ENDING)}sDTDPIEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER&&(this.state=S_DTD)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:t}=this;const{chunk:s}=this;t:for(;;)switch(this.getCode()){case NL_LIKE:this.entity+=`${s.slice(t,this.prevI)}\n`,t=this.i;break;case SEMICOLON:{const{entityReturnState:e}=this,i=this.entity+s.slice(t,this.prevI);let a;this.state=e,""===i?(this.fail("empty entity name."),a="&;"):(a=this.parseEntity(i),this.entity=""),e===S_TEXT&&void 0===this.textHandler||(this.text+=a);break t}case EOC:this.entity+=s.slice(t);break t}}sOpenWaka(){const t=this.getCode();if(isNameStartChar(t))this.state=S_OPEN_TAG,this.unget(),this.xmlDeclPossible=!1;else switch(t){case FORWARD_SLASH:this.state=S_CLOSE_TAG,this.xmlDeclPossible=!1;break;case BANG:this.state=S_OPEN_WAKA_BANG,this.openWakaBang="",this.xmlDeclPossible=!1;break;case QUESTION:this.state=S_PI_FIRST_CHAR;break;default:this.fail("disallowed character in tag name"),this.state=S_TEXT,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=S_CDATA,this.openWakaBang="";break;case"--":this.state=S_COMMENT,this.openWakaBang="";break;case"DOCTYPE":this.state=S_DOCTYPE,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(MINUS)&&(this.state=S_COMMENT_ENDING)}sCommentEnding(){var t;const s=this.getCodeNorm();s===MINUS?(this.state=S_COMMENT_ENDED,null===(t=this.commentHandler)||void 0===t||t.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(s)}`,this.state=S_COMMENT)}sCommentEnded(){const t=this.getCodeNorm();t!==GREATER?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(t)}`,this.state=S_COMMENT):this.state=S_TEXT}sCData(){this.captureToChar(CLOSE_BRACKET)&&(this.state=S_CDATA_ENDING)}sCDataEnding(){const t=this.getCodeNorm();t===CLOSE_BRACKET?this.state=S_CDATA_ENDING_2:(this.text+=`]${String.fromCodePoint(t)}`,this.state=S_CDATA)}sCDataEnding2(){var t;const s=this.getCodeNorm();switch(s){case GREATER:null===(t=this.cdataHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT;break;case CLOSE_BRACKET:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(s)}`,this.state=S_CDATA}}sPIFirstChar(){const t=this.getCodeNorm();this.nameStartCheck(t)?(this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST):t===QUESTION||isS(t)?(this.fail("processing instruction without a target."),this.state=t===QUESTION?S_PI_ENDING:S_PI_BODY):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST)}sPIRest(){const{chunk:t,i:s}=this;for(;;){const e=this.getCodeNorm();if(e===EOC)return void(this.piTarget+=t.slice(s));if(!this.nameCheck(e)){this.piTarget+=t.slice(s,this.prevI);const i=e===QUESTION;i||isS(e)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=i?S_XML_DECL_ENDING:S_XML_DECL_NAME_START):this.state=i?S_PI_ENDING:S_PI_BODY:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e));break}}}sPIBody(){if(0===this.text.length){const t=this.getCodeNorm();t===QUESTION?this.state=S_PI_ENDING:isS(t)||(this.text=String.fromCodePoint(t))}else this.captureToChar(QUESTION)&&(this.state=S_PI_ENDING)}sPIEnding(){var t;const s=this.getCodeNorm();if(s===GREATER){const{piTarget:s}=this;"xml"===s.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(t=this.piHandler)||void 0===t||t.call(this,{target:s,body:this.text}),this.piTarget=this.text="",this.state=S_TEXT}else s===QUESTION?this.text+="?":(this.text+=`?${String.fromCodePoint(s)}`,this.state=S_PI_BODY);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const t=this.skipSpaces();t!==QUESTION?t!==EOC&&(this.state=S_XML_DECL_NAME,this.name=String.fromCodePoint(t)):this.state=S_XML_DECL_ENDING}sXMLDeclName(){const t=this.captureTo(XML_DECL_NAME_TERMINATOR);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(isS(t)||t===EQUAL){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=t===EQUAL?S_XML_DECL_VALUE_START:S_XML_DECL_EQ}}sXMLDeclEq(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(t!==EQUAL&&this.fail("value required."),this.state=S_XML_DECL_VALUE_START)}sXMLDeclValueStart(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(isQuote(t)?this.q=t:(this.fail("value must be quoted."),this.q=SPACE),this.state=S_XML_DECL_VALUE)}sXMLDeclValue(){const t=this.captureTo([this.q,QUESTION]);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.text="",void this.fail("XML declaration is incomplete.");if(t===EOC)return;const s=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const t=s;this.xmlDecl.version=t,/^1\.[0-9]+$/.test(t)?this.opt.forceXMLVersion||this.setXMLVersion(t):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(s)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=s;break;case"standalone":"yes"!==s&&"no"!==s&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=s}this.name="",this.state=S_XML_DECL_SEPARATOR}sXMLDeclSeparator(){const t=this.getCodeNorm();t!==QUESTION?(isS(t)||(this.fail("whitespace required."),this.unget()),this.state=S_XML_DECL_NAME_START):this.state=S_XML_DECL_ENDING}sXMLDeclEnding(){var t;this.getCodeNorm()===GREATER?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(t=this.xmldeclHandler)||void 0===t||t.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=S_TEXT):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var t;const s=this.captureNameChars();if(s===EOC)return;const e=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=e.ns=Object.create(null)),null===(t=this.openTagStartHandler)||void 0===t||t.call(this,e),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),s){case GREATER:this.openTag();break;case FORWARD_SLASH:this.state=S_OPEN_TAG_SLASH;break;default:isS(s)||this.fail("disallowed character in tag name."),this.state=S_ATTRIB}}sOpenTagSlash(){this.getCode()===GREATER?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=S_ATTRIB)}sAttrib(){const t=this.skipSpaces();t!==EOC&&(isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:this.fail("disallowed character in attribute name."))}sAttribName(){const t=this.captureNameChars();t===EQUAL?this.state=S_ATTRIB_VALUE:isS(t)?this.state=S_ATTRIB_NAME_SAW_WHITE:t===GREATER?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):t!==EOC&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const t=this.skipSpaces();switch(t){case EOC:return;case EQUAL:this.state=S_ATTRIB_VALUE;break;default:this.fail("attribute without value."),this.text="",this.name="",t===GREATER?this.openTag():isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):(this.fail("disallowed character in attribute name."),this.state=S_ATTRIB)}}sAttribValue(){const t=this.getCodeNorm();isQuote(t)?(this.q=t,this.state=S_ATTRIB_VALUE_QUOTED):isS(t)||(this.fail("unquoted attribute value."),this.state=S_ATTRIB_VALUE_UNQUOTED,this.unget())}sAttribValueQuoted(){const{q:t,chunk:s}=this;let{i:e}=this;for(;;)switch(this.getCode()){case t:return this.pushAttrib(this.name,this.text+s.slice(e,this.prevI)),this.name=this.text="",this.q=null,void(this.state=S_ATTRIB_VALUE_CLOSED);case AMP:return this.text+=s.slice(e,this.prevI),this.state=S_ENTITY,void(this.entityReturnState=S_ATTRIB_VALUE_QUOTED);case NL:case NL_LIKE:case TAB:this.text+=`${s.slice(e,this.prevI)} `,e=this.i;break;case LESS:return this.text+=s.slice(e,this.prevI),void this.fail("disallowed character.");case EOC:return void(this.text+=s.slice(e))}}sAttribValueClosed(){const t=this.getCodeNorm();isS(t)?this.state=S_ATTRIB:t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:isNameStartChar(t)?(this.fail("no whitespace between attributes."),this.unget(),this.state=S_ATTRIB_NAME):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const t=this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);switch(t){case AMP:this.state=S_ENTITY,this.entityReturnState=S_ATTRIB_VALUE_UNQUOTED;break;case LESS:this.fail("disallowed character.");break;case EOC:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",t===GREATER?this.openTag():this.state=S_ATTRIB}}sCloseTag(){const t=this.captureNameChars();t===GREATER?this.closeTag():isS(t)?this.state=S_CLOSE_TAG_SAW_WHITE:t!==EOC&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case GREATER:this.closeTag();break;case EOC:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:t,forbiddenState:s}=this;const{chunk:e,textHandler:i}=this;t:for(;;)switch(this.getCode()){case LESS:if(this.state=S_OPEN_WAKA,void 0!==i){const{text:s}=this,a=e.slice(t,this.prevI);0!==s.length?(i(s+a),this.text=""):0!==a.length&&i(a)}s=FORBIDDEN_START;break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==i&&(this.text+=e.slice(t,this.prevI)),s=FORBIDDEN_START;break t;case CLOSE_BRACKET:switch(s){case FORBIDDEN_START:s=FORBIDDEN_BRACKET;break;case FORBIDDEN_BRACKET:s=FORBIDDEN_BRACKET_BRACKET;break;case FORBIDDEN_BRACKET_BRACKET:break;default:throw new Error("impossible state")}break;case GREATER:s===FORBIDDEN_BRACKET_BRACKET&&this.fail('the string "]]>" is disallowed in char data.'),s=FORBIDDEN_START;break;case NL_LIKE:void 0!==i&&(this.text+=`${e.slice(t,this.prevI)}\n`),t=this.i,s=FORBIDDEN_START;break;case EOC:void 0!==i&&(this.text+=e.slice(t));break t;default:s=FORBIDDEN_START}this.forbiddenState=s}handleTextOutsideRoot(){let{i:t}=this;const{chunk:s,textHandler:e}=this;let i=!1;t:for(;;){const a=this.getCode();switch(a){case LESS:if(this.state=S_OPEN_WAKA,void 0!==e){const{text:i}=this,a=s.slice(t,this.prevI);0!==i.length?(e(i+a),this.text=""):0!==a.length&&e(a)}break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==e&&(this.text+=s.slice(t,this.prevI)),i=!0;break t;case NL_LIKE:void 0!==e&&(this.text+=`${s.slice(t,this.prevI)}\n`),t=this.i;break;case EOC:void 0!==e&&(this.text+=s.slice(t));break t;default:isS(a)||(i=!0)}}i&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(t,s){var e;const{prefix:i,local:a}=this.qname(t),h={name:t,prefix:i,local:a,value:s};if(this.attribList.push(h),null===(e=this.attributeHandler)||void 0===e||e.call(this,h),"xmlns"===i){const t=s.trim();"1.0"===this.currentXMLVersion&&""===t&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[a]=t,nsPairCheck(this,a,t)}else if("xmlns"===t){const t=s.trim();this.topNS[""]=t,nsPairCheck(this,"",t)}}pushAttribPlain(t,s){var e;const i={name:t,value:s};this.attribList.push(i),null===(e=this.attributeHandler)||void 0===e||e.call(this,i)}end(){var t,s;this.sawRoot||this.fail("document must contain a root element.");const{tags:e}=this;for(;e.length>0;){const t=e.pop();this.fail(`unclosed tag: ${t.name}`)}this.state!==S_BEGIN&&this.state!==S_TEXT&&this.fail("unexpected end.");const{text:i}=this;return 0!==i.length&&(null===(t=this.textHandler)||void 0===t||t.call(this,i),this.text=""),this._closed=!0,null===(s=this.endHandler)||void 0===s||s.call(this),this._init(),this}resolve(t){var s,e;let i=this.topNS[t];if(void 0!==i)return i;const{tags:a}=this;for(let s=a.length-1;s>=0;s--)if(void 0!==(i=a[s].ns[t]))return i;return void 0!==(i=this.ns[t])?i:null===(e=(s=this.opt).resolvePrefix)||void 0===e?void 0:e.call(s,t)}qname(t){const s=t.indexOf(":");if(-1===s)return{prefix:"",local:t};const e=t.slice(s+1),i=t.slice(0,s);return(""===i||""===e||e.includes(":"))&&this.fail(`malformed name: ${t}.`),{prefix:i,local:e}}processAttribsNS(){var t;const{attribList:s}=this,e=this.tag;{const{prefix:s,local:i}=this.qname(e.name);e.prefix=s,e.local=i;const a=e.uri=null!==(t=this.resolve(s))&&void 0!==t?t:"";""!==s&&("xmlns"===s&&this.fail('tags may not have "xmlns" as prefix.'),""===a&&(this.fail(`unbound namespace prefix: ${JSON.stringify(s)}.`),e.uri=s))}if(0===s.length)return;const{attributes:i}=e,a=new Set;for(const t of s){const{name:s,prefix:e,local:h}=t;let o,n;""===e?(o="xmlns"===s?XMLNS_NAMESPACE:"",n=s):(void 0===(o=this.resolve(e))&&(this.fail(`unbound namespace prefix: ${JSON.stringify(e)}.`),o=e),n=`{${o}}${h}`),a.has(n)&&this.fail(`duplicate attribute: ${n}.`),a.add(n),t.uri=o,i[s]=t}this.attribList=[]}processAttribsPlain(){const{attribList:t}=this,s=this.tag.attributes;for(const{name:e,value:i}of t)void 0!==s[e]&&this.fail(`duplicate attribute: ${e}.`),s[e]=i;this.attribList=[]}openTag(){var t;this.processAttribs();const{tags:s}=this,e=this.tag;e.isSelfClosing=!1,null===(t=this.openTagHandler)||void 0===t||t.call(this,e),s.push(e),this.state=S_TEXT,this.name=""}openSelfClosingTag(){var t,s,e;this.processAttribs();const{tags:i}=this,a=this.tag;a.isSelfClosing=!0,null===(t=this.openTagHandler)||void 0===t||t.call(this,a),null===(s=this.closeTagHandler)||void 0===s||s.call(this,a),null===(this.tag=null!==(e=i[i.length-1])&&void 0!==e?e:null)&&(this.closedRoot=!0),this.state=S_TEXT,this.name=""}closeTag(){const{tags:t,name:s}=this;if(this.state=S_TEXT,this.name="",""===s)return this.fail("weird empty close tag."),void(this.text+="");const e=this.closeTagHandler;let i=t.length;for(;i-- >0;){const i=this.tag=t.pop();if(this.topNS=i.ns,null==e||e(i),i.name===s)break;this.fail("unexpected close tag.")}0===i?this.closedRoot=!0:i<0&&(this.fail(`unmatched closing tag: ${s}.`),this.text+=``)}parseEntity(t){if("#"!==t[0]){const s=this.ENTITIES[t];return void 0!==s?s:(this.fail(this.isName(t)?"undefined entity.":"disallowed character in entity name."),`&${t};`)}let s=NaN;return"x"===t[1]&&/^#x[0-9a-f]+$/i.test(t)?s=parseInt(t.slice(2),16):/^#[0-9]+$/.test(t)&&(s=parseInt(t.slice(1),10)),this.isChar(s)?String.fromCodePoint(s):(this.fail("malformed character entity."),`&${t};`)}}exports.SaxesParser=SaxesParser; -},{"xmlchars/xml/1.0/ed5":82,"xmlchars/xml/1.1/ed2":83,"xmlchars/xmlns/1.0/ed3":84}],86:[function(require,module,exports){ +},{"xmlchars/xml/1.0/ed5":83,"xmlchars/xml/1.1/ed2":84,"xmlchars/xmlns/1.0/ed3":85}],87:[function(require,module,exports){ module.exports={ "name": "@jscad/svg-deserializer", - "version": "2.5.9", + "version": "2.5.10", "description": "SVG Deserializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -546,7 +553,8 @@ module.exports={ "license": "MIT", "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -556,34 +564,34 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],87:[function(require,module,exports){ +},{}],88:[function(require,module,exports){ const pxPmm=1/.2822222,inchMM=.03937,ptMM=1/(1/.03937/72),pcMM=.23622,cssPxUnit=.2822222,svgColors={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};module.exports={pxPmm:pxPmm,inchMM:.03937,ptMM:ptMM,pcMM:pcMM,cssPxUnit:.2822222,svgColors:svgColors}; -},{}],88:[function(require,module,exports){ +},{}],89:[function(require,module,exports){ const{inchMM:inchMM,ptMM:ptMM,pcMM:pcMM,svgColors:svgColors}=require("./constants"),svg2cag=(e,s)=>[e[0]/s[0],0-e[1]/s[1]],cagLengthX=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[0]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0],Math.round(1e5*t)/1e5)},cagLengthY=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[1],Math.round(1e5*t)/1e5)},cagLengthP=(e,s,r)=>{if(e.indexOf("%")<0)return css2cag(e,s[1]);let t=parseFloat(e);return isNaN(t)?0:0===t?t:(t=t/100*r,t/=s[0])},css2cag=(e,s)=>{let r=parseFloat(e);return isNaN(r)?0:0===r?r:(e.search(/EM/i)>0||e.search(/EX/i)>0||e.search(/MM/i)>0||(e.search(/CM/i)>0?r*=10:e.search(/IN/i)>0?r/=inchMM:e.search(/PT/i)>0?r/=ptMM:e.search(/PC/i)>0?r/=pcMM:r/=s),r)},cagColor=e=>{let s;if((e=e.toLowerCase())in svgColors)s=[(s=svgColors[e])[0]/255,s[1]/255,s[2]/255];else if("#"===e[0])4===e.length&&(e="#"+e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),7===e.length&&(s=[parseInt("0x"+e.slice(1,3))/255,parseInt("0x"+e.slice(3,5))/255,parseInt("0x"+e.slice(5,7))/255]);else{let r=/rgb\(.+,.+,.+\)/.exec(e);null!==r&&(s=(r=(r=r[0]).slice(r.indexOf("(")+1,r.indexOf(")"))).split(","),s=r.indexOf("%")>0?[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/100,s[1]/100,s[2]/100]:[(s=[parseInt(s[0]),parseInt(s[1]),parseInt(s[2])])[0]/255,s[1]/255,s[2]/255])}return s},cssStyle=(e,s)=>{if("style"in e){const r=e.style+";";let t=new RegExp(s+"\\s*:\\s*(\\S+);","i").exec(r);if(null!==t){let e=(t=t[0]).indexOf(":")+1;for(;" "===t[e];)e++;return t=t.slice(e,t.indexOf(";"))}}},reflect=(e,s,r,t)=>{const l=e-r,a=s-t;return e===r&&s===r?[e,s]:e===r?[e,t+-a]:s===t?[r+-l,s]:[r+-l,t+-a]},groupValue=(e,s)=>{let r=e.length;for(;r>0;){const t=e[r-1];if(s in t)return t[s];r--}},svgColorForTarget=(e,s)=>{let r=null;return"path"===e?s.stroke?r=[s.stroke[0],s.stroke[1],s.stroke[2],1]:s.fill&&(r=[s.fill[0],s.fill[1],s.fill[2],1]):s.fill?r=[s.fill[0],s.fill[1],s.fill[2],1]:s.stroke&&(r=[s.stroke[0],s.stroke[1],s.stroke[2],1]),r};module.exports={svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,css2cag:css2cag,cagColor:cagColor,cssStyle:cssStyle,reflect:reflect,groupValue:groupValue,svgColorForTarget:svgColorForTarget}; -},{"./constants":87}],89:[function(require,module,exports){ -const saxes=require("saxes"),{colors:colors,transforms:transforms}=require("@jscad/modeling"),{toArray:toArray}=require("@jscad/array-utils"),version=require("../package.json").version,{cagLengthX:cagLengthX,cagLengthY:cagLengthY,svgColorForTarget:svgColorForTarget}=require("./helpers"),{svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgGroup:svgGroup,svgLine:svgLine,svgPath:svgPath,svgEllipse:svgEllipse,svgPolygon:svgPolygon,svgPolyline:svgPolyline,svgUse:svgUse}=require("./svgElementHelpers"),shapesMapGeometry=require("./shapesMapGeometry"),shapesMapJscad=require("./shapesMapJscad"),deserialize=(s,e)=>{const t={addMetaData:!0,filename:"svg",output:"script",pxPmm:require("./constants").pxPmm,segments:32,target:"path",pathSelfClosed:"error",version:version};return"script"===(s=Object.assign({},t,s)).output?translate(e,s):instantiate(e,s)},instantiate=(s,e)=>{const{pxPmm:t}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,t),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");e&&e.statusCallback&&e.statusCallback({progress:50});const n=objectify(e,svgObj);return e&&e.statusCallback&&e.statusCallback({progress:100}),n},translate=(s,e)=>{const{filename:t,version:n,pxPmm:r,addMetaData:o}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,r),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");let a=o?`//\n // producer: JSCAD SVG Deserializer ${n}\n // date: ${new Date}\n // source: ${t}\n //\n`:"";return a+="const { colors, geometries, primitives, transforms } = require('@jscad/modeling')\n\n",e&&e.statusCallback&&e.statusCallback({progress:50}),a+=codify(e,svgObj),a+="\nmodule.exports = { main }",e&&e.statusCallback&&e.statusCallback({progress:100}),a};let svgUnitsX,svgUnitsY,svgUnitsV;const svgObjects=[],svgGroups=[],svgDefs=[];let svgObj,svgInDefs=!1,svgUnitsPmm=[1,1];const objectify=(s,e)=>{const{target:t,segments:n,pathSelfClosed:r}=s,o=svgGroups.length;svgGroups.push(e);let a=o;for(;a>0;)a--;let g=[];const l={svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,level:o,target:t,svgGroups:svgGroups,segments:n,pathSelfClosed:r};for(a=0;a{if("transforms"in s){let t=null,n=null,r=null;for(let e=0;e{const{target:t,segments:n}=s,r=svgGroups.length;svgGroups.push(e);let o=" ",a=r;for(;a>0;)o+=" ",a--;let g="";0===r&&(g+="function main(params) {\n let levels = {}\n let paths = {}\n let parts\n");const l="levels.l"+r;for(g+=`${o}${l} = []\n`,a=0;a{const t=new saxes.SaxesParser;return void 0!==e&&e>t.pxPmm&&(t.pxPmm=e),t.on("error",s=>{console.log(`ERROR: SVG file, line ${t.line}, column ${t.column}`),console.log(s)}),t.on("opentag",s=>{const n={SVG:svgSvg,G:svgGroup,RECT:svgRect,CIRCLE:svgCircle,ELLIPSE:svgEllipse,LINE:svgLine,POLYLINE:svgPolyline,POLYGON:svgPolygon,PATH:svgPath,USE:svgUse,DEFS:()=>{svgInDefs=!0},DESC:()=>void 0,TITLE:()=>void 0,STYLE:()=>void 0,undefined:()=>console.log("WARNING: unsupported SVG element: "+s.name)};s.attributes.position=[t.line+1,t.column+1];const r=s.name.toUpperCase(),o=n[r]?n[r](s.attributes,{svgObjects:svgObjects,customPxPmm:e}):void 0;if(o)if("id"in o&&(svgObjects[o.id]=o),"svg"===o.type)svgGroups.push(o),svgUnitsPmm=o.unitsPmm,svgUnitsX=o.viewW,svgUnitsY=o.viewH,svgUnitsV=o.viewP;else if(!0===svgInDefs){if(svgDefs.length>0){const s=svgDefs.pop();"objects"in s&&s.objects.push(o),svgDefs.push(s)}"group"===o.type&&svgDefs.push(o)}else{if(svgGroups.length>0){const s=svgGroups.pop();"objects"in s&&s.objects.push(o),svgGroups.push(s)}"group"===o.type&&svgGroups.push(o)}}),t.on("closetag",s=>{const e=()=>!0===svgInDefs?svgDefs.pop():svgGroups.pop(),t={SVG:e,DEFS:()=>{svgInDefs=!1},USE:e,G:e,undefined:()=>{}},n=s.name.toUpperCase(),r=t[n]?t[n]():void 0;0===svgGroups.length&&(svgObj=r)}),t.on("end",()=>{}),t.write(s).close(),t},extension="svg";module.exports={deserialize:deserialize,extension:"svg"}; +},{"./constants":88}],90:[function(require,module,exports){ +const saxes=require("saxes"),{colors:colors,transforms:transforms}=require("@jscad/modeling"),{toArray:toArray}=require("@jscad/array-utils"),{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,{cagLengthX:cagLengthX,cagLengthY:cagLengthY,svgColorForTarget:svgColorForTarget}=require("./helpers"),{svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgGroup:svgGroup,svgLine:svgLine,svgPath:svgPath,svgEllipse:svgEllipse,svgPolygon:svgPolygon,svgPolyline:svgPolyline,svgUse:svgUse}=require("./svgElementHelpers"),shapesMapGeometry=require("./shapesMapGeometry"),shapesMapJscad=require("./shapesMapJscad"),deserialize=(s,e)=>{const t={addMetaData:!0,filename:"svg",output:"script",pxPmm:require("./constants").pxPmm,segments:32,target:"path",pathSelfClosed:"error",version:version};return s=Object.assign({},t,s),e=ensureString(e),"script"===s.output?translate(e,s):instantiate(e,s)},instantiate=(s,e)=>{const{pxPmm:t}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,t),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");e&&e.statusCallback&&e.statusCallback({progress:50});const n=objectify(e,svgObj);return e&&e.statusCallback&&e.statusCallback({progress:100}),n},translate=(s,e)=>{const{filename:t,version:n,pxPmm:r,addMetaData:o}=e;if(e&&e.statusCallback&&e.statusCallback({progress:0}),createSvgParser(s,r),!svgObj)throw new Error("SVG parsing failed, no valid SVG data retrieved");let a=o?`//\n // producer: JSCAD SVG Deserializer ${n}\n // date: ${new Date}\n // source: ${t}\n //\n`:"";return a+="const { colors, geometries, primitives, transforms } = require('@jscad/modeling')\n\n",e&&e.statusCallback&&e.statusCallback({progress:50}),a+=codify(e,svgObj),a+="\nmodule.exports = { main }",e&&e.statusCallback&&e.statusCallback({progress:100}),a};let svgUnitsX,svgUnitsY,svgUnitsV;const svgObjects=[],svgGroups=[],svgDefs=[];let svgObj,svgInDefs=!1,svgUnitsPmm=[1,1];const objectify=(s,e)=>{const{target:t,segments:n,pathSelfClosed:r}=s,o=svgGroups.length;svgGroups.push(e);let a=o;for(;a>0;)a--;let g=[];const l={svgUnitsPmm:svgUnitsPmm,svgUnitsX:svgUnitsX,svgUnitsY:svgUnitsY,svgUnitsV:svgUnitsV,level:o,target:t,svgGroups:svgGroups,segments:n,pathSelfClosed:r};for(a=0;a{if("transforms"in s){let t=null,n=null,r=null;for(let e=0;e{const{target:t,segments:n}=s,r=svgGroups.length;svgGroups.push(e);let o=" ",a=r;for(;a>0;)o+=" ",a--;let g="";0===r&&(g+="function main(params) {\n let levels = {}\n let paths = {}\n let parts\n");const l="levels.l"+r;for(g+=`${o}${l} = []\n`,a=0;a{const t=new saxes.SaxesParser;return void 0!==e&&e>t.pxPmm&&(t.pxPmm=e),t.on("error",s=>{console.log(`ERROR: SVG file, line ${t.line}, column ${t.column}`),console.log(s)}),t.on("opentag",s=>{const n={SVG:svgSvg,G:svgGroup,RECT:svgRect,CIRCLE:svgCircle,ELLIPSE:svgEllipse,LINE:svgLine,POLYLINE:svgPolyline,POLYGON:svgPolygon,PATH:svgPath,USE:svgUse,DEFS:()=>{svgInDefs=!0},DESC:()=>void 0,TITLE:()=>void 0,STYLE:()=>void 0,undefined:()=>console.log("WARNING: unsupported SVG element: "+s.name)};s.attributes.position=[t.line+1,t.column+1];const r=s.name.toUpperCase(),o=n[r]?n[r](s.attributes,{svgObjects:svgObjects,customPxPmm:e}):void 0;if(o)if("id"in o&&(svgObjects[o.id]=o),"svg"===o.type)svgGroups.push(o),svgUnitsPmm=o.unitsPmm,svgUnitsX=o.viewW,svgUnitsY=o.viewH,svgUnitsV=o.viewP;else if(!0===svgInDefs){if(svgDefs.length>0){const s=svgDefs.pop();"objects"in s&&s.objects.push(o),svgDefs.push(s)}"group"===o.type&&svgDefs.push(o)}else{if(svgGroups.length>0){const s=svgGroups.pop();"objects"in s&&s.objects.push(o),svgGroups.push(s)}"group"===o.type&&svgGroups.push(o)}}),t.on("closetag",s=>{const e=()=>!0===svgInDefs?svgDefs.pop():svgGroups.pop(),t={SVG:e,DEFS:()=>{svgInDefs=!1},USE:e,G:e,undefined:()=>{}},n=s.name.toUpperCase(),r=t[n]?t[n]():void 0;0===svgGroups.length&&(svgObj=r)}),t.on("end",()=>{}),t.write(s).close(),t},extension="svg";module.exports={deserialize:deserialize,extension:"svg"}; -},{"../package.json":86,"./constants":87,"./helpers":88,"./shapesMapGeometry":90,"./shapesMapJscad":91,"./svgElementHelpers":92,"@jscad/array-utils":527,"@jscad/modeling":211,"saxes":85}],90:[function(require,module,exports){ +},{"../package.json":87,"./constants":88,"./helpers":89,"./shapesMapGeometry":91,"./shapesMapJscad":92,"./svgElementHelpers":93,"@jscad/array-utils":528,"@jscad/io-utils":66,"@jscad/modeling":212,"saxes":86}],91:[function(require,module,exports){ const{geometries:geometries,primitives:primitives}=require("@jscad/modeling"),{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMapGeometry=(e,t,s)=>{const{svgUnitsPmm:a,svgUnitsX:o,svgUnitsY:r,svgUnitsV:n,svgGroups:g,target:c,segments:p,pathSelfClosed:i}=s;return{group:e=>t({target:c,segments:p},e),rect:(e,t,s,a,o,r,n)=>{let g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a);const i=cagLengthX(e.width,t,s),l=cagLengthY(e.height,t,a),h=cagLengthX(e.rx,t,s);let m;return i>0&&l>0&&(g+=i/2,p-=l/2,m=0===h?primitives.rectangle({center:[g,p],size:[i,l]}):primitives.roundedRectangle({center:[g,p],segments:n,size:[i,l],roundRadius:h}),"path"===c&&(m=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(m)))),m},circle:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.x,t,s),p=0-cagLengthY(e.y,t,a),i=cagLengthP(e.radius,t,o);let l;return i>0&&(l=primitives.circle({center:[g,p],segments:n,radius:i}),"path"===c&&(l=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(l)))),l},ellipse:(e,t,s,a,o,r,n)=>{const g=cagLengthX(e.rx,t,s),p=cagLengthY(e.ry,t,a),i=cagLengthX(e.cx,t,s),l=0-cagLengthY(e.cy,t,a);let h;return g>0&&p>0&&(h=primitives.ellipse({center:[i,l],segments:n,radius:[g,p]}),"path"===c&&(h=geometries.path2.fromPoints({closed:!0},geometries.geom2.toPoints(h)))),h},line:(e,t,s,a,o)=>{const r=cagLengthX(e.x1,t,s),n=0-cagLengthY(e.y1,t,a),g=cagLengthX(e.x2,t,s),c=0-cagLengthY(e.y2,t,a);return primitives.line([[r,n],[g,c]])},polygon:(e,t,s,a)=>{const o=[];for(let r=0;r{const r=[];for(let o=0;o{const g=expandPath(e,t,s,a,o,r,n,i);return Object.entries(g).sort((e,t)=>e[0].localeCompare(t[0])).map(e=>{const t=e[1];if("geom2"===c&&t.isClosed){const e=geometries.path2.toPoints(t).slice();return e.push(e[0]),geometries.geom2.fromPoints(e)}return t})}}[e.type](e,a,o,r,n,g,p)};module.exports=shapesMapGeometry;const appendPoints=(e,t)=>t?geometries.path2.appendPoints(e,t):geometries.path2.fromPoints({},e),expandPath=(e,t,s,a,o,r,n,g)=>{const c={};let p=0,i=0,l=0,h=0,m=0,F="path"+m,v=!1,d=0,f=0,P=0,u=0;const L=()=>{F="path"+ ++m,v=!1},k=()=>{c[F]||(c[F]=geometries.path2.fromPoints({},[]))};for(let s=0;s=r+2&&(l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"M":for(o.length>=r+2&&(l=parseFloat(o[r++]),h=parseFloat(o[r++]),L(),c[F]=appendPoints([svg2cag([l,h],t)]),p=l,i=h);o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"a":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"A":for(;o.length>=r+7;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]),a=0-.017453292519943295*parseFloat(o[r++]),g="1"===o[r++],p="1"===o[r++];l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendArc({segments:n,endpoint:svg2cag([l,h],t),radius:svg2cag([e,s],t),xaxisrotation:a,clockwise:p,large:g},c[F])}break;case"c":for(;o.length>=r+6;){const e=l+parseFloat(o[r++]),s=h+parseFloat(o[r++]);d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"C":for(;o.length>=r+6;){const e=parseFloat(o[r++]),s=parseFloat(o[r++]);d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"q":for(;o.length>=r+4;){const e=[l,h];P=l+parseFloat(o[r++]),u=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"Q":for(;o.length>=r+4;){const e=[l,h];P=parseFloat(o[r++]),u=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"t":for(;o.length>=r+2;){const e=[l,h];l+=parseFloat(o[r++]),h+=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"T":for(;o.length>=r+2;){const e=[l,h];l=parseFloat(o[r++]),h=parseFloat(o[r++]);const s=[e[0]+2/3*(P-e[0]),e[1]+2/3*(u-e[1])],a=[s[0]+1/3*(l-e[0]),s[1]+1/3*(h-e[1])];k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag(s,t),svg2cag(a,t),svg2cag([l,h],t)]},c[F]);const g=reflect(P,u,l,h);P=g[0],u=g[1]}break;case"s":for(;o.length>=r+4;){const e=d,s=f;d=l+parseFloat(o[r++]),f=h+parseFloat(o[r++]),l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"S":for(;o.length>=r+4;){const e=d,s=f;d=parseFloat(o[r++]),f=parseFloat(o[r++]),l=parseFloat(o[r++]),h=parseFloat(o[r++]),k(),c[F]=geometries.path2.appendBezier({segments:n,controlPoints:[svg2cag([e,s],t),svg2cag([d,f],t),svg2cag([l,h],t)]},c[F]);const a=reflect(d,f,l,h);d=a[0],f=a[1]}break;case"h":for(;o.length>=r+1;)l+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"H":for(;o.length>=r+1;)l=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"l":for(;o.length>=r+2;)l+=parseFloat(o[r++]),h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"L":for(;o.length>=r+2;)l=parseFloat(o[r++]),h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"v":for(;o.length>=r+1;)h+=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"V":for(;o.length>=r+1;)h=parseFloat(o[r++]),c[F]=appendPoints([svg2cag([l,h],t)],c[F]);break;case"z":case"Z":c[F]=geometries.path2.close(c[F]),l=p,h=i,v=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}const m=e=>"z"===e||"Z"===e;if(!0!==v&&c[F]&&c[F].isClosed){let t=e.commands[s+1];if(t&&!m(t.c))if("trim"===g)for(;t&&!m(t.c);)s++,t=e.commands[s+1];else{if("split"!==g)throw new Error(`Malformed svg path at ${e.position[0]}:${a.pos}. Path closed itself with command #${s} ${a.c}${o.join(" ")}`);L()}}}return c}; -},{"./helpers":88,"@jscad/modeling":211}],91:[function(require,module,exports){ +},{"./helpers":89,"@jscad/modeling":212}],92:[function(require,module,exports){ const{svg2cag:svg2cag,cagLengthX:cagLengthX,cagLengthY:cagLengthY,cagLengthP:cagLengthP,reflect:reflect}=require("./helpers"),shapesMap=(e,t,s)=>{const{level:a,indent:n,on:o,svgUnitsPmm:r,svgUnitsX:g,svgUnitsY:i,svgUnitsV:$,svgGroups:p,target:c,segments:h}=s;return{group:e=>{let s=t({target:c,segments:h},e);return s+=`${n}${o} = levels.l${a+1}\n`},rect:(e,t,s,a,r,g,i,$)=>{let p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a);const l=cagLengthX(e.width,t,s),f=cagLengthY(e.height,t,a),m=cagLengthX(e.rx,t,s);let F;return l>0&&f>0&&(p=(p+l/2).toFixed(4),h=(h-f/2).toFixed(4),F=0===m?`${n}${o} = primitives.rectangle({center: [${p}, ${h}], size: [${l}, ${f}]}) // line ${e.position}\n`:`${n}${o} = primitives.roundedRectangle({center: [${p}, ${h}], segments: ${$}, size: [${l}, ${f}], roundRadius: ${m}}) // line ${e.position}\n`,"path"===c&&(F+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),F},circle:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.x,t,s),h=0-cagLengthY(e.y,t,a),l=cagLengthP(e.radius,t,r);let f;return l>0&&(f=`${n}${o} = primitives.circle({center: [${p}, ${h}], segments: ${$}, radius: ${l}}) // line ${e.position}\n`,"path"===c&&(f+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),f},ellipse:(e,t,s,a,r,g,i,$)=>{const p=cagLengthX(e.rx,t,s),h=cagLengthY(e.ry,t,a),l=cagLengthX(e.cx,t,s),f=0-cagLengthY(e.cy,t,a);let m;return p>0&&h>0&&(m=`${n}${o} = primitives.ellipse({center: [${l}, ${f}], segments: ${$}, radius: [${p}, ${h}]}) // line ${e.position}\n`,"path"===c&&(m+=`${n}${o} = geometries.path2.fromPoints({closed: true}, geometries.geom2.toPoints(${o}))\n`)),m},line:(e,t,s,a,r)=>{const g=cagLengthX(e.x1,t,s),i=0-cagLengthY(e.y1,t,a),$=cagLengthX(e.x2,t,s),p=0-cagLengthY(e.y2,t,a);return`${n}${o} = primitives.line([[${g}, ${i}], [${$}, ${p}]]) // line ${e.position}\n`},polygon:(e,t,s,a)=>{let r=`${n}${o} = primitives.polygon({points: [\n`;for(let o=0;o{let g=`${n}${o} = geometries.path2.fromPoints({}, [\n`;for(let o=0;o{const{indent:i,on:$,target:p}=o;let c=`${i}parts = [] // line ${e.position}\n`,h=0,l=0,f=0,m=0,F=0,v=$+F,d=!1,P=0,u=0,L=0,k=0;for(let s=0;s0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"M":for(F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),n.length>=2&&(f=parseFloat(n.shift()),m=parseFloat(n.shift()),d=!1,c+=`${i}${v=$+ ++F} = geometries.path2.fromPoints({}, [[${svg2cag([f,m],t)}]])\n`,h=f,l=m);n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([${svg2cag([f,m],t)}], ${v})\n`;break;case"a":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"A":for(;n.length>=7;){const e=parseFloat(n.shift()),s=parseFloat(n.shift()),a=0-.017453292519943295*parseFloat(n.shift()),o="1"===n.shift(),r="1"===n.shift();f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendArc({segments: ${g}, endpoint: [${svg2cag([f,m],t)}], radius: [${svg2cag([e,s],t)}], xaxisrotation: ${a}, clockwise: ${r}, large: ${o}}, ${v})\n`}break;case"c":for(;n.length>=6;){const e=f+parseFloat(n.shift()),s=m+parseFloat(n.shift());P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"C":for(;n.length>=6;){const e=parseFloat(n.shift()),s=parseFloat(n.shift());P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"q":for(;n.length>=4;){const e=[f,m];L=f+parseFloat(n.shift()),k=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"Q":for(;n.length>=4;){const e=[f,m];L=parseFloat(n.shift()),k=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"t":for(;n.length>=2;){const e=[f,m];f+=parseFloat(n.shift()),m+=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"T":for(;n.length>=2;){const e=[f,m];f=parseFloat(n.shift()),m=parseFloat(n.shift());const s=[e[0]+2/3*(L-e[0]),e[1]+2/3*(k-e[1])],a=[s[0]+1/3*(f-e[0]),s[1]+1/3*(m-e[1])];c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[[${svg2cag(s,t)}], [${svg2cag(a,t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const o=reflect(L,k,f,m);L=o[0],k=o[1]}break;case"s":for(;n.length>=4;){const e=P,s=u;P=f+parseFloat(n.shift()),u=m+parseFloat(n.shift()),f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"S":for(;n.length>=4;){const e=P,s=u;P=parseFloat(n.shift()),u=parseFloat(n.shift()),f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendBezier({segments: ${g}, controlPoints: [[${svg2cag([e,s],t)}], [${svg2cag([P,u],t)}], [${svg2cag([f,m],t)}]]}, ${v})\n`;const a=reflect(P,u,f,m);P=a[0],u=a[1]}break;case"h":for(;n.length>=1;)f+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"H":for(;n.length>=1;)f=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"l":for(;n.length>=2;)f+=parseFloat(n.shift()),m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"L":for(;n.length>=2;)f=parseFloat(n.shift()),m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"v":for(;n.length>=1;)m+=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"V":for(;n.length>=1;)m=parseFloat(n.shift()),c+=`${i}${v} = geometries.path2.appendPoints([[${svg2cag([f,m],t)}]], ${v})\n`;break;case"z":case"Z":c+=`${i}${v} = geometries.path2.close(${v})\n`,"geom2"===p&&(c+=`${i}${v} = geometries.geom2.fromPoints(geometries.path2.toPoints(${v}))\n`),c+=`${i}parts.push(${v})\n`,f=h,m=l,d=!0;break;default:console.log("Warning: Unknow PATH command ["+a.c+"]")}}return F>0&&!1===d&&(c+=`${i}parts.push(${v})\n`),c+=`${i}${$} = parts\n`}; -},{"./helpers":88}],92:[function(require,module,exports){ +},{"./helpers":89}],93:[function(require,module,exports){ const{cagColor:cagColor,cssStyle:cssStyle,css2cag:css2cag}=require("./helpers"),{pxPmm:pxPmm}=require("./constants"),svgCore=(s,e)=>{"id"in e&&(s.id=e.id),"position"in e&&(s.position=e.position)},svgPresentation=(s,e)=>{if("display"in e&&(s.visible=e.display),"color"in e&&(s.fill=cagColor(e.color),s.stroke=s.fill),"opacity"in e&&(s.opacity=e.opacity),"fill"in e)s.fill=cagColor(e.fill);else{const t=cssStyle(e,"fill");t&&(s.fill=cagColor(t))}if("fill-opacity"in e&&(s.opacity=e["fill-opacity"]),"stroke-width"in e)s.strokeWidth=e["stroke-width"];else{const t=cssStyle(e,"stroke-width");t&&(s.strokeWidth=t)}if("stroke"in e)s.stroke=cagColor(e.stroke);else{const t=cssStyle(e,"stroke");t&&(s.stroke=cagColor(t))}"stroke-opacity"in e&&(s.strokeOpacity=e["stroke-opacity"])},svgTransformsRegExp=/\w+\(.+\)/i,svgTransforms=(s,e)=>{let t=null;if("transform"in e)t=e.transform;else{const s=cssStyle(e,"transform");s&&(t=s)}if(null!==t){s.transforms=[];let e=svgTransformsRegExp.exec(t);for(;null!==e;){const i=svgTransformsRegExp.lastIndex,n=t.indexOf(")")+1;let r=t.slice(i,n);const o=(r=r.trim()).slice(0,r.indexOf("("));let a,c=r.slice(r.indexOf("(")+1,r.indexOf(")")).trim();switch(c=c.indexOf(",")>0?c.split(","):c.split(" "),o){case"translate":1===c.length&&c.push(0),a={translate:[c[0],c[1]]},s.transforms.push(a);break;case"scale":1===c.length&&c.push(c[0]),a={scale:[c[0],c[1]]},s.transforms.push(a);break;case"rotate":a={rotate:c},s.transforms.push(a)}t=t.slice(n,t.length),e=svgTransformsRegExp.exec(t)}}},viewBoxRegExp=/([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)[\s,]+([\d.-]+)/i,svgSvg=(s,{customPxPmm:e})=>{const t={type:"svg",x:0,y:0,width:"100%",height:"100%",strokeWidth:"1"};if(t.unitsPmm=[pxPmm,pxPmm],"pxpmm"in s&&(t.pxPmm=s.pxpmm,t.unitsPmm=[t.pxPmm,t.pxPmm]),"width"in s&&(t.width=s.width),"height"in s&&(t.height=s.height),"viewBox"in s){const i=s.viewBox.trim(),n=viewBoxRegExp.exec(i);if(null!==n&&(t.viewX=parseFloat(n[1]),t.viewY=parseFloat(n[2]),t.viewW=parseFloat(n[3]),t.viewH=parseFloat(n[4])),t.width.indexOf("%")<0){let s=css2cag(t.width,e);s=t.viewW/s,t.unitsPmm[0]=s}else{const s=t.unitsPmm[0]*(parseFloat(t.width)/100);t.unitsPmm[0]=s}if(t.height.indexOf("%")<0){let s=css2cag(t.height,pxPmm);s=t.viewH/s,t.unitsPmm[1]=s}else{const s=t.unitsPmm[1]*(parseFloat(t.height)/100);t.unitsPmm[1]=s}}else t.viewX=0,t.viewY=0,t.viewW=1920/t.unitsPmm[0],t.viewH=1080/t.unitsPmm[1];return t.viewP=Math.sqrt(t.viewW*t.viewW+t.viewH*t.viewH)/Math.SQRT2,svgCore(t,s),svgPresentation(t,s),t.objects=[],t},svgEllipse=s=>{const e={type:"ellipse",cx:"0",cy:"0",rx:"0",ry:"0"};return"cx"in s&&(e.cx=s.cx),"cy"in s&&(e.cy=s.cy),"rx"in s&&(e.rx=s.rx),"ry"in s&&(e.ry=s.ry),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgLine=s=>{const e={type:"line",x1:"0",y1:"0",x2:"0",y2:"0"};return"x1"in s&&(e.x1=s.x1),"y1"in s&&(e.y1=s.y1),"x2"in s&&(e.x2=s.x2),"y2"in s&&(e.y2=s.y2),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgListOfPoints=s=>{const e=[],t=/([\d\-+.]+)[\s,]+([\d\-+.]+)[\s,]*/i;s=s.trim();let i=t.exec(s);for(;null!==i;){let n=i[0];const r=t.lastIndex+n.length;n={x:i[1],y:i[2]},e.push(n),s=s.slice(r,s.length),i=t.exec(s)}return e},svgPolyline=s=>{const e={type:"polyline"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgPolygon=s=>{const e={type:"polygon"};return svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"points"in s&&(e.points=svgListOfPoints(s.points)),e},svgRect=s=>{const e={type:"rect",x:"0",y:"0",rx:"0",ry:"0",width:"0",height:"0"};return"x"in s&&(e.x=s.x),"y"in s&&(e.y=s.y),"rx"in s&&(e.rx=s.rx,"ry"in s||(e.ry=e.rx)),"ry"in s&&(e.ry=s.ry,"rx"in s||(e.rx=e.ry)),e.rx!==e.ry&&console.log("Warning: Unsupported RECT with rx and ry radius"),"width"in s&&(e.width=s.width),"height"in s&&(e.height=s.height),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgCircle=s=>{const e={type:"circle",x:"0",y:"0",radius:"0"};return"cx"in s&&(e.x=s.cx),"cy"in s&&(e.y=s.cy),"r"in s&&(e.radius=s.r),svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e},svgGroup=s=>{const e={type:"group"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),"x"in s||"y"in s){let t="0",i="0";"x"in s&&(t=s.x),"y"in s&&(i=s.y),"transforms"in e||(e.transforms=[]);const n={translate:[t,i]};e.transforms.push(n)}return e.objects=[],e},svgPath=s=>{const e={type:"path"};if(svgTransforms(e,s),svgCore(e,s),svgPresentation(e,s),e.commands=[],"d"in s){let t=null,i="",n=0;const r=s.d.length,o=s.position[1]-r-2;for(;n0&&(t.p.push(i),i=""),i+=r;break;case".":i.length>0&&i.indexOf(".")>=0&&(t.p.push(i),i=""),i+=r;break;case"0":case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":i+=r;break;case"a":case"A":case"c":case"C":case"h":case"H":case"l":case"L":case"v":case"V":case"m":case"M":case"q":case"Q":case"s":case"S":case"t":case"T":case"z":case"Z":null!==t&&(i.length>0&&(t.p.push(i),i=""),e.commands.push(t)),t={c:r,p:[],pos:n+o};break;case",":case" ":case"\n":null!==t&&i.length>0&&(t.p.push(i),i="")}n++}n===r&&null!==t&&(i.length>0&&t.p.push(i),e.commands.push(t))}return e},svgUse=(s,{svgObjects:e})=>{const t={type:"group"};if(svgTransforms(t,s),svgCore(t,s),svgPresentation(t,s),"x"in s||"y"in s){let e="0",i="0";"x"in s&&(e=s.x),"y"in s&&(i=s.y),"transforms"in t||(t.transforms=[]);const n={translate:[e,i]};t.transforms.push(n)}if(t.objects=[],"xlink:href"in s){let i=s["xlink:href"];"#"===i[0]&&(i=i.slice(1,i.length)),void 0!==e[i]&&(i=e[i],i=JSON.parse(JSON.stringify(i)),t.objects.push(i))}return t};module.exports={svgCore:svgCore,svgPresentation:svgPresentation,svgSvg:svgSvg,svgRect:svgRect,svgCircle:svgCircle,svgEllipse:svgEllipse,svgLine:svgLine,svgPolyline:svgPolyline,svgPolygon:svgPolygon,svgGroup:svgGroup,svgPath:svgPath,svgUse:svgUse}; -},{"./constants":87,"./helpers":88}],93:[function(require,module,exports){ +},{"./constants":88,"./helpers":89}],94:[function(require,module,exports){ const{geometries:geometries,maths:maths,measurements:measurements,utils:utils}=require("@jscad/modeling"),stringify=require("onml/lib/stringify"),version=require("./package.json").version,mimeType="image/svg+xml",serialize=(e,...t)=>{const s={unit:"mm",decimals:1e4,version:version,statusCallback:null};e=Object.assign({},s,e);const o=(t=utils.flatten(t)).filter(e=>geometries.geom2.isA(e)||geometries.path2.isA(e));if(0===o.length)throw new Error("only 2D geometries can be serialized to SVG");t.length!==o.length&&console.warn("some objects could not be serialized to SVG"),e.statusCallback&&e.statusCallback({progress:0});const r=getBounds(o);let n=0,l=0;r&&(n=Math.round((r[1][0]-r[0][0])*e.decimals)/e.decimals,l=Math.round((r[1][1]-r[0][1])*e.decimals)/e.decimals);let i=["svg",{width:n+e.unit,height:l+e.unit,viewBox:"0 0 "+n+" "+l,fill:"none","fill-rule":"evenodd","stroke-width":"0.1px",version:"1.1",baseProfile:"tiny",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}];r&&(i=i.concat(convertObjects(o,r,e)));const a=`\n\x3c!-- Created by JSCAD SVG Serializer --\x3e\n\n${stringify(i,2)}`;return e.statusCallback&&e.statusCallback({progress:100}),[a]},getBounds=e=>{const t=measurements.measureBoundingBox(e);return 1===e.length?t:t.reduce((e,t)=>(maths.vec3.min(e[0],e[0],t[0]),maths.vec3.max(e[1],e[1],t[1]),e),[[0,0,0],[0,0,0]])},convertObjects=(e,t,s)=>{const o=0-t[0][0],r=0-t[1][1],n=[];return e.forEach((t,l)=>{s.statusCallback&&s.statusCallback({progress:100*l/e.length}),geometries.geom2.isA(t)&&n.push(convertGeom2(t,[o,r],s)),geometries.path2.isA(t)&&n.push(convertPaths([t],[o,r],s))}),n},reflect=(e,t,s,o)=>{const r=e-s,n=t-o;return e===s&&t===s?[e,t]:e===s?[e,o-n]:t===o?[s- -r,t]:[s- -r,o-n]},convertGeom2=(e,t,s)=>{const o=geometries.geom2.toOutlines(e).map(e=>geometries.path2.fromPoints({closed:!0},e));return s.color="black",e.color&&(s.color=convertColor(e.color)),s.id=null,e.id&&(s.id=e.id),s.class=null,e.class&&(s.class=e.class),convertToContinousPath(o,t,s)},convertToContinousPath=(e,t,s)=>{let o="";e.forEach(e=>o+=convertPath(e,t,s));const r={fill:s.color,d:o};return s.id&&(r.id=s.id),s.class&&(r.class=s.class),["g",["path",r]]},convertPaths=(e,t,s)=>e.reduce((e,o,r)=>{const n={d:convertPath(o,t,s)};return o.color&&(n.stroke=convertColor(o.color)),o.id&&(n.id=o.id),o.class&&(n.class=o.class),e.concat([["path",n]])},["g"]),convertPath=(e,t,s)=>{let o="";const r=e.points.length+(e.isClosed?1:0);for(let n=0;n=e.points.length&&(r-=e.points.length);const l=e.points[r],i=[l[0]+t[0],l[1]+t[1]],a=reflect(i[0],i[1],0,0),c=Math.round(a[0]*s.decimals)/s.decimals,m=Math.round(a[1]*s.decimals)/s.decimals;o+=n>0?`L${c} ${m}`:`M${c} ${m}`}return o},convertColor=e=>`rgba(${255*e[0]},${255*e[1]},${255*e[2]},${e[3]})`;module.exports={serialize:serialize,mimeType:mimeType}; -},{"./package.json":95,"@jscad/modeling":211,"onml/lib/stringify":94}],94:[function(require,module,exports){ +},{"./package.json":96,"@jscad/modeling":212,"onml/lib/stringify":95}],95:[function(require,module,exports){ "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; -},{}],95:[function(require,module,exports){ +},{}],96:[function(require,module,exports){ module.exports={ "name": "@jscad/svg-serializer", - "version": "2.3.16", + "version": "2.3.17", "description": "SVG Serializer for JSCAD", "homepage": "https://openjscad.xyz/", "repository": "https://github.com/jscad/OpenJSCAD.org", @@ -615,7 +623,7 @@ module.exports={ ], "license": "MIT", "dependencies": { - "@jscad/modeling": "2.12.3", + "@jscad/modeling": "2.12.4", "onml": "1.3.0" }, "devDependencies": { @@ -625,22 +633,22 @@ module.exports={ "gitHead": "a90b9bad95a417661c619dc733e62c587dc71a4a" } -},{}],96:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="\t\n\r -퟿-�𐀀-􏿿",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=SPACE&&e<=55295||e===NL||e===CR||e===TAB||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],97:[function(require,module,exports){ +},{}],98:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.CHAR="-퟿-�𐀀-􏿿",exports.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",exports.S=" \t\r\n",exports.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NAME_CHAR="-"+exports.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.CHAR_RE=new RegExp("^["+exports.CHAR+"]$","u"),exports.RESTRICTED_CHAR_RE=new RegExp("^["+exports.RESTRICTED_CHAR+"]$","u"),exports.S_RE=new RegExp("^["+exports.S+"]+$","u"),exports.NAME_START_CHAR_RE=new RegExp("^["+exports.NAME_START_CHAR+"]$","u"),exports.NAME_CHAR_RE=new RegExp("^["+exports.NAME_CHAR+"]$","u"),exports.NAME_RE=new RegExp("^["+exports.NAME_START_CHAR+"]["+exports.NAME_CHAR+"]*$","u"),exports.NMTOKEN_RE=new RegExp("^["+exports.NAME_CHAR+"]+$","u");var TAB=9,NL=10,CR=13,SPACE=32;function isChar(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isRestrictedChar(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}function isCharAndNotRestricted(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}function isS(e){return e===SPACE||e===NL||e===CR||e===TAB}function isNameStartChar(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNameChar(e){return isNameStartChar(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}exports.S_LIST=[SPACE,NL,CR,TAB],exports.isChar=isChar,exports.isRestrictedChar=isRestrictedChar,exports.isCharAndNotRestricted=isCharAndNotRestricted,exports.isS=isS,exports.isNameStartChar=isNameStartChar,exports.isNameChar=isNameChar; -},{}],98:[function(require,module,exports){ +},{}],99:[function(require,module,exports){ "use strict";function isNCNameStartChar(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function isNCNameChar(e){return isNCNameStartChar(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}Object.defineProperty(exports,"__esModule",{value:!0}),exports.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",exports.NC_NAME_CHAR="-"+exports.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",exports.NC_NAME_START_CHAR_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]$","u"),exports.NC_NAME_CHAR_RE=new RegExp("^["+exports.NC_NAME_CHAR+"]$","u"),exports.NC_NAME_RE=new RegExp("^["+exports.NC_NAME_START_CHAR+"]["+exports.NC_NAME_CHAR+"]*$","u"),exports.isNCNameStartChar=isNCNameStartChar,exports.isNCNameChar=isNCNameChar; -},{}],99:[function(require,module,exports){ +},{}],100:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const ed5=require("xmlchars/xml/1.0/ed5"),ed2=require("xmlchars/xml/1.1/ed2"),NSed3=require("xmlchars/xmlns/1.0/ed3");var isS=ed5.isS,isChar10=ed5.isChar,isNameStartChar=ed5.isNameStartChar,isNameChar=ed5.isNameChar,S_LIST=ed5.S_LIST,NAME_RE=ed5.NAME_RE,isChar11=ed2.isChar,isNCNameStartChar=NSed3.isNCNameStartChar,isNCNameChar=NSed3.isNCNameChar,NC_NAME_RE=NSed3.NC_NAME_RE;const XML_NAMESPACE="http://www.w3.org/XML/1998/namespace",XMLNS_NAMESPACE="http://www.w3.org/2000/xmlns/",rootNS={__proto__:null,xml:XML_NAMESPACE,xmlns:XMLNS_NAMESPACE},XML_ENTITIES={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},EOC=-1,NL_LIKE=-2,S_BEGIN=0,S_BEGIN_WHITESPACE=1,S_DOCTYPE=2,S_DOCTYPE_QUOTE=3,S_DTD=4,S_DTD_QUOTED=5,S_DTD_OPEN_WAKA=6,S_DTD_OPEN_WAKA_BANG=7,S_DTD_COMMENT=8,S_DTD_COMMENT_ENDING=9,S_DTD_COMMENT_ENDED=10,S_DTD_PI=11,S_DTD_PI_ENDING=12,S_TEXT=13,S_ENTITY=14,S_OPEN_WAKA=15,S_OPEN_WAKA_BANG=16,S_COMMENT=17,S_COMMENT_ENDING=18,S_COMMENT_ENDED=19,S_CDATA=20,S_CDATA_ENDING=21,S_CDATA_ENDING_2=22,S_PI_FIRST_CHAR=23,S_PI_REST=24,S_PI_BODY=25,S_PI_ENDING=26,S_XML_DECL_NAME_START=27,S_XML_DECL_NAME=28,S_XML_DECL_EQ=29,S_XML_DECL_VALUE_START=30,S_XML_DECL_VALUE=31,S_XML_DECL_SEPARATOR=32,S_XML_DECL_ENDING=33,S_OPEN_TAG=34,S_OPEN_TAG_SLASH=35,S_ATTRIB=36,S_ATTRIB_NAME=37,S_ATTRIB_NAME_SAW_WHITE=38,S_ATTRIB_VALUE=39,S_ATTRIB_VALUE_QUOTED=40,S_ATTRIB_VALUE_CLOSED=41,S_ATTRIB_VALUE_UNQUOTED=42,S_CLOSE_TAG=43,S_CLOSE_TAG_SAW_WHITE=44,TAB=9,NL=10,CR=13,SPACE=32,BANG=33,DQUOTE=34,AMP=38,SQUOTE=39,MINUS=45,FORWARD_SLASH=47,SEMICOLON=59,LESS=60,EQUAL=61,GREATER=62,QUESTION=63,OPEN_BRACKET=91,CLOSE_BRACKET=93,NEL=133,LS=8232,isQuote=t=>34===t||39===t,QUOTES=[34,39],DOCTYPE_TERMINATOR=[...QUOTES,OPEN_BRACKET,GREATER],DTD_TERMINATOR=[...QUOTES,LESS,CLOSE_BRACKET],XML_DECL_NAME_TERMINATOR=[EQUAL,QUESTION,...S_LIST],ATTRIB_VALUE_UNQUOTED_TERMINATOR=[...S_LIST,GREATER,AMP,LESS];function nsPairCheck(t,s,e){switch(s){case"xml":e!==XML_NAMESPACE&&t.fail(`xml prefix must be bound to ${XML_NAMESPACE}.`);break;case"xmlns":e!==XMLNS_NAMESPACE&&t.fail(`xmlns prefix must be bound to ${XMLNS_NAMESPACE}.`)}switch(e){case XMLNS_NAMESPACE:t.fail(""===s?`the default namespace may not be set to ${e}.`:`may not assign a prefix (even "xmlns") to the URI ${XMLNS_NAMESPACE}.`);break;case XML_NAMESPACE:switch(s){case"xml":break;case"":t.fail(`the default namespace may not be set to ${e}.`);break;default:t.fail("may not assign the xml namespace to another prefix.")}}}function nsMappingCheck(t,s){for(const e of Object.keys(s))nsPairCheck(t,e,s[e])}const isNCName=t=>NC_NAME_RE.test(t),isName=t=>NAME_RE.test(t),FORBIDDEN_START=0,FORBIDDEN_BRACKET=1,FORBIDDEN_BRACKET_BRACKET=2;exports.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const EVENT_NAME_TO_HANDLER_NAME={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class SaxesParser{constructor(t){this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;const s=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,s){this.nameStartCheck=isNCNameStartChar,this.nameCheck=isNCNameChar,this.isName=isNCName,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},rootNS);const t=this.opt.additionalNamespaces;null!=t&&(nsMappingCheck(this,t),Object.assign(this.ns,t))}else this.nameStartCheck=isNameStartChar,this.nameCheck=isNameChar,this.isName=isName,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var t;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=FORBIDDEN_START,this.attribList=[];const{fragmentOpt:s}=this;this.state=s?S_TEXT:S_BEGIN,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=s,this.xmlDeclPossible=!s,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:e}=this.opt;if(void 0===e){if(!0===this.opt.forceXMLVersion)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");e="1.0"}this.setXMLVersion(e),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(XML_ENTITIES),null===(t=this.readyHandler)||void 0===t||t.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(t,s){this[EVENT_NAME_TO_HANDLER_NAME[t]]=s}off(t){this[EVENT_NAME_TO_HANDLER_NAME[t]]=void 0}makeError(t){var s;let e=null!==(s=this.fileName)&&void 0!==s?s:"";return this.trackPosition&&(e.length>0&&(e+=":"),e+=`${this.line}:${this.column}`),e.length>0&&(e+=": "),new Error(e+t)}fail(t){const s=this.makeError(t),e=this.errorHandler;if(void 0===e)throw s;return e(s),this}write(t){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let s=!1;null===t?(s=!0,t=""):"object"==typeof t&&(t=t.toString()),void 0!==this.carriedFromPrevious&&(t=`${this.carriedFromPrevious}${t}`,this.carriedFromPrevious=void 0);let e=t.length;const i=t.charCodeAt(e-1);!s&&(i===CR||i>=55296&&i<=56319)&&(this.carriedFromPrevious=t[e-1],e--,t=t.slice(0,e));const{stateTable:a}=this;for(this.chunk=t,this.i=0;this.i=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>=SPACE||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:return t.charCodeAt(s+1)===NL&&(this.i=s+2),this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCode11(){const{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return EOC;const e=t.charCodeAt(s);if(this.column++,e<55296){if(e>31&&e<127||e>159&&e!==LS||e===TAB)return e;switch(e){case NL:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL;case CR:{const e=t.charCodeAt(s+1);e!==NL&&e!==NEL||(this.i=s+2)}case NEL:case LS:return this.line++,this.column=0,this.positionAtNewLine=this.position,NL_LIKE;default:return this.fail("disallowed character."),e}}if(e>56319)return e>=57344&&e<=65533||this.fail("disallowed character."),e;const i=65536+1024*(e-55296)+(t.charCodeAt(s+1)-56320);return this.i=s+2,i>1114111&&this.fail("disallowed character."),i}getCodeNorm(){const t=this.getCode();return t===NL_LIKE?NL:t}unget(){this.i=this.prevI,this.column--}captureTo(t){let{i:s}=this;const{chunk:e}=this;for(;;){const i=this.getCode(),a=i===NL_LIKE,h=a?NL:i;if(h===EOC||t.includes(h))return this.text+=e.slice(s,this.prevI),h;a&&(this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i)}}captureToChar(t){let{i:s}=this;const{chunk:e}=this;for(;;){let i=this.getCode();switch(i){case NL_LIKE:this.text+=`${e.slice(s,this.prevI)}\n`,s=this.i,i=NL;break;case EOC:return this.text+=e.slice(s),!1}if(i===t)return this.text+=e.slice(s,this.prevI),!0}}captureNameChars(){const{chunk:t,i:s}=this;for(;;){const e=this.getCode();if(e===EOC)return this.name+=t.slice(s),EOC;if(!isNameChar(e))return this.name+=t.slice(s,this.prevI),e===NL_LIKE?NL:e}}skipSpaces(){for(;;){const t=this.getCodeNorm();if(t===EOC||!isS(t))return t}}setXMLVersion(t){this.currentXMLVersion=t,"1.0"===t?(this.isChar=isChar10,this.getCode=this.getCode10):(this.isChar=isChar11,this.getCode=this.getCode11)}sBegin(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=S_BEGIN_WHITESPACE}sBeginWhitespace(){const t=this.i,s=this.skipSpaces();switch(this.prevI!==t&&(this.xmlDeclPossible=!1),s){case LESS:if(this.state=S_OPEN_WAKA,0!==this.text.length)throw new Error("no-empty text at start");break;case EOC:break;default:this.unget(),this.state=S_TEXT,this.xmlDeclPossible=!1}}sDoctype(){var t;const s=this.captureTo(DOCTYPE_TERMINATOR);switch(s){case GREATER:null===(t=this.doctypeHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT,this.doctype=!0;break;case EOC:break;default:this.text+=String.fromCodePoint(s),s===OPEN_BRACKET?this.state=S_DTD:isQuote(s)&&(this.state=S_DOCTYPE_QUOTE,this.q=s)}}sDoctypeQuote(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.q=null,this.state=S_DOCTYPE)}sDTD(){const t=this.captureTo(DTD_TERMINATOR);t!==EOC&&(this.text+=String.fromCodePoint(t),t===CLOSE_BRACKET?this.state=S_DOCTYPE:t===LESS?this.state=S_DTD_OPEN_WAKA:isQuote(t)&&(this.state=S_DTD_QUOTED,this.q=t))}sDTDQuoted(){const t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.state=S_DTD,this.q=null)}sDTDOpenWaka(){const t=this.getCodeNorm();switch(this.text+=String.fromCodePoint(t),t){case BANG:this.state=S_DTD_OPEN_WAKA_BANG,this.openWakaBang="";break;case QUESTION:this.state=S_DTD_PI;break;default:this.state=S_DTD}}sDTDOpenWakaBang(){const t=String.fromCodePoint(this.getCodeNorm()),s=this.openWakaBang+=t;this.text+=t,"-"!==s&&(this.state="--"===s?S_DTD_COMMENT:S_DTD,this.openWakaBang="")}sDTDComment(){this.captureToChar(MINUS)&&(this.text+="-",this.state=S_DTD_COMMENT_ENDING)}sDTDCommentEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),this.state=t===MINUS?S_DTD_COMMENT_ENDED:S_DTD_COMMENT}sDTDCommentEnded(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER?this.state=S_DTD:(this.fail("malformed comment."),this.state=S_DTD_COMMENT)}sDTDPI(){this.captureToChar(QUESTION)&&(this.text+="?",this.state=S_DTD_PI_ENDING)}sDTDPIEnding(){const t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===GREATER&&(this.state=S_DTD)}sText(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:t}=this;const{chunk:s}=this;t:for(;;)switch(this.getCode()){case NL_LIKE:this.entity+=`${s.slice(t,this.prevI)}\n`,t=this.i;break;case SEMICOLON:{const{entityReturnState:e}=this,i=this.entity+s.slice(t,this.prevI);let a;this.state=e,""===i?(this.fail("empty entity name."),a="&;"):(a=this.parseEntity(i),this.entity=""),e===S_TEXT&&void 0===this.textHandler||(this.text+=a);break t}case EOC:this.entity+=s.slice(t);break t}}sOpenWaka(){const t=this.getCode();if(isNameStartChar(t))this.state=S_OPEN_TAG,this.unget(),this.xmlDeclPossible=!1;else switch(t){case FORWARD_SLASH:this.state=S_CLOSE_TAG,this.xmlDeclPossible=!1;break;case BANG:this.state=S_OPEN_WAKA_BANG,this.openWakaBang="",this.xmlDeclPossible=!1;break;case QUESTION:this.state=S_PI_FIRST_CHAR;break;default:this.fail("disallowed character in tag name"),this.state=S_TEXT,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=S_CDATA,this.openWakaBang="";break;case"--":this.state=S_COMMENT,this.openWakaBang="";break;case"DOCTYPE":this.state=S_DOCTYPE,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(MINUS)&&(this.state=S_COMMENT_ENDING)}sCommentEnding(){var t;const s=this.getCodeNorm();s===MINUS?(this.state=S_COMMENT_ENDED,null===(t=this.commentHandler)||void 0===t||t.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(s)}`,this.state=S_COMMENT)}sCommentEnded(){const t=this.getCodeNorm();t!==GREATER?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(t)}`,this.state=S_COMMENT):this.state=S_TEXT}sCData(){this.captureToChar(CLOSE_BRACKET)&&(this.state=S_CDATA_ENDING)}sCDataEnding(){const t=this.getCodeNorm();t===CLOSE_BRACKET?this.state=S_CDATA_ENDING_2:(this.text+=`]${String.fromCodePoint(t)}`,this.state=S_CDATA)}sCDataEnding2(){var t;const s=this.getCodeNorm();switch(s){case GREATER:null===(t=this.cdataHandler)||void 0===t||t.call(this,this.text),this.text="",this.state=S_TEXT;break;case CLOSE_BRACKET:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(s)}`,this.state=S_CDATA}}sPIFirstChar(){const t=this.getCodeNorm();this.nameStartCheck(t)?(this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST):t===QUESTION||isS(t)?(this.fail("processing instruction without a target."),this.state=t===QUESTION?S_PI_ENDING:S_PI_BODY):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(t),this.state=S_PI_REST)}sPIRest(){const{chunk:t,i:s}=this;for(;;){const e=this.getCodeNorm();if(e===EOC)return void(this.piTarget+=t.slice(s));if(!this.nameCheck(e)){this.piTarget+=t.slice(s,this.prevI);const i=e===QUESTION;i||isS(e)?"xml"===this.piTarget?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=i?S_XML_DECL_ENDING:S_XML_DECL_NAME_START):this.state=i?S_PI_ENDING:S_PI_BODY:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(e));break}}}sPIBody(){if(0===this.text.length){const t=this.getCodeNorm();t===QUESTION?this.state=S_PI_ENDING:isS(t)||(this.text=String.fromCodePoint(t))}else this.captureToChar(QUESTION)&&(this.state=S_PI_ENDING)}sPIEnding(){var t;const s=this.getCodeNorm();if(s===GREATER){const{piTarget:s}=this;"xml"===s.toLowerCase()&&this.fail("the XML declaration must appear at the start of the document."),null===(t=this.piHandler)||void 0===t||t.call(this,{target:s,body:this.text}),this.piTarget=this.text="",this.state=S_TEXT}else s===QUESTION?this.text+="?":(this.text+=`?${String.fromCodePoint(s)}`,this.state=S_PI_BODY);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const t=this.skipSpaces();t!==QUESTION?t!==EOC&&(this.state=S_XML_DECL_NAME,this.name=String.fromCodePoint(t)):this.state=S_XML_DECL_ENDING}sXMLDeclName(){const t=this.captureTo(XML_DECL_NAME_TERMINATOR);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.name+=this.text,this.text="",void this.fail("XML declaration is incomplete.");if(isS(t)||t===EQUAL){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=t===EQUAL?S_XML_DECL_VALUE_START:S_XML_DECL_EQ}}sXMLDeclEq(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(t!==EQUAL&&this.fail("value required."),this.state=S_XML_DECL_VALUE_START)}sXMLDeclValueStart(){const t=this.getCodeNorm();if(t===QUESTION)return this.state=S_XML_DECL_ENDING,void this.fail("XML declaration is incomplete.");isS(t)||(isQuote(t)?this.q=t:(this.fail("value must be quoted."),this.q=SPACE),this.state=S_XML_DECL_VALUE)}sXMLDeclValue(){const t=this.captureTo([this.q,QUESTION]);if(t===QUESTION)return this.state=S_XML_DECL_ENDING,this.text="",void this.fail("XML declaration is incomplete.");if(t===EOC)return;const s=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const t=s;this.xmlDecl.version=t,/^1\.[0-9]+$/.test(t)?this.opt.forceXMLVersion||this.setXMLVersion(t):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(s)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=s;break;case"standalone":"yes"!==s&&"no"!==s&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=s}this.name="",this.state=S_XML_DECL_SEPARATOR}sXMLDeclSeparator(){const t=this.getCodeNorm();t!==QUESTION?(isS(t)||(this.fail("whitespace required."),this.unget()),this.state=S_XML_DECL_NAME_START):this.state=S_XML_DECL_ENDING}sXMLDeclEnding(){var t;this.getCodeNorm()===GREATER?("xml"!==this.piTarget?this.fail("processing instructions are not allowed before root."):"version"!==this.name&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),null===(t=this.xmldeclHandler)||void 0===t||t.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=S_TEXT):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var t;const s=this.captureNameChars();if(s===EOC)return;const e=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=e.ns=Object.create(null)),null===(t=this.openTagStartHandler)||void 0===t||t.call(this,e),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),s){case GREATER:this.openTag();break;case FORWARD_SLASH:this.state=S_OPEN_TAG_SLASH;break;default:isS(s)||this.fail("disallowed character in tag name."),this.state=S_ATTRIB}}sOpenTagSlash(){this.getCode()===GREATER?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=S_ATTRIB)}sAttrib(){const t=this.skipSpaces();t!==EOC&&(isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:this.fail("disallowed character in attribute name."))}sAttribName(){const t=this.captureNameChars();t===EQUAL?this.state=S_ATTRIB_VALUE:isS(t)?this.state=S_ATTRIB_NAME_SAW_WHITE:t===GREATER?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):t!==EOC&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const t=this.skipSpaces();switch(t){case EOC:return;case EQUAL:this.state=S_ATTRIB_VALUE;break;default:this.fail("attribute without value."),this.text="",this.name="",t===GREATER?this.openTag():isNameStartChar(t)?(this.unget(),this.state=S_ATTRIB_NAME):(this.fail("disallowed character in attribute name."),this.state=S_ATTRIB)}}sAttribValue(){const t=this.getCodeNorm();isQuote(t)?(this.q=t,this.state=S_ATTRIB_VALUE_QUOTED):isS(t)||(this.fail("unquoted attribute value."),this.state=S_ATTRIB_VALUE_UNQUOTED,this.unget())}sAttribValueQuoted(){const{q:t,chunk:s}=this;let{i:e}=this;for(;;)switch(this.getCode()){case t:return this.pushAttrib(this.name,this.text+s.slice(e,this.prevI)),this.name=this.text="",this.q=null,void(this.state=S_ATTRIB_VALUE_CLOSED);case AMP:return this.text+=s.slice(e,this.prevI),this.state=S_ENTITY,void(this.entityReturnState=S_ATTRIB_VALUE_QUOTED);case NL:case NL_LIKE:case TAB:this.text+=`${s.slice(e,this.prevI)} `,e=this.i;break;case LESS:return this.text+=s.slice(e,this.prevI),void this.fail("disallowed character.");case EOC:return void(this.text+=s.slice(e))}}sAttribValueClosed(){const t=this.getCodeNorm();isS(t)?this.state=S_ATTRIB:t===GREATER?this.openTag():t===FORWARD_SLASH?this.state=S_OPEN_TAG_SLASH:isNameStartChar(t)?(this.fail("no whitespace between attributes."),this.unget(),this.state=S_ATTRIB_NAME):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const t=this.captureTo(ATTRIB_VALUE_UNQUOTED_TERMINATOR);switch(t){case AMP:this.state=S_ENTITY,this.entityReturnState=S_ATTRIB_VALUE_UNQUOTED;break;case LESS:this.fail("disallowed character.");break;case EOC:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",t===GREATER?this.openTag():this.state=S_ATTRIB}}sCloseTag(){const t=this.captureNameChars();t===GREATER?this.closeTag():isS(t)?this.state=S_CLOSE_TAG_SAW_WHITE:t!==EOC&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case GREATER:this.closeTag();break;case EOC:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:t,forbiddenState:s}=this;const{chunk:e,textHandler:i}=this;t:for(;;)switch(this.getCode()){case LESS:if(this.state=S_OPEN_WAKA,void 0!==i){const{text:s}=this,a=e.slice(t,this.prevI);0!==s.length?(i(s+a),this.text=""):0!==a.length&&i(a)}s=FORBIDDEN_START;break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==i&&(this.text+=e.slice(t,this.prevI)),s=FORBIDDEN_START;break t;case CLOSE_BRACKET:switch(s){case FORBIDDEN_START:s=FORBIDDEN_BRACKET;break;case FORBIDDEN_BRACKET:s=FORBIDDEN_BRACKET_BRACKET;break;case FORBIDDEN_BRACKET_BRACKET:break;default:throw new Error("impossible state")}break;case GREATER:s===FORBIDDEN_BRACKET_BRACKET&&this.fail('the string "]]>" is disallowed in char data.'),s=FORBIDDEN_START;break;case NL_LIKE:void 0!==i&&(this.text+=`${e.slice(t,this.prevI)}\n`),t=this.i,s=FORBIDDEN_START;break;case EOC:void 0!==i&&(this.text+=e.slice(t));break t;default:s=FORBIDDEN_START}this.forbiddenState=s}handleTextOutsideRoot(){let{i:t}=this;const{chunk:s,textHandler:e}=this;let i=!1;t:for(;;){const a=this.getCode();switch(a){case LESS:if(this.state=S_OPEN_WAKA,void 0!==e){const{text:i}=this,a=s.slice(t,this.prevI);0!==i.length?(e(i+a),this.text=""):0!==a.length&&e(a)}break t;case AMP:this.state=S_ENTITY,this.entityReturnState=S_TEXT,void 0!==e&&(this.text+=s.slice(t,this.prevI)),i=!0;break t;case NL_LIKE:void 0!==e&&(this.text+=`${s.slice(t,this.prevI)}\n`),t=this.i;break;case EOC:void 0!==e&&(this.text+=s.slice(t));break t;default:isS(a)||(i=!0)}}i&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(t,s){var e;const{prefix:i,local:a}=this.qname(t),h={name:t,prefix:i,local:a,value:s};if(this.attribList.push(h),null===(e=this.attributeHandler)||void 0===e||e.call(this,h),"xmlns"===i){const t=s.trim();"1.0"===this.currentXMLVersion&&""===t&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[a]=t,nsPairCheck(this,a,t)}else if("xmlns"===t){const t=s.trim();this.topNS[""]=t,nsPairCheck(this,"",t)}}pushAttribPlain(t,s){var e;const i={name:t,value:s};this.attribList.push(i),null===(e=this.attributeHandler)||void 0===e||e.call(this,i)}end(){var t,s;this.sawRoot||this.fail("document must contain a root element.");const{tags:e}=this;for(;e.length>0;){const t=e.pop();this.fail(`unclosed tag: ${t.name}`)}this.state!==S_BEGIN&&this.state!==S_TEXT&&this.fail("unexpected end.");const{text:i}=this;return 0!==i.length&&(null===(t=this.textHandler)||void 0===t||t.call(this,i),this.text=""),this._closed=!0,null===(s=this.endHandler)||void 0===s||s.call(this),this._init(),this}resolve(t){var s,e;let i=this.topNS[t];if(void 0!==i)return i;const{tags:a}=this;for(let s=a.length-1;s>=0;s--)if(void 0!==(i=a[s].ns[t]))return i;return void 0!==(i=this.ns[t])?i:null===(e=(s=this.opt).resolvePrefix)||void 0===e?void 0:e.call(s,t)}qname(t){const s=t.indexOf(":");if(-1===s)return{prefix:"",local:t};const e=t.slice(s+1),i=t.slice(0,s);return(""===i||""===e||e.includes(":"))&&this.fail(`malformed name: ${t}.`),{prefix:i,local:e}}processAttribsNS(){var t;const{attribList:s}=this,e=this.tag;{const{prefix:s,local:i}=this.qname(e.name);e.prefix=s,e.local=i;const a=e.uri=null!==(t=this.resolve(s))&&void 0!==t?t:"";""!==s&&("xmlns"===s&&this.fail('tags may not have "xmlns" as prefix.'),""===a&&(this.fail(`unbound namespace prefix: ${JSON.stringify(s)}.`),e.uri=s))}if(0===s.length)return;const{attributes:i}=e,a=new Set;for(const t of s){const{name:s,prefix:e,local:h}=t;let o,n;""===e?(o="xmlns"===s?XMLNS_NAMESPACE:"",n=s):(void 0===(o=this.resolve(e))&&(this.fail(`unbound namespace prefix: ${JSON.stringify(e)}.`),o=e),n=`{${o}}${h}`),a.has(n)&&this.fail(`duplicate attribute: ${n}.`),a.add(n),t.uri=o,i[s]=t}this.attribList=[]}processAttribsPlain(){const{attribList:t}=this,s=this.tag.attributes;for(const{name:e,value:i}of t)void 0!==s[e]&&this.fail(`duplicate attribute: ${e}.`),s[e]=i;this.attribList=[]}openTag(){var t;this.processAttribs();const{tags:s}=this,e=this.tag;e.isSelfClosing=!1,null===(t=this.openTagHandler)||void 0===t||t.call(this,e),s.push(e),this.state=S_TEXT,this.name=""}openSelfClosingTag(){var t,s,e;this.processAttribs();const{tags:i}=this,a=this.tag;a.isSelfClosing=!0,null===(t=this.openTagHandler)||void 0===t||t.call(this,a),null===(s=this.closeTagHandler)||void 0===s||s.call(this,a),null===(this.tag=null!==(e=i[i.length-1])&&void 0!==e?e:null)&&(this.closedRoot=!0),this.state=S_TEXT,this.name=""}closeTag(){const{tags:t,name:s}=this;if(this.state=S_TEXT,this.name="",""===s)return this.fail("weird empty close tag."),void(this.text+="");const e=this.closeTagHandler;let i=t.length;for(;i-- >0;){const i=this.tag=t.pop();if(this.topNS=i.ns,null==e||e(i),i.name===s)break;this.fail("unexpected close tag.")}0===i?this.closedRoot=!0:i<0&&(this.fail(`unmatched closing tag: ${s}.`),this.text+=``)}parseEntity(t){if("#"!==t[0]){const s=this.ENTITIES[t];return void 0!==s?s:(this.fail(this.isName(t)?"undefined entity.":"disallowed character in entity name."),`&${t};`)}let s=NaN;return"x"===t[1]&&/^#x[0-9a-f]+$/i.test(t)?s=parseInt(t.slice(2),16):/^#[0-9]+$/.test(t)&&(s=parseInt(t.slice(1),10)),this.isChar(s)?String.fromCodePoint(s):(this.fail("malformed character entity."),`&${t};`)}}exports.SaxesParser=SaxesParser; -},{"xmlchars/xml/1.0/ed5":96,"xmlchars/xml/1.1/ed2":97,"xmlchars/xmlns/1.0/ed3":98}],100:[function(require,module,exports){ +},{"xmlchars/xml/1.0/ed5":97,"xmlchars/xml/1.1/ed2":98,"xmlchars/xmlns/1.0/ed3":99}],101:[function(require,module,exports){ module.exports={ "name": "@jscad/x3d-deserializer", - "version": "2.2.8", + "version": "2.2.9", "description": "X3D Deserializer for JSCAD", "repository": "https://github.com/jscad/OpenJSCAD.org/", "main": "src/index.js", @@ -667,7 +675,8 @@ module.exports={ }, "dependencies": { "@jscad/array-utils": "2.1.4", - "@jscad/modeling": "2.12.3", + "@jscad/io-utils": "2.0.29", + "@jscad/modeling": "2.12.4", "saxes": "5.0.1" }, "devDependencies": { @@ -676,1609 +685,1609 @@ module.exports={ } } -},{}],101:[function(require,module,exports){ +},{}],102:[function(require,module,exports){ const inchMM=1/.03937;module.exports={inchMM:inchMM}; -},{}],102:[function(require,module,exports){ +},{}],103:[function(require,module,exports){ const{maths:maths}=require("@jscad/modeling"),createTransform=(t,a,m,s,e)=>{const r=maths.mat4.create(),o=maths.mat4.create();return maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,e)),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,t)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,a[3],a)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],s)),maths.mat4.multiply(r,r,maths.mat4.fromScaling(o,m)),maths.mat4.multiply(r,r,maths.mat4.fromRotation(o,s[3],maths.vec3.negate(maths.vec3.create(),s))),maths.mat4.multiply(r,r,maths.mat4.fromTranslation(o,maths.vec3.negate(maths.vec3.create(),t))),r};module.exports=createTransform; -},{"@jscad/modeling":211}],103:[function(require,module,exports){ +},{"@jscad/modeling":212}],104:[function(require,module,exports){ const{extrusions:extrusions,geometries:geometries,maths:maths}=require("@jscad/modeling"),{mat4:mat4,vec3:vec3,utils:utils}=maths,{extrudeFromSlices:extrudeFromSlices,slice:slice}=extrusions,calculateYaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];for(let r=0;re[0]+0===0&&e[1]+0===0&&e[2]+0===0,calculateZaxis=(e,t,a,c)=>{const r=vec3.subtract(vec3.create(),c,a),s=vec3.subtract(vec3.create(),t,a);return vec3.normalize(e,vec3.cross(e,r,s))},calculateZaxes=e=>{const t=e.length,a=vec3.equals(e[0],e[t-1]),c=[];let r;for(let s=0;s2&&calculateZaxis(o,e[0],e[1],e[2]):s===t-1?a?calculateZaxis(o,e[t-2],e[0],e[1]):t>2&&calculateZaxis(o,e[t-3],e[t-2],e[t-1]):calculateZaxis(o,e[s-1],e[s],e[s+1]),r&&vec3.dot(r,o)<0&&vec3.negate(o,o),c.push(o),r=o}if(isZeroVector(c[0]))for(let e=1;e{const a=[];for(let c=0;c(e[0]=t[0],e[1]=a[0],e[2]=c[0],e[3]=0,e[4]=t[1],e[5]=a[1],e[6]=c[1],e[7]=0,e[8]=t[2],e[9]=a[2],e[10]=c[2],e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e),extrudeX3D=e=>{let{beginCap:t,endCap:a,crossSection:c,orientations:r,scales:s,spine:o}=Object.assign({},e);if(utils.area(c)<0&&c.reverse(),1===s.length&&(s=o.map(e=>s[0])),1===r.length&&(r=o.map(e=>r[0])),o.length!==s.length||o.length!==r.length)throw new Error(`invalid X3D specification; spine scale orientaion length must be the same; ${o.length}`);const l=geometries.geom2.fromPoints(c),i=slice.fromSides(geometries.geom2.toSides(l));let n=calculateYaxes(o),m=calculateZaxes(o),u=calculateXaxes(n,m);const v=[0,1,0],g=mat4.fromVectorRotation(mat4.create(),vec3.fromValues(0,0,1),v);return m.reduce((e,t)=>e&&isZeroVector(t),!0)&&(vec3.subtract(v,o[1],o[0]),mat4.fromVectorRotation(g,vec3.fromValues(0,0,1),v),u=u.map(e=>[1,0,0]),n=n.map(e=>[0,1,0]),m=m.map(e=>[0,0,1])),extrudeFromSlices({numberOfSlices:o.length,capStart:t,capEnd:a,callback:function(e,t,a){const c=o[t],l=vec3.fromVec2(vec3.create(),s[t],1),i=r[t],v=u[t],f=n[t],x=m[t],h=mat4.fromTranslation(mat4.create(),c),p=mat4.fromScaling(mat4.create(),l),d=rotationMatrixFromSCP(mat4.create(),v,f,x),b=mat4.fromRotation(mat4.create(),i[3],i),Z=mat4.create();mat4.multiply(Z,g,Z),mat4.multiply(Z,d,Z),mat4.multiply(Z,b,Z),mat4.multiply(Z,h,Z);let S=a;return S=slice.transform(p,S),S=slice.transform(Z,S)}},i)};module.exports=extrudeX3D; -},{"@jscad/modeling":211}],104:[function(require,module,exports){ -const version=require("../package.json").version,translate=require("./translate"),instantiate=require("./instantiate"),deserialize=(e,t)=>{const i={filename:"x3d",output:"script",version:version,flatten:!0,addMetaData:!0};return"script"===(e=Object.assign({},i,e)).output?translate(e,t):instantiate(e,t)},extension="x3d";module.exports={deserialize:deserialize,extension:"x3d"}; +},{"@jscad/modeling":212}],105:[function(require,module,exports){ +const{ensureString:ensureString}=require("@jscad/io-utils"),version=require("../package.json").version,translate=require("./translate"),instantiate=require("./instantiate"),deserialize=(e,t)=>{const i={filename:"x3d",output:"script",version:version,flatten:!0,addMetaData:!0};return e=Object.assign({},i,e),t=ensureString(t),"script"===e.output?translate(e,t):instantiate(e,t)},extension="x3d";module.exports={deserialize:deserialize,extension:"x3d"}; -},{"../package.json":100,"./instantiate":105,"./translate":112}],105:[function(require,module,exports){ +},{"../package.json":101,"./instantiate":106,"./translate":113,"@jscad/io-utils":66}],106:[function(require,module,exports){ const{flatten:flatten}=require("@jscad/array-utils"),parse=require("./parse"),instantiateDefinitions=require("./instantiateDefinitions"),{x3dTypes:x3dTypes}=require("./objects"),instantiate=(t,e)=>{const s={pxPmm:require("./constants").pxPmm};t=Object.assign({},s,t);const{pxPmm:a}=t;t&&t.statusCallback&&t.statusCallback({progress:0});const{x3dObj:n}=parse(e,a);if(n.definition!==x3dTypes.X3D||!n.objects)throw new Error("X3D malformed");if(n.objects.length<1||n.objects[0].definition!==x3dTypes.SCENE)throw new Error("X3D did not define a SCENE");t&&t.statusCallback&&t.statusCallback({progress:50});const i=n.objects[0].objects;let r=instantiateDefinitions(t,i);return t.flatten&&(r=flatten(r)),t&&t.statusCallback&&t.statusCallback({progress:100}),r};module.exports=instantiate; -},{"./constants":101,"./instantiateDefinitions":106,"./objects":110,"./parse":111,"@jscad/array-utils":527}],106:[function(require,module,exports){ +},{"./constants":102,"./instantiateDefinitions":107,"./objects":111,"./parse":112,"@jscad/array-utils":528}],107:[function(require,module,exports){ const{colors:colors,transforms:transforms}=require("@jscad/modeling"),createTransform=require("./createTransform"),{x3dTypes:x3dTypes}=require("./objects"),{findColor:findColor}=require("./translateHelpers"),instantiatePrimitive=require("./instantiatePrimitive"),{instantiateLine:instantiateLine}=require("./instantiateLine"),{instantiateMesh:instantiateMesh}=require("./instantiateMesh"),instantiatedList=new Map,instantiateTransform=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);if(0===i.length)return null;const e=createTransform(n.center,n.rotation,n.scale,n.scaleOrientation,n.translation);return i.map(t=>{const n=t.color;return t=transforms.transform(e,t),n&&(t.color=n),t})},instantiateShape=(t,n)=>{const i=n.objects,e=findColor(i,t);let a=instantiatePrimitive(t,i);return a||(a=instantiateMesh(t,i)),a||(a=instantiateLine(t,i)),a||(a=null),a&&e&&(a=colors.colorize(e,a)),a},instantiateGroup=(t,n)=>{const i=n.objects.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return 0===i.length?null:i},instantiateDefinition=(t,n)=>{let i;switch(n.definition){case x3dTypes.TRANSFORM:i=instantiateTransform(t,n);break;case x3dTypes.SHAPE:i=instantiateShape(t,n);break;case x3dTypes.GROUP:i=instantiateGroup(t,n);break;default:console.log("WARNING: unknown definition: "+n.definition)}return i},instantiateDefinitions=(t,n)=>{const i=n.map(n=>instantiateDefinition(t,n)).filter(t=>null!=t);return instantiatedList.clear(),i};module.exports=instantiateDefinitions; -},{"./createTransform":102,"./instantiateLine":107,"./instantiateMesh":108,"./instantiatePrimitive":109,"./objects":110,"./translateHelpers":114,"@jscad/modeling":211}],107:[function(require,module,exports){ +},{"./createTransform":103,"./instantiateLine":108,"./instantiateMesh":109,"./instantiatePrimitive":110,"./objects":111,"./translateHelpers":115,"@jscad/modeling":212}],108:[function(require,module,exports){ const jscad=require("@jscad/modeling"),{createColors:createColors,findNode:findNode}=require("./translateHelpers"),{x3dTypes:x3dTypes}=require("./objects"),convertLine=(e,o)=>{let n=findNode(x3dTypes.INDEXEDLINESET,o);if(n){const e=findNode(x3dTypes.COORDINATE,n.objects),o=n.indexes,t=findNode(x3dTypes.COLOR,n.objects);if(e&&o){const r=o.map(o=>{let n=o.map(o=>e.points[o]);return n.findIndex(e=>0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D indexed line set was ignored"),n=[]),n});return!0===n.colorPerVertex?n.colorIndex=o:n.colorIndex=o.map((e,o)=>o),{pointsSet:r,colors:createColors(n,t)}}}if(n=findNode(x3dTypes.LINESET,o)){const e=findNode(x3dTypes.COORDINATE,n.objects),o=findNode(x3dTypes.COLOR,n.objects),t=n.vertexCount;if(e&&t){let r=0;const s=t.map(o=>{let n=[];for(let t=0;t0!==e[2])>=0&&(console.warn("WARNING: unsupported 3D line set was ignored"),n=[]),n});if(!0===n.colorPerVertex){let e=0;n.colorIndex=t.map(o=>{const n=[];for(let t=0;to);return{pointsSet:s,colors:createColors(n,o)}}}return null},instantiateLine=(e,o)=>{let n;const t=convertLine(0,o);if(t){const{pointsSet:e,colors:o}=t;n=e.map((e,n)=>{let t;return t=o?jscad.colors.colorize(o[n],jscad.primitives.line(e)):jscad.primitives.line(e)})}return n};module.exports={convertLine:convertLine,instantiateLine:instantiateLine}; -},{"./objects":110,"./translateHelpers":114,"@jscad/modeling":211}],108:[function(require,module,exports){ +},{"./objects":111,"./translateHelpers":115,"@jscad/modeling":212}],109:[function(require,module,exports){ const{primitives:primitives}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,createColors:createColors}=require("./translateHelpers"),convertMesh=(e,o)=>{let t=findNode(x3dTypes.TRIANGLESET,o);if(t){const e=findNode(x3dTypes.COORDINATE,t.objects),o=findNode(x3dTypes.COLOR,t.objects);if(e){const n=e.points,s=n.length,r=Math.trunc(s/3),i=[];for(let e=0;e2){const s=e.points,r=Math.trunc(n.length/3),i=[];for(let e=0;e0){const s=e.points,r=n.length,i=[];for(let e=0;e0){const s=e.points,r=n.length,i=[];for(let e=0;e3){const s=e.points,r=Math.trunc(n.length/4),i=[];for(let e=0;e0){const s=e.points;return{type:`indexed faces (${o.length})`,points:s,faces:o,colors:createColors(t,n),orientation:t.ccw?"outward":"inward"}}}if(t=findNode(x3dTypes.ELEVATIONGRID,o)){const e=t.height,o=findNode(x3dTypes.COLOR,t.objects);if(e&&e.length>0){const n=t.xDimension,s=t.xSpacing,r=t.zDimension,i=t.zSpacing,d=[];let c=0;for(let o=0;o=c[0]&&c[1]>=c[2]&&c[1]>=c[3]&&(l=1),c[2]>=c[0]&&c[2]>=c[1]&&c[2]>=c[3]&&(l=2),c[3]>=c[0]&&c[3]>=c[1]&&c[3]>=c[2]&&(l=3),0===l&&a.push([s,d,r],[s,i,d]),1===l&&a.push([r,i,d],[r,s,i]),2===l&&a.push([i,r,s],[i,d,r]),3===l&&a.push([d,s,i],[d,r,s])}const l=t.ccw?"outward":"inward";return!0===t.colorPerVertex&&(t.colorIndex=a),{type:`elevation grid (${n} X ${r})`,points:d,faces:a,colors:createColors(t,o),orientation:l}}}return null},instantiateMesh=(e,o)=>{let t;const n=convertMesh(0,o);return n&&(t=primitives.polyhedron(n)),t};module.exports={convertMesh:convertMesh,instantiateMesh:instantiateMesh}; -},{"./objects":110,"./translateHelpers":114,"@jscad/modeling":211}],109:[function(require,module,exports){ +},{"./objects":111,"./translateHelpers":115,"@jscad/modeling":212}],110:[function(require,module,exports){ const{booleans:booleans,geometries:geometries,primitives:primitives,transforms:transforms}=require("@jscad/modeling"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode}=require("./translateHelpers"),extrudeX3D=require("./extrudeX3D"),instantiatePrimitive=(e,i)=>{let s,r=findNode(x3dTypes.BOX,i);if(r)return s=primitives.cuboid({size:r.size});if(r=findNode(x3dTypes.CONE,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinderElliptic({startRadius:[r.bottomRadius,r.bottomRadius],height:r.height,segments:r.subdivision,endRadius:[r.topRadius,r.topRadius]}));if(r=findNode(x3dTypes.CYLINDER,i))return s=transforms.rotateX(-Math.PI/2,primitives.cylinder({radius:r.radius,height:r.height,segments:r.subdivision}));if(r=findNode(x3dTypes.SPHERE,i))return s=primitives.sphere({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.EXTRUSION,i))return s=extrudeX3D(r);if(r=findNode(x3dTypes.ARC2D,i))return s=primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision});if(r=findNode(x3dTypes.ARCCLOSE2D,i))return s="PIE"===r.closureType?primitives.circle({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}):geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius:r.radius,startAngle:r.startAngle,endAngle:r.endAngle,segments:r.subdivision}))));if(r=findNode(x3dTypes.CIRCLE2D,i))return s=primitives.arc({radius:r.radius,segments:r.subdivision});if(r=findNode(x3dTypes.DISK2D,i))return s=r.innerRadius===r.outerRadius?primitives.arc({radius:r.outerRadius,segments:r.subdivision}):0===r.innerRadius?primitives.circle({radius:r.outerRadius,segments:r.subdivision}):booleans.subtract(primitives.circle({radius:r.outerRadius,segments:r.subdivision}),primitives.circle({radius:r.innerRadius,segments:r.subdivision}));if(r=findNode(x3dTypes.POLYLINE2D,i))return s=primitives.line([r.lineSegments]);if(r=findNode(x3dTypes.RECTANGLE2D,i))return s=primitives.rectangle({size:r.size});if(r=findNode(x3dTypes.TRIANGLESET2D,i)){const e=r.vertices,i=e.length,t=Math.trunc(i/3);s=[];for(let i=0;i{const n={definition:x3dTypes.X3D,objects:[]};return n},x3dUnit=e=>{const n={definition:x3dTypes.UNIT,category:"",name:"",conversionFactor:1};return e.category&&(n.category=e.category),e.name&&(n.name=e.name),e.conversionfactor&&(n.conversionFactor=e.conversionfactor),n},x3dMeta=e=>{const n={definition:x3dTypes.META,content:"",name:""};return e.content&&(n.content=e.content),e.name&&(n.name=e.name),n},x3dScene=e=>{const n={definition:x3dTypes.SCENE,objects:[]};return n},x3dTransform=e=>{const n={definition:x3dTypes.TRANSFORM,center:[0,0,0],rotation:[0,0,1,0],scale:[1,1,1],scaleOrientation:[0,0,1,0],translation:[0,0,0]};if(e.center){const i=parseNumbers(e.center);i.length>2&&(n.center=i)}if(e.rotation){const i=parseNumbers(e.rotation);i.length>3&&(n.rotation=i)}if(e.scale){const i=parseNumbers(e.scale);i.length>2&&(n.scale=i)}if(e.scaleorientation){const i=parseNumbers(e.scaleorientation);i.length>3&&(n.scaleOrientation=i)}if(e.translation){const i=parseNumbers(e.translation);i.length>2&&(n.translation=i)}return n.objects=[],n},x3dShape=e=>{const n={definition:x3dTypes.SHAPE,objects:[]};return n},x3dBox=e=>{const n={definition:x3dTypes.BOX,size:[2,2,2]};if(e.size){const i=parseNumbers(e.size);i.length>2&&(n.size=i)}return n},x3dCone=e=>{const n={definition:x3dTypes.CONE,bottomRadius:1,height:2,subdivision:32,topRadius:1e-5};return e.bottomRadius&&(n.bottomRadius=Math.max(parseFloat(e.bottomRadius),1e-5)),e.height&&(n.height=parseFloat(e.height)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),e.topRadius&&(n.topRadius=Math.max(parseFloat(e.topRadius),1e-5)),n},x3dCylinder=e=>{const n={definition:x3dTypes.CYLINDER,height:2,radius:1,subdivision:32};return e.height&&(n.height=parseFloat(e.height)),e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dSphere=e=>{const n={definition:x3dTypes.SPHERE,radius:1,subdivision:24};if(e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision){const i=parseNumbers(e.subdivision);i.length>1&&(n.subdivision=Math.max(...i))}return n},x3dExtrusion=e=>{const n={definition:x3dTypes.EXTRUSION,ccw:!0,beginCap:!0,endCap:!0,crossSection:[[1,1],[1,-1],[-1,-1],[-1,1],[1,1]],orientations:[[0,0,1,0]],scales:[[1,1]],spine:[[0,0,0],[0,1,0]]};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.beginCap&&(n.beginCap=e.beginCap.includes("TRUE")||e.beginCap.includes("true")),e.endCap&&(n.endCap=e.endCap.includes("TRUE")||e.endCap.includes("true")),e.crossSection){const i=parseNumbers(e.crossSection),t=Math.trunc(i.length/2),s=[];for(let e=0;e{const n={definition:x3dTypes.ARC2D,endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.endAngle&&(n.endAngle=parseFloat(e.endAngle)),e.radius&&(n.radius=parseFloat(e.radius)),e.startAngle&&(n.startAngle=parseFloat(e.startAngle)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dArcClose2D=e=>{const n={definition:x3dTypes.ARCCLOSE2D,closureType:"PIE",endAngle:Math.PI/2,radius:1,startAngle:0,subdivision:32};return e.closureType&&(n.closureType=e.closureType),e.endAngle&&(n.endAngle=parseFloat(e.endAngle)),e.radius&&(n.radius=parseFloat(e.radius)),e.startAngle&&(n.startAngle=parseFloat(e.startAngle)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dCircle2D=e=>{const n={definition:x3dTypes.CIRCLE2D,radius:1,subdivision:32};return e.radius&&(n.radius=parseFloat(e.radius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dDisk2D=e=>{const n={definition:x3dTypes.DISK2D,innerRadius:0,outerRadius:1,subdivision:32};return e.innerRadius&&(n.innerRadius=parseFloat(e.innerRadius)),e.outerRadius&&(n.outerRadius=parseFloat(e.outerRadius)),e.subdivision&&(n.subdivision=parseFloat(e.subdivision)),n},x3dPolyline2D=e=>{const n={definition:x3dTypes.POLYLINE2D,lineSegments:[]};if(e.lineSegments){const i=parseNumbers(e.lineSegments);for(let e=0;e{const n={definition:x3dTypes.RECTANGLE2D,size:[2,2]};if(e.size){const i=parseNumbers(e.size);i.length>1&&(n.size=i)}return n},x3dTriangleSet2D=e=>{const n={definition:x3dTypes.TRIANGLESET2D,vertices:[]};if(e.vertices){const i=parseNumbers(e.vertices);for(let e=0;e{const n={definition:x3dTypes.LINESET,vertexCount:[],colorPerVertex:!0};return e.vertexCount&&(n.vertexCount=parseNumbers(e.vertexCount)),e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dIndexedLineSet=e=>{const n={definition:x3dTypes.INDEXEDLINESET,indexes:[],colorPerVertex:!0};if(e.coordIndex){const i=parseIndices(e.coordIndex);n.indexes=i.filter(e=>e.length>1)}return e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dColor=e=>{const n={definition:x3dTypes.COLOR,colors:[]};if(e.color){const i=parseNumbers(e.color),t=i.length,s=Math.trunc(t/3);for(let e=0;e{const n={definition:x3dTypes.COORDINATE,points:[]};if(e.point){const i=parseNumbers(e.point),t=i.length,s=Math.trunc(t/3);for(let e=0;e{const n={definition:x3dTypes.TRIANGLESET,ccw:!0,colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),n.objects=[],n},x3dTriangleFanSet=e=>{const n={definition:x3dTypes.TRIANGLEFANSET,ccw:!0,fanCount:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.fanCount&&(n.fanCount=parseNumbers(e.fanCount)),n.objects=[],n},x3dTriangleStripSet=e=>{const n={definition:x3dTypes.TRIANGLESTRIPSET,ccw:!0,stripCount:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.stripCount&&(n.stripCount=parseNumbers(e.stripCount)),n.objects=[],n},x3dQuadSet=e=>{const n={definition:x3dTypes.QUADSET,ccw:!0,colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),n.objects=[],n},x3dIndexedTriangleSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLESET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(n.index=parseNumbers(e.index)),n.objects=[],n},x3dIndexedTriangleFanSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLEFANSET,ccw:!0,fans:[],colorPerVertex:!0};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=parseIndices(e.index);n.fans=i.filter(e=>e.length>2)}return n.objects=[],n},x3dIndexedTriangleStripSet=e=>{const n={definition:x3dTypes.INDEXEDTRIANGLESTRIPSET,ccw:!0,strips:[],colorPerVertex:!0,objects:[]};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index){const i=parseIndices(e.index);n.strips=i.filter(e=>e.length>2)}return n},x3dIndexedQuadSet=e=>{const n={definition:x3dTypes.INDEXEDQUADSET,ccw:!0,index:[],colorPerVertex:!0};return e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.index&&(n.index=parseNumbers(e.index)),n.objects=[],n},x3dIndexedFaceSet=e=>{const n={definition:x3dTypes.INDEXEDFACESET,ccw:!0,convex:!0,faces:[],colorPerVertex:!0,colorIndex:null};if(e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.convex&&(n.convex=e.convex.includes("TRUE")||e.convex.includes("true")),e.coordIndex){const i=parseIndices(e.coordIndex);n.faces=i.filter(e=>e.length>2)}if(e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),e.colorIndex)if(n.colorPerVertex){const i=parseIndices(e.colorIndex);n.colorIndex=i.filter(e=>e.length>2)}else n.colorIndex=parseNumbers(e.colorIndex);else n.colorIndex=n.faces;return n.objects=[],n},x3dElevationGrid=e=>{const n={definition:x3dTypes.ELEVATIONGRID,xDimension:2,zDimension:2,xSpacing:1,zSpacing:1,height:[0,0,0,0],ccw:!0,solid:!1,colorPerVertex:!0};return e.xDimension&&(n.xDimension=parseFloat(e.xDimension)),e.zDimension&&(n.zDimension=parseFloat(e.zDimension)),e.xSpacing&&(n.xSpacing=parseFloat(e.xSpacing)),e.zSpacing&&(n.zSpacing=parseFloat(e.zSpacing)),e.height&&(n.height=parseNumbers(e.height)),e.ccw&&(n.ccw=e.ccw.includes("TRUE")||e.ccw.includes("true")),e.solid&&(n.solid=e.solid.includes("TRUE")||e.solid.includes("true")),e.colorPerVertex&&(n.colorPerVertex=e.colorPerVertex.includes("TRUE")||e.colorPerVertex.includes("true")),n.objects=[],n},x3dAppearance=e=>{const n={definition:x3dTypes.APPEARANCE,objects:[]};return n},x3dMaterial=e=>{const n={definition:x3dTypes.MATERIAL,color:[.8,.8,.8,1]};let i=1;if(e.transparency&&(i=1-e.transparency),e.diffuseColor){const t=parseNumbers(e.diffuseColor);t.length>2&&(t.length<4&&t.push(i),n.color=t)}if(e.emissiveColor){const t=parseNumbers(e.emissiveColor);t.length>2&&(t.length<4&&t.push(i),n.color=t)}return n},x3dGroup=e=>{const n={definition:x3dTypes.GROUP,objects:[]};return n},parseNumbers=e=>e.trim().replace(/,/g," ").split(/ +/).map(e=>parseFloat(e)),parseIndices=e=>{return e.replace(/,/g," ").trim().split(/ -1/).map(e=>parseNumbers(e))};module.exports={x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial}; -},{"@jscad/modeling":211}],111:[function(require,module,exports){ +},{"@jscad/modeling":212}],112:[function(require,module,exports){ const saxes=require("saxes"),{x3dTypes:x3dTypes,x3dX3D:x3dX3D,x3dUnit:x3dUnit,x3dMeta:x3dMeta,x3dScene:x3dScene,x3dTransform:x3dTransform,x3dShape:x3dShape,x3dGroup:x3dGroup,x3dBox:x3dBox,x3dCone:x3dCone,x3dCylinder:x3dCylinder,x3dSphere:x3dSphere,x3dExtrusion:x3dExtrusion,x3dArc2D:x3dArc2D,x3dArcClose2D:x3dArcClose2D,x3dCircle2D:x3dCircle2D,x3dDisk2D:x3dDisk2D,x3dPolyline2D:x3dPolyline2D,x3dRectangle2D:x3dRectangle2D,x3dTriangleSet2D:x3dTriangleSet2D,x3dColor:x3dColor,x3dCoordinate:x3dCoordinate,x3dTriangleSet:x3dTriangleSet,x3dTriangleFanSet:x3dTriangleFanSet,x3dTriangleStripSet:x3dTriangleStripSet,x3dQuadSet:x3dQuadSet,x3dIndexedTriangleSet:x3dIndexedTriangleSet,x3dIndexedTriangleFanSet:x3dIndexedTriangleFanSet,x3dIndexedTriangleStripSet:x3dIndexedTriangleStripSet,x3dIndexedQuadSet:x3dIndexedQuadSet,x3dIndexedFaceSet:x3dIndexedFaceSet,x3dElevationGrid:x3dElevationGrid,x3dLineSet:x3dLineSet,x3dIndexedLineSet:x3dIndexedLineSet,x3dAppearance:x3dAppearance,x3dMaterial:x3dMaterial}=require("./objects"),nodeToObjectMap={X3D:x3dX3D,UNIT:x3dUnit,META:x3dMeta,SCENE:x3dScene,TRANSFORM:x3dTransform,SHAPE:x3dShape,GROUP:x3dGroup,STATICGROUP:x3dGroup,BOX:x3dBox,CONE:x3dCone,CYLINDER:x3dCylinder,SPHERE:x3dSphere,EXTRUSION:x3dExtrusion,ARC2D:x3dArc2D,ARCCLOSE2D:x3dArcClose2D,CIRCLE2D:x3dCircle2D,DISK2D:x3dDisk2D,POLYLINE2D:x3dPolyline2D,RECTANGLE2D:x3dRectangle2D,TRIANGLESET2D:x3dTriangleSet2D,COLOR:x3dColor,COORDINATE:x3dCoordinate,TRIANGLESET:x3dTriangleSet,TRIANGLEFANSET:x3dTriangleFanSet,TRIANGLESTRIPSET:x3dTriangleStripSet,QUADSET:x3dQuadSet,INDEXEDTRIANGLESET:x3dIndexedTriangleSet,INDEXEDTRIANGLEFANSET:x3dIndexedTriangleFanSet,INDEXEDTRIANGLESTRIPSET:x3dIndexedTriangleStripSet,INDEXEDQUADSET:x3dIndexedQuadSet,INDEXEDFACESET:x3dIndexedFaceSet,ELEVATIONGRID:x3dElevationGrid,LINESET:x3dLineSet,INDEXEDLINESET:x3dIndexedLineSet,APPEARANCE:x3dAppearance,MATERIAL:x3dMaterial};let objectId=1;const getObjectId=()=>("0000"+objectId++).slice(-4),createX3DParser=(e,d)=>{const E=new saxes.SaxesParser,s=new Map;let T=null,a=x3dTypes.X3D,x=null;const n=[],t={factor:1,name:"meters"},c={factor:1,name:"radians"};return E.on("error",e=>{console.log(`error: line ${e.line}, column ${e.column}, bad character [${e.c}]`)}),E.on("opentag",e=>{const d=e.name.toUpperCase();let E=nodeToObjectMap[d]?nodeToObjectMap[d](e.attributes,{x3dObjects:n}):null;if(E){if(E.id=getObjectId(),e.attributes.USE){const d=e.attributes.USE;if(s.has(d)){const e=s.get(d);e.definition!==E.definition&&console.log(`WARNING: using a definition "${d}" of a different type; ${E.definition} vs ${e.definition}`),E=e}else console.log(`WARNING: definition "${d}" does not exist, using default for ${E.definition}`)}else if(e.attributes.DEF){const d=e.attributes.DEF;s.has(d)?console.log(`WARNING: redefintion of ${d} has been ignored`):s.set(d,E)}switch(E.definition){case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:case x3dTypes.GROUP:a=E.definition}switch(a){case x3dTypes.X3D:"objects"in E&&n.push(E),E.definition===x3dTypes.UNIT&&("length"===E.category&&(t.factor=E.conversionFactor,t.name=E.name),"angle"===E.category&&(c.factor=E.conversionFactor,c.name=E.name));break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:if(n.length>0){const e=n.pop();"objects"in e&&e.objects.push(E),n.push(e),"objects"in E&&n.push(E)}break;default:console.log("WARNING: invalid X3D definition")}T=E}}),E.on("closetag",e=>{switch(e.name.toUpperCase()){case"X3D":case"SCENE":case"TRANSFORM":case"SHAPE":case"GROUP":case"STATICGROUP":case"APPEARANCE":case"TRIANGLESET":case"TRIANGLEFANSET":case"TRIANGLESTRIPSET":case"QUADSET":case"INDEXEDTRIANGLESET":case"INDEXEDTRIANGLEFANSET":case"INDEXEDTRIANGLESTRIPSET":case"INDEXEDQUADSET":case"INDEXEDFACESET":case"ELEVATIONGRID":case"LINESET":case"INDEXEDLINESET":break;default:return}const d=()=>{n.length>0&&(a=n[n.length-1].definition)};let E=null;switch(a){case x3dTypes.X3D:n.length>0&&(E=n.pop(),d()),0===n.length&&(E.length=t,E.angle=c,x=E);break;case x3dTypes.SCENE:case x3dTypes.TRANSFORM:case x3dTypes.SHAPE:case x3dTypes.GROUP:case x3dTypes.APPEARANCE:case x3dTypes.TRIANGLESET:case x3dTypes.TRIANGLEFANSET:case x3dTypes.TRIANGLESTRIPSET:case x3dTypes.QUADSET:case x3dTypes.INDEXEDTRIANGLESET:case x3dTypes.INDEXEDTRIANGLEFANSET:case x3dTypes.INDEXEDTRIANGLESTRIPSET:case x3dTypes.INDEXEDQUADSET:case x3dTypes.INDEXEDFACESET:case x3dTypes.ELEVATIONGRID:case x3dTypes.LINESET:case x3dTypes.INDEXEDLINESET:n.length>0&&(E=n.pop(),d());break;default:console.log("WARNING: unhandled definition",a)}}),E.on("text",e=>{null!==e&&(e=e.trim()).length>0&&T&&0!==a&&(T.value=e)}),E.on("end",()=>{}),E.write(e).close(),{x3dObj:x,x3dMaterials:[],x3dTextures:[]}};module.exports=createX3DParser; -},{"./objects":110,"saxes":99}],112:[function(require,module,exports){ +},{"./objects":111,"saxes":100}],113:[function(require,module,exports){ const translateDefinitions=require("./translateDefinitions"),{x3dTypes:x3dTypes}=require("./objects"),parse=require("./parse"),translate=(e,t)=>{const n={pxPmm:require("./constants").pxPmm};e=Object.assign({},n,e);const{version:s,pxPmm:r,addMetaData:o,filename:a}=e;e&&e.statusCallback&&e.statusCallback({progress:0});const{x3dObj:i,x3dMaterials:c,x3dTextures:l}=parse(t,r);let b=o?`//\n// Produced by JSCAD IO Library : X3D Deserializer (${s})\n// date: ${new Date}\n// source: ${a}\n//\n`:"";if(!i)throw new Error("X3D parsing failed, no valid X3D data retrieved");return e&&e.statusCallback&&e.statusCallback({progress:50}),b+=codify(i,{x3dMaterials:c,x3dTextures:l}),e&&e.statusCallback&&e.statusCallback({progress:100}),b},codify=(e,t)=>{if(e.definition!==x3dTypes.X3D||!e.objects)throw new Error("X3D malformed");if(e.objects.length<1||e.objects[0].definition!==x3dTypes.SCENE)throw new Error("X3D did not define a SCENE");const n=e.objects[0].objects,s=e.length,r=e.angle;let o="";o=`// Objects : ${n.length}\n// Units : ${s.name} (${s.factor})\n// Angles : ${r.name} (${r.factor})\n\nconst {booleans, extrusions, geometries, maths, primitives, transforms, utils} = require('@jscad/modeling')\nconst { colorize } = require('@jscad/modeling').colors\n\nconst applyTransform = (matrix, ...objects) => {\n objects = utils.flatten(objects)\n if (objects.length === 0) return objects\n\n return objects.map((object) => {\n const color = object.color\n object = transforms.transform(matrix, object)\n if (color) object.color = color\n return object\n })\n}\n\nconst main = () => {\n let options = {}\n let objects = []\n`;for(let e=0;e{let n=`\n// transform\nconst createObjects${e.id} = (options) => {\n let objects = []\n`;const r=e.objects;for(let t=0;t{let n=`\n// group\nconst createObjects${e.id} = (options) => {\n let objects = []\n`;const r=e.objects;for(let t=0;t{if(translatedList.includes(e.id))return"";translatedList.push(e.id);let n="";switch(e.definition){case x3dTypes.TRANSFORM:n+=translateTransform(t,e);break;case x3dTypes.SHAPE:n+=translateShape(t,e);break;case x3dTypes.GROUP:n+=translateGroup(t,e);break;default:console.log("WARNING: unknown definition: "+e.definition)}return n},translateDefinitions=(t,e)=>e.reduce((e,n,r)=>e+=translateDefinition(t,n),"");module.exports=translateDefinitions; -},{"./createTransform":102,"./objects":110,"./translateShape":117}],114:[function(require,module,exports){ +},{"./createTransform":103,"./objects":111,"./translateShape":118}],115:[function(require,module,exports){ const{x3dTypes:x3dTypes}=require("./objects"),findNode=(r,o)=>o.find(o=>o.definition===r),findColor=(r,o)=>{const e=findNode(x3dTypes.APPEARANCE,r);let n;return e&&(n=findNode(x3dTypes.MATERIAL,e.objects))?n.color?n.color:null:(n=findNode(x3dTypes.MATERIAL,r))&&n.color?n.color:null},pointToString=r=>`[${r}]`,pointsToString=r=>{return`[\n ${r.map(r=>pointToString(r)).join(",\n ")}\n ]`},createColorsFromVertexColors=(r,o)=>{if(!Array.isArray(r)||!Array.isArray(o))return null;if(r.length<0||!Array.isArray(r[0]))return console.log("ERROR: WRONG FORMAT FOR VERTEXCOLORS"),null;const e=[];for(let n=0;n{if(!Array.isArray(r)||!Array.isArray(o))return null;return r.map(r=>o[r]?o[r]:null)},createColors=(r,o)=>{if(!o)return null;if(!Array.isArray(r.colorIndex))return null;let e=null;return e=!0===r.colorPerVertex?createColorsFromVertexColors(r.colorIndex,o.colors):createColorsFromFaceColors(r.colorIndex,o.colors)};module.exports={findNode:findNode,findColor:findColor,createColors:createColors,pointToString:pointToString,pointsToString:pointsToString}; -},{"./objects":110}],115:[function(require,module,exports){ +},{"./objects":111}],116:[function(require,module,exports){ const{pointsToString:pointsToString}=require("./translateHelpers"),{convertLine:convertLine}=require("./instantiateLine"),translateLine=(n,e)=>{const i=convertLine(n,e);if(i){const{pointsSet:n,colors:e}=i;let t=" let lines = []\n";return n.forEach((n,i)=>{if(e){const s=e[i];t+=` const line${i} = colorize([${s}], primitives.line(${pointsToString(n)}))\n lines.push(line${i})\n`}else t+=` const line${i} = primitives.line(${pointsToString(n)})\n lines.push(line${i})\n`}),{primitive:"...lines",code:t}}return null};module.exports=translateLine; -},{"./instantiateLine":107,"./translateHelpers":114}],116:[function(require,module,exports){ +},{"./instantiateLine":108,"./translateHelpers":115}],117:[function(require,module,exports){ const{pointsToString:pointsToString}=require("./translateHelpers"),{convertMesh:convertMesh}=require("./instantiateMesh"),translateToPolyhedron=(n,t,o,e,s)=>{const r=Array.isArray(e)?pointsToString(e):"null";return{primitive:"primitives.polyhedron({points, faces, colors, orientation})",code:`\n // 3D ${n} set: ${t.length} points, ${o.length} faces\n const points = ${pointsToString(t)}\n const faces = ${pointsToString(o)}\n const colors = ${r}\n const orientation = '${s}'\n`}},translateMesh=(n,t)=>{const o=convertMesh(n,t);if(o){const{type:n,points:t,faces:e,colors:s,orientation:r}=o;return translateToPolyhedron(n,t,e,s,r)}return null};module.exports=translateMesh; -},{"./instantiateMesh":108,"./translateHelpers":114}],117:[function(require,module,exports){ +},{"./instantiateMesh":109,"./translateHelpers":115}],118:[function(require,module,exports){ const{geometries:geometries}=require("@jscad/modeling"),{geom3:geom3,poly3:poly3}=geometries,extrudeX3D=require("./extrudeX3D"),{x3dTypes:x3dTypes}=require("./objects"),{findNode:findNode,findColor:findColor,pointsToString:pointsToString}=require("./translateHelpers"),translateLine=require("./translateLine"),translateMesh=require("./translateMesh"),translateShape=(e,i)=>{let s=`\n// shape\nconst createObjects${i.id} = (options) => {\n let objects = []\n`;const t=i.objects,n=findColor(t,e);let r,o=findNode(x3dTypes.BOX,t);if(o)r=`primitives.cuboid({size: [${o.size}]})`;else if(o=findNode(x3dTypes.CONE,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinderElliptic({startRadius: [${o.bottomRadius},${o.bottomRadius}], height: ${o.height}, segments: ${o.subdivision}, endRadius: [${o.topRadius}, ${o.topRadius}]}))\n`,r="shape";else if(o=findNode(x3dTypes.CYLINDER,t))s+=` const shape = transforms.rotateX(-Math.PI/2, primitives.cylinder({radius: ${o.radius}, height: ${o.height}, segments: ${o.subdivision}}))\n`,r="shape";else if(o=findNode(x3dTypes.SPHERE,t))r=`primitives.sphere({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.EXTRUSION,t)){const e=extrudeX3D(o);s+=` const polygons = [\n ${geom3.toPolygons(e).map(e=>pointsToString(poly3.toPoints(e))).join(",\n ")}\n]\n`,r="geometries.geom3.fromPoints(polygons)"}if(!r)if(o=findNode(x3dTypes.ARC2D,t))r=`primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.ARCCLOSE2D,t))r="PIE"===o.closureType?`primitives.circle({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}})`:`geometries.geom2.fromPoints(geometries.path2.toPoints(geometries.path2.close(primitives.arc({radius: ${o.radius}, startAngle: ${o.startAngle}, endAngle: ${o.endAngle}, segments: ${o.subdivision}}))))`;else if(o=findNode(x3dTypes.CIRCLE2D,t))r=`primitives.arc({radius: ${o.radius}, segments: ${o.subdivision}})`;else if(o=findNode(x3dTypes.DISK2D,t))r=o.innerRadius===o.outerRadius?`primitives.arc({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:0===o.innerRadius?`primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}})`:`booleans.subtract(primitives.circle({radius: ${o.outerRadius}, segments: ${o.subdivision}}), primitives.circle({radius: ${o.innerRadius}, segments: ${o.subdivision}}))`;else if(o=findNode(x3dTypes.POLYLINE2D,t)){r=`primitives.line([[${o.lineSegments.join("], [")}]])`}else if(o=findNode(x3dTypes.RECTANGLE2D,t))r=`primitives.rectangle({size: [${o.size}]})`;else if(o=findNode(x3dTypes.TRIANGLESET2D,t)){const e=o.vertices.length,i=Math.trunc(e/3);s+=`\n // 2D triangle set: ${e} points, ${i} faces\n const vertices = ${pointsToString(o.vertices)}\n const triangles = []\n for (let i = 0; i < ${i}; i = i + 3) {\n triangles.push(geometries.geom2.fromPoints([vertices[i], vertices[i + 1], vertices[i + 2]]))\n }\n`,r="triangles"}let d=translateMesh(e,t);return d&&(r=d.primitive,s+=d.code),(d=translateLine(e,t))&&(r=d.primitive,s+=d.code),r&&(s+=n?` objects.push(colorize([${n}], ${r}))`:` objects.push(${r})`),s+="\n return objects\n}\n"};module.exports=translateShape; -},{"./extrudeX3D":103,"./objects":110,"./translateHelpers":114,"./translateLine":115,"./translateMesh":116,"@jscad/modeling":211}],118:[function(require,module,exports){ +},{"./extrudeX3D":104,"./objects":111,"./translateHelpers":115,"./translateLine":116,"./translateMesh":117,"@jscad/modeling":212}],119:[function(require,module,exports){ "use strict";const isObject=t=>t&&"[object Object]"===Object.prototype.toString.call(t);function indenter(t){if(!(t>0))return t=>t;var e=" ".repeat(t);return t=>{if("string"!=typeof t)return t;const n=t.split("\n");return 1===n.length?e+t:n.map(t=>""===t.trim()?t:e+t).join("\n")}}const clean=t=>t.split("\n").filter(t=>""!==t.trim()).join("\n");function stringify(t,e){const n=e>0?"\n":"",r=indenter(e);return function t(e){let i,o="",s=!0;return e.some((e,r,c)=>{if(0===r)return i="<"+e,1===c.length;if(1===r){if(isObject(e))return Object.keys(e).map(t=>{let n=e[t];Array.isArray(n)&&(n=n.join(" ")),i+=" "+t+'="'+n+'"'}),2===c.length||void(i+=">");i+=">"}switch(typeof e){case"string":case"number":case"boolean":case"undefined":return void(o+=e+n)}s=!1,o+=t(e)})?i+"/>"+n:s?i+clean(o)+""+n:i+n+r(o)+""+n}(t)}module.exports=stringify; -},{}],119:[function(require,module,exports){ +},{}],120:[function(require,module,exports){ const{geometries:geometries,modifiers:modifiers}=require("@jscad/modeling"),{geom2:geom2,geom3:geom3,path2:path2,poly2:poly2,poly3:poly3}=geometries,{flatten:flatten}=require("@jscad/array-utils"),stringify=require("onml/lib/stringify"),mimeType="model/x3d+xml",defNames=new Map,serialize=(e,...o)=>{if(e=Object.assign({},{color:[0,0,1,1],shininess:8/256,smooth:!1,decimals:1e3,metadata:!0,unit:"millimeter",statusCallback:null},e),0===(o=(o=flatten(o)).filter(e=>geom3.isA(e)||geom2.isA(e)||path2.isA(e))).length)throw new Error("expected one or more geom3/geom2/path2 objects");e.statusCallback&&e.statusCallback({progress:0});let t=["X3D",{profile:"Interchange",version:"3.3","xmlns:xsd":"http://www.w3.org/2001/XMLSchema-instance","xsd:noNamespaceSchemaLocation":"http://www.web3d.org/specifications/x3d-3.3.xsd"}];e.metadata?t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}],["meta",{name:"reference",content:"https://www.openjscad.xyz"}],["meta",{name:"created",content:(new Date).toISOString()}]]):t.push(["head",{},["meta",{name:"creator",content:"Created by JSCAD"}]]),t=t.concat(convertObjects(o,e));const r=`\n${stringify(t,2)}`;return e&&e.statusCallback&&e.statusCallback({progress:100}),[r]},convertObjects=(e,o)=>{const t=[];return e.forEach((r,s)=>{if(o.statusCallback&&o.statusCallback({progress:100*s/e.length}),geom3.isA(r)){r=modifiers.generalize({snap:!0,triangulate:!0},r),geom3.toPolygons(r).length>0&&t.push(convertGeom3(r,o))}geom2.isA(r)&&t.push(convertGeom2(r,o)),path2.isA(r)&&t.push(convertPath2(r,o))}),[["Scene",{},["Transform",{rotation:"1 0 0 -1.5708"},...t]]]},convertPath2=(e,o)=>{const t=path2.toPoints(e).slice();t.length>1&&e.isClosed&&t.push(t[0]);const r=["Shape",shapeAttributes(e),convertPolyline2D(poly2.create(t),o)];return e.color&&r.push(convertAppearance(e,"emissiveColor",o)),r},convertGeom2=(e,o)=>{const t=geom2.toOutlines(e),r=["Group",{}];return t.forEach(t=>{t.length>1&&t.push(t[0]);const s=["Shape",shapeAttributes(e),convertPolyline2D(poly2.create(t),o)];e.color&&s.push(convertAppearance(e,"emissiveColor",o)),r.push(s)}),r},shapeAttributes=(e,o={})=>(e.id&&Object.assign(o,{DEF:checkDefName(e.id)}),o),checkDefName=e=>{const o=defNames.get(e)||0;return defNames.set(e,o+1),o>0&&console.warn(`Warning: object.id set as DEF but not unique. ${e} set ${o+1} times.`),e},convertPolyline2D=(e,o)=>{return["Polyline2D",{lineSegments:e.vertices.map(e=>`${e[0]} ${e[1]}`).join(" ")}]},convertAppearance=(e,o,t)=>{const r={[o]:e.color.slice(0,3).join(" "),transparency:roundToDecimals(1-e.color[3],t)};return"diffuseColor"===o&&Object.assign(r,{specularColor:"0.2 0.2 0.2",shininess:t.shininess}),["Appearance",["Material",r]]},convertGeom3=(e,o)=>{const t=["Shape",shapeAttributes(e),convertMesh(e,o)];let r=["Appearance",{},["Material"]];return e.color&&(r=convertAppearance(e,"diffuseColor",o)),t.push(r),t},convertMesh=(e,o)=>{const t=convertToTriangles(e,o),r=polygons2coordinates(t,o),s=r[0].join(" "),n=r[1].join(" "),a=r[2].join(" "),c=["IndexedTriangleSet",{ccw:"true",colorPerVertex:"false",normalPerVertex:o.smooth,solid:"false",index:s},["Coordinate",{point:n}]];return e.color||c.push(["Color",{color:a}]),c},convertToTriangles=(e,o)=>{const t=[];return geom3.toPolygons(e).forEach(r=>{const s=r.vertices[0];for(let n=r.vertices.length-3;n>=0;n--){const a=poly3.fromPoints([s,r.vertices[n+1],r.vertices[n+2]]);let c=o.color;e.color&&(c=e.color),r.color&&(c=r.color),a.color=c,t.push(a)}}),t},convertToColor=(e,o)=>{let t=o.color;return e.color&&(t=e.color),`${t[0]} ${t[1]} ${t[2]}`},roundToDecimals=(e,o)=>Math.round(e*o.decimals)/o.decimals,polygons2coordinates=(e,o)=>{const t=[],r=[],s=[],n=new Map;return e.forEach(e=>{const a=[],c=e.vertices.length;for(let t=0;tcssColors[o.toLowerCase()];module.exports=colorNameToRgb; -},{"./cssColors":122}],121:[function(require,module,exports){ +},{"./cssColors":123}],122:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),colorGeom2=(o,r)=>{const e=geom2.clone(r);return e.color=o,e},colorGeom3=(o,r)=>{const e=geom3.clone(r);return e.color=o,e},colorPath2=(o,r)=>{const e=path2.clone(r);return e.color=o,e},colorPoly3=(o,r)=>{const e=poly3.clone(r);return e.color=o,e},colorize=(o,...r)=>{if(!Array.isArray(o))throw new Error("color must be an array");if(o.length<3)throw new Error("color must contain R, G and B values");if(3===o.length&&(o=[o[0],o[1],o[2],1]),0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const e=r.map(r=>geom2.isA(r)?colorGeom2(o,r):geom3.isA(r)?colorGeom3(o,r):path2.isA(r)?colorPath2(o,r):poly3.isA(r)?colorPoly3(o,r):(r.color=o,r));return 1===e.length?e[0]:e};module.exports=colorize; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181,"../geometries/poly3":198,"../utils/flatten":517}],122:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":518}],123:[function(require,module,exports){ const cssColors={black:[0,0,0],silver:[192/255,192/255,192/255],gray:[128/255,128/255,128/255],white:[1,1,1],maroon:[128/255,0,0],red:[1,0,0],purple:[128/255,0,128/255],fuchsia:[1,0,1],green:[0,128/255,0],lime:[0,1,0],olive:[128/255,128/255,0],yellow:[1,1,0],navy:[0,0,128/255],blue:[0,0,1],teal:[0,128/255,128/255],aqua:[0,1,1],aliceblue:[240/255,248/255,1],antiquewhite:[250/255,235/255,215/255],aquamarine:[127/255,1,212/255],azure:[240/255,1,1],beige:[245/255,245/255,220/255],bisque:[1,228/255,196/255],blanchedalmond:[1,235/255,205/255],blueviolet:[138/255,43/255,226/255],brown:[165/255,42/255,42/255],burlywood:[222/255,184/255,135/255],cadetblue:[95/255,158/255,160/255],chartreuse:[127/255,1,0],chocolate:[210/255,105/255,30/255],coral:[1,127/255,80/255],cornflowerblue:[100/255,149/255,237/255],cornsilk:[1,248/255,220/255],crimson:[220/255,20/255,60/255],cyan:[0,1,1],darkblue:[0,0,139/255],darkcyan:[0,139/255,139/255],darkgoldenrod:[184/255,134/255,11/255],darkgray:[169/255,169/255,169/255],darkgreen:[0,100/255,0],darkgrey:[169/255,169/255,169/255],darkkhaki:[189/255,183/255,107/255],darkmagenta:[139/255,0,139/255],darkolivegreen:[85/255,107/255,47/255],darkorange:[1,140/255,0],darkorchid:[.6,50/255,.8],darkred:[139/255,0,0],darksalmon:[233/255,150/255,122/255],darkseagreen:[143/255,188/255,143/255],darkslateblue:[72/255,61/255,139/255],darkslategray:[47/255,79/255,79/255],darkslategrey:[47/255,79/255,79/255],darkturquoise:[0,206/255,209/255],darkviolet:[148/255,0,211/255],deeppink:[1,20/255,147/255],deepskyblue:[0,191/255,1],dimgray:[105/255,105/255,105/255],dimgrey:[105/255,105/255,105/255],dodgerblue:[30/255,144/255,1],firebrick:[178/255,34/255,34/255],floralwhite:[1,250/255,240/255],forestgreen:[34/255,139/255,34/255],gainsboro:[220/255,220/255,220/255],ghostwhite:[248/255,248/255,1],gold:[1,215/255,0],goldenrod:[218/255,165/255,32/255],greenyellow:[173/255,1,47/255],grey:[128/255,128/255,128/255],honeydew:[240/255,1,240/255],hotpink:[1,105/255,180/255],indianred:[205/255,92/255,92/255],indigo:[75/255,0,130/255],ivory:[1,1,240/255],khaki:[240/255,230/255,140/255],lavender:[230/255,230/255,250/255],lavenderblush:[1,240/255,245/255],lawngreen:[124/255,252/255,0],lemonchiffon:[1,250/255,205/255],lightblue:[173/255,216/255,230/255],lightcoral:[240/255,128/255,128/255],lightcyan:[224/255,1,1],lightgoldenrodyellow:[250/255,250/255,210/255],lightgray:[211/255,211/255,211/255],lightgreen:[144/255,238/255,144/255],lightgrey:[211/255,211/255,211/255],lightpink:[1,182/255,193/255],lightsalmon:[1,160/255,122/255],lightseagreen:[32/255,178/255,170/255],lightskyblue:[135/255,206/255,250/255],lightslategray:[119/255,136/255,.6],lightslategrey:[119/255,136/255,.6],lightsteelblue:[176/255,196/255,222/255],lightyellow:[1,1,224/255],limegreen:[50/255,205/255,50/255],linen:[250/255,240/255,230/255],magenta:[1,0,1],mediumaquamarine:[.4,205/255,170/255],mediumblue:[0,0,205/255],mediumorchid:[186/255,85/255,211/255],mediumpurple:[147/255,112/255,219/255],mediumseagreen:[60/255,179/255,113/255],mediumslateblue:[123/255,104/255,238/255],mediumspringgreen:[0,250/255,154/255],mediumturquoise:[72/255,209/255,.8],mediumvioletred:[199/255,21/255,133/255],midnightblue:[25/255,25/255,112/255],mintcream:[245/255,1,250/255],mistyrose:[1,228/255,225/255],moccasin:[1,228/255,181/255],navajowhite:[1,222/255,173/255],oldlace:[253/255,245/255,230/255],olivedrab:[107/255,142/255,35/255],orange:[1,165/255,0],orangered:[1,69/255,0],orchid:[218/255,112/255,214/255],palegoldenrod:[238/255,232/255,170/255],palegreen:[152/255,251/255,152/255],paleturquoise:[175/255,238/255,238/255],palevioletred:[219/255,112/255,147/255],papayawhip:[1,239/255,213/255],peachpuff:[1,218/255,185/255],peru:[205/255,133/255,63/255],pink:[1,192/255,203/255],plum:[221/255,160/255,221/255],powderblue:[176/255,224/255,230/255],rosybrown:[188/255,143/255,143/255],royalblue:[65/255,105/255,225/255],saddlebrown:[139/255,69/255,19/255],salmon:[250/255,128/255,114/255],sandybrown:[244/255,164/255,96/255],seagreen:[46/255,139/255,87/255],seashell:[1,245/255,238/255],sienna:[160/255,82/255,45/255],skyblue:[135/255,206/255,235/255],slateblue:[106/255,90/255,205/255],slategray:[112/255,128/255,144/255],slategrey:[112/255,128/255,144/255],snow:[1,250/255,250/255],springgreen:[0,1,127/255],steelblue:[70/255,130/255,180/255],tan:[210/255,180/255,140/255],thistle:[216/255,191/255,216/255],tomato:[1,99/255,71/255],turquoise:[64/255,224/255,208/255],violet:[238/255,130/255,238/255],wheat:[245/255,222/255,179/255],whitesmoke:[245/255,245/255,245/255],yellowgreen:[154/255,205/255,50/255]};module.exports=cssColors; -},{}],123:[function(require,module,exports){ +},{}],124:[function(require,module,exports){ const hexToRgb=t=>{if((t=t.replace("#","")).length<6)throw new Error("the given notation must contain 3 or more hex values");const e=parseInt(t.substring(0,2),16)/255,n=parseInt(t.substring(2,4),16)/255,r=parseInt(t.substring(4,6),16)/255;if(t.length>=8){return[e,n,r,parseInt(t.substring(6,8),16)/255]}return[e,n,r]};module.exports=hexToRgb; -},{}],124:[function(require,module,exports){ +},{}],125:[function(require,module,exports){ const flatten=require("../utils/flatten"),hueToColorComponent=require("./hueToColorComponent"),hslToRgb=(...o)=>{if((o=flatten(o)).length<3)throw new Error("values must contain H, S and L values");const e=o[0],n=o[1],t=o[2];let r=t,l=t,u=t;if(0!==n){const o=t<.5?t*(1+n):t+n-t*n,h=2*t-o;r=hueToColorComponent(h,o,e+1/3),l=hueToColorComponent(h,o,e),u=hueToColorComponent(h,o,e-1/3)}if(o.length>3){return[r,l,u,o[3]]}return[r,l,u]};module.exports=hslToRgb; -},{"../utils/flatten":517,"./hueToColorComponent":126}],125:[function(require,module,exports){ +},{"../utils/flatten":518,"./hueToColorComponent":127}],126:[function(require,module,exports){ const flatten=require("../utils/flatten"),hsvToRgb=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain H, S and V values");const t=e[0],a=e[1],r=e[2];let s=0,n=0,o=0;const c=Math.floor(6*t),l=6*t-c,u=r*(1-a),b=r*(1-l*a),h=r*(1-(1-l)*a);switch(c%6){case 0:s=r,n=h,o=u;break;case 1:s=b,n=r,o=u;break;case 2:s=u,n=r,o=h;break;case 3:s=u,n=b,o=r;break;case 4:s=h,n=u,o=r;break;case 5:s=r,n=u,o=b}if(e.length>3){return[s,n,o,e[3]]}return[s,n,o]};module.exports=hsvToRgb; -},{"../utils/flatten":517}],126:[function(require,module,exports){ +},{"../utils/flatten":518}],127:[function(require,module,exports){ const hueToColorComponent=(o,e,n)=>(n<0&&(n+=1),n>1&&(n-=1),n<1/6?o+6*(e-o)*n:n<.5?e:n<2/3?o+(e-o)*(2/3-n)*6:o);module.exports=hueToColorComponent; -},{}],127:[function(require,module,exports){ +},{}],128:[function(require,module,exports){ module.exports={colorize:require("./colorize"),colorNameToRgb:require("./colorNameToRgb"),cssColors:require("./cssColors"),hexToRgb:require("./hexToRgb"),hslToRgb:require("./hslToRgb"),hsvToRgb:require("./hsvToRgb"),hueToColorComponent:require("./hueToColorComponent"),rgbToHex:require("./rgbToHex"),rgbToHsl:require("./rgbToHsl"),rgbToHsv:require("./rgbToHsv")}; -},{"./colorNameToRgb":120,"./colorize":121,"./cssColors":122,"./hexToRgb":123,"./hslToRgb":124,"./hsvToRgb":125,"./hueToColorComponent":126,"./rgbToHex":128,"./rgbToHsl":129,"./rgbToHsv":130}],128:[function(require,module,exports){ +},{"./colorNameToRgb":121,"./colorize":122,"./cssColors":123,"./hexToRgb":124,"./hslToRgb":125,"./hsvToRgb":126,"./hueToColorComponent":127,"./rgbToHex":129,"./rgbToHsl":130,"./rgbToHsv":131}],129:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHex=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=255*t[0],r=255*t[1],n=255*t[2];let o=`#${Number(16777216+65536*e+256*r+n).toString(16).substring(1,7)}`;return t.length>3&&(o+=Number(255*t[3]).toString(16)),o};module.exports=rgbToHex; -},{"../utils/flatten":517}],129:[function(require,module,exports){ +},{"../utils/flatten":518}],130:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHsl=(...t)=>{if((t=flatten(t)).length<3)throw new Error("values must contain R, G and B values");const e=t[0],n=t[1],s=t[2],a=Math.max(e,n,s),r=Math.min(e,n,s);let l,o;const c=(a+r)/2;if(a===r)l=o=0;else{const t=a-r;switch(o=c>.5?t/(2-a-r):t/(a+r),a){case e:l=(n-s)/t+(n3){return[l,o,c,t[3]]}return[l,o,c]};module.exports=rgbToHsl; -},{"../utils/flatten":517}],130:[function(require,module,exports){ +},{"../utils/flatten":518}],131:[function(require,module,exports){ const flatten=require("../utils/flatten"),rgbToHsv=(...e)=>{if((e=flatten(e)).length<3)throw new Error("values must contain R, G and B values");const t=e[0],a=e[1],n=e[2],r=Math.max(t,a,n),s=Math.min(t,a,n);let l;const o=r,c=r-s,i=0===r?0:c/r;if(r===s)l=0;else{switch(r){case t:l=(a-n)/c+(a3){return[l,i,o,e[3]]}return[l,i,o]};module.exports=rgbToHsv; -},{"../utils/flatten":517}],131:[function(require,module,exports){ +},{"../utils/flatten":518}],132:[function(require,module,exports){ const lengths=require("./lengths"),arcLengthToT=(e,t)=>{const{distance:s,segments:n}=Object.assign({},{distance:0,segments:100},e),o=lengths(n,t);let r=0,c=n;for(;r<=c;){const e=Math.floor(r+(c-r)/2),t=o[e]-s;if(t<0)r=e+1;else{if(!(t>0)){c=e;break}c=e-1}}const g=c;if(o[g]===s)return g/n;const a=o[g];return(g+(s-a)/(o[g+1]-a))/n};module.exports=arcLengthToT; -},{"./lengths":135}],132:[function(require,module,exports){ +},{"./lengths":136}],133:[function(require,module,exports){ const create=e=>{if(!Array.isArray(e))throw new Error("Bezier points must be a valid array/");if(e.length<2)throw new Error("Bezier points must contain at least 2 values.");const r=getPointType(e);return{points:e,pointType:r,dimensions:"float_single"===r?0:e[0].length,permutations:getPermutations(e.length-1),tangentPermutations:getPermutations(e.length-2)}},getPointType=function(e){let r=null;return e.forEach(e=>{let t="";if(Number.isFinite(e))t="float_single";else{if(!Array.isArray(e))throw new Error("Bezier points must all be numbers or arrays of number.");e.forEach(e=>{if(!Number.isFinite(e))throw new Error("Bezier point values must all be numbers.")}),t="float_"+e.length}if(null==r)r=t;else if(r!==t)throw new Error("Bezier points must be either all numbers or all arrays of numbers of the same size.")}),r},getPermutations=function(e){const r=[];for(let t=0;t<=e;t++)r.push(factorial(e)/(factorial(t)*factorial(e-t)));return r},factorial=function(e){let r=1;for(let t=2;t<=e;t++)r*=t;return r};module.exports=create; -},{}],133:[function(require,module,exports){ +},{}],134:[function(require,module,exports){ module.exports={create:require("./create"),valueAt:require("./valueAt"),tangentAt:require("./tangentAt"),lengths:require("./lengths"),length:require("./length"),arcLengthToT:require("./arcLengthToT")}; -},{"./arcLengthToT":131,"./create":132,"./length":134,"./lengths":135,"./tangentAt":136,"./valueAt":137}],134:[function(require,module,exports){ +},{"./arcLengthToT":132,"./create":133,"./length":135,"./lengths":136,"./tangentAt":137,"./valueAt":138}],135:[function(require,module,exports){ const lengths=require("./lengths"),length=(e,t)=>lengths(e,t)[e];module.exports=length; -},{"./lengths":135}],135:[function(require,module,exports){ +},{"./lengths":136}],136:[function(require,module,exports){ const valueAt=require("./valueAt"),lengths=(e,r)=>{let t=0;const n=[0];let s=valueAt(0,r);for(let a=1;a<=e;a++){const i=valueAt(a/e,r);t+=distanceBetween(i,s),n.push(t),s=i}return n},distanceBetween=(e,r)=>{if(Number.isFinite(e)&&Number.isFinite(r))return Math.abs(e-r);if(Array.isArray(e)&&Array.isArray(r)){if(e.length!==r.length)throw new Error("The operands must have the same number of dimensions.");let t=0;for(let n=0;n{if(t<0||t>1)throw new Error("Bezier tangentAt() input must be between 0 and 1");if("float_single"===n.pointType)return bezierTangent(n,n.points,t);{const e=[];for(let o=0;o{if(t<0||t>1)throw new Error("Bezier valueAt() input must be between 0 and 1");if("float_single"===e.pointType)return bezierFunction(e,e.points,t);{const n=[];for(let o=0;omat4.isIdentity(r.transforms)?r:(r.sides=r.sides.map(s=>{return[vec2.transform(vec2.create(),s[0],r.transforms),vec2.transform(vec2.create(),s[1],r.transforms)]}),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":262,"../../maths/vec2":310}],140:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec2":311}],141:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],141:[function(require,module,exports){ +},{}],142:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{sides:e,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":262}],142:[function(require,module,exports){ +},{"../../maths/mat4":263}],143:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),create=require("./create"),fromCompactBinary=e=>{if(0!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));for(let t=21;t=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary; -},{"../../maths/mat4":262,"../../maths/vec2":310,"./create":141}],143:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec2":311,"./create":142}],144:[function(require,module,exports){ const vec2=require("../../maths/vec2"),create=require("./create"),fromPoints=e=>{if(!Array.isArray(e))throw new Error("the given points must be an array");let r=e.length;if(r<3)throw new Error("the given points must define a closed geometry with three or more points");vec2.equals(e[0],e[r-1])&&--r;const t=[];let o=e[r-1];for(let n=0;n!!(s&&"object"==typeof s&&"sides"in s&&"transforms"in s&&Array.isArray(s.sides)&&"length"in s.transforms);module.exports=isA; -},{}],146:[function(require,module,exports){ +},{}],147:[function(require,module,exports){ const create=require("./create"),toSides=require("./toSides"),reverse=e=>{const r=toSides(e).map(e=>[e[1],e[0]]);return r.reverse(),create(r)};module.exports=reverse; -},{"./create":141,"./toSides":150}],147:[function(require,module,exports){ +},{"./create":142,"./toSides":151}],148:[function(require,module,exports){ const toCompactBinary=o=>{const t=o.sides,r=o.transforms;let n=[-1,-1,-1,-1];o.color&&(n=o.color);const e=new Float32Array(21+4*t.length);e[0]=0,e[1]=r[0],e[2]=r[1],e[3]=r[2],e[4]=r[3],e[5]=r[4],e[6]=r[5],e[7]=r[6],e[8]=r[7],e[9]=r[8],e[10]=r[9],e[11]=r[10],e[12]=r[11],e[13]=r[12],e[14]=r[13],e[15]=r[14],e[16]=r[15],e[17]=n[0],e[18]=n[1],e[19]=n[2],e[20]=n[3];for(let o=0;o{const t=new Map,r=e=>{const r=e.toString();return t.has(r)?t.get(r):(t.set(r,e),e)};return e.map(e=>e.map(r))},toVertexMap=e=>{const t=new Map;return toSharedVertices(e).forEach(e=>{t.has(e[0])?t.get(e[0]).push(e):t.set(e[0],[e])}),t},toOutlines=e=>{const t=toVertexMap(toSides(e)),r=[];for(;;){let e;for(const[r,o]of t){if(e=o.shift())break;t.delete(r)}if(void 0===e)break;const o=[],s=e[0];for(;;){o.push(e[0]);const r=e[1];if(r===s)break;const n=t.get(r);if(!n)throw new Error(`geometry is not closed at vertex ${r}`);const c=popNextSide(e,n);0===n.length&&t.delete(r),e=c}o.length>0&&o.push(o.shift()),r.push(o)}return t.clear(),r},popNextSide=(e,t)=>{if(1===t.length)return t.pop();const r=vec2.create(),o=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]));let s,n;t.forEach((e,t)=>{let c=vec2.angleDegrees(vec2.subtract(r,e[1],e[0]))-o;c<-180&&(c+=360),c>=180&&(c-=360),(void 0===n||c>s)&&(n=t,s=c)});const c=t[n];return t.splice(n,1),c};module.exports=toOutlines; -},{"../../maths/vec2":310,"./toSides":150}],149:[function(require,module,exports){ +},{"../../maths/vec2":311,"./toSides":151}],150:[function(require,module,exports){ const toSides=require("./toSides"),toPoints=t=>{const o=toSides(t).map(t=>t[0]);return o.length>0&&o.push(o.shift()),o};module.exports=toPoints; -},{"./toSides":150}],150:[function(require,module,exports){ +},{"./toSides":151}],151:[function(require,module,exports){ const applyTransforms=require("./applyTransforms"),toSides=s=>applyTransforms(s).sides;module.exports=toSides; -},{"./applyTransforms":139}],151:[function(require,module,exports){ +},{"./applyTransforms":140}],152:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toSides=require("./toSides"),toString=e=>{const t=toSides(e);let o="geom2 ("+t.length+" sides):\n[\n";return t.forEach(e=>{o+=" ["+vec2.toString(e[0])+", "+vec2.toString(e[1])+"]\n"}),o+="]\n"};module.exports=toString; -},{"../../maths/vec2":310,"./toSides":150}],152:[function(require,module,exports){ +},{"../../maths/vec2":311,"./toSides":151}],153:[function(require,module,exports){ const mat4=require("../../maths/mat4"),reverse=require("./reverse.js"),transform=(r,e)=>{const s=mat4.multiply(mat4.create(),r,e.transforms),t=Object.assign({},e,{transforms:s});return r[0]*r[5]-r[4]*r[1]<0?reverse(t):t};module.exports=transform; -},{"../../maths/mat4":262,"./reverse.js":146}],153:[function(require,module,exports){ +},{"../../maths/mat4":263,"./reverse.js":147}],154:[function(require,module,exports){ const vec2=require("../../maths/vec2"),isA=require("./isA"),toOutlines=require("./toOutlines"),validate=e=>{if(!isA(e))throw new Error("invalid geom2 structure");if(toOutlines(e),e.sides.forEach(e=>{if(vec2.equals(e[0],e[1]))throw new Error(`geom2 self-edge ${e[0]}`)}),!e.transforms.every(Number.isFinite))throw new Error(`geom2 invalid transforms ${e.transforms}`)};module.exports=validate; -},{"../../maths/vec2":310,"./isA":145,"./toOutlines":148}],154:[function(require,module,exports){ +},{"../../maths/vec2":311,"./isA":146,"./toOutlines":149}],155:[function(require,module,exports){ const mat4=require("../../maths/mat4"),poly3=require("../poly3"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.polygons=r.polygons.map(s=>poly3.transform(r.transforms,s)),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":262,"../poly3":198}],155:[function(require,module,exports){ +},{"../../maths/mat4":263,"../poly3":199}],156:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],156:[function(require,module,exports){ +},{}],157:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{polygons:e,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":262}],157:[function(require,module,exports){ +},{"../../maths/mat4":263}],158:[function(require,module,exports){ const vec3=require("../../maths/vec3"),mat4=require("../../maths/mat4"),poly3=require("../poly3"),create=require("./create"),fromCompactBinary=e=>{if(1!==e[0])throw new Error("invalid compact binary data");const r=create();r.transforms=mat4.clone(e.slice(1,17));const o=e[21];let t=22,a=e.length-3*o;for(;a=0&&(r.color=[e[17],e[18],e[19],e[20]]),r};module.exports=fromCompactBinary; -},{"../../maths/mat4":262,"../../maths/vec3":341,"../poly3":198,"./create":156}],158:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec3":342,"../poly3":199,"./create":157}],159:[function(require,module,exports){ const poly3=require("../poly3"),create=require("./create"),fromPoints=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=r.map((r,e)=>{return poly3.create(r)});return create(e)};module.exports=fromPoints; -},{"../poly3":198,"./create":156}],159:[function(require,module,exports){ +},{"../poly3":199,"./create":157}],160:[function(require,module,exports){ const quickhull=require("../../operations/hulls/quickhull"),create=require("./create"),poly3=require("../poly3"),fromPointsConvex=r=>{if(!Array.isArray(r))throw new Error("the given points must be an array");const e=quickhull(r,{skipTriangulation:!0}).map(e=>{const o=e.map(e=>r[e]);return poly3.create(o)});return create(e)};module.exports=fromPointsConvex; -},{"../../operations/hulls/quickhull":467,"../poly3":198,"./create":156}],160:[function(require,module,exports){ +},{"../../operations/hulls/quickhull":468,"../poly3":199,"./create":157}],161:[function(require,module,exports){ module.exports={clone:require("./clone"),create:require("./create"),fromPointsConvex:require("./fromPointsConvex"),fromPoints:require("./fromPoints"),fromCompactBinary:require("./fromCompactBinary"),invert:require("./invert"),isA:require("./isA"),toPoints:require("./toPoints"),toPolygons:require("./toPolygons"),toString:require("./toString"),toCompactBinary:require("./toCompactBinary"),transform:require("./transform"),validate:require("./validate")}; -},{"./clone":155,"./create":156,"./fromCompactBinary":157,"./fromPoints":158,"./fromPointsConvex":159,"./invert":161,"./isA":162,"./toCompactBinary":163,"./toPoints":164,"./toPolygons":165,"./toString":166,"./transform":167,"./validate":168}],161:[function(require,module,exports){ +},{"./clone":156,"./create":157,"./fromCompactBinary":158,"./fromPoints":159,"./fromPointsConvex":160,"./invert":162,"./isA":163,"./toCompactBinary":164,"./toPoints":165,"./toPolygons":166,"./toString":167,"./transform":168,"./validate":169}],162:[function(require,module,exports){ const poly3=require("../poly3"),create=require("./create"),toPolygons=require("./toPolygons"),invert=e=>{const o=toPolygons(e).map(e=>poly3.invert(e));return create(o)};module.exports=invert; -},{"../poly3":198,"./create":156,"./toPolygons":165}],162:[function(require,module,exports){ +},{"../poly3":199,"./create":157,"./toPolygons":166}],163:[function(require,module,exports){ const isA=o=>!!(o&&"object"==typeof o&&"polygons"in o&&"transforms"in o&&Array.isArray(o.polygons)&&"length"in o.transforms);module.exports=isA; -},{}],163:[function(require,module,exports){ +},{}],164:[function(require,module,exports){ const poly3=require("../poly3"),toCompactBinary=o=>{const t=o.polygons,e=o.transforms,r=t.length,n=t.reduce((o,t)=>o+t.vertices.length,0);let l=[-1,-1,-1,-1];o.color&&(l=o.color);const c=new Float32Array(22+r+3*n);c[0]=1,c[1]=e[0],c[2]=e[1],c[3]=e[2],c[4]=e[3],c[5]=e[4],c[6]=e[5],c[7]=e[6],c[8]=e[7],c[9]=e[8],c[10]=e[9],c[11]=e[10],c[12]=e[11],c[13]=e[12],c[14]=e[13],c[15]=e[14],c[16]=e[15],c[17]=l[0],c[18]=l[1],c[19]=l[2],c[20]=l[3],c[21]=n;let s=22,a=s+r;return t.forEach(o=>{const t=poly3.toPoints(o);c[s]=t.length,s++;for(let o=0;o{return toPolygons(o).map(o=>poly3.toPoints(o))};module.exports=toPoints; -},{"../poly3":198,"./toPolygons":165}],165:[function(require,module,exports){ +},{"../poly3":199,"./toPolygons":166}],166:[function(require,module,exports){ const applyTransforms=require("./applyTransforms"),toPolygons=o=>applyTransforms(o).polygons;module.exports=toPolygons; -},{"./applyTransforms":154}],166:[function(require,module,exports){ +},{"./applyTransforms":155}],167:[function(require,module,exports){ const poly3=require("../poly3"),toPolygons=require("./toPolygons"),toString=o=>{const t=toPolygons(o);let n="geom3 ("+t.length+" polygons):\n";return t.forEach(o=>{n+=" "+poly3.toString(o)+"\n"}),n};module.exports=toString; -},{"../poly3":198,"./toPolygons":165}],167:[function(require,module,exports){ +},{"../poly3":199,"./toPolygons":166}],168:[function(require,module,exports){ const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform; -},{"../../maths/mat4":262}],168:[function(require,module,exports){ +},{"../../maths/mat4":263}],169:[function(require,module,exports){ const poly3=require("../poly3"),isA=require("./isA"),validate=e=>{if(!isA(e))throw new Error("invalid geom3 structure");if(e.polygons.forEach(poly3.validate),validateManifold(e),!e.transforms.every(Number.isFinite))throw new Error(`geom3 invalid transforms ${e.transforms}`)},validateManifold=e=>{const o=new Map;e.polygons.forEach(({vertices:e})=>{e.forEach((r,n)=>{const t=`${`${r}`}/${`${e[(n+1)%e.length]}`}`,i=o.has(t)?o.get(t):0;o.set(t,i+1)})});const r=[];if(o.forEach((e,n)=>{const t=n.split("/").reverse().join("/");e!==o.get(t)&&r.push(n.replace("/"," -> "))}),r.length>0)throw new Error(`non-manifold edges ${r.length}\n${r.join("\n")}`)};module.exports=validate; -},{"../poly3":198,"./isA":162}],169:[function(require,module,exports){ +},{"../poly3":199,"./isA":163}],170:[function(require,module,exports){ module.exports={geom2:require("./geom2"),geom3:require("./geom3"),path2:require("./path2"),poly2:require("./poly2"),poly3:require("./poly3")}; -},{"./geom2":144,"./geom3":160,"./path2":181,"./poly2":192,"./poly3":198}],170:[function(require,module,exports){ +},{"./geom2":145,"./geom3":161,"./path2":182,"./poly2":193,"./poly3":199}],171:[function(require,module,exports){ const{TAU:TAU}=require("../../maths/constants"),vec2=require("../../maths/vec2"),fromPoints=require("./fromPoints"),toPoints=require("./toPoints"),appendArc=(e,t)=>{let{endpoint:r,radius:a,xaxisrotation:o,clockwise:n,large:s,segments:c}=Object.assign({},{radius:[0,0],xaxisrotation:0,clockwise:!1,large:!1,segments:16},e);if(!Array.isArray(r))throw new Error("endpoint must be an array of X and Y values");if(r.length<2)throw new Error("endpoint must contain X and Y values");if(r=vec2.clone(r),!Array.isArray(a))throw new Error("radius must be an array of X and Y values");if(a.length<2)throw new Error("radius must contain X and Y values");if(c<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given path cannot be closed");const i=toPoints(t);if(i.length<1)throw new Error("the given path must contain one or more points (as the starting point for the arc)");let h=a[0],u=a[1];const l=i[i.length-1];h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5,r=vec2.fromValues(Math.round(1e5*r[0])/1e5,Math.round(1e5*r[1])/1e5);const d=!n;let v=[];if(0===h||0===u)v.push(r);else{h=Math.abs(h),u=Math.abs(u);const t=o,a=Math.cos(t),n=Math.sin(t),i=vec2.subtract(vec2.create(),l,r);vec2.scale(i,i,.5);const f=Math.round(1e5*(a*i[0]+n*i[1]))/1e5,m=Math.round(1e5*(-n*i[0]+a*i[1]))/1e5,M=vec2.fromValues(f,m),p=M[0]*M[0]/(h*h)+M[1]*M[1]/(u*u);if(p>1){const e=Math.sqrt(p);h*=e,u*=e,h=Math.round(1e5*h)/1e5,u=Math.round(1e5*u)/1e5}let w=Math.sqrt((h*h*u*u-h*h*M[1]*M[1]-u*u*M[0]*M[0])/(h*h*M[1]*M[1]+u*u*M[0]*M[0]));d===s&&(w=-w);const g=vec2.fromValues(h*M[1]/u,-u*M[0]/h);vec2.scale(g,g,w);let A=vec2.fromValues(a*g[0]-n*g[1],n*g[0]+a*g[1]);A=vec2.add(A,A,vec2.scale(vec2.create(),vec2.add(vec2.create(),l,r),.5));const b=vec2.fromValues((M[0]-g[0])/h,(M[1]-g[1])/u),E=vec2.fromValues((-M[0]-g[0])/h,(-M[1]-g[1])/u),V=vec2.angleRadians(b);let q=vec2.angleRadians(E)-V;q%=TAU,!d&&q>0?q-=TAU:d&&q<0&&(q+=TAU);let y=Math.ceil(Math.abs(q)/TAU*c)+1;y<1&&(y=1);for(let e=1;e{let{controlPoints:o,segments:r}=Object.assign({},{segments:16},e);if(!Array.isArray(o))throw new Error("controlPoints must be an array of one or more points");if(o.length<1)throw new Error("controlPoints must be an array of one or more points");if(r<4)throw new Error("segments must be four or more");if(t.isClosed)throw new Error("the given geometry cannot be closed");const n=toPoints(t);if(n.length<1)throw new Error("the given path must contain one or more points (as the starting point for the bezier curve)");if(null===(o=o.slice())[0]){if(o.length<2)throw new Error("a null control point must be passed with one more control points");let e=n[n.length-2];if("lastBezierControlPoint"in t&&(e=t.lastBezierControlPoint),!Array.isArray(e))throw new Error("the given path must contain TWO or more points if given a null control point");const r=vec2.scale(vec2.create(),n[n.length-1],2);vec2.subtract(r,r,e),o[0]=r}o.unshift(n[n.length-1]);const s=o.length-1,i=[];let c=1;for(let e=0;e<=s;++e)e>0&&(c*=e),i.push(c);const a=[];for(let e=0;e<=s;++e){const t=i[s]/(i[e]*i[s-e]);a.push(t)}const l=vec2.create(),h=vec2.create(),p=vec3.create(),u=e=>{let t=1,r=Math.pow(1-e,s);const n=1!==e?1/(1-e):1,i=vec2.create();for(let c=0;c<=s;++c){c===s&&(r=1);const h=a[c]*t*r,p=vec2.scale(l,o[c],h);vec2.add(i,i,p),t*=e,r*=n}return i},v=[],m=[],f=s+1;for(let e=0;eP){const e=m[g-1],t=m[g+1],o=e+1*(t-e)/3,r=e+2*(t-e)/3,n=u(o),s=u(r);v.splice(g,1,n,s),m.splice(g,1,o,r),--g<1&&(g=1)}else++g}v.shift();const b=appendPoints(v,t);return b.lastBezierControlPoint=o[o.length-2],b};module.exports=appendBezier; -},{"../../maths/constants":213,"../../maths/vec2":310,"./appendPoints":172,"./toPoints":185}],172:[function(require,module,exports){ +},{"../../maths/constants":214,"../../maths/vec2":311,"./appendPoints":173,"./toPoints":186}],173:[function(require,module,exports){ const concat=require("./concat"),create=require("./create"),appendPoints=(e,c)=>concat(c,create(e));module.exports=appendPoints; -},{"./concat":176,"./create":177}],173:[function(require,module,exports){ +},{"./concat":177,"./create":178}],174:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec2=require("../../maths/vec2"),applyTransforms=r=>mat4.isIdentity(r.transforms)?r:(r.points=r.points.map(s=>vec2.transform(vec2.create(),s,r.transforms)),r.transforms=mat4.create(),r);module.exports=applyTransforms; -},{"../../maths/mat4":262,"../../maths/vec2":310}],174:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec2":311}],175:[function(require,module,exports){ const clone=e=>Object.assign({},e);module.exports=clone; -},{}],175:[function(require,module,exports){ +},{}],176:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),clone=require("./clone"),close=e=>{if(e.isClosed)return e;const t=clone(e);if(t.isClosed=!0,t.points.length>1){const e=t.points,n=e[0];let o=e[e.length-1];for(;vec2.distance(n,o){let o=!1,e=[];return t.forEach((t,n)=>{const s=toPoints(t).slice();if(e.length>0&&s.length>0&&equals(s[0],e[e.length-1])&&s.shift(),s.length>0&&o)throw new Error(`Cannot concatenate to a closed path; check the ${n}th path`);o=t.isClosed,e=e.concat(s)}),fromPoints({closed:o},e)};module.exports=concat; -},{"../../maths/vec2":310,"./fromPoints":180,"./toPoints":185}],177:[function(require,module,exports){ +},{"../../maths/vec2":311,"./fromPoints":181,"./toPoints":186}],178:[function(require,module,exports){ const mat4=require("../../maths/mat4"),create=e=>(void 0===e&&(e=[]),{points:e,isClosed:!1,transforms:mat4.create()});module.exports=create; -},{"../../maths/mat4":262}],178:[function(require,module,exports){ +},{"../../maths/mat4":263}],179:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),equals=(e,t)=>{if(e.isClosed!==t.isClosed)return!1;if(e.points.length!==t.points.length)return!1;const o=toPoints(e),s=toPoints(t),i=o.length;let r=0;do{let t=!1;for(let e=0;e{if(2!==r[0])throw new Error("invalid compact binary data");const e=create();e.transforms=mat4.clone(r.slice(1,17)),e.isClosed=!!r[17];for(let t=22;t=0&&(e.color=[r[18],r[19],r[20],r[21]]),e};module.exports=fromCompactBinary; -},{"../../maths/mat4":262,"../../maths/vec2":310,"./create":177}],180:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec2":311,"./create":178}],181:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec2=require("../../maths/vec2"),close=require("./close"),create=require("./create"),fromPoints=(e,t)=>{let{closed:s}=Object.assign({},{closed:!1},e),o=create();if(o.points=t.map(e=>vec2.clone(e)),o.points.length>1){const e=o.points[0],t=o.points[o.points.length-1];vec2.distance(e,t)!!(s&&"object"==typeof s&&"points"in s&&"transforms"in s&&"isClosed"in s&&Array.isArray(s.points)&&"length"in s.transforms);module.exports=isA; -},{}],183:[function(require,module,exports){ +},{}],184:[function(require,module,exports){ const clone=require("./clone"),reverse=e=>{const r=clone(e);return r.points=e.points.slice().reverse(),r};module.exports=reverse; -},{"./clone":174}],184:[function(require,module,exports){ +},{"./clone":175}],185:[function(require,module,exports){ const toCompactBinary=o=>{const t=o.points,n=o.transforms;let r=[-1,-1,-1,-1];o.color&&(r=o.color);const s=new Float32Array(22+2*t.length);s[0]=2,s[1]=n[0],s[2]=n[1],s[3]=n[2],s[4]=n[3],s[5]=n[4],s[6]=n[5],s[7]=n[6],s[8]=n[7],s[9]=n[8],s[10]=n[9],s[11]=n[10],s[12]=n[11],s[13]=n[12],s[14]=n[13],s[15]=n[14],s[16]=n[15],s[17]=o.isClosed?1:0,s[18]=r[0],s[19]=r[1],s[20]=r[2],s[21]=r[3];for(let o=0;oapplyTransforms(o).points;module.exports=toPoints; -},{"./applyTransforms":173}],186:[function(require,module,exports){ +},{"./applyTransforms":174}],187:[function(require,module,exports){ const vec2=require("../../maths/vec2"),toPoints=require("./toPoints"),toString=t=>{const o=toPoints(t);let n="path ("+o.length+" points, "+t.isClosed+"):\n[\n";return o.forEach(t=>{n+=" "+vec2.toString(t)+",\n"}),n+="]\n"};module.exports=toString; -},{"../../maths/vec2":310,"./toPoints":185}],187:[function(require,module,exports){ +},{"../../maths/vec2":311,"./toPoints":186}],188:[function(require,module,exports){ const mat4=require("../../maths/mat4"),transform=(t,r)=>{const s=mat4.multiply(mat4.create(),t,r.transforms);return Object.assign({},r,{transforms:s})};module.exports=transform; -},{"../../maths/mat4":262}],188:[function(require,module,exports){ +},{"../../maths/mat4":263}],189:[function(require,module,exports){ const vec2=require("../../maths/vec2"),isA=require("./isA"),validate=r=>{if(!isA(r))throw new Error("invalid path2 structure");if(r.points.length>1)for(let i=0;i{if(!r.every(Number.isFinite))throw new Error(`path2 invalid point ${r}`)}),!r.transforms.every(Number.isFinite))throw new Error(`path2 invalid transforms ${r.transforms}`)};module.exports=validate; -},{"../../maths/vec2":310,"./isA":182}],189:[function(require,module,exports){ +},{"../../maths/vec2":311,"./isA":183}],190:[function(require,module,exports){ const measureArea=require("./measureArea"),flip=require("./flip"),arePointsInside=(e,r)=>{if(0===e.length)return 0;const n=r.vertices;return n.length<3?0:(measureArea(r)<0&&(r=flip(r)),e.reduce((e,r)=>e+isPointInside(r,n),0)===e.length?1:0)},isPointInside=(e,r)=>{const n=r.length,t=e[0],i=e[1];let s=r[n-1],o=r[0],l=s[1]>i,u=0,a=0;for(let e=n+1;--e;){const e=o[1]>i;if(l!==e){const e=s[0]>t,r=o[0]>t;e&&r?u=!u:o[0]-(o[1]-i)*(s[0]-o[0])/(s[1]-o[1])>=t&&(u=!u)}l=e,s=o,o=r[++a]}return u};module.exports=arePointsInside; -},{"./flip":191,"./measureArea":193}],190:[function(require,module,exports){ +},{"./flip":192,"./measureArea":194}],191:[function(require,module,exports){ const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create; -},{}],191:[function(require,module,exports){ +},{}],192:[function(require,module,exports){ const create=require("./create"),flip=e=>{const r=e.vertices.slice().reverse();return create(r)};module.exports=flip; -},{"./create":190}],192:[function(require,module,exports){ +},{"./create":191}],193:[function(require,module,exports){ module.exports={arePointsInside:require("./arePointsInside"),create:require("./create"),flip:require("./flip"),measureArea:require("./measureArea")}; -},{"./arePointsInside":189,"./create":190,"./flip":191,"./measureArea":193}],193:[function(require,module,exports){ +},{"./arePointsInside":190,"./create":191,"./flip":192,"./measureArea":194}],194:[function(require,module,exports){ const area=require("../../maths/utils/area"),measureArea=e=>area(e.vertices);module.exports=measureArea; -},{"../../maths/utils/area":287}],194:[function(require,module,exports){ +},{"../../maths/utils/area":288}],195:[function(require,module,exports){ const create=require("./create"),vec3=require("../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.vertices=r.vertices.map(e=>vec3.clone(e)),c};module.exports=clone; -},{"../../maths/vec3":341,"./create":195}],195:[function(require,module,exports){ +},{"../../maths/vec3":342,"./create":196}],196:[function(require,module,exports){ const create=e=>((void 0===e||e.length<3)&&(e=[]),{vertices:e});module.exports=create; -},{}],196:[function(require,module,exports){ +},{}],197:[function(require,module,exports){ const vec3=require("../../maths/vec3"),create=require("./create"),fromPoints=e=>{const r=e.map(e=>vec3.clone(e));return create(r)};module.exports=fromPoints; -},{"../../maths/vec3":341,"./create":195}],197:[function(require,module,exports){ +},{"../../maths/vec3":342,"./create":196}],198:[function(require,module,exports){ const create=require("./create"),fromPointsAndPlane=(e,n)=>{const r=create(e);return r.plane=n,r};module.exports=fromPointsAndPlane; -},{"./create":195}],198:[function(require,module,exports){ +},{"./create":196}],199:[function(require,module,exports){ module.exports={clone:require("./clone"),create:require("./create"),fromPoints:require("./fromPoints"),fromPointsAndPlane:require("./fromPointsAndPlane"),invert:require("./invert"),isA:require("./isA"),isConvex:require("./isConvex"),measureArea:require("./measureArea"),measureBoundingBox:require("./measureBoundingBox"),measureBoundingSphere:require("./measureBoundingSphere"),measureSignedVolume:require("./measureSignedVolume"),plane:require("./plane"),toPoints:require("./toPoints"),toString:require("./toString"),transform:require("./transform"),validate:require("./validate")}; -},{"./clone":194,"./create":195,"./fromPoints":196,"./fromPointsAndPlane":197,"./invert":199,"./isA":200,"./isConvex":201,"./measureArea":202,"./measureBoundingBox":203,"./measureBoundingSphere":204,"./measureSignedVolume":205,"./plane":206,"./toPoints":207,"./toString":208,"./transform":209,"./validate":210}],199:[function(require,module,exports){ +},{"./clone":195,"./create":196,"./fromPoints":197,"./fromPointsAndPlane":198,"./invert":200,"./isA":201,"./isConvex":202,"./measureArea":203,"./measureBoundingBox":204,"./measureBoundingSphere":205,"./measureSignedVolume":206,"./plane":207,"./toPoints":208,"./toString":209,"./transform":210,"./validate":211}],200:[function(require,module,exports){ const plane=require("../../maths/plane"),create=require("./create"),invert=e=>{const r=e.vertices.slice().reverse(),a=create(r);return e.plane&&(a.plane=plane.flip(plane.create(),e.plane)),a};module.exports=invert; -},{"../../maths/plane":282,"./create":195}],200:[function(require,module,exports){ +},{"../../maths/plane":283,"./create":196}],201:[function(require,module,exports){ const isA=e=>!!(e&&"object"==typeof e&&"vertices"in e&&Array.isArray(e.vertices));module.exports=isA; -},{}],201:[function(require,module,exports){ +},{}],202:[function(require,module,exports){ const plane=require("../../maths/plane"),vec3=require("../../maths/vec3"),isConvex=e=>areVerticesConvex(e.vertices),areVerticesConvex=e=>{const t=e.length;if(t>2){const r=plane.fromPoints(plane.create(),...e);let c=e[t-2],n=e[t-1];for(let o=0;o{const n=vec3.cross(vec3.create(),vec3.subtract(vec3.create(),t,e),vec3.subtract(vec3.create(),r,t));return vec3.dot(n,c)>=0};module.exports=isConvex; -},{"../../maths/plane":282,"../../maths/vec3":341}],202:[function(require,module,exports){ +},{"../../maths/plane":283,"../../maths/vec3":342}],203:[function(require,module,exports){ const plane=require("./plane"),measureArea=e=>{const r=e.vertices.length;if(r<3)return 0;const a=e.vertices,t=plane(e),s=Math.abs(t[0]),n=Math.abs(t[1]),c=Math.abs(t[2]);if(s+n+c===0)return 0;let l=3;s>n&&s>c?l=1:n>c&&(l=2);let o=0,u=0,f=1,i=2;switch(l){case 1:for(f=1;f{const c=e.vertices,n=c.length,o=0===n?vec3.create():vec3.clone(c[0]),r=vec3.clone(o);for(let e=1;e{const r=cache.get(e);if(r)return r;const t=e.vertices,c=vec4.create();if(0===t.length)return c[0]=0,c[1]=0,c[2]=0,c[3]=0,c;let n=t[0],a=n,s=n,h=n,o=n,u=n;t.forEach(e=>{n[0]>e[0]&&(n=e),a[1]>e[1]&&(a=e),s[2]>e[2]&&(s=e),h[0]{let r=0;const t=e.vertices,c=vec3.create();for(let e=0;e(e.plane||(e.plane=mplane.fromPoints(mplane.create(),...e.vertices)),e.plane);module.exports=plane; -},{"../../maths/plane/":282}],207:[function(require,module,exports){ +},{"../../maths/plane/":283}],208:[function(require,module,exports){ const toPoints=o=>o.vertices;module.exports=toPoints; -},{}],208:[function(require,module,exports){ +},{}],209:[function(require,module,exports){ const vec3=require("../../maths/vec3/"),toString=e=>{let t="poly3: vertices: [";return e.vertices.forEach(e=>{t+=`${vec3.toString(e)}, `}),t+="]"};module.exports=toString; -},{"../../maths/vec3/":341}],209:[function(require,module,exports){ +},{"../../maths/vec3/":342}],210:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.vertices.map(r=>vec3.transform(vec3.create(),r,e));return mat4.isMirroring(e)&&t.reverse(),create(t)};module.exports=transform; -},{"../../maths/mat4":262,"../../maths/vec3":341,"./create":195}],210:[function(require,module,exports){ +},{"../../maths/mat4":263,"../../maths/vec3":342,"./create":196}],211:[function(require,module,exports){ const signedDistanceToPoint=require("../../maths/plane/signedDistanceToPoint"),{NEPS:NEPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),isA=require("./isA"),isConvex=require("./isConvex"),measureArea=require("./measureArea"),plane=require("./plane"),validate=e=>{if(!isA(e))throw new Error("invalid poly3 structure");if(e.vertices.length<3)throw new Error(`poly3 not enough vertices ${e.vertices.length}`);if(measureArea(e)<=0)throw new Error("poly3 area must be greater than zero");for(let r=0;r{if(!e.every(Number.isFinite))throw new Error(`poly3 invalid vertex ${e}`)}),e.vertices.length>3){const r=plane(e);e.vertices.forEach(e=>{const t=Math.abs(signedDistanceToPoint(r,e));if(t>NEPS)throw new Error(`poly3 must be coplanar: vertex ${e} distance ${t}`)})}};module.exports=validate; -},{"../../maths/constants":213,"../../maths/plane/signedDistanceToPoint":284,"../../maths/vec3":341,"./isA":200,"./isConvex":201,"./measureArea":202,"./plane":206}],211:[function(require,module,exports){ +},{"../../maths/constants":214,"../../maths/plane/signedDistanceToPoint":285,"../../maths/vec3":342,"./isA":201,"./isConvex":202,"./measureArea":203,"./plane":207}],212:[function(require,module,exports){ module.exports={colors:require("./colors"),curves:require("./curves"),geometries:require("./geometries"),maths:require("./maths"),measurements:require("./measurements"),primitives:require("./primitives"),text:require("./text"),utils:require("./utils"),booleans:require("./operations/booleans"),expansions:require("./operations/expansions"),extrusions:require("./operations/extrusions"),hulls:require("./operations/hulls"),modifiers:require("./operations/modifiers"),transforms:require("./operations/transforms")}; -},{"./colors":127,"./curves":138,"./geometries":169,"./maths":214,"./measurements":371,"./operations/booleans":385,"./operations/expansions":414,"./operations/extrusions":437,"./operations/hulls":460,"./operations/modifiers":471,"./operations/transforms":481,"./primitives":497,"./text":511,"./utils":519}],212:[function(require,module,exports){ -const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.GetCartesian=function(e,t){const i=e+"/"+t;let s,n;if("X/Y"===i)s=[0,0,1],n=[1,0,0];else if("Y/-X"===i)s=[0,0,1],n=[0,1,0];else if("-X/-Y"===i)s=[0,0,1],n=[-1,0,0];else if("-Y/X"===i)s=[0,0,1],n=[0,-1,0];else if("-X/Y"===i)s=[0,0,-1],n=[-1,0,0];else if("-Y/-X"===i)s=[0,0,-1],n=[0,-1,0];else if("X/-Y"===i)s=[0,0,-1],n=[1,0,0];else if("Y/X"===i)s=[0,0,-1],n=[0,1,0];else if("X/Z"===i)s=[0,-1,0],n=[1,0,0];else if("Z/-X"===i)s=[0,-1,0],n=[0,0,1];else if("-X/-Z"===i)s=[0,-1,0],n=[-1,0,0];else if("-Z/X"===i)s=[0,-1,0],n=[0,0,-1];else if("-X/Z"===i)s=[0,1,0],n=[-1,0,0];else if("-Z/-X"===i)s=[0,1,0],n=[0,0,-1];else if("X/-Z"===i)s=[0,1,0],n=[1,0,0];else if("Z/X"===i)s=[0,1,0],n=[0,0,1];else if("Y/Z"===i)s=[1,0,0],n=[0,1,0];else if("Z/-Y"===i)s=[1,0,0],n=[0,0,1];else if("-Y/-Z"===i)s=[1,0,0],n=[0,-1,0];else if("-Z/Y"===i)s=[1,0,0],n=[0,0,-1];else if("-Y/Z"===i)s=[-1,0,0],n=[0,-1,0];else if("-Z/-Y"===i)s=[-1,0,0],n=[0,0,-1];else if("Y/-Z"===i)s=[-1,0,0],n=[0,1,0];else{if("Z/Y"!==i)throw new Error("OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.");s=[-1,0,0],n=[0,0,1]}return new OrthoNormalBasis(new Plane(new Vector3D(s),0),new Vector3D(n))},OrthoNormalBasis.Z0Plane=function(){const e=new Plane(new Vector3D([0,0,1]),0);return new OrthoNormalBasis(e,new Vector3D([1,0,0]))},OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),i=vec3.scale(vec3.create(),this.v,e[1]),s=vec3.add(t,t,this.planeorigin);return vec3.add(i,i,s)},line3Dto2D:function(e){const t=e.point,i=e.direction.plus(t),s=this.to2D(t),n=this.to2D(i);return Line2D.fromPoints(s,n)},line2Dto3D:function(e){const t=e.origin(),i=e.direction().plus(t),s=this.to3D(t),n=this.to3D(i);return Line3D.fromPoints(s,n)},transform:function(e){const t=this.plane.transform(e),i=this.u.transform(e),s=new Vector3D(0,0,0).transform(e),n=i.minus(s);return new OrthoNormalBasis(t,n)}},module.exports=OrthoNormalBasis; +},{"./colors":128,"./curves":139,"./geometries":170,"./maths":215,"./measurements":372,"./operations/booleans":386,"./operations/expansions":415,"./operations/extrusions":438,"./operations/hulls":461,"./operations/modifiers":472,"./operations/transforms":482,"./primitives":498,"./text":512,"./utils":520}],213:[function(require,module,exports){ +const mat4=require("./mat4"),vec2=require("./vec2"),vec3=require("./vec3"),OrthoNormalBasis=function(e,t){arguments.length<2&&(t=vec3.orthogonal(vec3.create(),e)),this.v=vec3.normalize(vec3.create(),vec3.cross(vec3.create(),e,t)),this.u=vec3.cross(vec3.create(),this.v,e),this.plane=e,this.planeorigin=vec3.scale(vec3.create(),e,e[3])};OrthoNormalBasis.prototype={getProjectionMatrix:function(){return mat4.fromValues(this.u[0],this.v[0],this.plane[0],0,this.u[1],this.v[1],this.plane[1],0,this.u[2],this.v[2],this.plane[2],0,0,0,-this.plane[3],1)},getInverseProjectionMatrix:function(){const e=vec3.scale(vec3.create(),this.plane,this.plane[3]);return mat4.fromValues(this.u[0],this.u[1],this.u[2],0,this.v[0],this.v[1],this.v[2],0,this.plane[0],this.plane[1],this.plane[2],0,e[0],e[1],e[2],1)},to2D:function(e){return vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v))},to3D:function(e){const t=vec3.scale(vec3.create(),this.u,e[0]),s=vec3.scale(vec3.create(),this.v,e[1]),i=vec3.add(t,t,this.planeorigin);return vec3.add(s,s,i)}},module.exports=OrthoNormalBasis; -},{"./mat4":262,"./vec2":310,"./vec3":341}],213:[function(require,module,exports){ +},{"./mat4":263,"./vec2":311,"./vec3":342}],214:[function(require,module,exports){ const spatialResolution=1e5,EPS=1e-5,NEPS=1e-13,TAU=2*Math.PI;module.exports={EPS:EPS,NEPS:NEPS,TAU:TAU,spatialResolution:1e5}; -},{}],214:[function(require,module,exports){ +},{}],215:[function(require,module,exports){ module.exports={constants:require("./constants"),line2:require("./line2"),line3:require("./line3"),mat4:require("./mat4"),plane:require("./plane"),utils:require("./utils"),vec2:require("./vec2"),vec3:require("./vec3"),vec4:require("./vec4")}; -},{"./constants":213,"./line2":224,"./line3":241,"./mat4":262,"./plane":282,"./utils":288,"./vec2":310,"./vec3":341,"./vec4":367}],215:[function(require,module,exports){ +},{"./constants":214,"./line2":225,"./line3":242,"./mat4":263,"./plane":283,"./utils":289,"./vec2":311,"./vec3":342,"./vec4":368}],216:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone; -},{"./create":218}],216:[function(require,module,exports){ +},{"./create":219}],217:[function(require,module,exports){ const vec2=require("../vec2"),direction=require("./direction"),origin=require("./origin"),closestPoint=(e,c)=>{const i=origin(e),r=direction(e),o=vec2.subtract(vec2.create(),c,i),t=vec2.dot(o,r);return vec2.scale(o,r,t),vec2.add(o,o,i),o};module.exports=closestPoint; -},{"../vec2":310,"./direction":219,"./origin":226}],217:[function(require,module,exports){ +},{"../vec2":311,"./direction":220,"./origin":227}],218:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy; -},{}],218:[function(require,module,exports){ +},{}],219:[function(require,module,exports){ const create=()=>[0,1,0];module.exports=create; -},{}],219:[function(require,module,exports){ +},{}],220:[function(require,module,exports){ const vec2=require("../vec2"),direction=e=>{const c=vec2.normal(vec2.create(),e);return vec2.negate(c,c),c};module.exports=direction; -},{"../vec2":310}],220:[function(require,module,exports){ +},{"../vec2":311}],221:[function(require,module,exports){ const vec2=require("../vec2"),distanceToPoint=(e,t)=>{let o=vec2.dot(t,e);return o=Math.abs(o-e[2])};module.exports=distanceToPoint; -},{"../vec2":310}],221:[function(require,module,exports){ +},{"../vec2":311}],222:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals; -},{}],222:[function(require,module,exports){ +},{}],223:[function(require,module,exports){ const vec2=require("../vec2"),fromPoints=(e,c,o)=>{const r=vec2.subtract(vec2.create(),o,c);vec2.normal(r,r),vec2.normalize(r,r);const t=vec2.dot(c,r);return e[0]=r[0],e[1]=r[1],e[2]=t,e};module.exports=fromPoints; -},{"../vec2":310}],223:[function(require,module,exports){ +},{"../vec2":311}],224:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues; -},{"./create":218}],224:[function(require,module,exports){ +},{"./create":219}],225:[function(require,module,exports){ module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromValues:require("./fromValues"),intersectPointOfLines:require("./intersectPointOfLines"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform"),xAtY:require("./xAtY")}; -},{"./clone":215,"./closestPoint":216,"./copy":217,"./create":218,"./direction":219,"./distanceToPoint":220,"./equals":221,"./fromPoints":222,"./fromValues":223,"./intersectPointOfLines":225,"./origin":226,"./reverse":227,"./toString":228,"./transform":229,"./xAtY":230}],225:[function(require,module,exports){ +},{"./clone":216,"./closestPoint":217,"./copy":218,"./create":219,"./direction":220,"./distanceToPoint":221,"./equals":222,"./fromPoints":223,"./fromValues":224,"./intersectPointOfLines":226,"./origin":227,"./reverse":228,"./toString":229,"./transform":230,"./xAtY":231}],226:[function(require,module,exports){ const vec2=require("../vec2"),{solve2Linear:solve2Linear}=require("../utils"),intersectToLine=(e,r)=>{const n=solve2Linear(e[0],e[1],r[0],r[1],e[2],r[2]);return vec2.clone(n)};module.exports=intersectToLine; -},{"../utils":288,"../vec2":310}],226:[function(require,module,exports){ +},{"../utils":289,"../vec2":311}],227:[function(require,module,exports){ const vec2=require("../vec2"),origin=e=>vec2.scale(vec2.create(),e,e[2]);module.exports=origin; -},{"../vec2":310}],227:[function(require,module,exports){ +},{"../vec2":311}],228:[function(require,module,exports){ const vec2=require("../vec2"),copy=require("./copy"),fromValues=require("./fromValues"),reverse=(e,r)=>{const c=vec2.negate(vec2.create(),r),o=-r[2];return copy(e,fromValues(c[0],c[1],o))};module.exports=reverse; -},{"../vec2":310,"./copy":217,"./fromValues":223}],228:[function(require,module,exports){ +},{"../vec2":311,"./copy":218,"./fromValues":224}],229:[function(require,module,exports){ const toString=t=>`line2: (${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)})`;module.exports=toString; -},{}],229:[function(require,module,exports){ +},{}],230:[function(require,module,exports){ const vec2=require("../vec2"),fromPoints=require("./fromPoints"),origin=require("./origin"),direction=require("./direction"),transform=(r,o,i)=>{const e=origin(o),n=direction(o);return vec2.transform(e,e,i),vec2.transform(n,n,i),fromPoints(r,e,n)};module.exports=transform; -},{"../vec2":310,"./direction":219,"./fromPoints":222,"./origin":226}],230:[function(require,module,exports){ +},{"../vec2":311,"./direction":220,"./fromPoints":223,"./origin":227}],231:[function(require,module,exports){ const origin=require("./origin"),xAtY=(i,r)=>{let e=(i[2]-i[1]*r)/i[0];if(Number.isNaN(e)){e=origin(i)[0]}return e};module.exports=xAtY; -},{"./origin":226}],231:[function(require,module,exports){ +},{"./origin":227}],232:[function(require,module,exports){ const vec3=require("../vec3"),create=require("./create"),clone=e=>{const c=create();return vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c};module.exports=clone; -},{"../vec3":341,"./create":234}],232:[function(require,module,exports){ +},{"../vec3":342,"./create":235}],233:[function(require,module,exports){ const vec3=require("../vec3"),closestPoint=(e,c)=>{const t=e[0],o=e[1],s=vec3.dot(vec3.subtract(vec3.create(),c,t),o)/vec3.dot(o,o),v=vec3.scale(vec3.create(),o,s);return vec3.add(v,v,t),v};module.exports=closestPoint; -},{"../vec3":341}],233:[function(require,module,exports){ +},{"../vec3":342}],234:[function(require,module,exports){ const vec3=require("../vec3"),copy=(c,e)=>(vec3.copy(c[0],e[0]),vec3.copy(c[1],e[1]),c);module.exports=copy; -},{"../vec3":341}],234:[function(require,module,exports){ +},{"../vec3":342}],235:[function(require,module,exports){ const vec3=require("../vec3"),create=()=>[vec3.fromValues(0,0,0),vec3.fromValues(0,0,1)];module.exports=create; -},{"../vec3":341}],235:[function(require,module,exports){ +},{"../vec3":342}],236:[function(require,module,exports){ const direction=o=>o[1];module.exports=direction; -},{}],236:[function(require,module,exports){ +},{}],237:[function(require,module,exports){ const vec3=require("../vec3"),closestPoint=require("./closestPoint"),distanceToPoint=(e,t)=>{const c=closestPoint(e,t),o=vec3.subtract(vec3.create(),t,c);return vec3.length(o)};module.exports=distanceToPoint; -},{"../vec3":341,"./closestPoint":232}],237:[function(require,module,exports){ +},{"../vec3":342,"./closestPoint":233}],238:[function(require,module,exports){ const vec3=require("../vec3"),equals=(e,s)=>!!vec3.equals(e[1],s[1])&&!!vec3.equals(e[0],s[0]);module.exports=equals; -},{"../vec3":341}],238:[function(require,module,exports){ +},{"../vec3":342}],239:[function(require,module,exports){ const vec3=require("../vec3"),{solve2Linear:solve2Linear}=require("../utils"),{EPS:EPS}=require("../constants"),fromPointAndDirection=require("./fromPointAndDirection"),fromPlanes=(e,r,o)=>{let n=vec3.cross(vec3.create(),r,o),s=vec3.length(n);if(s=a&&t>=i?(c=solve2Linear(r[1],r[2],o[1],o[2],r[3],o[3]),l=vec3.fromValues(0,c[0],c[1])):a>=t&&a>=i?(c=solve2Linear(r[0],r[2],o[0],o[2],r[3],o[3]),l=vec3.fromValues(c[0],0,c[1])):(c=solve2Linear(r[0],r[1],o[0],o[1],r[3],o[3]),l=vec3.fromValues(c[0],c[1],0)),fromPointAndDirection(e,l,n)};module.exports=fromPlanes; -},{"../constants":213,"../utils":288,"../vec3":341,"./fromPointAndDirection":239}],239:[function(require,module,exports){ +},{"../constants":214,"../utils":289,"../vec3":342,"./fromPointAndDirection":240}],240:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=(e,c,o)=>{const r=vec3.normalize(vec3.create(),o);return vec3.copy(e[0],c),vec3.copy(e[1],r),e};module.exports=fromPointAndDirection; -},{"../vec3":341}],240:[function(require,module,exports){ +},{"../vec3":342}],241:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),fromPoints=(o,r,e)=>{const t=vec3.subtract(vec3.create(),e,r);return fromPointAndDirection(o,r,t)};module.exports=fromPoints; -},{"../vec3":341,"./fromPointAndDirection":239}],241:[function(require,module,exports){ +},{"../vec3":342,"./fromPointAndDirection":240}],242:[function(require,module,exports){ module.exports={clone:require("./clone"),closestPoint:require("./closestPoint"),copy:require("./copy"),create:require("./create"),direction:require("./direction"),distanceToPoint:require("./distanceToPoint"),equals:require("./equals"),fromPlanes:require("./fromPlanes"),fromPointAndDirection:require("./fromPointAndDirection"),fromPoints:require("./fromPoints"),intersectPointOfLineAndPlane:require("./intersectPointOfLineAndPlane"),origin:require("./origin"),reverse:require("./reverse"),toString:require("./toString"),transform:require("./transform")}; -},{"./clone":231,"./closestPoint":232,"./copy":233,"./create":234,"./direction":235,"./distanceToPoint":236,"./equals":237,"./fromPlanes":238,"./fromPointAndDirection":239,"./fromPoints":240,"./intersectPointOfLineAndPlane":242,"./origin":243,"./reverse":244,"./toString":245,"./transform":246}],242:[function(require,module,exports){ +},{"./clone":232,"./closestPoint":233,"./copy":234,"./create":235,"./direction":236,"./distanceToPoint":237,"./equals":238,"./fromPlanes":239,"./fromPointAndDirection":240,"./fromPoints":241,"./intersectPointOfLineAndPlane":243,"./origin":244,"./reverse":245,"./toString":246,"./transform":247}],243:[function(require,module,exports){ const vec3=require("../vec3"),intersectToPlane=(e,c)=>{const t=c,r=c[3],o=e[0],v=e[1],n=(r-vec3.dot(t,o))/vec3.dot(t,v);return vec3.add(vec3.create(),o,vec3.scale(vec3.create(),v,n))};module.exports=intersectToPlane; -},{"../vec3":341}],243:[function(require,module,exports){ +},{"../vec3":342}],244:[function(require,module,exports){ const origin=o=>o[0];module.exports=origin; -},{}],244:[function(require,module,exports){ +},{}],245:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),reverse=(e,r)=>{const n=vec3.clone(r[0]),o=vec3.negate(vec3.create(),r[1]);return fromPointAndDirection(e,n,o)};module.exports=reverse; -},{"../vec3":341,"./fromPointAndDirection":239}],245:[function(require,module,exports){ +},{"../vec3":342,"./fromPointAndDirection":240}],246:[function(require,module,exports){ const toString=t=>{const o=t[0],i=t[1];return`line3: point: (${o[0].toFixed(7)}, ${o[1].toFixed(7)}, ${o[2].toFixed(7)}) direction: (${i[0].toFixed(7)}, ${i[1].toFixed(7)}, ${i[2].toFixed(7)})`};module.exports=toString; -},{}],246:[function(require,module,exports){ +},{}],247:[function(require,module,exports){ const vec3=require("../vec3"),fromPointAndDirection=require("./fromPointAndDirection"),transform=(r,e,t)=>{const o=e[0],c=e[1],n=vec3.add(vec3.create(),o,c),i=vec3.transform(vec3.create(),o,t),a=vec3.transform(n,n,t),m=vec3.subtract(a,a,i);return fromPointAndDirection(r,i,m)};module.exports=transform; -},{"../vec3":341,"./fromPointAndDirection":239}],247:[function(require,module,exports){ +},{"../vec3":342,"./fromPointAndDirection":240}],248:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d[3]=o[3]+a[3],d[4]=o[4]+a[4],d[5]=o[5]+a[5],d[6]=o[6]+a[6],d[7]=o[7]+a[7],d[8]=o[8]+a[8],d[9]=o[9]+a[9],d[10]=o[10]+a[10],d[11]=o[11]+a[11],d[12]=o[12]+a[12],d[13]=o[13]+a[13],d[14]=o[14]+a[14],d[15]=o[15]+a[15],d);module.exports=add; -},{}],248:[function(require,module,exports){ +},{}],249:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r[6]=e[6],r[7]=e[7],r[8]=e[8],r[9]=e[9],r[10]=e[10],r[11]=e[11],r[12]=e[12],r[13]=e[13],r[14]=e[14],r[15]=e[15],r};module.exports=clone; -},{"./create":250}],249:[function(require,module,exports){ +},{"./create":251}],250:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o[4]=c[4],o[5]=c[5],o[6]=c[6],o[7]=c[7],o[8]=c[8],o[9]=c[9],o[10]=c[10],o[11]=c[11],o[12]=c[12],o[13]=c[13],o[14]=c[14],o[15]=c[15],o);module.exports=copy; -},{}],250:[function(require,module,exports){ +},{}],251:[function(require,module,exports){ const create=()=>[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];module.exports=create; -},{}],251:[function(require,module,exports){ +},{}],252:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3]&&e[4]===s[4]&&e[5]===s[5]&&e[6]===s[6]&&e[7]===s[7]&&e[8]===s[8]&&e[9]===s[9]&&e[10]===s[10]&&e[11]===s[11]&&e[12]===s[12]&&e[13]===s[13]&&e[14]===s[14]&&e[15]===s[15];module.exports=equals; -},{}],252:[function(require,module,exports){ +},{}],253:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),identity=require("./identity"),fromRotation=(t,o,i)=>{let[n,r,s]=i;const e=n*n+r*r+s*s;if(Math.abs(e)(o[0]=c[0],o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=c[1],o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c[2],o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o);module.exports=fromScaling; -},{}],254:[function(require,module,exports){ +},{}],255:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromTaitBryanRotation=(o,s,n,t)=>{const i=sin(s),r=cos(s),c=sin(n),a=cos(n),e=sin(t),m=cos(t);return o[0]=a*r,o[1]=a*i,o[2]=-c,o[3]=0,o[4]=e*c*r-m*i,o[5]=m*r+e*c*i,o[6]=e*a,o[7]=0,o[8]=e*i+m*c*r,o[9]=m*c*i-e*r,o[10]=m*a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromTaitBryanRotation; -},{"../utils/trigonometry":292}],255:[function(require,module,exports){ +},{"../utils/trigonometry":293}],256:[function(require,module,exports){ const fromTranslation=(o,n)=>(o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=n[0],o[13]=n[1],o[14]=n[2],o[15]=1,o);module.exports=fromTranslation; -},{}],256:[function(require,module,exports){ +},{}],257:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t,o,a,c,s,u,l,m,n,f,V,d,i,p)=>{const q=create();return q[0]=e,q[1]=r,q[2]=t,q[3]=o,q[4]=a,q[5]=c,q[6]=s,q[7]=u,q[8]=l,q[9]=m,q[10]=n,q[11]=f,q[12]=V,q[13]=d,q[14]=i,q[15]=p,q};module.exports=fromValues; -},{"./create":250}],257:[function(require,module,exports){ +},{"./create":251}],258:[function(require,module,exports){ const vec3=require("../vec3"),fromRotation=require("./fromRotation"),fromVectorRotation=(o,e,t)=>{const r=vec3.normalize(vec3.create(),e),c=vec3.normalize(vec3.create(),t),n=vec3.cross(vec3.create(),c,r),a=vec3.dot(c,r);if(-1===a)return fromRotation(o,Math.PI,vec3.orthogonal(n,r));const i=1/(1+a);return o[0]=n[0]*n[0]*i+a,o[1]=n[1]*n[0]*i-n[2],o[2]=n[2]*n[0]*i+n[1],o[3]=0,o[4]=n[0]*n[1]*i+n[2],o[5]=n[1]*n[1]*i+a,o[6]=n[2]*n[1]*i-n[0],o[7]=0,o[8]=n[0]*n[2]*i-n[1],o[9]=n[1]*n[2]*i+n[0],o[10]=n[2]*n[2]*i+a,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromVectorRotation; -},{"../vec3":341,"./fromRotation":252}],258:[function(require,module,exports){ +},{"../vec3":342,"./fromRotation":253}],259:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromXRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=n,o[6]=s,o[7]=0,o[8]=0,o[9]=-s,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromXRotation; -},{"../utils/trigonometry":292}],259:[function(require,module,exports){ +},{"../utils/trigonometry":293}],260:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromYRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=0,o[2]=-s,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=s,o[9]=0,o[10]=n,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromYRotation; -},{"../utils/trigonometry":292}],260:[function(require,module,exports){ +},{"../utils/trigonometry":293}],261:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromZRotation=(o,t)=>{const s=sin(t),n=cos(t);return o[0]=n,o[1]=s,o[2]=0,o[3]=0,o[4]=-s,o[5]=n,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o};module.exports=fromZRotation; -},{"../utils/trigonometry":292}],261:[function(require,module,exports){ +},{"../utils/trigonometry":293}],262:[function(require,module,exports){ const identity=t=>(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t);module.exports=identity; -},{}],262:[function(require,module,exports){ +},{}],263:[function(require,module,exports){ module.exports={add:require("./add"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),invert:require("./invert"),equals:require("./equals"),fromRotation:require("./fromRotation"),fromScaling:require("./fromScaling"),fromTaitBryanRotation:require("./fromTaitBryanRotation"),fromTranslation:require("./fromTranslation"),fromValues:require("./fromValues"),fromVectorRotation:require("./fromVectorRotation"),fromXRotation:require("./fromXRotation"),fromYRotation:require("./fromYRotation"),fromZRotation:require("./fromZRotation"),identity:require("./identity"),isIdentity:require("./isIdentity"),isOnlyTransformScale:require("./isOnlyTransformScale"),isMirroring:require("./isMirroring"),mirrorByPlane:require("./mirrorByPlane"),multiply:require("./multiply"),rotate:require("./rotate"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),subtract:require("./subtract"),toString:require("./toString"),translate:require("./translate")}; -},{"./add":247,"./clone":248,"./copy":249,"./create":250,"./equals":251,"./fromRotation":252,"./fromScaling":253,"./fromTaitBryanRotation":254,"./fromTranslation":255,"./fromValues":256,"./fromVectorRotation":257,"./fromXRotation":258,"./fromYRotation":259,"./fromZRotation":260,"./identity":261,"./invert":263,"./isIdentity":264,"./isMirroring":265,"./isOnlyTransformScale":266,"./mirrorByPlane":267,"./multiply":268,"./rotate":269,"./rotateX":270,"./rotateY":271,"./rotateZ":272,"./scale":273,"./subtract":274,"./toString":275,"./translate":276}],263:[function(require,module,exports){ +},{"./add":248,"./clone":249,"./copy":250,"./create":251,"./equals":252,"./fromRotation":253,"./fromScaling":254,"./fromTaitBryanRotation":255,"./fromTranslation":256,"./fromValues":257,"./fromVectorRotation":258,"./fromXRotation":259,"./fromYRotation":260,"./fromZRotation":261,"./identity":262,"./invert":264,"./isIdentity":265,"./isMirroring":266,"./isOnlyTransformScale":267,"./mirrorByPlane":268,"./multiply":269,"./rotate":270,"./rotateX":271,"./rotateY":272,"./rotateZ":273,"./scale":274,"./subtract":275,"./toString":276,"./translate":277}],264:[function(require,module,exports){ const invert=(t,e)=>{const n=e[0],r=e[1],l=e[2],o=e[3],s=e[4],u=e[5],c=e[6],i=e[7],v=e[8],d=e[9],m=e[10],p=e[11],x=e[12],a=e[13],b=e[14],f=e[15],g=n*u-r*s,h=n*c-l*s,j=n*i-o*s,k=r*c-l*u,q=r*i-o*u,w=l*i-o*c,y=v*a-d*x,z=v*b-m*x,A=v*f-p*x,B=d*b-m*a,C=d*f-p*a,D=m*f-p*b;let E=g*D-h*C+j*B+k*A-q*z+w*y;return E?(E=1/E,t[0]=(u*D-c*C+i*B)*E,t[1]=(l*C-r*D-o*B)*E,t[2]=(a*w-b*q+f*k)*E,t[3]=(m*q-d*w-p*k)*E,t[4]=(c*A-s*D-i*z)*E,t[5]=(n*D-l*A+o*z)*E,t[6]=(b*j-x*w-f*h)*E,t[7]=(v*w-m*j+p*h)*E,t[8]=(s*C-u*A+i*y)*E,t[9]=(r*A-n*C-o*y)*E,t[10]=(x*q-a*j+f*g)*E,t[11]=(d*j-v*q-p*g)*E,t[12]=(u*z-s*B-c*y)*E,t[13]=(n*B-r*z+l*y)*E,t[14]=(a*h-x*k-b*g)*E,t[15]=(v*k-d*h+m*g)*E,t):null};module.exports=invert; -},{}],264:[function(require,module,exports){ +},{}],265:[function(require,module,exports){ const isIdentity=t=>1===t[0]&&0===t[1]&&0===t[2]&&0===t[3]&&0===t[4]&&1===t[5]&&0===t[6]&&0===t[7]&&0===t[8]&&0===t[9]&&1===t[10]&&0===t[11]&&0===t[12]&&0===t[13]&&0===t[14]&&1===t[15];module.exports=isIdentity; -},{}],265:[function(require,module,exports){ +},{}],266:[function(require,module,exports){ const isMirroring=r=>{const i=r[4]*r[9]-r[8]*r[5],o=r[8]*r[1]-r[0]*r[9],n=r[0]*r[5]-r[4]*r[1];return i*r[2]+o*r[6]+n*r[10]<0};module.exports=isMirroring; -},{}],266:[function(require,module,exports){ +},{}],267:[function(require,module,exports){ const isOnlyTransformScale=s=>isZero(s[1])&&isZero(s[2])&&isZero(s[3])&&isZero(s[4])&&isZero(s[6])&&isZero(s[7])&&isZero(s[8])&&isZero(s[9])&&isZero(s[11])&&1===s[15],isZero=s=>Math.abs(s){const[e,n,t,l]=o;return r[0]=1-2*e*e,r[1]=-2*n*e,r[2]=-2*t*e,r[3]=0,r[4]=-2*e*n,r[5]=1-2*n*n,r[6]=-2*t*n,r[7]=0,r[8]=-2*e*t,r[9]=-2*n*t,r[10]=1-2*t*t,r[11]=0,r[12]=2*e*l,r[13]=2*n*l,r[14]=2*t*l,r[15]=1,r};module.exports=mirrorByPlane; -},{}],268:[function(require,module,exports){ +},{}],269:[function(require,module,exports){ const multiply=(t,l,e)=>{const o=l[0],u=l[1],m=l[2],n=l[3],p=l[4],r=l[5],s=l[6],c=l[7],i=l[8],y=l[9],d=l[10],x=l[11],a=l[12],b=l[13],f=l[14],g=l[15];let h=e[0],j=e[1],k=e[2],q=e[3];return t[0]=h*o+j*p+k*i+q*a,t[1]=h*u+j*r+k*y+q*b,t[2]=h*m+j*s+k*d+q*f,t[3]=h*n+j*c+k*x+q*g,h=e[4],j=e[5],k=e[6],q=e[7],t[4]=h*o+j*p+k*i+q*a,t[5]=h*u+j*r+k*y+q*b,t[6]=h*m+j*s+k*d+q*f,t[7]=h*n+j*c+k*x+q*g,h=e[8],j=e[9],k=e[10],q=e[11],t[8]=h*o+j*p+k*i+q*a,t[9]=h*u+j*r+k*y+q*b,t[10]=h*m+j*s+k*d+q*f,t[11]=h*n+j*c+k*x+q*g,h=e[12],j=e[13],k=e[14],q=e[15],t[12]=h*o+j*p+k*i+q*a,t[13]=h*u+j*r+k*y+q*b,t[14]=h*m+j*s+k*d+q*f,t[15]=h*n+j*c+k*x+q*g,t};module.exports=multiply; -},{}],269:[function(require,module,exports){ +},{}],270:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),{sin:sin,cos:cos}=require("../utils/trigonometry"),copy=require("./copy"),rotate=(t,o,r,s)=>{let[e,n,c]=s;const i=e*e+n*n+c*c;if(Math.abs(i){const r=sin(s),e=cos(s),n=t[4],i=t[5],c=t[6],u=t[7],a=t[8],l=t[9],m=t[10],X=t[11];return t!==o&&(o[0]=t[0],o[1]=t[1],o[2]=t[2],o[3]=t[3],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[4]=n*e+a*r,o[5]=i*e+l*r,o[6]=c*e+m*r,o[7]=u*e+X*r,o[8]=a*e-n*r,o[9]=l*e-i*r,o[10]=m*e-c*r,o[11]=X*e-u*r,o};module.exports=rotateX; -},{"../utils/trigonometry":292}],271:[function(require,module,exports){ +},{"../utils/trigonometry":293}],272:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateY=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[8],l=t[9],m=t[10],Y=t[11];return t!==o&&(o[4]=t[4],o[5]=t[5],o[6]=t[6],o[7]=t[7],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e-a*r,o[1]=i*e-l*r,o[2]=c*e-m*r,o[3]=u*e-Y*r,o[8]=n*r+a*e,o[9]=i*r+l*e,o[10]=c*r+m*e,o[11]=u*r+Y*e,o};module.exports=rotateY; -},{"../utils/trigonometry":292}],272:[function(require,module,exports){ +},{"../utils/trigonometry":293}],273:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),rotateZ=(o,t,s)=>{const r=sin(s),e=cos(s),n=t[0],i=t[1],c=t[2],u=t[3],a=t[4],l=t[5],m=t[6],Z=t[7];return t!==o&&(o[8]=t[8],o[9]=t[9],o[10]=t[10],o[11]=t[11],o[12]=t[12],o[13]=t[13],o[14]=t[14],o[15]=t[15]),o[0]=n*e+a*r,o[1]=i*e+l*r,o[2]=c*e+m*r,o[3]=u*e+Z*r,o[4]=a*e-n*r,o[5]=l*e-i*r,o[6]=m*e-c*r,o[7]=Z*e-u*r,o};module.exports=rotateZ; -},{"../utils/trigonometry":292}],273:[function(require,module,exports){ +},{"../utils/trigonometry":293}],274:[function(require,module,exports){ const scale=(e,s,c)=>{const o=c[0],t=c[1],l=c[2];return e[0]=s[0]*o,e[1]=s[1]*o,e[2]=s[2]*o,e[3]=s[3]*o,e[4]=s[4]*t,e[5]=s[5]*t,e[6]=s[6]*t,e[7]=s[7]*t,e[8]=s[8]*l,e[9]=s[9]*l,e[10]=s[10]*l,e[11]=s[11]*l,e[12]=s[12],e[13]=s[13],e[14]=s[14],e[15]=s[15],e};module.exports=scale; -},{}],274:[function(require,module,exports){ +},{}],275:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t[3]=s[3]-c[3],t[4]=s[4]-c[4],t[5]=s[5]-c[5],t[6]=s[6]-c[6],t[7]=s[7]-c[7],t[8]=s[8]-c[8],t[9]=s[9]-c[9],t[10]=s[10]-c[10],t[11]=s[11]-c[11],t[12]=s[12]-c[12],t[13]=s[13]-c[13],t[14]=s[14]-c[14],t[15]=s[15]-c[15],t);module.exports=subtract; -},{}],275:[function(require,module,exports){ +},{}],276:[function(require,module,exports){ const toString=t=>t.map(t=>t.toFixed(7)).toString();module.exports=toString; -},{}],276:[function(require,module,exports){ +},{}],277:[function(require,module,exports){ const translate=(t,e,n)=>{const r=n[0],s=n[1],a=n[2];let l,o,c,u,d,m,p,x,b,f,g,h;return e===t?(t[12]=e[0]*r+e[4]*s+e[8]*a+e[12],t[13]=e[1]*r+e[5]*s+e[9]*a+e[13],t[14]=e[2]*r+e[6]*s+e[10]*a+e[14],t[15]=e[3]*r+e[7]*s+e[11]*a+e[15]):(l=e[0],o=e[1],c=e[2],u=e[3],d=e[4],m=e[5],p=e[6],x=e[7],b=e[8],f=e[9],g=e[10],h=e[11],t[0]=l,t[1]=o,t[2]=c,t[3]=u,t[4]=d,t[5]=m,t[6]=p,t[7]=x,t[8]=b,t[9]=f,t[10]=g,t[11]=h,t[12]=l*r+d*s+b*a+e[12],t[13]=o*r+m*s+f*a+e[13],t[14]=c*r+p*s+g*a+e[14],t[15]=u*r+x*s+h*a+e[15]),t};module.exports=translate; -},{}],277:[function(require,module,exports){ +},{}],278:[function(require,module,exports){ const flip=(l,o)=>(l[0]=-o[0],l[1]=-o[1],l[2]=-o[2],l[3]=-o[3],l);module.exports=flip; -},{}],278:[function(require,module,exports){ +},{}],279:[function(require,module,exports){ const vec3=require("../vec3"),fromNormalAndPoint=require("./fromNormalAndPoint"),fromNoisyPoints=(e,...c)=>{e[0]=0,e[1]=0,e[2]=0,e[3]=0;const o=c.length;c.forEach(c=>{vec3.add(e,e,c)}),vec3.scale(e,e,1/o);let t=0,r=0,a=0,v=0,d=0,n=0;const s=vec3.create();c.forEach(c=>{vec3.subtract(s,c,e),t+=s[0]*s[0],r+=s[0]*s[1],a+=s[0]*s[2],v+=s[1]*s[1],d+=s[1]*s[2],n+=s[2]*s[2]}),t/=o,r/=o,a/=o,v/=o,d/=o,n/=o,s[0]=0,s[1]=0,s[2]=0;const l=vec3.create();let i=v*n-d*d;l[0]=i,l[1]=a*d-r*n,l[2]=r*d-a*v;let m=i*i;return vec3.add(s,s,vec3.scale(l,l,m)),i=t*n-a*a,l[0]=a*d-r*n,l[1]=i,l[2]=r*a-d*t,m=i*i,vec3.dot(s,l)<0&&(m=-m),vec3.add(s,s,vec3.scale(l,l,m)),i=t*v-r*r,l[0]=r*d-a*v,l[1]=r*a-d*t,l[2]=i,m=i*i,vec3.dot(s,l)<0&&(m=-m),vec3.add(s,s,vec3.scale(l,l,m)),fromNormalAndPoint(e,s,e)};module.exports=fromNoisyPoints; -},{"../vec3":341,"./fromNormalAndPoint":279}],279:[function(require,module,exports){ +},{"../vec3":342,"./fromNormalAndPoint":280}],280:[function(require,module,exports){ const vec3=require("../vec3"),fromNormalAndPoint=(e,o,r)=>{const c=vec3.normalize(vec3.create(),o),n=vec3.dot(r,c);return e[0]=c[0],e[1]=c[1],e[2]=c[2],e[3]=n,e};module.exports=fromNormalAndPoint; -},{"../vec3":341}],280:[function(require,module,exports){ +},{"../vec3":342}],281:[function(require,module,exports){ const vec3=require("../vec3"),fromPoints=(e,...c)=>{const r=c.length,t=vec3.create(),o=vec3.create(),v=e=>{const v=c[e],n=c[(e+1)%r],s=c[(e+2)%r];return vec3.subtract(t,n,v),vec3.subtract(o,s,v),vec3.cross(t,t,o),vec3.normalize(t,t),t};return e[0]=0,e[1]=0,e[2]=0,3===r?vec3.copy(e,v(0)):(c.forEach((c,r)=>{vec3.add(e,e,v(r))}),vec3.normalize(e,e)),e[3]=vec3.dot(e,c[0]),e};module.exports=fromPoints; -},{"../vec3":341}],281:[function(require,module,exports){ +},{"../vec3":342}],282:[function(require,module,exports){ const{EPS:EPS}=require("../constants"),vec3=require("../vec3"),fromPointsRandom=(e,c,o,t)=>{let r=vec3.subtract(vec3.create(),o,c),v=vec3.subtract(vec3.create(),t,c);vec3.length(r){const r=o[0]*e[0]+o[1]*e[1]+o[2]*e[2]-e[3],t=o[0]-r*e[0],c=o[1]-r*e[1],n=o[2]-r*e[2];return vec3.fromValues(t,c,n)};module.exports=projectionOfPoint; -},{"../vec3":341}],284:[function(require,module,exports){ +},{"../vec3":342}],285:[function(require,module,exports){ const vec3=require("../vec3"),signedDistanceToPoint=(e,o)=>vec3.dot(e,o)-e[3];module.exports=signedDistanceToPoint; -},{"../vec3":341}],285:[function(require,module,exports){ +},{"../vec3":342}],286:[function(require,module,exports){ const mat4=require("../mat4"),vec3=require("../vec3"),fromPoints=require("./fromPoints"),flip=require("./flip"),transform=(e,r,c)=>{const t=mat4.isMirroring(c),o=vec3.orthogonal(vec3.create(),r),a=vec3.cross(o,r,o),v=vec3.cross(vec3.create(),r,a);let s=vec3.fromScalar(vec3.create(),r[3]);vec3.multiply(s,s,r);let i=vec3.add(vec3.create(),s,a),m=vec3.add(vec3.create(),s,v);return s=vec3.transform(s,s,c),i=vec3.transform(i,i,c),m=vec3.transform(m,m,c),fromPoints(e,s,i,m),t&&flip(e,e),e};module.exports=transform; -},{"../mat4":262,"../vec3":341,"./flip":277,"./fromPoints":280}],286:[function(require,module,exports){ +},{"../mat4":263,"../vec3":342,"./flip":278,"./fromPoints":281}],287:[function(require,module,exports){ const{NEPS:NEPS}=require("../constants"),aboutEqualNormals=(a,s)=>Math.abs(a[0]-s[0])<=NEPS&&Math.abs(a[1]-s[1])<=NEPS&&Math.abs(a[2]-s[2])<=NEPS;module.exports=aboutEqualNormals; -},{"../constants":213}],287:[function(require,module,exports){ +},{"../constants":214}],288:[function(require,module,exports){ const area=e=>{let t=0;for(let r=0;r{let n,r=o-e[1],i=t[1]-e[1];return i<0&&(r=-r,i=-i),n=r<=0?0:r>=i?1:i<1e-10?.5:r/i,e[0]+n*(t[0]-e[0])};module.exports=interpolateBetween2DPointsForY; -},{}],290:[function(require,module,exports){ +},{}],291:[function(require,module,exports){ const intersect=(t,e,r,n)=>{if(t[0]===e[0]&&t[1]===e[1]||r[0]===n[0]&&r[1]===n[1])return;const s=(n[1]-r[1])*(e[0]-t[0])-(n[0]-r[0])*(e[1]-t[1]);if(Math.abs(s)1||c<0||c>1?void 0:[t[0]+o*(e[0]-t[0]),t[1]+o*(e[1]-t[1])]};module.exports=intersect; -},{}],291:[function(require,module,exports){ +},{}],292:[function(require,module,exports){ const solve2Linear=(e,o,n,r,s,t)=>{const l=1/(e*r-o*n);let a=s*r-o*t,c=-s*n+e*t;return[a*=l,c*=l]};module.exports=solve2Linear; -},{}],292:[function(require,module,exports){ +},{}],293:[function(require,module,exports){ const{NEPS:NEPS}=require("../constants"),rezero=s=>Math.abs(s)rezero(Math.sin(s)),cos=s=>rezero(Math.cos(s));module.exports={sin:sin,cos:cos}; -},{"../constants":213}],293:[function(require,module,exports){ +},{"../constants":214}],294:[function(require,module,exports){ const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a);module.exports=abs; -},{}],294:[function(require,module,exports){ +},{}],295:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d);module.exports=add; -},{}],295:[function(require,module,exports){ +},{}],296:[function(require,module,exports){ module.exports=require("./angleRadians"); -},{"./angleRadians":297}],296:[function(require,module,exports){ +},{"./angleRadians":298}],297:[function(require,module,exports){ const angleRadians=require("./angleRadians"),angleDegrees=e=>57.29577951308232*angleRadians(e);module.exports=angleDegrees; -},{"./angleRadians":297}],297:[function(require,module,exports){ +},{"./angleRadians":298}],298:[function(require,module,exports){ const angleRadians=a=>Math.atan2(a[1],a[0]);module.exports=angleRadians; -},{}],298:[function(require,module,exports){ +},{}],299:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r};module.exports=clone; -},{"./create":300}],299:[function(require,module,exports){ +},{"./create":301}],300:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o);module.exports=copy; -},{}],300:[function(require,module,exports){ +},{}],301:[function(require,module,exports){ const create=()=>[0,0];module.exports=create; -},{}],301:[function(require,module,exports){ +},{}],302:[function(require,module,exports){ const cross=(s,o,c)=>(s[0]=0,s[1]=0,s[2]=o[0]*c[1]-o[1]*c[0],s);module.exports=cross; -},{}],302:[function(require,module,exports){ +},{}],303:[function(require,module,exports){ const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1];return Math.sqrt(e*e+n*n)};module.exports=distance; -},{}],303:[function(require,module,exports){ +},{}],304:[function(require,module,exports){ const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d);module.exports=divide; -},{}],304:[function(require,module,exports){ +},{}],305:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1];module.exports=dot; -},{}],305:[function(require,module,exports){ +},{}],306:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1];module.exports=equals; -},{}],306:[function(require,module,exports){ +},{}],307:[function(require,module,exports){ const fromAngleRadians=require("./fromAngleRadians"),fromAngleDegrees=(e,r)=>fromAngleRadians(e,.017453292519943295*r);module.exports=fromAngleDegrees; -},{"./fromAngleRadians":307}],307:[function(require,module,exports){ +},{"./fromAngleRadians":308}],308:[function(require,module,exports){ const{sin:sin,cos:cos}=require("../utils/trigonometry"),fromAngleRadians=(s,o)=>(s[0]=cos(o),s[1]=sin(o),s);module.exports=fromAngleRadians; -},{"../utils/trigonometry":292}],308:[function(require,module,exports){ +},{"../utils/trigonometry":293}],309:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o);module.exports=fromScalar; -},{}],309:[function(require,module,exports){ +},{}],310:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r)=>{const t=create();return t[0]=e,t[1]=r,t};module.exports=fromValues; -},{"./create":300}],310:[function(require,module,exports){ +},{"./create":301}],311:[function(require,module,exports){ module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),angleDegrees:require("./angleDegrees"),angleRadians:require("./angleRadians"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromAngleDegrees:require("./fromAngleDegrees"),fromAngleRadians:require("./fromAngleRadians"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normal:require("./normal"),normalize:require("./normalize"),rotate:require("./rotate"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")}; -},{"./abs":293,"./add":294,"./angle":295,"./angleDegrees":296,"./angleRadians":297,"./clone":298,"./copy":299,"./create":300,"./cross":301,"./distance":302,"./divide":303,"./dot":304,"./equals":305,"./fromAngleDegrees":306,"./fromAngleRadians":307,"./fromScalar":308,"./fromValues":309,"./length":311,"./lerp":312,"./max":313,"./min":314,"./multiply":315,"./negate":316,"./normal":317,"./normalize":318,"./rotate":319,"./scale":320,"./snap":321,"./squaredDistance":322,"./squaredLength":323,"./subtract":324,"./toString":325,"./transform":326}],311:[function(require,module,exports){ +},{"./abs":294,"./add":295,"./angle":296,"./angleDegrees":297,"./angleRadians":298,"./clone":299,"./copy":300,"./create":301,"./cross":302,"./distance":303,"./divide":304,"./dot":305,"./equals":306,"./fromAngleDegrees":307,"./fromAngleRadians":308,"./fromScalar":309,"./fromValues":310,"./length":312,"./lerp":313,"./max":314,"./min":315,"./multiply":316,"./negate":317,"./normal":318,"./normalize":319,"./rotate":320,"./scale":321,"./snap":322,"./squaredDistance":323,"./squaredLength":324,"./subtract":325,"./toString":326,"./transform":327}],312:[function(require,module,exports){ const length=t=>Math.sqrt(t[0]*t[0]+t[1]*t[1]);module.exports=length; -},{}],312:[function(require,module,exports){ +},{}],313:[function(require,module,exports){ const lerp=(e,r,o,t)=>{const l=r[0],n=r[1];return e[0]=l+t*(o[0]-l),e[1]=n+t*(o[1]-n),e};module.exports=lerp; -},{}],313:[function(require,module,exports){ +},{}],314:[function(require,module,exports){ const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a);module.exports=max; -},{}],314:[function(require,module,exports){ +},{}],315:[function(require,module,exports){ const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m);module.exports=min; -},{}],315:[function(require,module,exports){ +},{}],316:[function(require,module,exports){ const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l);module.exports=multiply; -},{}],316:[function(require,module,exports){ +},{}],317:[function(require,module,exports){ const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e);module.exports=negate; -},{}],317:[function(require,module,exports){ +},{}],318:[function(require,module,exports){ const{TAU:TAU}=require("../constants"),create=require("./create"),rotate=require("./rotate"),normal=(e,r)=>rotate(e,r,create(),TAU/4);module.exports=normal; -},{"../constants":213,"./create":300,"./rotate":319}],318:[function(require,module,exports){ +},{"../constants":214,"./create":301,"./rotate":320}],319:[function(require,module,exports){ const normalize=(t,e)=>{const o=e[0],r=e[1];let n=o*o+r*r;return n>0&&(n=1/Math.sqrt(n)),t[0]=o*n,t[1]=r*n,t};module.exports=normalize; -},{}],319:[function(require,module,exports){ +},{}],320:[function(require,module,exports){ const rotate=(t,o,e,r)=>{const s=o[0]-e[0],a=o[1]-e[1],n=Math.cos(r),c=Math.sin(r);return t[0]=s*n-a*c+e[0],t[1]=s*c+a*n+e[1],t};module.exports=rotate; -},{}],320:[function(require,module,exports){ +},{}],321:[function(require,module,exports){ const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e);module.exports=scale; -},{}],321:[function(require,module,exports){ +},{}],322:[function(require,module,exports){ const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n);module.exports=snap; -},{}],322:[function(require,module,exports){ +},{}],323:[function(require,module,exports){ const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1];return t*t+n*n};module.exports=squaredDistance; -},{}],323:[function(require,module,exports){ +},{}],324:[function(require,module,exports){ const squaredLength=e=>{const t=e[0],n=e[1];return t*t+n*n};module.exports=squaredLength; -},{}],324:[function(require,module,exports){ +},{}],325:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t);module.exports=subtract; -},{}],325:[function(require,module,exports){ +},{}],326:[function(require,module,exports){ const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}]`;module.exports=toString; -},{}],326:[function(require,module,exports){ +},{}],327:[function(require,module,exports){ const transform=(r,o,t)=>{const n=o[0],s=o[1];return r[0]=t[0]*n+t[4]*s+t[12],r[1]=t[1]*n+t[5]*s+t[13],r};module.exports=transform; -},{}],327:[function(require,module,exports){ +},{}],328:[function(require,module,exports){ const abs=(a,s)=>(a[0]=Math.abs(s[0]),a[1]=Math.abs(s[1]),a[2]=Math.abs(s[2]),a);module.exports=abs; -},{}],328:[function(require,module,exports){ +},{}],329:[function(require,module,exports){ const add=(d,o,a)=>(d[0]=o[0]+a[0],d[1]=o[1]+a[1],d[2]=o[2]+a[2],d);module.exports=add; -},{}],329:[function(require,module,exports){ +},{}],330:[function(require,module,exports){ const dot=require("./dot"),angle=(t,a)=>{const o=t[0],e=t[1],r=t[2],n=a[0],s=a[1],h=a[2],M=Math.sqrt(o*o+e*e+r*r)*Math.sqrt(n*n+s*s+h*h),d=M&&dot(t,a)/M;return Math.acos(Math.min(Math.max(d,-1),1))};module.exports=angle; -},{"./dot":336}],330:[function(require,module,exports){ +},{"./dot":337}],331:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r};module.exports=clone; -},{"./create":332}],331:[function(require,module,exports){ +},{"./create":333}],332:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o);module.exports=copy; -},{}],332:[function(require,module,exports){ +},{}],333:[function(require,module,exports){ const create=()=>[0,0,0];module.exports=create; -},{}],333:[function(require,module,exports){ +},{}],334:[function(require,module,exports){ const cross=(s,o,r)=>{const c=o[0],t=o[1],e=o[2],n=r[0],u=r[1],d=r[2];return s[0]=t*d-e*u,s[1]=e*n-c*d,s[2]=c*u-t*n,s};module.exports=cross; -},{}],334:[function(require,module,exports){ +},{}],335:[function(require,module,exports){ const distance=(t,s)=>{const e=s[0]-t[0],n=s[1]-t[1],c=s[2]-t[2];return Math.sqrt(e*e+n*n+c*c)};module.exports=distance; -},{}],335:[function(require,module,exports){ +},{}],336:[function(require,module,exports){ const divide=(d,e,i)=>(d[0]=e[0]/i[0],d[1]=e[1]/i[1],d[2]=e[2]/i[2],d);module.exports=divide; -},{}],336:[function(require,module,exports){ +},{}],337:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2];module.exports=dot; -},{}],337:[function(require,module,exports){ +},{}],338:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2];module.exports=equals; -},{}],338:[function(require,module,exports){ +},{}],339:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o);module.exports=fromScalar; -},{}],339:[function(require,module,exports){ +},{}],340:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t)=>{const o=create();return o[0]=e,o[1]=r,o[2]=t,o};module.exports=fromValues; -},{"./create":332}],340:[function(require,module,exports){ +},{"./create":333}],341:[function(require,module,exports){ const fromVector2=(o,r,e=0)=>(o[0]=r[0],o[1]=r[1],o[2]=e,o);module.exports=fromVector2; -},{}],341:[function(require,module,exports){ +},{}],342:[function(require,module,exports){ module.exports={abs:require("./abs"),add:require("./add"),angle:require("./angle"),clone:require("./clone"),copy:require("./copy"),create:require("./create"),cross:require("./cross"),distance:require("./distance"),divide:require("./divide"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),fromVec2:require("./fromVec2"),length:require("./length"),lerp:require("./lerp"),max:require("./max"),min:require("./min"),multiply:require("./multiply"),negate:require("./negate"),normalize:require("./normalize"),orthogonal:require("./orthogonal"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),scale:require("./scale"),snap:require("./snap"),squaredDistance:require("./squaredDistance"),squaredLength:require("./squaredLength"),subtract:require("./subtract"),toString:require("./toString"),transform:require("./transform")}; -},{"./abs":327,"./add":328,"./angle":329,"./clone":330,"./copy":331,"./create":332,"./cross":333,"./distance":334,"./divide":335,"./dot":336,"./equals":337,"./fromScalar":338,"./fromValues":339,"./fromVec2":340,"./length":342,"./lerp":343,"./max":344,"./min":345,"./multiply":346,"./negate":347,"./normalize":348,"./orthogonal":349,"./rotateX":350,"./rotateY":351,"./rotateZ":352,"./scale":353,"./snap":354,"./squaredDistance":355,"./squaredLength":356,"./subtract":357,"./toString":358,"./transform":359}],342:[function(require,module,exports){ +},{"./abs":328,"./add":329,"./angle":330,"./clone":331,"./copy":332,"./create":333,"./cross":334,"./distance":335,"./divide":336,"./dot":337,"./equals":338,"./fromScalar":339,"./fromValues":340,"./fromVec2":341,"./length":343,"./lerp":344,"./max":345,"./min":346,"./multiply":347,"./negate":348,"./normalize":349,"./orthogonal":350,"./rotateX":351,"./rotateY":352,"./rotateZ":353,"./scale":354,"./snap":355,"./squaredDistance":356,"./squaredLength":357,"./subtract":358,"./toString":359,"./transform":360}],343:[function(require,module,exports){ const length=t=>{const e=t[0],n=t[1],o=t[2];return Math.sqrt(e*e+n*n+o*o)};module.exports=length; -},{}],343:[function(require,module,exports){ +},{}],344:[function(require,module,exports){ const lerp=(e,l,o,p)=>(e[0]=l[0]+p*(o[0]-l[0]),e[1]=l[1]+p*(o[1]-l[1]),e[2]=l[2]+p*(o[2]-l[2]),e);module.exports=lerp; -},{}],344:[function(require,module,exports){ +},{}],345:[function(require,module,exports){ const max=(a,m,x)=>(a[0]=Math.max(m[0],x[0]),a[1]=Math.max(m[1],x[1]),a[2]=Math.max(m[2],x[2]),a);module.exports=max; -},{}],345:[function(require,module,exports){ +},{}],346:[function(require,module,exports){ const min=(m,n,i)=>(m[0]=Math.min(n[0],i[0]),m[1]=Math.min(n[1],i[1]),m[2]=Math.min(n[2],i[2]),m);module.exports=min; -},{}],346:[function(require,module,exports){ +},{}],347:[function(require,module,exports){ const multiply=(l,t,m)=>(l[0]=t[0]*m[0],l[1]=t[1]*m[1],l[2]=t[2]*m[2],l);module.exports=multiply; -},{}],347:[function(require,module,exports){ +},{}],348:[function(require,module,exports){ const negate=(e,t)=>(e[0]=-t[0],e[1]=-t[1],e[2]=-t[2],e);module.exports=negate; -},{}],348:[function(require,module,exports){ +},{}],349:[function(require,module,exports){ const normalize=(t,e)=>{const o=e[0],r=e[1],n=e[2];let l=o*o+r*r+n*n;return l>0&&(l=1/Math.sqrt(l)),t[0]=o*l,t[1]=r*l,t[2]=n*l,t};module.exports=normalize; -},{}],349:[function(require,module,exports){ +},{}],350:[function(require,module,exports){ const abs=require("./abs"),create=require("./create"),cross=require("./cross"),orthogonal=(r,e)=>{const o=abs(create(),e),s=0+(o[0]{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[0],n[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),n[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateX; -},{}],351:[function(require,module,exports){ +},{}],352:[function(require,module,exports){ const rotateY=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],e[2]=o[2]-s[2],n[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),n[1]=e[1],n[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=n[2]+s[2],t};module.exports=rotateY; -},{}],352:[function(require,module,exports){ +},{}],353:[function(require,module,exports){ const rotateZ=(t,o,s,a)=>{const e=[],n=[];return e[0]=o[0]-s[0],e[1]=o[1]-s[1],n[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),n[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),t[0]=n[0]+s[0],t[1]=n[1]+s[1],t[2]=o[2],t};module.exports=rotateZ; -},{}],353:[function(require,module,exports){ +},{}],354:[function(require,module,exports){ const scale=(e,s,c)=>(e[0]=s[0]*c,e[1]=s[1]*c,e[2]=s[2]*c,e);module.exports=scale; -},{}],354:[function(require,module,exports){ +},{}],355:[function(require,module,exports){ const snap=(n,o,a)=>(n[0]=Math.round(o[0]/a)*a+0,n[1]=Math.round(o[1]/a)*a+0,n[2]=Math.round(o[2]/a)*a+0,n);module.exports=snap; -},{}],355:[function(require,module,exports){ +},{}],356:[function(require,module,exports){ const squaredDistance=(e,s)=>{const t=s[0]-e[0],n=s[1]-e[1],r=s[2]-e[2];return t*t+n*n+r*r};module.exports=squaredDistance; -},{}],356:[function(require,module,exports){ +},{}],357:[function(require,module,exports){ const squaredLength=e=>{const t=e[0],n=e[1],r=e[2];return t*t+n*n+r*r};module.exports=squaredLength; -},{}],357:[function(require,module,exports){ +},{}],358:[function(require,module,exports){ const subtract=(t,s,c)=>(t[0]=s[0]-c[0],t[1]=s[1]-c[1],t[2]=s[2]-c[2],t);module.exports=subtract; -},{}],358:[function(require,module,exports){ +},{}],359:[function(require,module,exports){ const toString=t=>`[${t[0].toFixed(7)}, ${t[1].toFixed(7)}, ${t[2].toFixed(7)}]`;module.exports=toString; -},{}],359:[function(require,module,exports){ +},{}],360:[function(require,module,exports){ const transform=(r,t,o)=>{const n=t[0],s=t[1],e=t[2];let m=o[3]*n+o[7]*s+o[11]*e+o[15];return m=m||1,r[0]=(o[0]*n+o[4]*s+o[8]*e+o[12])/m,r[1]=(o[1]*n+o[5]*s+o[9]*e+o[13])/m,r[2]=(o[2]*n+o[6]*s+o[10]*e+o[14])/m,r};module.exports=transform; -},{}],360:[function(require,module,exports){ +},{}],361:[function(require,module,exports){ const create=require("./create"),clone=e=>{const r=create();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r};module.exports=clone; -},{"./create":362}],361:[function(require,module,exports){ +},{"./create":363}],362:[function(require,module,exports){ const copy=(o,c)=>(o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o);module.exports=copy; -},{}],362:[function(require,module,exports){ +},{}],363:[function(require,module,exports){ const create=()=>[0,0,0,0];module.exports=create; -},{}],363:[function(require,module,exports){ +},{}],364:[function(require,module,exports){ const dot=(o,t)=>o[0]*t[0]+o[1]*t[1]+o[2]*t[2]+o[3]*t[3];module.exports=dot; -},{}],364:[function(require,module,exports){ +},{}],365:[function(require,module,exports){ const equals=(e,s)=>e[0]===s[0]&&e[1]===s[1]&&e[2]===s[2]&&e[3]===s[3];module.exports=equals; -},{}],365:[function(require,module,exports){ +},{}],366:[function(require,module,exports){ const fromScalar=(o,r)=>(o[0]=r,o[1]=r,o[2]=r,o[3]=r,o);module.exports=fromScalar; -},{}],366:[function(require,module,exports){ +},{}],367:[function(require,module,exports){ const create=require("./create"),fromValues=(e,r,t,o)=>{const a=create();return a[0]=e,a[1]=r,a[2]=t,a[3]=o,a};module.exports=fromValues; -},{"./create":362}],367:[function(require,module,exports){ +},{"./create":363}],368:[function(require,module,exports){ module.exports={clone:require("./clone"),copy:require("./copy"),create:require("./create"),dot:require("./dot"),equals:require("./equals"),fromScalar:require("./fromScalar"),fromValues:require("./fromValues"),toString:require("./toString"),transform:require("./transform")}; -},{"./clone":360,"./copy":361,"./create":362,"./dot":363,"./equals":364,"./fromScalar":365,"./fromValues":366,"./toString":368,"./transform":369}],368:[function(require,module,exports){ +},{"./clone":361,"./copy":362,"./create":363,"./dot":364,"./equals":365,"./fromScalar":366,"./fromValues":367,"./toString":369,"./transform":370}],369:[function(require,module,exports){ const toString=t=>`(${t[0].toFixed(9)}, ${t[1].toFixed(9)}, ${t[2].toFixed(9)}, ${t[3].toFixed(9)})`;module.exports=toString; -},{}],369:[function(require,module,exports){ +},{}],370:[function(require,module,exports){ const transform=(r,o,t)=>{const[n,s,e,m]=o;return r[0]=t[0]*n+t[4]*s+t[8]*e+t[12]*m,r[1]=t[1]*n+t[5]*s+t[9]*e+t[13]*m,r[2]=t[2]*n+t[6]*s+t[10]*e+t[14]*m,r[3]=t[3]*n+t[7]*s+t[11]*e+t[15]*m,r};module.exports=transform; -},{}],370:[function(require,module,exports){ +},{}],371:[function(require,module,exports){ const{EPS:EPS}=require("../maths/constants"),calculateEpsilonFromBounds=(o,t)=>{let e=0;for(let l=0;l{if(0===(e=flatten(e)).length)throw new Error("measureAggregateArea: no geometries supplied");const r=measureArea(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateArea; -},{"../utils/flatten":517,"./measureArea":376}],373:[function(require,module,exports){ +},{"../utils/flatten":518,"./measureArea":377}],374:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec3min=require("../maths/vec3/min"),vec3max=require("../maths/vec3/max"),measureBoundingBox=require("./measureBoundingBox"),measureAggregateBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateBoundingBox: no geometries supplied");const r=measureBoundingBox(e);if(1===e.length)return r;const u=[[Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE],[-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE]];return r.reduce((e,r)=>e=[vec3min(e[0],e[0],r[0]),vec3max(e[1],e[1],r[1])],u)};module.exports=measureAggregateBoundingBox; -},{"../maths/vec3/max":344,"../maths/vec3/min":345,"../utils/flatten":517,"./measureBoundingBox":377}],374:[function(require,module,exports){ +},{"../maths/vec3/max":345,"../maths/vec3/min":346,"../utils/flatten":518,"./measureBoundingBox":378}],375:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureAggregateBoundingBox=require("./measureAggregateBoundingBox"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),measureAggregateEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateEpsilon: no geometries supplied");const o=measureAggregateBoundingBox(e);let r=0;return r=e.reduce((e,o)=>path2.isA(o)||geom2.isA(o)?Math.max(e,2):geom3.isA(o)?Math.max(e,3):0,r),calculateEpsilonFromBounds(o,r)};module.exports=measureAggregateEpsilon; -},{"../geometries":169,"../utils/flatten":517,"./calculateEpsilonFromBounds":370,"./measureAggregateBoundingBox":373}],375:[function(require,module,exports){ +},{"../geometries":170,"../utils/flatten":518,"./calculateEpsilonFromBounds":371,"./measureAggregateBoundingBox":374}],376:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureVolume=require("./measureVolume"),measureAggregateVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("measureAggregateVolume: no geometries supplied");const r=measureVolume(e);if(1===e.length)return r;return r.reduce((e,r)=>e+r,0)};module.exports=measureAggregateVolume; -},{"../utils/flatten":517,"./measureVolume":383}],376:[function(require,module,exports){ +},{"../utils/flatten":518,"./measureVolume":384}],377:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureAreaOfPath2=()=>0,measureAreaOfGeom2=e=>{let r=cache.get(e);if(r)return r;return r=geom2.toSides(e).reduce((e,r)=>e+(r[0][0]*r[1][1]-r[0][1]*r[1][0]),0),r*=.5,cache.set(e,r),r},measureAreaOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureArea(r),0),cache.set(e,r),r},measureArea=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?measureAreaOfGeom2(e):geom3.isA(e)?measureAreaOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureArea; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181,"../geometries/poly3":198,"../utils/flatten":517}],377:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":518}],378:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureBoundingBoxOfPath2=e=>{let o=cache.get(e);if(o)return o;const t=path2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom2=e=>{let o=cache.get(e);if(o)return o;const t=geom2.toPoints(e);let n;n=0===t.length?vec2.create():vec2.clone(t[0]);let r=vec2.clone(n);return t.forEach(e=>{vec2.min(n,n,e),vec2.max(r,r,e)}),n=[n[0],n[1],0],r=[r[0],r[1],0],o=[n,r],cache.set(e,o),o},measureBoundingBoxOfGeom3=e=>{let o=cache.get(e);if(o)return o;const t=geom3.toPolygons(e);let n=vec3.create();if(t.length>0){const e=poly3.toPoints(t[0]);vec3.copy(n,e[0])}let r=vec3.clone(n);return t.forEach(e=>{poly3.toPoints(e).forEach(e=>{vec3.min(n,n,e),vec3.max(r,r,e)})}),n=[n[0],n[1],n[2]],r=[r[0],r[1],r[2]],o=[n,r],cache.set(e,o),o},measureBoundingBox=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureBoundingBoxOfPath2(e):geom2.isA(e)?measureBoundingBoxOfGeom2(e):geom3.isA(e)?measureBoundingBoxOfGeom3(e):[[0,0,0],[0,0,0]]);return 1===o.length?o[0]:o};module.exports=measureBoundingBox; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181,"../geometries/poly3":198,"../maths/vec2":310,"../maths/vec3":341,"../utils/flatten":517}],378:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../maths/vec2":311,"../maths/vec3":342,"../utils/flatten":518}],379:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cacheOfBoundingSpheres=new WeakMap,measureBoundingSphereOfPath2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=path2.toPoints(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o,0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom2=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom2.toSides(e);if(c.length>0){let e=0;const t=vec3.create();c.forEach(o=>{vec3.add(r,r,vec3.fromVec2(t,o[0],0)),e++}),vec3.scale(r,r,1/e),c.forEach(e=>{o=Math.max(o,vec2.squaredDistance(r,e[0]))}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphereOfGeom3=e=>{let t=cacheOfBoundingSpheres.get(e);if(void 0!==t)return t;const r=vec3.create();let o=0;const c=geom3.toPolygons(e);if(c.length>0){let e=0;c.forEach(t=>{poly3.toPoints(t).forEach(t=>{vec3.add(r,r,t),e++})}),vec3.scale(r,r,1/e),c.forEach(e=>{poly3.toPoints(e).forEach(e=>{o=Math.max(o,vec3.squaredDistance(r,e))})}),o=Math.sqrt(o)}return t=[r,o],cacheOfBoundingSpheres.set(e,t),t},measureBoundingSphere=(...e)=>{const t=(e=flatten(e)).map(e=>path2.isA(e)?measureBoundingSphereOfPath2(e):geom2.isA(e)?measureBoundingSphereOfGeom2(e):geom3.isA(e)?measureBoundingSphereOfGeom3(e):[[0,0,0],0]);return 1===t.length?t[0]:t};module.exports=measureBoundingSphere; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181,"../geometries/poly3":198,"../maths/vec2":310,"../maths/vec3":341,"../utils/flatten":517}],379:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../maths/vec2":311,"../maths/vec3":342,"../utils/flatten":518}],380:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureCenter=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[0][0]+(n[1][0]-n[0][0])/2,n[0][1]+(n[1][1]-n[0][1])/2,n[0][2]+(n[1][2]-n[0][2])/2]});return 1===n.length?n[0]:n};module.exports=measureCenter; -},{"../utils/flatten":517,"./measureBoundingBox":377}],380:[function(require,module,exports){ +},{"../utils/flatten":518,"./measureBoundingBox":378}],381:[function(require,module,exports){ const flatten=require("../utils/flatten"),vec3=require("../maths/vec3"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),cacheOfCenterOfMass=new WeakMap,measureCenterOfMassGeom2=e=>{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;const s=geom2.toSides(e);let r=0,c=0,a=0;if(s.length>0){for(let e=0;e{let t=cacheOfCenterOfMass.get(e);if(void 0!==t)return t;t=vec3.create();const s=geom3.toPolygons(e);if(0===s.length)return t;let r=0;const c=vec3.create();return s.forEach(e=>{const s=e.vertices;for(let e=0;e{const t=(e=flatten(e)).map(e=>geom2.isA(e)?measureCenterOfMassGeom2(e):geom3.isA(e)?measureCenterOfMassGeom3(e):[0,0,0]);return 1===t.length?t[0]:t};module.exports=measureCenterOfMass; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../maths/vec3":341,"../utils/flatten":517}],381:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../maths/vec3":342,"../utils/flatten":518}],382:[function(require,module,exports){ const flatten=require("../utils/flatten"),measureBoundingBox=require("./measureBoundingBox"),measureDimensions=(...e)=>{const n=(e=flatten(e)).map(e=>{const n=measureBoundingBox(e);return[n[1][0]-n[0][0],n[1][1]-n[0][1],n[1][2]-n[0][2]]});return 1===n.length?n[0]:n};module.exports=measureDimensions; -},{"../utils/flatten":517,"./measureBoundingBox":377}],382:[function(require,module,exports){ +},{"../utils/flatten":518,"./measureBoundingBox":378}],383:[function(require,module,exports){ const flatten=require("../utils/flatten"),{geom2:geom2,geom3:geom3,path2:path2}=require("../geometries"),calculateEpsilonFromBounds=require("./calculateEpsilonFromBounds"),measureBoundingBox=require("./measureBoundingBox"),measureEpsilonOfPath2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom2=e=>calculateEpsilonFromBounds(measureBoundingBox(e),2),measureEpsilonOfGeom3=e=>calculateEpsilonFromBounds(measureBoundingBox(e),3),measureEpsilon=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const o=e.map(e=>path2.isA(e)?measureEpsilonOfPath2(e):geom2.isA(e)?measureEpsilonOfGeom2(e):geom3.isA(e)?measureEpsilonOfGeom3(e):0);return 1===o.length?o[0]:o};module.exports=measureEpsilon; -},{"../geometries":169,"../utils/flatten":517,"./calculateEpsilonFromBounds":370,"./measureBoundingBox":377}],383:[function(require,module,exports){ +},{"../geometries":170,"../utils/flatten":518,"./calculateEpsilonFromBounds":371,"./measureBoundingBox":378}],384:[function(require,module,exports){ const flatten=require("../utils/flatten"),geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),poly3=require("../geometries/poly3"),cache=new WeakMap,measureVolumeOfPath2=()=>0,measureVolumeOfGeom2=()=>0,measureVolumeOfGeom3=e=>{let r=cache.get(e);if(r)return r;return r=geom3.toPolygons(e).reduce((e,r)=>e+poly3.measureSignedVolume(r),0),cache.set(e,r),r},measureVolume=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const r=e.map(e=>path2.isA(e)?0:geom2.isA(e)?0:geom3.isA(e)?measureVolumeOfGeom3(e):0);return 1===r.length?r[0]:r};module.exports=measureVolume; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181,"../geometries/poly3":198,"../utils/flatten":517}],384:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182,"../geometries/poly3":199,"../utils/flatten":518}],385:[function(require,module,exports){ const vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),fromFakePolygon=(e,o)=>{if(o.vertices.length<4)return null;const r=[],n=o.vertices.filter((e,o)=>e[2]>0&&(r.push(o),!0));if(2!==n.length)throw new Error("Assertion failed: fromFakePolygon: not enough points found");const t=n.map(o=>{const r=Math.round(o[0]/e)*e+0,n=Math.round(o[1]/e)*e+0;return vec2.fromValues(r,n)});if(vec2.equals(t[0],t[1]))return null;const s=r[1]-r[0];if(1!==s&&3!==s)throw new Error("Assertion failed: fromFakePolygon: unknown index ordering");return 1===s&&t.reverse(),t},fromFakePolygons=(e,o)=>{const r=o.map(o=>fromFakePolygon(e,o)).filter(e=>null!==e);return geom2.create(r)};module.exports=fromFakePolygons; -},{"../../geometries/geom2":144,"../../maths/vec2":310}],385:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../maths/vec2":311}],386:[function(require,module,exports){ module.exports={intersect:require("./intersect"),scission:require("./scission"),subtract:require("./subtract"),union:require("./union")}; -},{"./intersect":386,"./scission":391,"./subtract":393,"./union":404}],386:[function(require,module,exports){ +},{"./intersect":387,"./scission":392,"./subtract":394,"./union":405}],387:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),intersectGeom2=require("./intersectGeom2"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only intersect of the types are supported");const r=e[0];return geom2.isA(r)?intersectGeom2(e):geom3.isA(r)?intersectGeom3(e):r};module.exports=intersect; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../utils/areAllShapesTheSameType":515,"../../utils/flatten":517,"./intersectGeom2":387,"./intersectGeom3":388}],387:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":516,"../../utils/flatten":518,"./intersectGeom2":388,"./intersectGeom3":389}],388:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),intersectGeom3=require("./intersectGeom3"),intersect=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=intersectGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=intersect; -},{"../../geometries/geom3":160,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"./fromFakePolygons":384,"./intersectGeom3":388,"./to3DWalls":397}],388:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"./fromFakePolygons":385,"./intersectGeom3":389,"./to3DWalls":398}],389:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),intersectSub=require("./intersectGeom3Sub"),intersect=(...e)=>{let t=(e=flatten(e)).shift();return e.forEach(e=>{t=intersectSub(t,e)}),t=retessellate(t)};module.exports=intersect; -},{"../../utils/flatten":517,"../modifiers/retessellate":475,"./intersectGeom3Sub":389}],389:[function(require,module,exports){ +},{"../../utils/flatten":518,"../modifiers/retessellate":476,"./intersectGeom3Sub":390}],390:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),intersectGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.create();const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),t.clipTo(r),t.invert(),r.clipTo(t),t.clipTo(r),r.addPolygons(t.allPolygons()),r.invert();const n=r.allPolygons();return geom3.create(n)};module.exports=intersectGeom3Sub; -},{"../../geometries/geom3":160,"./mayOverlap":390,"./trees":401}],390:[function(require,module,exports){ +},{"../../geometries/geom3":161,"./mayOverlap":391,"./trees":402}],391:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),measureBoundingBox=require("../../measurements/measureBoundingBox"),mayOverlap=(e,n)=>{if(0===e.polygons.length||0===n.polygons.length)return!1;const o=measureBoundingBox(e),r=o[0],s=o[1],u=measureBoundingBox(n),a=u[0],t=u[1];return!(a[0]-s[0]>EPS)&&(!(r[0]-t[0]>EPS)&&(!(a[1]-s[1]>EPS)&&(!(r[1]-t[1]>EPS)&&(!(a[2]-s[2]>EPS)&&!(r[2]-t[2]>EPS)))))};module.exports=mayOverlap; -},{"../../maths/constants":213,"../../measurements/measureBoundingBox":377}],391:[function(require,module,exports){ +},{"../../maths/constants":214,"../../measurements/measureBoundingBox":378}],392:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),scissionGeom3=require("./scissionGeom3"),scission=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>geom3.isA(e)?scissionGeom3(e):e);return 1===s.length?s[0]:s};module.exports=scission; -},{"../../geometries/geom3":160,"../../utils/flatten":517,"./scissionGeom3":392}],392:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../utils/flatten":518,"./scissionGeom3":393}],393:[function(require,module,exports){ const vec3=require("../../maths/vec3"),measureEpsilon=require("../../measurements/measureEpsilon"),geom3=require("../../geometries/geom3"),sortNb=e=>e.sort((e,s)=>e-s).filter((e,s,o)=>!s||e!==o[s-1]),insertMapping=(e,s,o)=>{const t=`${s}`,n=e.get(t);void 0===n?e.set(t,[o]):n.push(o)},findMapping=(e,s)=>{const o=`${s}`;return e.get(o)},scissionGeom3=e=>{const s=measureEpsilon(e),o=geom3.toPolygons(e),t=o.length,n=new Map,r=vec3.create();o.forEach((e,o)=>{e.vertices.forEach(e=>{insertMapping(n,vec3.snap(r,e,s),o)})});const c=o.map(e=>{let o=[];return e.vertices.forEach(e=>{o=o.concat(findMapping(n,vec3.snap(r,e,s)))}),{e:1,d:sortNb(o)}});n.clear();let i=0;const a=c.length;for(let e=0;e0){const o=new Array(t);o[e]=!0;do{i=0,o.forEach((e,s)=>{const t=c[s];if(t.e>0){t.e=-1;for(let e=0;e0);s.indexes=o}}const p=[];for(let e=0;es.push(o[t])),p.push(geom3.create(s))}return p};module.exports=scissionGeom3; -},{"../../geometries/geom3":160,"../../maths/vec3":341,"../../measurements/measureEpsilon":382}],393:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../maths/vec3":342,"../../measurements/measureEpsilon":383}],394:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),subtractGeom2=require("./subtractGeom2"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only subtract of the types are supported");const r=e[0];return geom2.isA(r)?subtractGeom2(e):geom3.isA(r)?subtractGeom3(e):r};module.exports=subtract; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../utils/areAllShapesTheSameType":515,"../../utils/flatten":517,"./subtractGeom2":394,"./subtractGeom3":395}],394:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":516,"../../utils/flatten":518,"./subtractGeom2":395,"./subtractGeom3":396}],395:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),subtractGeom3=require("./subtractGeom3"),subtract=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),r=subtractGeom3(o),t=measureEpsilon(r);return fromFakePolygons(t,geom3.toPolygons(r))};module.exports=subtract; -},{"../../geometries/geom3":160,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"./fromFakePolygons":384,"./subtractGeom3":395,"./to3DWalls":397}],395:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"./fromFakePolygons":385,"./subtractGeom3":396,"./to3DWalls":398}],396:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),subtractSub=require("./subtractGeom3Sub"),subtract=(...t)=>{let e=(t=flatten(t)).shift();return t.forEach(t=>{e=subtractSub(e,t)}),e=retessellate(e)};module.exports=subtract; -},{"../../utils/flatten":517,"../modifiers/retessellate":475,"./subtractGeom3Sub":396}],396:[function(require,module,exports){ +},{"../../utils/flatten":518,"../modifiers/retessellate":476,"./subtractGeom3Sub":397}],397:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),mayOverlap=require("./mayOverlap"),{Tree:Tree}=require("./trees"),subtractGeom3Sub=(e,o)=>{if(!mayOverlap(e,o))return geom3.clone(e);const r=new Tree(geom3.toPolygons(e)),t=new Tree(geom3.toPolygons(o));r.invert(),r.clipTo(t),t.clipTo(r,!0),r.addPolygons(t.allPolygons()),r.invert();const l=r.allPolygons();return geom3.create(l)};module.exports=subtractGeom3Sub; -},{"../../geometries/geom3":160,"./mayOverlap":390,"./trees":401}],397:[function(require,module,exports){ +},{"../../geometries/geom3":161,"./mayOverlap":391,"./trees":402}],398:[function(require,module,exports){ const vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),to3DWall=(e,o,r)=>{const c=[vec3.fromVec2(vec3.create(),r[0],e),vec3.fromVec2(vec3.create(),r[1],e),vec3.fromVec2(vec3.create(),r[1],o),vec3.fromVec2(vec3.create(),r[0],o)];return poly3.create(c)},to3DWalls=(e,o)=>{const r=geom2.toSides(o).map(o=>to3DWall(e.z0,e.z1,o));return geom3.create(r)};module.exports=to3DWalls; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/poly3":198,"../../maths/vec3":341}],398:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/vec3":342}],399:[function(require,module,exports){ const plane=require("../../../maths/plane"),poly3=require("../../../geometries/poly3");class Node{constructor(e){this.plane=null,this.front=null,this.back=null,this.polygontreenodes=[],this.parent=e}invert(){const e=[this];let o;for(let n=0;n0&&l.push({node:n.front,polygontreenodes:p});const h=s.length;if(n.back&&h>0)l.push({node:n.back,polygontreenodes:s});else for(let e=0;e0&&e.rootnode.clipPolygons(n.polygontreenodes,o),n.front&&t.push(n.front),n.back&&t.push(n.back),n=t.pop()}while(void 0!==n)}addPolygonTreeNodes(e){let o={node:this,polygontreenodes:e};const n=[];do{const e=o.node,t=o.polygontreenodes;if(0===t.length){o=n.pop();continue}if(!e.plane){let o=0;const n=t[o=Math.floor(t.length/2)].getPolygon();e.plane=poly3.plane(n)}const l=[],s=[],p=t.length;for(let o=0;o0){e.front||(e.front=new Node(e)),p===l.length&&0===s.length?e.front.polygontreenodes=l:n.push({node:e.front,polygontreenodes:l})}if(s.length>0){e.back||(e.back=new Node(e)),p===s.length&&0===l.length?e.back.polygontreenodes=s:n.push({node:e.back,polygontreenodes:s})}o=n.pop()}while(void 0!==o)}}module.exports=Node; -},{"../../../geometries/poly3":198,"../../../maths/plane":282}],399:[function(require,module,exports){ +},{"../../../geometries/poly3":199,"../../../maths/plane":283}],400:[function(require,module,exports){ const{EPS:EPS}=require("../../../maths/constants"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitPolygonByPlane=require("./splitPolygonByPlane");class PolygonTreeNode{constructor(e,t){this.parent=e,this.children=[],this.polygon=t,this.removed=!1}addPolygons(e){if(!this.isRootNode())throw new Error("Assertion failed");const t=this;e.forEach(e=>{t.addChild(e)})}remove(){if(!this.removed){this.removed=!0,this.polygon=null;const e=this.parent.children,t=e.indexOf(this);if(t<0)throw new Error("Assertion failed");e.splice(t,1),this.parent.recursivelyInvalidatePolygon()}}isRemoved(){return this.removed}isRootNode(){return!this.parent}invert(){if(!this.isRootNode())throw new Error("Assertion failed");this.invertSub()}getPolygon(){if(!this.polygon)throw new Error("Assertion failed");return this.polygon}getPolygons(e){let t=[this];const o=[t];let n,l,s,i;for(n=0;n0&&o.push(i.children)}splitByPlane(e,t,o,n,l){if(this.children.length){const s=[this.children];let i,r,h,c,d;for(i=0;i0?s.push(c.children):c._splitByPlane(e,t,o,n,l)}else this._splitByPlane(e,t,o,n,l)}_splitByPlane(e,t,o,n,l){const s=this.polygon;if(s){const i=poly3.measureBoundingSphere(s),r=i[3]+EPS,h=i,c=vec3.dot(e,h)-e[3];if(c>r)n.push(this);else if(c<-r)l.push(this);else{const i=splitPolygonByPlane(e,s);switch(i.type){case 0:t.push(this);break;case 1:o.push(this);break;case 2:n.push(this);break;case 3:l.push(this);break;case 4:if(i.front){const e=this.addChild(i.front);n.push(e)}if(i.back){const e=this.addChild(i.back);l.push(e)}}}}}addChild(e){const t=new PolygonTreeNode(this,e);return this.children.push(t),t}invertSub(){let e=[this];const t=[e];let o,n,l,s;for(o=0;o0&&t.push(s.children)}recursivelyInvalidatePolygon(){this.polygon=null,this.parent&&this.parent.recursivelyInvalidatePolygon()}clear(){let e=[this];const t=[e];for(let o=0;o0&&t.push(n.children),n.children=[]}}}toString(){let e="",t=[this];const o=[t];let n,l,s,i;for(n=0;n0&&o.push(i.children)}return e}}module.exports=PolygonTreeNode; -},{"../../../geometries/poly3":198,"../../../maths/constants":213,"../../../maths/vec3":341,"./splitPolygonByPlane":403}],400:[function(require,module,exports){ +},{"../../../geometries/poly3":199,"../../../maths/constants":214,"../../../maths/vec3":342,"./splitPolygonByPlane":404}],401:[function(require,module,exports){ const Node=require("./Node"),PolygonTreeNode=require("./PolygonTreeNode");class Tree{constructor(o){this.polygonTree=new PolygonTreeNode,this.rootnode=new Node(null),o&&this.addPolygons(o)}invert(){this.polygonTree.invert(),this.rootnode.invert()}clipTo(o,e=!1){this.rootnode.clipTo(o,e)}allPolygons(){const o=[];return this.polygonTree.getPolygons(o),o}addPolygons(o){const e=new Array(o.length);for(let r=0;r{const n=vec3.subtract(vec3.create(),c,t);let s=(e[3]-vec3.dot(e,t))/vec3.dot(e,n);return Number.isNaN(s)&&(s=0),s>1&&(s=1),s<0&&(s=0),vec3.scale(n,n,s),vec3.add(n,t,n),n};module.exports=splitLineSegmentByPlane; -},{"../../../maths/vec3":341}],403:[function(require,module,exports){ +},{"../../../maths/vec3":342}],404:[function(require,module,exports){ const{EPS:EPS}=require("../../../maths/constants"),plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),poly3=require("../../../geometries/poly3"),splitLineSegmentByPlane=require("./splitLineSegmentByPlane"),splitPolygonByPlane=(e,t)=>{const l={type:null,front:null,back:null},n=t.vertices,s=n.length,o=poly3.plane(t);if(plane.equals(o,e))l.type=0;else{let t=!1,p=!1;const i=[],c=-EPS;for(let l=0;lEPS&&(t=!0),s=s&&(r=0);const a=i[r];if(c===a)c?p.push(o):t.push(o);else{const l=n[r],s=splitLineSegmentByPlane(e,o,l);c?(p.push(o),p.push(s),t.push(s)):(t.push(o),t.push(s),p.push(s))}c=a}const r=EPS*EPS;if(p.length>=3){let e=p[p.length-1];for(let t=0;t=3){let e=t[t.length-1];for(let l=0;l=3&&(l.front=poly3.fromPointsAndPlane(t,o)),p.length>=3&&(l.back=poly3.fromPointsAndPlane(p,o))}else l.type=3;else l.type=2;else{const t=vec3.dot(e,o);l.type=t>=0?0:1}}return l};module.exports=splitPolygonByPlane; -},{"../../../geometries/poly3":198,"../../../maths/constants":213,"../../../maths/plane":282,"../../../maths/vec3":341,"./splitLineSegmentByPlane":402}],404:[function(require,module,exports){ +},{"../../../geometries/poly3":199,"../../../maths/constants":214,"../../../maths/plane":283,"../../../maths/vec3":342,"./splitLineSegmentByPlane":403}],405:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),unionGeom2=require("./unionGeom2"),unionGeom3=require("./unionGeom3"),union=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only unions of the same type are supported");const o=e[0];return geom2.isA(o)?unionGeom2(e):geom3.isA(o)?unionGeom3(e):o};module.exports=union; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../utils/areAllShapesTheSameType":515,"../../utils/flatten":517,"./unionGeom2":405,"./unionGeom3":406}],405:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../utils/areAllShapesTheSameType":516,"../../utils/flatten":518,"./unionGeom2":406,"./unionGeom3":407}],406:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),measureEpsilon=require("../../measurements/measureEpsilon"),fromFakePolygons=require("./fromFakePolygons"),to3DWalls=require("./to3DWalls"),unionGeom3=require("./unionGeom3"),union=(...e)=>{const o=(e=flatten(e)).map(e=>to3DWalls({z0:-1,z1:1},e)),n=unionGeom3(o),r=measureEpsilon(n);return fromFakePolygons(r,geom3.toPolygons(n))};module.exports=union; -},{"../../geometries/geom3":160,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"./fromFakePolygons":384,"./to3DWalls":397,"./unionGeom3":406}],406:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"./fromFakePolygons":385,"./to3DWalls":398,"./unionGeom3":407}],407:[function(require,module,exports){ const flatten=require("../../utils/flatten"),retessellate=require("../modifiers/retessellate"),unionSub=require("./unionGeom3Sub"),union=(...e)=>{let t;for(e=flatten(e),t=1;t{if(!mayOverlap(e,o))return unionForNonIntersecting(e,o);const n=new Tree(geom3.toPolygons(e)),r=new Tree(geom3.toPolygons(o));n.clipTo(r,!1),r.clipTo(n),r.invert(),r.clipTo(n),r.invert();const t=n.allPolygons().concat(r.allPolygons());return geom3.create(t)},unionForNonIntersecting=(e,o)=>{let n=geom3.toPolygons(e);return n=n.concat(geom3.toPolygons(o)),geom3.create(n)};module.exports=unionSub; -},{"../../geometries/geom3":160,"./mayOverlap":390,"./trees":401}],408:[function(require,module,exports){ +},{"../../geometries/geom3":161,"./mayOverlap":391,"./trees":402}],409:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),expandGeom2=require("./expandGeom2"),expandGeom3=require("./expandGeom3"),expandPath2=require("./expandPath2"),expand=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?expandPath2(e,r):geom2.isA(r)?expandGeom2(e,r):geom3.isA(r)?expandGeom3(e,r):r);return 1===t.length?t[0]:t};module.exports=expand; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../utils/flatten":517,"./expandGeom2":409,"./expandGeom3":410,"./expandPath2":411}],409:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/flatten":518,"./expandGeom2":410,"./expandGeom3":411,"./expandPath2":412}],410:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),offsetFromPoints=require("./offsetFromPoints"),expandGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:16},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o).map(o=>offsetFromPoints(e={delta:r,corners:s,closed:!0,segments:t},o)).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(n)};module.exports=expandGeom2; -},{"../../geometries/geom2":144,"./offsetFromPoints":416}],410:[function(require,module,exports){ +},{"../../geometries/geom2":145,"./offsetFromPoints":417}],411:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),union=require("../booleans/union"),expandShell=require("./expandShell"),expandGeom3=(e,n)=>{const{delta:o,corners:r,segments:t}=Object.assign({},{delta:1,corners:"round",segments:12},e);if("round"!==r)throw new Error('corners must be "round" for 3D geometries');if(0===geom3.toPolygons(n).length)throw new Error("the given geometry cannot be empty");const s=expandShell(e={delta:o,corners:r,segments:t},n);return union(n,s)};module.exports=expandGeom3; -},{"../../geometries/geom3":160,"../booleans/union":404,"./expandShell":412}],411:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../booleans/union":405,"./expandShell":413}],412:[function(require,module,exports){ const area=require("../../maths/utils/area"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),createGeometryFromClosedOffsets=e=>{let{external:t,internal:r}=e;area(t)<0?t=t.reverse():r=r.reverse();const o=path2.fromPoints({closed:!0},t),s=path2.fromPoints({closed:!0},r),n=geom2.toSides(geom2.fromPoints(path2.toPoints(o))),a=geom2.toSides(geom2.fromPoints(path2.toPoints(s)));return n.push(...a),geom2.create(n)},createGeometryFromExpandedOpenPath=(e,t,r,o)=>{const{points:s,external:n,internal:a}=e,c=Math.floor(t/2),m=[],i=[];if("round"===r&&c>0){const e=Math.PI/c,t=s[s.length-1],r=vec2.angle(vec2.subtract(vec2.create(),n[n.length-1],t)),d=s[0],l=vec2.angle(vec2.subtract(vec2.create(),a[0],d));for(let s=1;s{e=Object.assign({},{delta:1,corners:"edge",segments:16},e);const{delta:r,corners:o,segments:s}=e;if(r<=0)throw new Error("the given delta must be positive for paths");if("edge"!==o&&"chamfer"!==o&&"round"!==o)throw new Error('corners must be "edge", "chamfer", or "round"');const n=t.isClosed,a=path2.toPoints(t);if(0===a.length)throw new Error("the given geometry cannot be empty");const c={points:a,external:offsetFromPoints({delta:r,corners:o,segments:s,closed:n},a),internal:offsetFromPoints({delta:-r,corners:o,segments:s,closed:n},a)};return t.isClosed?createGeometryFromClosedOffsets(c):createGeometryFromExpandedOpenPath(c,s,o,r)};module.exports=expandPath2; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"../../maths/utils/area":287,"../../maths/vec2":310,"./offsetFromPoints":416}],412:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"../../maths/utils/area":288,"../../maths/vec2":311,"./offsetFromPoints":417}],413:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),fnNumberSort=require("../../utils/fnNumberSort"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),sphere=require("../../primitives/sphere"),retessellate=require("../modifiers/retessellate"),unionGeom3Sub=require("../booleans/unionGeom3Sub"),extrudePolygon=require("./extrudePolygon"),mapPlaneToVertex=(e,t,o)=>{const n=t.toString();if(e.has(n)){e.get(n)[1].push(o)}else{const s=[t,[o]];e.set(n,s)}},mapPlaneToEdge=(e,t,o)=>{const n=t[0].toString(),s=t[1].toString(),r=n{e.findIndex(e=>e===t)<0&&e.push(t)},expandShell=(e,t)=>{const{delta:o,segments:n}=Object.assign({},{delta:1,segments:12},e);let s=geom3.create();const r=new Map,c=new Map,a=vec3.create(),l=vec3.create();return geom3.toPolygons(t).forEach((e,t)=>{const n=vec3.scale(vec3.create(),poly3.plane(e),2*o),a=poly3.transform(mat4.fromTranslation(mat4.create(),vec3.scale(vec3.create(),n,-.5)),e),l=extrudePolygon(n,a);s=unionGeom3Sub(s,l);const u=e.vertices;for(let t=0;t{const t=e[0],r=e[1],c=t[0],u=t[1],i=vec3.subtract(vec3.create(),u,c);vec3.normalize(i,i);const m=r[0],g=vec3.cross(vec3.create(),m,i);let p=[];for(let e=0;e=0&&vec3.distance(r,v)=0){f.push(r),S.push(i);const e=[d,i,r,v],t=poly3.create(e);q.push(t)}v=r,d=i}}S.reverse(),q.push(poly3.create(f)),q.push(poly3.create(S));const y=geom3.create(q);s=unionGeom3Sub(s,y)}),r.forEach(e=>{const t=e[0],r=e[1],c=r[0];let u=null,i=0;for(let e=1;e.05&&n>i&&(i=n,u=t)}u||(u=vec3.orthogonal(a,c));const m=vec3.cross(a,c,u);vec3.normalize(m,m);const g=vec3.cross(l,m,c),p=sphere({center:[t[0],t[1],t[2]],radius:o,segments:n,axes:[c,m,g]});s=unionGeom3Sub(s,p)}),retessellate(s)};module.exports=expandShell; -},{"../../geometries/geom3":160,"../../geometries/poly3":198,"../../maths/constants":213,"../../maths/mat4":262,"../../maths/vec3":341,"../../primitives/sphere":505,"../../utils/fnNumberSort":518,"../booleans/unionGeom3Sub":407,"../modifiers/retessellate":475,"./extrudePolygon":413}],413:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/constants":214,"../../maths/mat4":263,"../../maths/vec3":342,"../../primitives/sphere":506,"../../utils/fnNumberSort":519,"../booleans/unionGeom3Sub":408,"../modifiers/retessellate":476,"./extrudePolygon":414}],414:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),extrudePolygon=(e,r)=>{vec3.dot(poly3.plane(r),e)>0&&(r=poly3.invert(r));const t=[r],o=poly3.transform(mat4.fromTranslation(mat4.create(),e),r),s=r.vertices.length;for(let e=0;e{if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");const o=t.map(t=>path2.isA(t)?offsetPath2(e,t):geom2.isA(t)?offsetGeom2(e,t):t);return 1===o.length?o[0]:o};module.exports=offset; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"../../utils/flatten":517,"./offsetGeom2":417,"./offsetPath2":418}],416:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"../../utils/flatten":518,"./offsetGeom2":418,"./offsetPath2":419}],417:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../../maths/constants"),intersect=require("../../maths/utils/intersect"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),area=require("../../maths/utils/area"),offsetFromPoints=(e,t)=>{let{delta:s,corners:c,closed:n,segments:a}=Object.assign({},{delta:1,corners:"edge",closed:!1,segments:16},e);if(Math.abs(s)0&&s>=0||r<0&&s<0;s=Math.abs(s);let i=null,l=[];const u=[],v=vec2.create(),f=t.length;for(let e=0;ee.set(t,s));const t=line2.create(),s=line2.create();u.forEach(c=>{line2.fromPoints(t,c.s0[0],c.s0[1]),line2.fromPoints(s,c.s1[0],c.s1[1]);const n=line2.intersectPointOfLines(t,s);if(Number.isFinite(n[0])&&Number.isFinite(n[1])){const t=c.s0[1],s=e.get(t);l[s]=n,l[(s+1)%l.length]=void 0}else{const t=c.s1[0],s=e.get(t);l[s]=void 0}}),l=l.filter(e=>void 0!==e)}if("round"===c){let e=Math.floor(a/4);const t=vec2.create();u.forEach(c=>{let n=vec2.angle(vec2.subtract(t,c.s1[0],c.c));if(n-=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),o&&n<0&&(n+=Math.PI)<0&&(n+=Math.PI),!o&&n>0&&(n-=Math.PI)>0&&(n-=Math.PI),0!==n){const r=n/(e=Math.floor(a*(Math.abs(n)/TAU))),o=vec2.angle(vec2.subtract(t,c.s0[1],c.c)),i=[];for(let t=1;t0){const e=c.s0[1];let t=l.findIndex(t=>vec2.equals(e,t));t=(t+1)%l.length,l.splice(t,0,...i)}}else{const e=c.s1[0],t=l.findIndex(t=>vec2.equals(e,t));l.splice(t,1)}})}return l};module.exports=offsetFromPoints; -},{"../../maths/constants":213,"../../maths/line2":224,"../../maths/utils/area":287,"../../maths/utils/intersect":290,"../../maths/vec2":310}],417:[function(require,module,exports){ +},{"../../maths/constants":214,"../../maths/line2":225,"../../maths/utils/area":288,"../../maths/utils/intersect":291,"../../maths/vec2":311}],418:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),poly2=require("../../geometries/poly2"),offsetFromPoints=require("./offsetFromPoints"),offsetGeom2=(e,o)=>{const{delta:r,corners:s,segments:t}=Object.assign({},{delta:1,corners:"edge",segments:0},e);if("edge"!==s&&"chamfer"!==s&&"round"!==s)throw new Error('corners must be "edge", "chamfer", or "round"');const n=geom2.toOutlines(o),m=n.map(o=>{const m=n.reduce((e,r)=>e+poly2.arePointsInside(o,poly2.create(r)),0);return offsetFromPoints(e={delta:m%2==0?r:-r,corners:s,closed:!0,segments:t},o)}).reduce((e,o)=>e.concat(geom2.toSides(geom2.fromPoints(o))),[]);return geom2.create(m)};module.exports=offsetGeom2; -},{"../../geometries/geom2":144,"../../geometries/poly2":192,"./offsetFromPoints":416}],418:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/poly2":193,"./offsetFromPoints":417}],419:[function(require,module,exports){ const path2=require("../../geometries/path2"),offsetFromPoints=require("./offsetFromPoints"),offsetPath2=(e,o)=>{const s={delta:1,corners:"edge",closed:o.isClosed,segments:16},{delta:t,corners:r,closed:n,segments:c}=Object.assign({},s,e);if("edge"!==r&&"chamfer"!==r&&"round"!==r)throw new Error('corners must be "edge", "chamfer", or "round"');const d=offsetFromPoints(e={delta:t,corners:r,closed:n,segments:c},path2.toPoints(o));return path2.fromPoints({closed:n},d)};module.exports=offsetPath2; -},{"../../geometries/path2":181,"./offsetFromPoints":416}],419:[function(require,module,exports){ +},{"../../geometries/path2":182,"./offsetFromPoints":417}],420:[function(require,module,exports){ const{area:area}=require("../../../maths/utils"),{toOutlines:toOutlines}=require("../../../geometries/geom2"),{arePointsInside:arePointsInside}=require("../../../geometries/poly2"),assignHoles=e=>{const s=toOutlines(e),o=[],t=[];s.forEach((e,s)=>{const n=area(e);n<0?t.push(s):n>0&&o.push(s)});const n=[],r=[];return o.forEach((e,o)=>{const i=s[e];n[o]=[],t.forEach((e,t)=>{const a=s[e];arePointsInside([a[0]],{vertices:i})&&(n[o].push(e),r[t]||(r[t]=[]),r[t].push(o))})}),t.forEach((e,s)=>{if(r[s]&&r[s].length>1){const o=minIndex(r[s],e=>n[e].length);r[s].forEach((s,t)=>{t!==o&&(n[s]=n[s].filter(s=>s!==e))})}}),n.map((e,t)=>({solid:s[o[t]],holes:e.map(e=>s[e])}))},minIndex=(e,s)=>{let o,t;return e.forEach((e,n)=>{const r=s(e);(void 0===t||r{const i=[];for(let n=0,o=t.length;ne.x-t.x);for(let e=0;e{const n=findHoleBridge(e,t);if(!n)return t;const l=splitPolygon(n,e),i=filterPoints(n,n.next);return filterPoints(l,l.next),t===n?i:t},findHoleBridge=(e,t)=>{let n=t;const l=e.x,i=e.y;let o,r=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){const e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=l&&e>r){if(r=e,e===l){if(i===n.y)return n;if(i===n.next.y)return n.next}o=n.x=n.x&&n.x>=s&&l!==n.x&&pointInTriangle(io.x||n.x===o.x&§orContainsSector(o,n)))&&(o=n,a=t)}n=n.next}while(n!==x);return o},sectorContainsSector=(e,t)=>area(e.prev,e,t.prev)<0&&area(t.next,e,e.next)<0,getLeftmost=e=>{let t=e,n=e;do{(t.x{const t=r&&r.length,i=t?r[0]*n:e.length;let x=linkedPolygon(e,0,i,n,!0);const l=[];if(!x||x.next===x.prev)return l;let o,a,y,s,p;if(t&&(x=eliminateHoles(e,r,x,n)),e.length>80*n){o=y=e[0],a=s=e[1];for(let r=n;ry&&(y=n),t>s&&(s=t)}p=0!==(p=Math.max(y-o,s-a))?1/p:0}return earcutLinked(x,l,n,o,a,p),l},earcutLinked=(e,r,n,t,i,x,l)=>{if(!e)return;!l&&x&&indexCurve(e,t,i,x);let o,a,y=e;for(;e.prev!==e.next;)if(o=e.prev,a=e.next,x?isEarHashed(e,t,i,x):isEar(e))r.push(o.i/n),r.push(e.i/n),r.push(a.i/n),removeNode(e),e=a.next,y=a.next;else if((e=a)===y){l?1===l?(e=cureLocalIntersections(filterPoints(e),r,n),earcutLinked(e,r,n,t,i,x,2)):2===l&&splitEarcut(e,r,n,t,i,x):earcutLinked(filterPoints(e),r,n,t,i,x,1);break}},isEar=e=>{const r=e.prev,n=e,t=e.next;if(area(r,n,t)>=0)return!1;let i=e.next.next;for(;i!==e.prev;){if(pointInTriangle(r.x,r.y,n.x,n.y,t.x,t.y,i.x,i.y)&&area(i.prev,i,i.next)>=0)return!1;i=i.next}return!0},isEarHashed=(e,r,n,t)=>{const i=e.prev,x=e,l=e.next;if(area(i,x,l)>=0)return!1;const o=i.xx.x?i.x>l.x?i.x:l.x:x.x>l.x?x.x:l.x,s=i.y>x.y?i.y>l.y?i.y:l.y:x.y>l.y?x.y:l.y,p=zOrder(o,a,r,n,t),u=zOrder(y,s,r,n,t);let d=e.prevZ,v=e.nextZ;for(;d&&d.z>=p&&v&&v.z<=u;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}for(;d&&d.z>=p;){if(d!==e.prev&&d!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,d.x,d.y)&&area(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;v&&v.z<=u;){if(v!==e.prev&&v!==e.next&&pointInTriangle(i.x,i.y,x.x,x.y,l.x,l.y,v.x,v.y)&&area(v.prev,v,v.next)>=0)return!1;v=v.nextZ}return!0},splitEarcut=(e,r,n,t,i,x)=>{let l=e;do{let e=l.next.next;for(;e!==l.prev;){if(l.i!==e.i&&isValidDiagonal(l,e)){let o=splitPolygon(l,e);return l=filterPoints(l,l.next),o=filterPoints(o,o.next),earcutLinked(l,r,n,t,i,x),void earcutLinked(o,r,n,t,i,x)}e=e.next}l=l.next}while(l!==e)},indexCurve=(e,r,n,t)=>{let i=e;do{null===i.z&&(i.z=zOrder(i.x,i.y,r,n,t)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,sortLinked(i,e=>e.z)},zOrder=(e,r,n,t,i)=>(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(r=1431655765&((r=858993459&((r=252645135&((r=16711935&((r=32767*(r-t)*i)|r<<8))|r<<4))|r<<2))|r<<1))<<1;module.exports=triangulate; -},{"./eliminateHoles":420,"./linkedList":422,"./linkedPolygon":424,"./triangle":426}],422:[function(require,module,exports){ +},{"./eliminateHoles":421,"./linkedList":423,"./linkedPolygon":425,"./triangle":427}],423:[function(require,module,exports){ const sortLinked=require("./linkedListSort");class Node{constructor(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}}const insertNode=(e,t,n,r)=>{const o=new Node(e,t,n);return r?(o.next=r.next,o.prev=r,r.next.prev=o,r.next=o):(o.prev=o,o.next=o),o},removeNode=e=>{e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)};module.exports={Node:Node,insertNode:insertNode,removeNode:removeNode,sortLinked:sortLinked}; -},{"./linkedListSort":423}],423:[function(require,module,exports){ +},{"./linkedListSort":424}],424:[function(require,module,exports){ const sortLinked=(e,t)=>{let l,n,o,r,x,Z=1;do{n=e,e=null;let u=null;for(x=0;n;){x++,o=n;let d=0;for(l=0;l0||s>0&&o;)0!==d&&(0===s||!o||t(n)<=t(o))?(r=n,n=n.nextZ,d--):(r=o,o=o.nextZ,s--),u?u.nextZ=r:e=r,r.prevZ=u,u=r;n=o}u.nextZ=null,Z*=2}while(x>1);return e};module.exports=sortLinked; -},{}],424:[function(require,module,exports){ +},{}],425:[function(require,module,exports){ const{Node:Node,insertNode:insertNode,removeNode:removeNode}=require("./linkedList"),{area:area}=require("./triangle"),linkedPolygon=(e,n,t,r,i)=>{let o;if(i===signedArea(e,n,t,r)>0)for(let i=n;i=n;i-=r)o=insertNode(i,e[i],e[i+1],o);return o&&equals(o,o.next)&&(removeNode(o),o=o.next),o},filterPoints=(e,n)=>{if(!e)return e;n||(n=e);let t,r=e;do{if(t=!1,r.steiner||!equals(r,r.next)&&0!==area(r.prev,r,r.next))r=r.next;else{if(removeNode(r),(r=n=r.prev)===r.next)break;t=!0}}while(t||r!==n);return n},cureLocalIntersections=(e,n,t)=>{let r=e;do{const i=r.prev,o=r.next.next;!equals(i,o)&&intersects(i,r,r.next,o)&&locallyInside(i,o)&&locallyInside(o,i)&&(n.push(i.i/t),n.push(r.i/t),n.push(o.i/t),removeNode(r),removeNode(r.next),r=e=o),r=r.next}while(r!==e);return filterPoints(r)},intersectsPolygon=(e,n)=>{let t=e;do{if(t.i!==e.i&&t.next.i!==e.i&&t.i!==n.i&&t.next.i!==n.i&&intersects(t,t.next,e,n))return!0;t=t.next}while(t!==e);return!1},locallyInside=(e,n)=>area(e.prev,e,e.next)<0?area(e,n,e.next)>=0&&area(e,e.prev,n)>=0:area(e,n,e.prev)<0||area(e,e.next,n)<0,middleInside=(e,n)=>{let t=e,r=!1;const i=(e.x+n.x)/2,o=(e.y+n.y)/2;do{t.y>o!=t.next.y>o&&t.next.y!==t.y&&i<(t.next.x-t.x)*(o-t.y)/(t.next.y-t.y)+t.x&&(r=!r),t=t.next}while(t!==e);return r},splitPolygon=(e,n)=>{const t=new Node(e.i,e.x,e.y),r=new Node(n.i,n.x,n.y),i=e.next,o=n.prev;return e.next=n,n.prev=e,t.next=i,i.prev=t,r.next=t,t.prev=r,o.next=r,r.prev=o,r},isValidDiagonal=(e,n)=>e.next.i!==n.i&&e.prev.i!==n.i&&!intersectsPolygon(e,n)&&(locallyInside(e,n)&&locallyInside(n,e)&&middleInside(e,n)&&(area(e.prev,e,n.prev)||area(e,n.prev,n))||equals(e,n)&&area(e.prev,e,e.next)>0&&area(n.prev,n,n.next)>0),intersects=(e,n,t,r)=>{const i=Math.sign(area(e,n,t)),o=Math.sign(area(e,n,r)),l=Math.sign(area(t,r,e)),a=Math.sign(area(t,r,n));return i!==o&&l!==a||(!(0!==i||!onSegment(e,t,n))||(!(0!==o||!onSegment(e,r,n))||(!(0!==l||!onSegment(t,e,r))||!(0!==a||!onSegment(t,n,r)))))},onSegment=(e,n,t)=>n.x<=Math.max(e.x,t.x)&&n.x>=Math.min(e.x,t.x)&&n.y<=Math.max(e.y,t.y)&&n.y>=Math.min(e.y,t.y),signedArea=(e,n,t,r)=>{let i=0;for(let o=n,l=t-r;oe.x===n.x&&e.y===n.y;module.exports={cureLocalIntersections:cureLocalIntersections,filterPoints:filterPoints,isValidDiagonal:isValidDiagonal,linkedPolygon:linkedPolygon,locallyInside:locallyInside,splitPolygon:splitPolygon}; -},{"./linkedList":422,"./triangle":426}],425:[function(require,module,exports){ +},{"./linkedList":423,"./triangle":427}],426:[function(require,module,exports){ const geom2=require("../../../geometries/geom2"),plane=require("../../../maths/plane"),vec2=require("../../../maths/vec2"),vec3=require("../../../maths/vec3"),calculatePlane=require("../slice/calculatePlane"),assignHoles=require("./assignHoles");class PolygonHierarchy{constructor(e){this.plane=calculatePlane(e);const s=vec3.orthogonal(vec3.create(),this.plane),c=vec3.cross(vec3.create(),this.plane,s);this.v=vec3.normalize(c,c),this.u=vec3.cross(vec3.create(),this.v,this.plane),this.basisMap=new Map;const t=e.edges.map(e=>e.map(e=>this.to2D(e))),a=geom2.create(t);this.roots=assignHoles(a)}to2D(e){const s=vec2.fromValues(vec3.dot(e,this.u),vec3.dot(e,this.v));return this.basisMap.set(s,e),s}to3D(e){const s=this.basisMap.get(e);if(s)return s;{console.log("Warning: point not in original slice");const s=vec3.scale(vec3.create(),this.u,e[0]),c=vec3.scale(vec3.create(),this.v,e[1]),t=vec3.scale(vec3.create(),plane,plane[3]),a=vec3.add(s,s,t);return vec3.add(c,c,a)}}}module.exports=PolygonHierarchy; -},{"../../../geometries/geom2":144,"../../../maths/plane":282,"../../../maths/vec2":310,"../../../maths/vec3":341,"../slice/calculatePlane":439,"./assignHoles":419}],426:[function(require,module,exports){ +},{"../../../geometries/geom2":145,"../../../maths/plane":283,"../../../maths/vec2":311,"../../../maths/vec3":342,"../slice/calculatePlane":440,"./assignHoles":420}],427:[function(require,module,exports){ const pointInTriangle=(n,a,e,r,i,o,t,x)=>(i-t)*(a-x)-(n-t)*(o-x)>=0&&(n-t)*(r-x)-(e-t)*(a-x)>=0&&(e-t)*(o-x)-(i-t)*(r-x)>=0,area=(n,a,e)=>(a.y-n.y)*(e.x-a.x)-(a.x-n.x)*(e.y-a.y);module.exports={area:area,pointInTriangle:pointInTriangle}; -},{}],427:[function(require,module,exports){ +},{}],428:[function(require,module,exports){ const mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),repairSlice=require("./slice/repair"),extrudeWalls=require("./extrudeWalls"),defaultCallback=(e,r,l)=>{let t=null;return geom2.isA(l)&&(t=slice.fromSides(geom2.toSides(l))),poly3.isA(l)&&(t=slice.fromPoints(poly3.toPoints(l))),0===e||1===e?slice.transform(mat4.fromTranslation(mat4.create(),[0,0,e]),t):null},extrudeFromSlices=(e,r)=>{const l={numberOfSlices:2,capStart:!0,capEnd:!0,close:!1,repair:!0,callback:defaultCallback},{numberOfSlices:t,capStart:o,capEnd:c,close:s,repair:i,callback:a}=Object.assign({},l,e);if(t<2)throw new Error("numberOfSlices must be 2 or more");i&&(r=repairSlice(r));const n=t-1;let u=null,m=null,f=null,g=[];for(let e=0;e{const r={angle:TAU,startAngle:0,pitch:10,endOffset:0,segmentsPerRotation:32},{angle:a,endOffset:s,segmentsPerRotation:o,startAngle:i}=Object.assign({},r,e);let n;n=!e.pitch&&e.height?e.height/(a/TAU):e.pitch?e.pitch:r.pitch;if(o<3)throw new Error("The number of segments per rotation needs to be at least 3.");const m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const c=m.filter(e=>e[0][0]>=0);let l=slice.fromSides(m);0===c.length&&(l=slice.reverse(l));const h=Math.round(o/TAU*Math.abs(a)),g=h>=2?h:2,u=mat4.create();let f;return extrudeFromSlices({numberOfSlices:g+1,callback:(e,t,r)=>{const o=i+a/g*t,m=s/g*t,c=(o-i)/TAU*n;return mat4.multiply(u,mat4.fromTranslation(mat4.create(),[m,0,c*Math.sign(a)]),mat4.fromXRotation(mat4.create(),-TAU/4*Math.sign(a))),f=mat4.create(),mat4.multiply(f,mat4.fromZRotation(mat4.create(),o),u),slice.transform(f,r)}},l)};module.exports=extrudeHelical; -},{"../../geometries/geom2":144,"../../maths/constants":213,"../../maths/mat4":262,"./extrudeFromSlices":427,"./slice":445}],429:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../maths/constants":214,"../../maths/mat4":263,"./extrudeFromSlices":428,"./slice":446}],430:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeLinearPath2=require("./extrudeLinearPath2"),extrudeLinear=(e,...t)=>{const{height:r,twistAngle:i,twistSteps:n,repair:a}=Object.assign({},{height:1,twistAngle:0,twistSteps:1,repair:!0},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");e={offset:[0,0,r],twistAngle:i,twistSteps:n,repair:a};const s=t.map(t=>path2.isA(t)?extrudeLinearPath2(e,t):geom2.isA(t)?extrudeLinearGeom2(e,t):t);return 1===s.length?s[0]:s};module.exports=extrudeLinear; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"../../utils/flatten":517,"./extrudeLinearGeom2":430,"./extrudeLinearPath2":431}],430:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"../../utils/flatten":518,"./extrudeLinearGeom2":431,"./extrudeLinearPath2":432}],431:[function(require,module,exports){ const mat4=require("../../maths/mat4"),vec3=require("../../maths/vec3"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeGeom2=(e,t)=>{let{offset:r,twistAngle:s,twistSteps:o,repair:i}=Object.assign({},{offset:[0,0,1],twistAngle:0,twistSteps:12,repair:!0},e);if(o<1)throw new Error("twistSteps must be 1 or more");0===s&&(o=1);const c=vec3.clone(r),m=geom2.toSides(t);if(0===m.length)throw new Error("the given geometry cannot be empty");const a=slice.fromSides(m);c[2]<0&&slice.reverse(a,a);const n=mat4.create();return extrudeFromSlices(e={numberOfSlices:o+1,capStart:!0,capEnd:!0,repair:i,callback:(e,t,r)=>{const i=t/o*s,m=vec3.scale(vec3.create(),c,t/o);return mat4.multiply(n,mat4.fromZRotation(n,i),mat4.fromTranslation(mat4.create(),m)),slice.transform(n,r)}},a)};module.exports=extrudeGeom2; -},{"../../geometries/geom2":144,"../../maths/mat4":262,"../../maths/vec3":341,"./extrudeFromSlices":427,"./slice":445}],431:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../maths/mat4":263,"../../maths/vec3":342,"./extrudeFromSlices":428,"./slice":446}],432:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudePath2=(e,r)=>{if(!r.isClosed)throw new Error("extruded path must be closed");const t=path2.toPoints(r),o=geom2.fromPoints(t);return extrudeLinearGeom2(e,o)};module.exports=extrudePath2; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"./extrudeLinearGeom2":430}],432:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"./extrudeLinearGeom2":431}],433:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),extrudeRectangularPath2=require("./extrudeRectangularPath2"),extrudeRectangularGeom2=require("./extrudeRectangularGeom2"),extrudeRectangular=(e,...t)=>{const{size:r,height:a}=Object.assign({},{size:1,height:1},e);if(0===(t=flatten(t)).length)throw new Error("wrong number of arguments");if(r<=0)throw new Error("size must be positive");if(a<=0)throw new Error("height must be positive");const u=t.map(t=>path2.isA(t)?extrudeRectangularPath2(e,t):geom2.isA(t)?extrudeRectangularGeom2(e,t):t);return 1===u.length?u[0]:u};module.exports=extrudeRectangular; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"../../utils/flatten":517,"./extrudeRectangularGeom2":433,"./extrudeRectangularPath2":434}],433:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"../../utils/flatten":518,"./extrudeRectangularGeom2":434,"./extrudeRectangularPath2":435}],434:[function(require,module,exports){ const{area:area}=require("../../maths/utils"),geom2=require("../../geometries/geom2"),path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularGeom2=(e,r)=>{const{size:t,height:o}=Object.assign({},{size:1,height:1},e);e.delta=t,e.offset=[0,0,o];const a=geom2.toOutlines(r);if(0===a.length)throw new Error("the given geometry cannot be empty");const n=a.map(r=>(area(r)<0&&r.reverse(),expand(e,path2.fromPoints({closed:!0},r)))).reduce((e,r)=>e.concat(geom2.toSides(r)),[]),i=geom2.create(n);return extrudeLinearGeom2(e,i)};module.exports=extrudeRectangularGeom2; -},{"../../geometries/geom2":144,"../../geometries/path2":181,"../../maths/utils":288,"../expansions/expand":408,"./extrudeLinearGeom2":430}],434:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/path2":182,"../../maths/utils":289,"../expansions/expand":409,"./extrudeLinearGeom2":431}],435:[function(require,module,exports){ const path2=require("../../geometries/path2"),expand=require("../expansions/expand"),extrudeLinearGeom2=require("./extrudeLinearGeom2"),extrudeRectangularPath2=(e,t)=>{const{size:r,height:n}=Object.assign({},{size:1,height:1},e);if(e.delta=r,e.offset=[0,0,n],0===path2.toPoints(t).length)throw new Error("the given geometry cannot be empty");const a=expand(e,t);return extrudeLinearGeom2(e,a)};module.exports=extrudeRectangularPath2; -},{"../../geometries/path2":181,"../expansions/expand":408,"./extrudeLinearGeom2":430}],435:[function(require,module,exports){ +},{"../../geometries/path2":182,"../expansions/expand":409,"./extrudeLinearGeom2":431}],436:[function(require,module,exports){ const{TAU:TAU}=require("../../maths/constants"),mat4=require("../../maths/mat4"),{mirrorX:mirrorX}=require("../transforms/mirror"),geom2=require("../../geometries/geom2"),slice=require("./slice"),extrudeFromSlices=require("./extrudeFromSlices"),extrudeRotate=(e,t)=>{const r={segments:12,startAngle:0,angle:TAU,overflow:"cap"};let{segments:a,startAngle:o,angle:s,overflow:m}=Object.assign({},r,e);if(a<3)throw new Error("segments must be greater then 3");o=Math.abs(o)>TAU?o%TAU:o,s=Math.abs(s)>TAU?s%TAU:s;let n=o+s;if((n=Math.abs(n)>TAU?n%TAU:n)a*e&&a++}let i=geom2.toSides(t);if(0===i.length)throw new Error("the given geometry cannot be empty");const c=i.filter(e=>e[0][0]<0),g=i.filter(e=>e[0][0]>=0);c.length>0&&g.length>0&&"cap"===m&&(c.length>g.length?(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.min(t[0],0),t[1]],r=[Math.min(r[0],0),r[1]]]}),t=geom2.create(i),t=mirrorX(t)):g.length>=c.length&&(i=i.map(e=>{let t=e[0],r=e[1];return[t=[Math.max(t[0],0),t[1]],r=[Math.max(r[0],0),r[1]]]}),t=geom2.create(i)));const h=l/a,u=Math.abs(l){let s=h*t+o;return l===TAU&&t===a&&(s=o),mat4.multiply(f,mat4.fromZRotation(f,s),mat4.fromXRotation(mat4.create(),TAU/4)),slice.transform(f,r)}},A)};module.exports=extrudeRotate; -},{"../../geometries/geom2":144,"../../maths/constants":213,"../../maths/mat4":262,"../transforms/mirror":482,"./extrudeFromSlices":427,"./slice":445}],436:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../maths/constants":214,"../../maths/mat4":263,"../transforms/mirror":483,"./extrudeFromSlices":428,"./slice":446}],437:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),slice=require("./slice"),gcd=(e,t)=>e===t?e:ee*t/gcd(e,t),repartitionEdges=(e,t)=>{const r=e/t.length;if(1===r)return t;const s=vec3.fromValues(r,r,r),c=[];return t.forEach(e=>{const t=vec3.subtract(vec3.create(),e[1],e[0]);vec3.divide(t,t,s);let l=e[0];for(let e=1;e<=r;++e){const e=vec3.add(vec3.create(),l,t);c.push([l,e]),l=e}}),c},EPSAREA=EPS*EPS/2*Math.sin(Math.PI/3),extrudeWalls=(e,t)=>{let r=slice.toEdges(e),s=slice.toEdges(t);if(r.length!==s.length){const e=lcm(r.length,s.length);e!==r.length&&(r=repartitionEdges(e,r)),e!==s.length&&(s=repartitionEdges(e,s))}const c=[];return r.forEach((e,t)=>{const r=s[t],l=poly3.create([e[0],e[1],r[1]]),o=poly3.measureArea(l);Number.isFinite(o)&&o>EPSAREA&&c.push(l);const n=poly3.create([e[0],r[1],r[0]]),i=poly3.measureArea(n);Number.isFinite(i)&&i>EPSAREA&&c.push(n)}),c};module.exports=extrudeWalls; -},{"../../geometries/poly3":198,"../../maths/constants":213,"../../maths/vec3":341,"./slice":445}],437:[function(require,module,exports){ +},{"../../geometries/poly3":199,"../../maths/constants":214,"../../maths/vec3":342,"./slice":446}],438:[function(require,module,exports){ module.exports={extrudeFromSlices:require("./extrudeFromSlices"),extrudeLinear:require("./extrudeLinear"),extrudeRectangular:require("./extrudeRectangular"),extrudeRotate:require("./extrudeRotate"),extrudeHelical:require("./extrudeHelical"),project:require("./project"),slice:require("./slice")}; -},{"./extrudeFromSlices":427,"./extrudeHelical":428,"./extrudeLinear":429,"./extrudeRectangular":432,"./extrudeRotate":435,"./project":438,"./slice":445}],438:[function(require,module,exports){ +},{"./extrudeFromSlices":428,"./extrudeHelical":429,"./extrudeLinear":430,"./extrudeRectangular":433,"./extrudeRotate":436,"./project":439,"./slice":446}],439:[function(require,module,exports){ const flatten=require("../../utils/flatten"),aboutEqualNormals=require("../../maths/utils/aboutEqualNormals"),plane=require("../../maths/plane"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),measureEpsilon=require("../../measurements/measureEpsilon"),unionGeom2=require("../booleans/unionGeom2"),projectGeom3=(e,o)=>{const r=plane.fromNormalAndPoint(plane.create(),e.axis,e.origin);if(Number.isNaN(r[0])||Number.isNaN(r[1])||Number.isNaN(r[2])||Number.isNaN(r[3]))throw new Error("project: invalid axis or origin");const t=measureEpsilon(o),a=t*t*Math.sqrt(3)/4;if(0===t)return geom2.create();const n=geom3.toPolygons(o);let s=[];for(let e=0;eplane.projectionOfPoint(r,e)),t=poly3.create(o),i=poly3.plane(t);aboutEqualNormals(r,i)&&(poly3.measureArea(t)poly3.transform(e,o))}const i=(s=s.sort((e,o)=>poly3.measureArea(o)-poly3.measureArea(e))).map(e=>geom2.fromPoints(e.vertices));return unionGeom2(i)},project=(e,...o)=>{const{axis:r,origin:t}=Object.assign({},{axis:[0,0,1],origin:[0,0,0]},e);if(0===(o=flatten(o)).length)throw new Error("wrong number of arguments");e={axis:r,origin:t};const a=o.map(o=>geom3.isA(o)?projectGeom3(e,o):o);return 1===a.length?a[0]:a};module.exports=project; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/poly3":198,"../../maths/mat4":262,"../../maths/plane":282,"../../maths/utils/aboutEqualNormals":286,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"../booleans/unionGeom2":405}],439:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/mat4":263,"../../maths/plane":283,"../../maths/utils/aboutEqualNormals":287,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"../booleans/unionGeom2":406}],440:[function(require,module,exports){ const plane=require("../../../maths/plane"),vec3=require("../../../maths/vec3"),calculatePlane=e=>{const c=e.edges;if(c.length<3)throw new Error("slices must have 3 or more edges to calculate a plane");const a=c.reduce((e,c)=>vec3.add(vec3.create(),e,c[0]),vec3.create());let t;vec3.scale(a,a,1/c.length);let l=0;c.forEach(e=>{if(!vec3.equals(e[0],e[1])){const c=vec3.squaredDistance(a,e[0]);c>l&&(t=e,l=c)}});const r=c.find(e=>vec3.equals(e[1],t[0]));return plane.fromPoints(plane.create(),r[0],t[0],t[1])};module.exports=calculatePlane; -},{"../../../maths/plane":282,"../../../maths/vec3":341}],440:[function(require,module,exports){ +},{"../../../maths/plane":283,"../../../maths/vec3":342}],441:[function(require,module,exports){ const create=require("./create"),vec3=require("../../../maths/vec3"),clone=(...e)=>{let c,r;return 1===e.length?(c=create(),r=e[0]):(c=e[0],r=e[1]),c.edges=r.edges.map(e=>[vec3.clone(e[0]),vec3.clone(e[1])]),c};module.exports=clone; -},{"../../../maths/vec3":341,"./create":441}],441:[function(require,module,exports){ +},{"../../../maths/vec3":342,"./create":442}],442:[function(require,module,exports){ const create=e=>(e||(e=[]),{edges:e});module.exports=create; -},{}],442:[function(require,module,exports){ +},{}],443:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),equals=(e,s)=>{const r=e.edges,t=s.edges;return r.length===t.length&&r.reduce((e,s,r)=>{const u=t[r],c=vec3.squaredDistance(s[0],u[0]);return e&&c{if(!Array.isArray(e))throw new Error("the given points must be an array");if(e.length<3)throw new Error("the given points must contain THREE or more points");const r=[];let t=e[e.length-1];return e.forEach(e=>{2===e.length&&r.push([vec3.fromVec2(vec3.create(),t),vec3.fromVec2(vec3.create(),e)]),3===e.length&&r.push([t,e]),t=e}),create(r)};module.exports=fromPoints; -},{"../../../maths/vec3":341,"./create":441}],444:[function(require,module,exports){ +},{"../../../maths/vec3":342,"./create":442}],445:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),fromSides=e=>{if(!Array.isArray(e))throw new Error("the given sides must be an array");const r=[];return e.forEach(e=>{r.push([vec3.fromVec2(vec3.create(),e[0]),vec3.fromVec2(vec3.create(),e[1])])}),create(r)};module.exports=fromSides; -},{"../../../maths/vec3":341,"./create":441}],445:[function(require,module,exports){ +},{"../../../maths/vec3":342,"./create":442}],446:[function(require,module,exports){ module.exports={calculatePlane:require("./calculatePlane"),clone:require("./clone"),create:require("./create"),equals:require("./equals"),fromPoints:require("./fromPoints"),fromSides:require("./fromSides"),isA:require("./isA"),reverse:require("./reverse"),toEdges:require("./toEdges"),toPolygons:require("./toPolygons"),toString:require("./toString"),transform:require("./transform")}; -},{"./calculatePlane":439,"./clone":440,"./create":441,"./equals":442,"./fromPoints":443,"./fromSides":444,"./isA":446,"./reverse":448,"./toEdges":449,"./toPolygons":450,"./toString":451,"./transform":452}],446:[function(require,module,exports){ +},{"./calculatePlane":440,"./clone":441,"./create":442,"./equals":443,"./fromPoints":444,"./fromSides":445,"./isA":447,"./reverse":449,"./toEdges":450,"./toPolygons":451,"./toString":452,"./transform":453}],447:[function(require,module,exports){ const isA=e=>!!(e&&"object"==typeof e&&"edges"in e&&Array.isArray(e.edges));module.exports=isA; -},{}],447:[function(require,module,exports){ +},{}],448:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),repair=e=>{if(!e.edges)return e;let t=e.edges;const r=new Map,c=new Map;(t=t.filter(e=>!vec3.equals(e[0],e[1]))).forEach(e=>{const t=e[0].toString(),s=e[1].toString();r.set(t,e[0]),r.set(s,e[1]),c.set(t,(c.get(t)||0)+1),c.set(s,(c.get(s)||0)-1)});const s=[],a=[];return c.forEach((e,t)=>{e<0&&s.push(t),e>0&&a.push(t)}),s.forEach(e=>{const c=r.get(e);let s,n=1/0;a.forEach(e=>{const t=r.get(e),a=vec3.distance(c,t);at[0].toString()===e?[s,t[1]]:t[1].toString()===e?[t[0],s]:t)}),create(t)};module.exports=repair; -},{"../../../maths/vec3":341,"./create":441}],448:[function(require,module,exports){ +},{"../../../maths/vec3":342,"./create":442}],449:[function(require,module,exports){ const create=require("./create"),reverse=(...e)=>{let r,t;return 1===e.length?(r=create(),t=e[0]):(r=e[0],t=e[1]),r.edges=t.edges.map(e=>[e[1],e[0]]),r};module.exports=reverse; -},{"./create":441}],449:[function(require,module,exports){ +},{"./create":442}],450:[function(require,module,exports){ const toEdges=e=>e.edges;module.exports=toEdges; -},{}],450:[function(require,module,exports){ +},{}],451:[function(require,module,exports){ const poly3=require("../../../geometries/poly3"),earcut=require("../earcut"),PolygonHierarchy=require("../earcut/polygonHierarchy"),toPolygons=o=>{const e=new PolygonHierarchy(o),r=[];return e.roots.forEach(({solid:o,holes:t})=>{let l=o.length;const n=[];t.forEach((o,e)=>{n.push(l),l+=o.length});const s=[o,...t].flat(),c=s.flat(),a=o=>e.to3D(s[o]),h=earcut(c,n);for(let o=0;oe.reduce((e,t)=>e+=`[${vec3.toString(t[0])}, ${vec3.toString(t[1])}], `,""),toString=e=>`[${edgesToString(e.edges)}]`;module.exports=toString; -},{"../../../maths/vec3":341}],452:[function(require,module,exports){ +},{"../../../maths/vec3":342}],453:[function(require,module,exports){ const vec3=require("../../../maths/vec3"),create=require("./create"),transform=(e,r)=>{const t=r.edges.map(r=>[vec3.transform(vec3.create(),r[0],e),vec3.transform(vec3.create(),r[1],e)]);return create(t)};module.exports=transform; -},{"../../../maths/vec3":341,"./create":441}],453:[function(require,module,exports){ +},{"../../../maths/vec3":342,"./create":442}],454:[function(require,module,exports){ const flatten=require("../../utils/flatten"),areAllShapesTheSameType=require("../../utils/areAllShapesTheSameType"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),hullPath2=require("./hullPath2"),hullGeom2=require("./hullGeom2"),hullGeom3=require("./hullGeom3"),hull=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");if(!areAllShapesTheSameType(e))throw new Error("only hulls of the same type are supported");const l=e[0];return path2.isA(l)?hullPath2(e):geom2.isA(l)?hullGeom2(e):geom3.isA(l)?hullGeom3(e):l};module.exports=hull; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../utils/areAllShapesTheSameType":515,"../../utils/flatten":517,"./hullGeom2":455,"./hullGeom3":456,"./hullPath2":457}],454:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/areAllShapesTheSameType":516,"../../utils/flatten":518,"./hullGeom2":456,"./hullGeom3":457,"./hullPath2":458}],455:[function(require,module,exports){ const flatten=require("../../utils/flatten"),union=require("../booleans/union"),hull=require("./hull"),hullChain=(...n)=>{if((n=flatten(n)).length<2)throw new Error("wrong number of arguments");const e=[];for(let l=1;l{e=flatten(e);const t=toUniquePoints(e),o=hullPoints2(t);return o.length<3?geom2.create():geom2.fromPoints(o)};module.exports=hullGeom2; -},{"../../geometries/geom2":144,"../../utils/flatten":517,"./hullPoints2":458,"./toUniquePoints":469}],456:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../utils/flatten":518,"./hullPoints2":459,"./toUniquePoints":470}],457:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom3=require("../../geometries/geom3"),toUniquePoints=require("./toUniquePoints"),hullPoints3=require("./hullPoints3"),hullGeom3=(...e)=>{e=flatten(e);const t=toUniquePoints(e);return 0===t.length?geom3.create():geom3.create(hullPoints3(t))};module.exports=hullGeom3; -},{"../../geometries/geom3":160,"../../utils/flatten":517,"./hullPoints3":459,"./toUniquePoints":469}],457:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../utils/flatten":518,"./hullPoints3":460,"./toUniquePoints":470}],458:[function(require,module,exports){ const flatten=require("../../utils/flatten"),path2=require("../../geometries/path2"),hullPoints2=require("./hullPoints2"),toUniquePoints=require("./toUniquePoints"),hullPath2=(...t)=>{t=flatten(t);const e=toUniquePoints(t),o=hullPoints2(e);return path2.fromPoints({closed:!0},o)};module.exports=hullPath2; -},{"../../geometries/path2":181,"../../utils/flatten":517,"./hullPoints2":458,"./toUniquePoints":469}],458:[function(require,module,exports){ +},{"../../geometries/path2":182,"../../utils/flatten":518,"./hullPoints2":459,"./toUniquePoints":470}],459:[function(require,module,exports){ const vec2=require("../../maths/vec2"),hullPoints2=e=>{let t=vec2.fromValues(1/0,1/0);e.forEach(e=>{(e[1]{const o=fakeAtan2(e[1]-t[1],e[0]-t[0]),s=vec2.squaredDistance(e,t);n.push({point:e,angle:o,distSq:s})}),n.sort((e,t)=>e.angle!==t.angle?e.angle-t.angle:e.distSq-t.distSq);const o=[];return n.forEach(e=>{let t=o.length;for(;t>1&&ccw(o[t-2],o[t-1],e.point)<=Number.EPSILON;)o.pop(),t=o.length;o.push(e.point)}),o},ccw=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),fakeAtan2=(e,t)=>0===e&&0===t?-1/0:-t/e;module.exports=hullPoints2; -},{"../../maths/vec2":310}],459:[function(require,module,exports){ +},{"../../maths/vec2":311}],460:[function(require,module,exports){ const poly3=require("../../geometries/poly3"),quickhull=require("./quickhull"),hullPoints3=l=>{return quickhull(l,{skipTriangulation:!0}).map(u=>{const e=u.map(u=>l[u]);return poly3.create(e)})};module.exports=hullPoints3; -},{"../../geometries/poly3":198,"./quickhull":467}],460:[function(require,module,exports){ +},{"../../geometries/poly3":199,"./quickhull":468}],461:[function(require,module,exports){ module.exports={hull:require("./hull"),hullChain:require("./hullChain"),hullPoints2:require("./hullPoints2"),hullPoints3:require("./hullPoints3")}; -},{"./hull":453,"./hullChain":454,"./hullPoints2":458,"./hullPoints3":459}],461:[function(require,module,exports){ +},{"./hull":454,"./hullChain":455,"./hullPoints2":459,"./hullPoints3":460}],462:[function(require,module,exports){ const add=require("../../../maths/vec3/add"),copy=require("../../../maths/vec3/copy"),cross=require("../../../maths/vec3/cross"),dot=require("../../../maths/vec3/dot"),length=require("../../../maths/vec3/length"),normalize=require("../../../maths/vec3/normalize"),scale=require("../../../maths/vec3/scale"),subtract=require("../../../maths/vec3/subtract"),HalfEdge=require("./HalfEdge"),VISIBLE=0,NON_CONVEX=1,DELETED=2;class Face{constructor(){this.normal=[],this.centroid=[],this.offset=0,this.outside=null,this.mark=VISIBLE,this.edge=null,this.nVertices=0}getEdge(e){if("number"!=typeof e)throw Error("requires a number");let t=this.edge;for(;e>0;)t=t.next,e-=1;for(;e<0;)t=t.prev,e+=1;return t}computeNormal(){const e=this.edge,t=e.next;let r=t.next;const s=subtract([],t.head().point,e.head().point),o=[],i=[];for(this.nVertices=2,this.normal=[0,0,0];r!==e;)copy(i,s),subtract(s,r.head().point,e.head().point),add(this.normal,this.normal,cross(o,i,s)),r=r.next,this.nVertices+=1;this.area=length(this.normal),this.normal=scale(this.normal,this.normal,1/this.area)}computeNormalMinArea(e){if(this.computeNormal(),this.areat&&(e=r,t=s),r=r.next}while(r!==this.edge);const s=e.tail().point,o=e.head().point,i=subtract([],o,s),n=Math.sqrt(t);scale(i,i,1/n);const a=dot(this.normal,i);scale(i,i,-a),add(this.normal,this.normal,i),normalize(this.normal,this.normal)}}computeCentroid(){this.centroid=[0,0,0];let e=this.edge;do{add(this.centroid,this.centroid,e.head().point),e=e.next}while(e!==this.edge);scale(this.centroid,this.centroid,1/this.nVertices)}computeNormalAndCentroid(e){void 0!==e?this.computeNormalMinArea(e):this.computeNormal(),this.computeCentroid(),this.offset=dot(this.normal,this.centroid)}distanceToPlane(e){return dot(this.normal,e)-this.offset}connectHalfEdges(e,t){let r;if(e.opposite.face===t.opposite.face){const s=t.opposite.face;let o;e===this.edge&&(this.edge=t),3===s.nVertices?(o=t.opposite.prev.opposite,s.mark=DELETED,r=s):(o=t.opposite.next,s.edge===o.prev&&(s.edge=o),o.prev=o.prev.prev,o.prev.next=o),t.prev=e.prev,t.prev.next=t,t.setOpposite(o),s.computeNormalAndCentroid()}else e.next=t,t.prev=e;return r}mergeAdjacentFaces(e,t){const r=e.opposite,s=r.face;t.push(s),s.mark=DELETED;let o,i,n=e.prev,a=e.next,c=r.prev,h=r.next;for(;n.opposite.face===s;)n=n.prev,h=h.next;for(;a.opposite.face===s;)a=a.next,c=c.prev;for(o=h;o!==c.next;o=o.next)o.face=this;return this.edge=a,(i=this.connectHalfEdges(c,a))&&t.push(i),(i=this.connectHalfEdges(n,h))&&t.push(i),this.computeNormalAndCentroid(),t}collectIndices(){const e=[];let t=this.edge;do{e.push(t.head().index),t=t.next}while(t!==this.edge);return e}static createTriangle(e,t,r,s=0){const o=new Face,i=new HalfEdge(e,o),n=new HalfEdge(t,o),a=new HalfEdge(r,o);return i.next=a.prev=n,n.next=i.prev=a,a.next=n.prev=i,o.edge=i,o.computeNormalAndCentroid(s),o}}module.exports={VISIBLE:VISIBLE,NON_CONVEX:1,DELETED:DELETED,Face:Face}; -},{"../../../maths/vec3/add":328,"../../../maths/vec3/copy":331,"../../../maths/vec3/cross":333,"../../../maths/vec3/dot":336,"../../../maths/vec3/length":342,"../../../maths/vec3/normalize":348,"../../../maths/vec3/scale":353,"../../../maths/vec3/subtract":357,"./HalfEdge":462}],462:[function(require,module,exports){ +},{"../../../maths/vec3/add":329,"../../../maths/vec3/copy":332,"../../../maths/vec3/cross":334,"../../../maths/vec3/dot":337,"../../../maths/vec3/length":343,"../../../maths/vec3/normalize":349,"../../../maths/vec3/scale":354,"../../../maths/vec3/subtract":358,"./HalfEdge":463}],463:[function(require,module,exports){ const distance=require("../../../maths/vec3/distance"),squaredDistance=require("../../../maths/vec3/squaredDistance");class HalfEdge{constructor(t,e){this.vertex=t,this.face=e,this.next=null,this.prev=null,this.opposite=null}head(){return this.vertex}tail(){return this.prev?this.prev.vertex:null}length(){return this.tail()?distance(this.tail().point,this.head().point):-1}lengthSquared(){return this.tail()?squaredDistance(this.tail().point,this.head().point):-1}setOpposite(t){this.opposite=t,t.opposite=this}}module.exports=HalfEdge; -},{"../../../maths/vec3/distance":334,"../../../maths/vec3/squaredDistance":355}],463:[function(require,module,exports){ +},{"../../../maths/vec3/distance":335,"../../../maths/vec3/squaredDistance":356}],464:[function(require,module,exports){ const dot=require("../../../maths/vec3/dot"),pointLineDistance=require("./point-line-distance"),getPlaneNormal=require("./get-plane-normal"),VertexList=require("./VertexList"),Vertex=require("./Vertex"),{Face:Face,VISIBLE:VISIBLE,NON_CONVEX:NON_CONVEX,DELETED:DELETED}=require("./Face"),MERGE_NON_CONVEX_WRT_LARGER_FACE=1,MERGE_NON_CONVEX=2;class QuickHull{constructor(e){if(!Array.isArray(e))throw TypeError("input is not a valid array");if(e.length<4)throw Error("cannot build a simplex out of <4 points");this.tolerance=-1,this.nFaces=0,this.nPoints=e.length,this.faces=[],this.newFaces=[],this.claimed=new VertexList,this.unclaimed=new VertexList,this.vertices=[];for(let t=0;tthis.tolerance?this.addVertexToFace(s,t):this.unclaimed.add(s)}}else this.unclaimed.addAll(i)}resolveUnclaimedPoints(e){let t=this.unclaimed.first();for(let i=t;i;i=t){t=i.next;let s,o=this.tolerance;for(let t=0;to&&(o=e,s=a),o>1e3*this.tolerance)break}}s&&this.addVertexToFace(i,s)}}computeExtremes(){const e=[],t=[],i=[],s=[];let o,a;for(o=0;o<3;o+=1)i[o]=s[o]=this.vertices[0];for(o=0;o<3;o+=1)e[o]=t[o]=this.vertices[0].point[o];for(o=1;ot[a]&&(t[a]=n[a],s[a]=c)}return this.tolerance=3*Number.EPSILON*(Math.max(Math.abs(e[0]),Math.abs(t[0]))+Math.max(Math.abs(e[1]),Math.abs(t[1]))+Math.max(Math.abs(e[2]),Math.abs(t[2]))),[i,s]}createInitialSimplex(){const e=this.vertices,[t,i]=this.computeExtremes();let s,o,a,c,n=0,r=0;for(a=0;a<3;a+=1){const e=i[a].point[a]-t[a].point[a];e>n&&(n=e,r=a)}const l=t[r],h=i[r];for(n=0,a=0;an&&(n=t,s=e)}}const d=getPlaneNormal([],l.point,h.point,s.point),p=dot(l.point,d);for(n=-1,a=0;an&&(n=t,o=e)}}const f=[];if(dot(o.point,d)-p<0)for(f.push(Face.createTriangle(l,h,s),Face.createTriangle(o,h,l),Face.createTriangle(o,s,h),Face.createTriangle(o,l,s)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge(e)),f[a+1].getEdge(1).setOpposite(f[e+1].getEdge(0))}else for(f.push(Face.createTriangle(l,s,h),Face.createTriangle(o,l,h),Face.createTriangle(o,h,s),Face.createTriangle(o,s,l)),a=0;a<3;a+=1){const e=(a+1)%3;f[a+1].getEdge(2).setOpposite(f[0].getEdge((3-a)%3)),f[a+1].getEdge(0).setOpposite(f[e+1].getEdge(1))}for(a=0;a<4;a+=1)this.faces.push(f[a]);for(a=0;an&&(n=i,e=f[c])}e&&this.addVertexToFace(t,e)}}}reindexFaceAndVertices(){const e=[];for(let t=0;ti&&(i=o,e=t)}return e}}computeHorizon(e,t,i,s){let o;this.deleteFaceVertices(i),i.mark=DELETED,o=t?t.next:t=i.getEdge(0);do{const t=o.opposite,i=t.face;i.mark===VISIBLE&&(i.distanceToPlane(e)>this.tolerance?this.computeHorizon(e,t,i,s):s.push(o)),o=o.next}while(o!==t)}addAdjoiningFace(e,t){const i=Face.createTriangle(e,t.tail(),t.head());return this.faces.push(i),i.getEdge(-1).setOpposite(t.opposite),i.getEdge(0)}addNewFaces(e,t){let i,s;this.newFaces=[];for(let o=0;o=e.nVertices)throw Error("merge recursion limit exceeded");const a=i.opposite.face;let c=!1;if(t===MERGE_NON_CONVEX?(this.oppositeFaceDistance(i)>-this.tolerance||this.oppositeFaceDistance(i.opposite)>-this.tolerance)&&(c=!0):e.area>a.area?this.oppositeFaceDistance(i)>-this.tolerance?c=!0:this.oppositeFaceDistance(i.opposite)>-this.tolerance&&(s=!1):this.oppositeFaceDistance(i.opposite)>-this.tolerance?c=!0:this.oppositeFaceDistance(i)>-this.tolerance&&(s=!1),c){const t=e.mergeAdjacentFaces(i,[]);for(let i=0;i{const a=[0,0,0];return subtract(r,e,s),subtract(a,s,t),cross(r,r,a),normalize(r,r)};module.exports=planeNormal; -},{"../../../maths/vec3/cross":333,"../../../maths/vec3/normalize":348,"../../../maths/vec3/subtract":357}],467:[function(require,module,exports){ +},{"../../../maths/vec3/cross":334,"../../../maths/vec3/normalize":349,"../../../maths/vec3/subtract":358}],468:[function(require,module,exports){ const QuickHull=require("./QuickHull"),runner=(u,l={})=>{const e=new QuickHull(u);return e.build(),e.collectFaces(l.skipTriangulation)};module.exports=runner; -},{"./QuickHull":463}],468:[function(require,module,exports){ +},{"./QuickHull":464}],469:[function(require,module,exports){ const cross=require("../../../maths/vec3/cross"),subtract=require("../../../maths/vec3/subtract"),squaredLength=require("../../../maths/vec3/squaredLength"),distanceSquared=(e,t,r)=>{const s=[],a=[];subtract(s,r,t),subtract(a,e,t);const n=squaredLength(cross([],a,s)),c=squaredLength(s);if(0===c)throw Error("a and b are the same point");return n/c},pointLineDistance=(e,t,r)=>Math.sqrt(distanceSquared(e,t,r));module.exports=pointLineDistance; -},{"../../../maths/vec3/cross":333,"../../../maths/vec3/squaredLength":356,"../../../maths/vec3/subtract":357}],469:[function(require,module,exports){ +},{"../../../maths/vec3/cross":334,"../../../maths/vec3/squaredLength":357,"../../../maths/vec3/subtract":358}],470:[function(require,module,exports){ const geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),toUniquePoints=o=>{const e=new Set,t=[],r=o=>{const r=o.toString();e.has(r)||(t.push(o),e.add(r))};return o.forEach(o=>{geom2.isA(o)?geom2.toPoints(o).forEach(r):geom3.isA(o)?geom3.toPoints(o).forEach(o=>o.forEach(r)):path2.isA(o)&&path2.toPoints(o).forEach(r)}),t};module.exports=toUniquePoints; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181}],470:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182}],471:[function(require,module,exports){ const flatten=require("../../utils/flatten"),measureEpsilon=require("../../measurements/measureEpsilon"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),snapPolygons=require("./snapPolygons"),mergePolygons=require("./mergePolygons"),insertTjunctions=require("./insertTjunctions"),triangulatePolygons=require("./triangulatePolygons"),generalizePath2=(e,r)=>r,generalizeGeom2=(e,r)=>r,generalizeGeom3=(e,r)=>{const{snap:n,simplify:o,triangulate:t}=Object.assign({},{snap:!1,simplify:!1,triangulate:!1},e),i=measureEpsilon(r);let s=geom3.toPolygons(r);n&&(s=snapPolygons(i,s)),o&&(s=mergePolygons(i,s)),t&&(s=insertTjunctions(s),s=triangulatePolygons(i,s));const g=Object.assign({},r);return g.polygons=s,g},generalize=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const n=r.map(r=>{if(path2.isA(r))return generalizePath2(0,r);if(geom2.isA(r))return generalizeGeom2(0,r);if(geom3.isA(r))return generalizeGeom3(e,r);throw new Error("invalid geometry")});return 1===n.length?n[0]:n};module.exports=generalize; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"./insertTjunctions":472,"./mergePolygons":473,"./snapPolygons":477,"./triangulatePolygons":478}],471:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"./insertTjunctions":473,"./mergePolygons":474,"./snapPolygons":478,"./triangulatePolygons":479}],472:[function(require,module,exports){ module.exports={generalize:require("./generalize"),snap:require("./snap"),retessellate:require("./retessellate")}; -},{"./generalize":470,"./retessellate":475,"./snap":476}],472:[function(require,module,exports){ +},{"./generalize":471,"./retessellate":476,"./snap":477}],473:[function(require,module,exports){ const constants=require("../../maths/constants"),vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),assert=!1,getTag=e=>`${e}`,addSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r);const l=`${o}/${g}`,a=`${g}/${o}`;if(e.has(a))return deleteSide(e,t,s,r,n,null),null;const i={vertex0:n,vertex1:r,polygonindex:c};return e.has(l)?e.get(l).push(i):e.set(l,[i]),t.has(o)?t.get(o).push(l):t.set(o,[l]),s.has(g)?s.get(g).push(l):s.set(g,[l]),l},deleteSide=(e,t,s,n,r,c)=>{const o=getTag(n),g=getTag(r),l=`${o}/${g}`;let a=-1;const i=e.get(l);for(let e=0;e{const t=new Map;for(let s=0;s=3){let e=n.vertices[0],c=getTag(e);for(let o=0;o0){const s=new Map,n=new Map,r=new Map;for(const[e,c]of t)r.set(e,!0),c.forEach(t=>{const r=getTag(t.vertex0),c=getTag(t.vertex1);s.has(r)?s.get(r).push(e):s.set(r,[e]),n.has(c)?n.get(c).push(e):n.set(c,[e])});const c=e.slice(0);for(;0!==t.size;){for(const e of t.keys())r.set(e,!0);let e=!1;for(;;){const o=Array.from(r.keys());if(0===o.length)break;const g=o[0];let l=!0;if(t.has(g)){const o=t.get(g);0;const a=o[0];for(let o=0;o<2;o++){const g=0===o?a.vertex0:a.vertex1,i=0===o?a.vertex1:a.vertex0,v=getTag(g),d=getTag(i);let h=[];0===o?n.has(v)&&(h=n.get(v)):s.has(v)&&(h=s.get(v));for(let a=0;a0&&x<1){const g=vec3.scale(vec3.create(),h,x);if(vec3.add(g,g,a),vec3.squaredDistance(g,v){const n=poly3.toPoints(e),t=[];for(let e=0;e{const t=`${n.v1}:${n.v2}`;e.set(t,n)},deleteEdge=(e,n)=>{const t=`${n.v1}:${n.v2}`;e.delete(t)},findOppositeEdge=(e,n)=>{const t=`${n.v2}:${n.v1}`;return e.get(t)},calculateAnglesBetween=(e,n,t)=>{let l=e.prev.v1,r=e.prev.v2,o=n.next.v2;const v=calculateAngle(l,r,o,t);return l=n.prev.v1,r=n.prev.v2,o=e.next.v2,[v,calculateAngle(l,r,o,t)]},v1=vec3.create(),v2=vec3.create(),calculateAngle=(e,n,t,l)=>{const r=vec3.subtract(v1,n,e),o=vec3.subtract(v2,t,n);return vec3.cross(r,r,o),vec3.dot(r,l)},createPolygonAnd=e=>{let n;const t=[];for(;e.next;){const n=e.next;t.push(e.v1),e.v1=null,e.v2=null,e.next=null,e.prev=null,e=n}return t.length>0&&(n=poly3.create(t)),n},mergeCoplanarPolygons=e=>{if(e.length<2)return e;const n=e[0].plane,t=e.slice(),l=new Map;for(;t.length>0;){const e=t.shift(),r=createEdges(e);for(let e=0;e=0&&e[1]>=0){const n=o.next,r=t.next;t.prev.next=o.next,t.next.prev=o.prev,o.prev.next=t.next,o.next.prev=t.prev,t.v1=null,t.v2=null,t.next=null,t.prev=null,deleteEdge(l,o),o.v1=null,o.v2=null,o.next=null,o.prev=null;const v=(e,n,t)=>{const l={v1:t.v1,v2:n.v2,next:n.next,prev:t.prev};t.prev.next=l,n.next.prev=l,deleteEdge(e,n),n.v1=null,n.v2=null,n.next=null,n.prev=null,deleteEdge(e,t),t.v1=null,t.v2=null,t.next=null,t.prev=null};0===e[0]&&v(l,n,n.prev),0===e[1]&&v(l,r,r.prev)}}else t.next&&insertEdge(l,t)}}const r=[];return l.forEach(e=>{const n=createPolygonAnd(e);n&&r.push(n)}),l.clear(),r},coplanar=(e,n)=>Math.abs(e[3]-n[3])<1.5e-7&&aboutEqualNormals(e,n),mergePolygons=(e,n)=>{const t=[];n.forEach(e=>{const n=t.find(n=>coplanar(n[0],poly3.plane(e)));if(n){n[1].push(e)}else t.push([poly3.plane(e),[e]])});let l=[];return t.forEach(e=>{const n=e[1],t=mergeCoplanarPolygons(n);l=l.concat(t)}),l};module.exports=mergePolygons; -},{"../../geometries/poly3":198,"../../maths/utils/aboutEqualNormals":286,"../../maths/vec3":341}],474:[function(require,module,exports){ +},{"../../geometries/poly3":199,"../../maths/utils/aboutEqualNormals":287,"../../maths/vec3":342}],475:[function(require,module,exports){ const{EPS:EPS}=require("../../maths/constants"),line2=require("../../maths/line2"),vec2=require("../../maths/vec2"),OrthoNormalBasis=require("../../maths/OrthoNormalBasis"),interpolateBetween2DPointsForY=require("../../maths/utils/interpolateBetween2DPointsForY"),{insertSorted:insertSorted,fnNumberSort:fnNumberSort}=require("../../utils"),poly3=require("../../geometries/poly3"),reTesselateCoplanarPolygons=t=>{if(t.length<2)return t;const e=[],o=t.length,n=poly3.plane(t[0]),l=new OrthoNormalBasis(n),i=[],r=[],s=new Map,f=new Map,p=new Map,h=10/EPS;for(let e=0;e0){let t,i;for(let r=0;ri)&&(i=u);let m=f.get(u);m||(m={},f.set(u,m)),m[e]=!0}if(t>=i)n=[],g=0,c=-1;else{let o=s.get(t);o||(o=[],s.set(t,o)),o.push(e)}}n.reverse(),c=g-c-1,i.push(n),r.push(c)}const g=[];f.forEach((t,e)=>g.push(e)),g.sort(fnNumberSort);let c=[],a=[];for(let t=0;t=l&&(t=0),n[t][1]!==p)break;r=t}let f=s-1;if(f<0&&(f=l-1),n[f][1]===p&&(s=f),r!==e.leftvertexindex&&r===s)c.splice(t,1),--t;else{e.leftvertexindex=r,e.rightvertexindex=s,e.topleft=n[r],e.topright=n[s];let t=r+1;t>=l&&(t=0),e.bottomleft=n[t];let o=s-1;o<0&&(o=l-1),e.bottomright=n[o]}}}let u;if(t>=g.length-1)c=[],u=null;else{const e=.5*(p+(u=Number(g[t+1]))),o=s.get(p);for(const t in o){const n=o[t],l=i[n],s=l.length,f=r[n];let h=f;for(;;){let t=h+1;if(t>=s&&(t=0),l[t][1]!==p)break;if(t===f)break;h=t}let g=f;for(;;){let t=g-1;if(t<0&&(t=s-1),l[t][1]!==p)break;if(t===h)break;g=t}let a=h+1;a>=s&&(a=0);let u=g-1;u<0&&(u=s-1);const m={polygonindex:n,leftvertexindex:h,rightvertexindex:g,topleft:l[h],topright:l[g],bottomleft:l[a],bottomright:l[u]};insertSorted(c,m,(t,o)=>{const n=interpolateBetween2DPointsForY(t.topleft,t.bottomleft,e),l=interpolateBetween2DPointsForY(o.topleft,o.bottomleft,e);return n>l?1:n0){const t=o[o.length-1],e=vec2.distance(f.topleft,t.topright),n=vec2.distance(f.bottomleft,t.bottomright);e0){const t=new Set,i=new Set;for(let e=0;e=0;(g||s>=0)&&a&&(n.outpolygon=o.outpolygon,n.leftlinecontinues=g,n.rightlinecontinues=c,t.add(e));break}}}for(let o=0;oEPS&&t.outpolygon.leftpoints.push(t.bottomleft),t.outpolygon.leftpoints.reverse();const i=t.outpolygon.rightpoints.concat(t.outpolygon.leftpoints).map(t=>l.to3D(t)),r=poly3.fromPointsAndPlane(i,n);r.vertices.length&&e.push(r)}}for(let t=0;tEPS&&e.outpolygon.rightpoints.push(e.topright))}a=o}return e};module.exports=reTesselateCoplanarPolygons; -},{"../../geometries/poly3":198,"../../maths/OrthoNormalBasis":212,"../../maths/constants":213,"../../maths/line2":224,"../../maths/utils/interpolateBetween2DPointsForY":289,"../../maths/vec2":310,"../../utils":519}],475:[function(require,module,exports){ +},{"../../geometries/poly3":199,"../../maths/OrthoNormalBasis":213,"../../maths/constants":214,"../../maths/line2":225,"../../maths/utils/interpolateBetween2DPointsForY":290,"../../maths/vec2":311,"../../utils":520}],476:[function(require,module,exports){ const geom3=require("../../geometries/geom3"),poly3=require("../../geometries/poly3"),{NEPS:NEPS}=require("../../maths/constants"),reTesselateCoplanarPolygons=require("./reTesselateCoplanarPolygons"),retessellate=e=>{if(e.isRetesselated)return e;const s=geom3.toPolygons(e).map((e,s)=>({vertices:e.vertices,plane:poly3.plane(e),index:s})),o=classifyPolygons(s),l=[];o.forEach(e=>{if(Array.isArray(e)){const s=reTesselateCoplanarPolygons(e);l.push(...s)}else l.push(e)});const n=geom3.create(l);return n.isRetesselated=!0,n},classifyPolygons=e=>{let s=[e];const o=[];for(let e=3;e>=0;e--){const l=[],n=3===e?1.5e-8:NEPS;s.forEach(s=>{s.sort(byPlaneComponent(e,n));let t=0;for(let r=1;rn&&(r-t==1?o.push(s[t]):l.push(s.slice(t,r)),t=r);s.length-t==1?o.push(s[t]):l.push(s.slice(t))}),s=l}const l=[];return s.forEach(e=>{e[0]&&(l[e[0].index]=e)}),o.forEach(e=>{l[e.index]=e}),l},byPlaneComponent=(e,s)=>(o,l)=>o.plane[e]-l.plane[e]>s?1:l.plane[e]-o.plane[e]>s?-1:0;module.exports=retessellate; -},{"../../geometries/geom3":160,"../../geometries/poly3":198,"../../maths/constants":213,"./reTesselateCoplanarPolygons":474}],476:[function(require,module,exports){ +},{"../../geometries/geom3":161,"../../geometries/poly3":199,"../../maths/constants":214,"./reTesselateCoplanarPolygons":475}],477:[function(require,module,exports){ const flatten=require("../../utils/flatten"),vec2=require("../../maths/vec2"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureEpsilon=require("../../measurements/measureEpsilon"),snapPolygons=require("./snapPolygons"),snapPath2=e=>{const s=measureEpsilon(e),r=path2.toPoints(e).map(e=>vec2.snap(vec2.create(),e,s));return path2.create(r)},snapGeom2=e=>{const s=measureEpsilon(e);let r=geom2.toSides(e).map(e=>[vec2.snap(vec2.create(),e[0],s),vec2.snap(vec2.create(),e[1],s)]);return r=r.filter(e=>!vec2.equals(e[0],e[1])),geom2.create(r)},snapGeom3=e=>{const s=measureEpsilon(e),r=geom3.toPolygons(e),o=snapPolygons(s,r);return geom3.create(o)},snap=(...e)=>{if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const s=e.map(e=>path2.isA(e)?snapPath2(e):geom2.isA(e)?snapGeom2(e):geom3.isA(e)?snapGeom3(e):e);return 1===s.length?s[0]:s};module.exports=snap; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../maths/vec2":310,"../../measurements/measureEpsilon":382,"../../utils/flatten":517,"./snapPolygons":477}],477:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/vec2":311,"../../measurements/measureEpsilon":383,"../../utils/flatten":518,"./snapPolygons":478}],478:[function(require,module,exports){ const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),isValidPoly3=(e,o)=>{const r=Math.abs(poly3.measureArea(o));return Number.isFinite(r)&&r>e},snapPolygons=(e,o)=>{let r=o.map(o=>{const r=o.vertices.map(o=>vec3.snap(vec3.create(),o,e)),t=[];for(let e=0;eisValidPoly3(t,e))};module.exports=snapPolygons; -},{"../../geometries/poly3":198,"../../maths/vec3":341}],478:[function(require,module,exports){ +},{"../../geometries/poly3":199,"../../maths/vec3":342}],479:[function(require,module,exports){ const vec3=require("../../maths/vec3"),poly3=require("../../geometries/poly3"),triangulatePolygon=(e,o,r)=>{const t=o.vertices.length;if(t>3){if(t>4){const c=[0,0,0];o.vertices.forEach(e=>vec3.add(c,c,e)),vec3.snap(c,vec3.divide(c,c,[t,t,t]),e);for(let e=0;e{const r=[];return o.forEach(o=>{triangulatePolygon(e,o,r)}),r};module.exports=triangulatePolygons; -},{"../../geometries/poly3":198,"../../maths/vec3":341}],479:[function(require,module,exports){ +},{"../../geometries/poly3":199,"../../maths/vec3":342}],480:[function(require,module,exports){ const flatten=require("../../utils/flatten"),padArrayToLength=require("../../utils/padArrayToLength"),measureAggregateBoundingBox=require("../../measurements/measureAggregateBoundingBox"),{translate:translate}=require("./translate"),validateOptions=e=>{if(!Array.isArray(e.modes)||e.modes.length>3)throw new Error("align(): modes must be an array of length <= 3");if(e.modes=padArrayToLength(e.modes,"none",3),3!==e.modes.filter(e=>["center","max","min","none"].includes(e)).length)throw new Error('align(): all modes must be one of "center", "max" or "min"');if(!Array.isArray(e.relativeTo)||e.relativeTo.length>3)throw new Error("align(): relativeTo must be an array of length <= 3");if(e.relativeTo=padArrayToLength(e.relativeTo,0,3),3!==e.relativeTo.filter(e=>Number.isFinite(e)||null==e).length)throw new Error("align(): all relativeTo values must be a number, or null.");if("boolean"!=typeof e.grouped)throw new Error("align(): grouped must be a boolean value.");return e},populateRelativeToFromBounds=(e,r,t)=>{for(let n=0;n<3;n++)null==e[n]&&("center"===r[n]?e[n]=(t[0][n]+t[1][n])/2:"max"===r[n]?e[n]=t[1][n]:"min"===r[n]&&(e[n]=t[0][n]));return e},alignGeometries=(e,r,t)=>{const n=measureAggregateBoundingBox(e),o=[0,0,0];for(let e=0;e<3;e++)"center"===r[e]?o[e]=t[e]-(n[0][e]+n[1][e])/2:"max"===r[e]?o[e]=t[e]-n[1][e]:"min"===r[e]&&(o[e]=t[e]-n[0][e]);return translate(o,e)},align=(e,...r)=>{e=Object.assign({},{modes:["center","center","min"],relativeTo:[0,0,0],grouped:!1},e),e=validateOptions(e);let{modes:t,relativeTo:n,grouped:o}=e;if(0===(r=flatten(r)).length)throw new Error("align(): No geometries were provided to act upon");if(n.filter(e=>null==e).length){const e=measureAggregateBoundingBox(r);n=populateRelativeToFromBounds(n,t,e)}return 1===(r=o?alignGeometries(r,t,n):r.map(e=>alignGeometries(e,t,n))).length?r[0]:r};module.exports=align; -},{"../../measurements/measureAggregateBoundingBox":373,"../../utils/flatten":517,"../../utils/padArrayToLength":521,"./translate":486}],480:[function(require,module,exports){ +},{"../../measurements/measureAggregateBoundingBox":374,"../../utils/flatten":518,"../../utils/padArrayToLength":522,"./translate":487}],481:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),measureBoundingBox=require("../../measurements/measureBoundingBox"),{translate:translate}=require("./translate"),centerGeometry=(e,r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e),a=measureBoundingBox(r),o=[0,0,0];return t[0]&&(o[0]=n[0]-(a[0][0]+(a[1][0]-a[0][0])/2)),t[1]&&(o[1]=n[1]-(a[0][1]+(a[1][1]-a[0][1])/2)),t[2]&&(o[2]=n[2]-(a[0][2]+(a[1][2]-a[0][2])/2)),translate(o,r)},center=(e,...r)=>{const{axes:t,relativeTo:n}=Object.assign({},{axes:[!0,!0,!0],relativeTo:[0,0,0]},e);if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");if(3!==n.length)throw new Error("relativeTo must be an array of length 3");e={axes:t,relativeTo:n};const a=r.map(r=>path2.isA(r)?centerGeometry(e,r):geom2.isA(r)?centerGeometry(e,r):geom3.isA(r)?centerGeometry(e,r):r);return 1===a.length?a[0]:a},centerX=(...e)=>center({axes:[!0,!1,!1]},e),centerY=(...e)=>center({axes:[!1,!0,!1]},e),centerZ=(...e)=>center({axes:[!1,!1,!0]},e);module.exports={center:center,centerX:centerX,centerY:centerY,centerZ:centerZ}; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../measurements/measureBoundingBox":377,"../../utils/flatten":517,"./translate":486}],481:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../measurements/measureBoundingBox":378,"../../utils/flatten":518,"./translate":487}],482:[function(require,module,exports){ module.exports={align:require("./align"),center:require("./center").center,centerX:require("./center").centerX,centerY:require("./center").centerY,centerZ:require("./center").centerZ,mirror:require("./mirror").mirror,mirrorX:require("./mirror").mirrorX,mirrorY:require("./mirror").mirrorY,mirrorZ:require("./mirror").mirrorZ,rotate:require("./rotate").rotate,rotateX:require("./rotate").rotateX,rotateY:require("./rotate").rotateY,rotateZ:require("./rotate").rotateZ,scale:require("./scale").scale,scaleX:require("./scale").scaleX,scaleY:require("./scale").scaleY,scaleZ:require("./scale").scaleZ,transform:require("./transform"),translate:require("./translate").translate,translateX:require("./translate").translateX,translateY:require("./translate").translateY,translateZ:require("./translate").translateZ}; -},{"./align":479,"./center":480,"./mirror":482,"./rotate":483,"./scale":484,"./transform":485,"./translate":486}],482:[function(require,module,exports){ +},{"./align":480,"./center":481,"./mirror":483,"./rotate":484,"./scale":485,"./transform":486,"./translate":487}],483:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),plane=require("../../maths/plane"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),mirror=(r,...e)=>{const{origin:o,normal:m}=Object.assign({},{origin:[0,0,0],normal:[0,0,1]},r);if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");const i=plane.fromNormalAndPoint(plane.create(),m,o);if(Number.isNaN(i[0]))throw new Error("the given origin and normal do not define a proper plane");const n=mat4.mirrorByPlane(mat4.create(),i),t=e.map(r=>path2.isA(r)?path2.transform(n,r):geom2.isA(r)?geom2.transform(n,r):geom3.isA(r)?geom3.transform(n,r):r);return 1===t.length?t[0]:t},mirrorX=(...r)=>mirror({normal:[1,0,0]},r),mirrorY=(...r)=>mirror({normal:[0,1,0]},r),mirrorZ=(...r)=>mirror({normal:[0,0,1]},r);module.exports={mirror:mirror,mirrorX:mirrorX,mirrorY:mirrorY,mirrorZ:mirrorZ}; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../maths/mat4":262,"../../maths/plane":282,"../../utils/flatten":517}],483:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../maths/plane":283,"../../utils/flatten":518}],484:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),rotate=(t,...e)=>{if(!Array.isArray(t))throw new Error("angles must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=t[2],o=t[1],a=t[0],m=mat4.fromTaitBryanRotation(mat4.create(),r,o,a),n=e.map(t=>path2.isA(t)?path2.transform(m,t):geom2.isA(t)?geom2.transform(m,t):geom3.isA(t)?geom3.transform(m,t):t);return 1===n.length?n[0]:n},rotateX=(t,...e)=>rotate([t,0,0],e),rotateY=(t,...e)=>rotate([0,t,0],e),rotateZ=(t,...e)=>rotate([0,0,t],e);module.exports={rotate:rotate,rotateX:rotateX,rotateY:rotateY,rotateZ:rotateZ}; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../maths/mat4":262,"../../utils/flatten":517}],484:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":518}],485:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),scale=(e,...r)=>{if(!Array.isArray(e))throw new Error("factors must be an array");if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");for(e=e.slice();e.length<3;)e.push(1);if(e[0]<=0||e[1]<=0||e[2]<=0)throw new Error("factors must be positive");const a=mat4.fromScaling(mat4.create(),e),t=r.map(e=>path2.isA(e)?path2.transform(a,e):geom2.isA(e)?geom2.transform(a,e):geom3.isA(e)?geom3.transform(a,e):e);return 1===t.length?t[0]:t},scaleX=(e,...r)=>scale([e,1,1],r),scaleY=(e,...r)=>scale([1,e,1],r),scaleZ=(e,...r)=>scale([1,1,e],r);module.exports={scale:scale,scaleX:scaleX,scaleY:scaleY,scaleZ:scaleZ}; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../maths/mat4":262,"../../utils/flatten":517}],485:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":518}],486:[function(require,module,exports){ const flatten=require("../../utils/flatten"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),transform=(e,...r)=>{if(0===(r=flatten(r)).length)throw new Error("wrong number of arguments");const t=r.map(r=>path2.isA(r)?path2.transform(e,r):geom2.isA(r)?geom2.transform(e,r):geom3.isA(r)?geom3.transform(e,r):r);return 1===t.length?t[0]:t};module.exports=transform; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../utils/flatten":517}],486:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../utils/flatten":518}],487:[function(require,module,exports){ const flatten=require("../../utils/flatten"),mat4=require("../../maths/mat4"),geom2=require("../../geometries/geom2"),geom3=require("../../geometries/geom3"),path2=require("../../geometries/path2"),translate=(t,...e)=>{if(!Array.isArray(t))throw new Error("offset must be an array");if(0===(e=flatten(e)).length)throw new Error("wrong number of arguments");for(t=t.slice();t.length<3;)t.push(0);const r=mat4.fromTranslation(mat4.create(),t),a=e.map(t=>path2.isA(t)?path2.transform(r,t):geom2.isA(t)?geom2.transform(r,t):geom3.isA(t)?geom3.transform(r,t):t);return 1===a.length?a[0]:a},translateX=(t,...e)=>translate([t,0,0],e),translateY=(t,...e)=>translate([0,t,0],e),translateZ=(t,...e)=>translate([0,0,t],e);module.exports={translate:translate,translateX:translateX,translateY:translateY,translateZ:translateZ}; -},{"../../geometries/geom2":144,"../../geometries/geom3":160,"../../geometries/path2":181,"../../maths/mat4":262,"../../utils/flatten":517}],487:[function(require,module,exports){ +},{"../../geometries/geom2":145,"../../geometries/geom3":161,"../../geometries/path2":182,"../../maths/mat4":263,"../../utils/flatten":518}],488:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),path2=require("../geometries/path2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),arc=e=>{const r={center:[0,0],radius:1,startAngle:0,endAngle:TAU,makeTangent:!1,segments:32};let{center:t,radius:s,startAngle:n,endAngle:a,makeTangent:o,segments:c}=Object.assign({},r,e);if(!isNumberArray(t,2))throw new Error("center must be an array of X and Y values");if(!isGT(s,0))throw new Error("radius must be greater than zero");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(a,0))throw new Error("endAngle must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");let i=TAU;(n%=TAU)<(a%=TAU)&&(i=a-n),n>a&&(i=a+(TAU-n));const m=Math.acos((s*s+s*s-EPS*EPS)/(2*s*s)),l=vec2.clone(t);let u;const A=[];if(i.25&&(r=.25);const t=o?e+2:e;for(let a=0;a<=t;a++){let t=a;o&&((t=(a-1)*(e-2*r)/e+r)<0&&(t=0),t>e&&(t=e));const c=n+t*(i/e);u=vec2.fromAngleRadians(vec2.create(),c),vec2.scale(u,u,s),vec2.add(u,u,l),A.push(u)}}return path2.fromPoints({closed:!1},A)};module.exports=arc; -},{"../geometries/path2":181,"../maths/constants":213,"../maths/vec2":310,"./commonChecks":489}],488:[function(require,module,exports){ +},{"../geometries/path2":182,"../maths/constants":214,"../maths/vec2":311,"./commonChecks":490}],489:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),ellipse=require("./ellipse"),{isGTE:isGTE}=require("./commonChecks"),circle=e=>{const s={center:[0,0],radius:1,startAngle:0,endAngle:TAU,segments:32};let{center:r,radius:t,startAngle:n,endAngle:i,segments:l}=Object.assign({},s,e);if(!isGTE(t,0))throw new Error("radius must be positive");return ellipse({center:r,radius:t=[t,t],startAngle:n,endAngle:i,segments:l})};module.exports=circle; -},{"../maths/constants":213,"./commonChecks":489,"./ellipse":494}],489:[function(require,module,exports){ +},{"../maths/constants":214,"./commonChecks":490,"./ellipse":495}],490:[function(require,module,exports){ const isNumberArray=(i,r)=>!!(Array.isArray(i)&&i.length>=r)&&i.every(i=>Number.isFinite(i)),isGT=(i,r)=>Number.isFinite(i)&&i>r,isGTE=(i,r)=>Number.isFinite(i)&&i>=r;module.exports={isNumberArray:isNumberArray,isGT:isGT,isGTE:isGTE}; -},{}],490:[function(require,module,exports){ +},{}],491:[function(require,module,exports){ const cuboid=require("./cuboid"),{isGTE:isGTE}=require("./commonChecks"),cube=e=>{let{center:i,size:r}=Object.assign({},{center:[0,0,0],size:2},e);if(!isGTE(r,0))throw new Error("size must be positive");return cuboid({center:i,size:r=[r,r,r]})};module.exports=cube; -},{"./commonChecks":489,"./cuboid":491}],491:[function(require,module,exports){ +},{"./commonChecks":490,"./cuboid":492}],492:[function(require,module,exports){ const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=e=>{const{center:r,size:o}=Object.assign({},{center:[0,0,0],size:[2,2,2]},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(o,3))throw new Error("size must be an array of width, depth and height values");if(!o.every(e=>e>=0))throw new Error("size values must be positive");return 0===o[0]||0===o[1]||0===o[2]?geom3.create():geom3.create([[[0,4,6,2],[-1,0,0]],[[1,3,7,5],[1,0,0]],[[0,1,5,4],[0,-1,0]],[[2,6,7,3],[0,1,0]],[[0,2,3,1],[0,0,-1]],[[4,5,7,6],[0,0,1]]].map(e=>{const t=e[0].map(e=>{return[r[0]+o[0]/2*(2*!!(1&e)-1),r[1]+o[1]/2*(2*!!(2&e)-1),r[2]+o[2]/2*(2*!!(4&e)-1)]});return poly3.create(t)}))};module.exports=cuboid; -},{"../geometries/geom3":160,"../geometries/poly3":198,"./commonChecks":489}],492:[function(require,module,exports){ +},{"../geometries/geom3":161,"../geometries/poly3":199,"./commonChecks":490}],493:[function(require,module,exports){ const geom3=require("../geometries/geom3"),cylinderElliptic=require("./cylinderElliptic"),{isGTE:isGTE}=require("./commonChecks"),cylinder=e=>{const{center:i,height:r,radius:s,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,segments:32},e);if(!isGTE(s,0))throw new Error("radius must be positive");return 0===r||0===s?geom3.create():cylinderElliptic({center:i,height:r,startRadius:[s,s],endRadius:[s,s],segments:t})};module.exports=cylinder; -},{"../geometries/geom3":160,"./commonChecks":489,"./cylinderElliptic":493}],493:[function(require,module,exports){ +},{"../geometries/geom3":161,"./commonChecks":490,"./cylinderElliptic":494}],494:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinderElliptic=e=>{const r={center:[0,0,0],height:2,startRadius:[1,1],startAngle:0,endRadius:[1,1],endAngle:TAU,segments:32};let{center:s,height:t,startRadius:a,startAngle:i,endRadius:o,endAngle:n,segments:u}=Object.assign({},r,e);if(!isNumberArray(s,3))throw new Error("center must be an array of X, Y and Z values");if(!isGT(t,0))throw new Error("height must be greater then zero");if(!isNumberArray(a,2))throw new Error("startRadius must be an array of X and Y values");if(!a.every(e=>e>=0))throw new Error("startRadius values must be positive");if(!isNumberArray(o,2))throw new Error("endRadius must be an array of X and Y values");if(!o.every(e=>e>=0))throw new Error("endRadius values must be positive");if(o.every(e=>0===e)&&a.every(e=>0===e))throw new Error("at least one radius must be positive");if(!isGTE(i,0))throw new Error("startAngle must be positive");if(!isGTE(n,0))throw new Error("endAngle must be positive");if(!isGTE(u,4))throw new Error("segments must be four or more");let c=TAU;(i%=TAU)<(n%=TAU)&&(c=n-i),i>n&&(c=n+(TAU-i));const l=Math.min(a[0],a[1],o[0],o[1]),m=Math.acos((l*l+l*l-EPS*EPS)/(2*l*l));if(c{const t=r*c+i;return vec3.scale(A,g,s[0]*cos(t)),vec3.scale(w,p,s[1]*sin(t)),vec3.add(A,A,w),vec3.scale(E,f,e),vec3.add(E,E,d),vec3.add(vec3.create(),A,E)},T=(...e)=>{const r=e.map(e=>vec3.add(vec3.create(),e,s));return poly3.create(r)},b=[];for(let e=0;e0&&a[1]>0&&b.push(T(d,y(0,s,a),y(0,r,a))),(a[0]>0||a[1]>0)&&b.push(T(y(0,r,a),y(0,s,a),y(1,r,o))),o[0]>0&&o[1]>0&&b.push(T(v,y(1,r,o),y(1,s,o))),(o[0]>0||o[1]>0)&&b.push(T(y(1,r,o),y(0,s,a),y(1,s,o))))}return c{const r={center:[0,0],radius:[1,1],startAngle:0,endAngle:TAU,segments:32};let{center:s,radius:t,startAngle:n,endAngle:o,segments:i}=Object.assign({},r,e);if(!isNumberArray(s,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("radius must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("radius values must be positive");if(!isGTE(n,0))throw new Error("startAngle must be positive");if(!isGTE(o,0))throw new Error("endAngle must be positive");if(!isGTE(i,3))throw new Error("segments must be three or more");if(0===t[0]||0===t[1])return geom2.create();let a=TAU;(n%=TAU)<(o%=TAU)&&(a=o-n),n>o&&(a=o+(TAU-n));const m=Math.min(t[0],t[1]);if(a{const{center:c,radius:r,segments:s,axes:a}=Object.assign({},{center:[0,0,0],radius:[1,1,1],segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(r,3))throw new Error("radius must be an array of X, Y and Z values");if(!r.every(e=>e>=0))throw new Error("radius values must be positive");if(!isGTE(s,4))throw new Error("segments must be four or more");if(0===r[0]||0===r[1]||0===r[2])return geom3.create();const t=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[0]),r[0]),v=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[1]),r[1]),o=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),a[2]),r[2]),i=Math.round(s/4);let l;const u=[],d=vec3.create(),n=vec3.create();for(let e=0;e<=s;e++){const r=TAU*e/s,a=vec3.add(vec3.create(),vec3.scale(d,t,cos(r)),vec3.scale(n,v,sin(r)));if(e>0){let e,r;for(let s=0;s<=i;s++){const t=TAU/4*s/i,v=cos(t),m=sin(t);if(s>0){let t,h=[];t=vec3.subtract(vec3.create(),vec3.scale(d,l,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),t=vec3.subtract(vec3.create(),vec3.scale(d,a,e),vec3.scale(n,o,r)),h.push(vec3.add(t,t,c)),s{let{radius:r,frequency:t}=Object.assign({},{radius:1,frequency:6},e);if(!isGTE(r,0))throw new Error("radius must be positive");if(!isGTE(t,6))throw new Error("frequency must be six or more");if(0===r)return geom3.create();t=Math.floor(t/6);const o=[[.850651,0,-.525731],[.850651,-0,.525731],[-.850651,-0,.525731],[-.850651,0,-.525731],[0,-.525731,.850651],[0,.525731,.850651],[0,.525731,-.850651],[0,-.525731,-.850651],[-.525731,-.850651,-0],[.525731,-.850651,-0],[.525731,.850651,0],[-.525731,.850651,0]],s=[[0,9,1],[1,10,0],[6,7,0],[10,6,0],[7,9,0],[5,1,4],[4,1,9],[5,10,1],[2,8,3],[3,11,2],[2,5,4],[4,8,2],[2,11,5],[3,7,6],[6,11,3],[8,7,3],[9,8,4],[11,10,5],[10,11,6],[8,9,7]],n=(e,r,t)=>{const o=e[0],s=e[1],n=e[2];let c=t;const f=[],l=[];for(let e=0;e{const o=1-t,s=[];for(let n=0;n<3;n++)s[n]=e[n]*o+r[n]*t;return s};let c=[],f=[],l=0;for(let e=0;e{if(!Array.isArray(r))throw new Error("points must be an array");return path2.fromPoints({},r)};module.exports=line; -},{"../geometries/path2":181}],499:[function(require,module,exports){ -const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"==e&&(c=geom2.reverse(c)),c};module.exports=polygon; +},{"../geometries/path2":182}],500:[function(require,module,exports){ +const geom2=require("../geometries/geom2"),polygon=r=>{const{points:o,paths:t,orientation:e}=Object.assign({},{points:[],paths:[],orientation:"counterclockwise"},r);if(!Array.isArray(o)||!Array.isArray(t))throw new Error("points and paths must be arrays");let s=o;Array.isArray(o[0])&&(Array.isArray(o[0][0])||(s=[o])),s.forEach((r,o)=>{if(!Array.isArray(r))throw new Error("list of points "+o+" must be an array");if(r.length<3)throw new Error("list of points "+o+" must contain three or more points");r.forEach((r,t)=>{if(!Array.isArray(r))throw new Error("list of points "+o+", point "+t+" must be an array");if(r.length<2)throw new Error("list of points "+o+", point "+t+" must contain by X and Y values")})});let a=t;if(0===t.length){let r=0;a=s.map(o=>o.map(o=>r++))}const n=[];s.forEach(r=>r.forEach(r=>n.push(r)));let i=[];a.forEach(r=>{const o=r.map(r=>n[r]),t=geom2.fromPoints(o);i=i.concat(geom2.toSides(t))});let c=geom2.create(i);return"clockwise"===e&&(c=geom2.reverse(c)),c};module.exports=polygon; -},{"../geometries/geom2":144}],500:[function(require,module,exports){ +},{"../geometries/geom2":145}],501:[function(require,module,exports){ const geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{isNumberArray:isNumberArray}=require("./commonChecks"),polyhedron=r=>{const e={points:[],faces:[],colors:void 0,orientation:"outward"},{points:o,faces:a,colors:t,orientation:n}=Object.assign({},e,r);if(!Array.isArray(o)||!Array.isArray(a))throw new Error("points and faces must be arrays");if(o.length<3)throw new Error("three or more points are required");if(a.length<1)throw new Error("one or more faces are required");if(t){if(!Array.isArray(t))throw new Error("colors must be an array");if(t.length!==a.length)throw new Error("faces and colors must have the same length")}o.forEach((r,e)=>{if(!isNumberArray(r,3))throw new Error(`point ${e} must be an array of X, Y, Z values`)}),a.forEach((r,e)=>{if(r.length<3)throw new Error(`face ${e} must contain 3 or more indexes`);if(!isNumberArray(r,r.length))throw new Error(`face ${e} must be an array of numbers`)}),"outward"!==n&&a.forEach(r=>r.reverse());const s=a.map((r,e)=>{const a=poly3.create(r.map(r=>o[r]));return t&&t[e]&&(a.color=t[e]),a});return geom3.create(s)};module.exports=polyhedron; -},{"../geometries/geom3":160,"../geometries/poly3":198,"./commonChecks":489}],501:[function(require,module,exports){ +},{"../geometries/geom3":161,"../geometries/poly3":199,"./commonChecks":490}],502:[function(require,module,exports){ const vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),rectangle=e=>{const{center:r,size:t}=Object.assign({},{center:[0,0],size:[2,2]},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(0===t[0]||0===t[1])return geom2.create();const a=[t[0]/2,t[1]/2],c=[a[0],-a[1]],s=[vec2.subtract(vec2.create(),r,a),vec2.add(vec2.create(),r,c),vec2.add(vec2.create(),r,a),vec2.subtract(vec2.create(),r,c)];return geom2.fromPoints(s)};module.exports=rectangle; -},{"../geometries/geom2":144,"../maths/vec2":310,"./commonChecks":489}],502:[function(require,module,exports){ +},{"../geometries/geom2":145,"../maths/vec2":311,"./commonChecks":490}],503:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cuboid=require("./cuboid"),createCorners=(e,r,t,s,c,o)=>{const a=TAU/4*c/s,n=cos(a),i=sin(a),u=s-c;let l=t*n,h=r[2]-(t-t*i);o||(h=t-t*i-r[2]),l=l>EPS?l:0;const d=vec3.add(vec3.create(),e,[r[0]-t,r[1]-t,h]),v=vec3.add(vec3.create(),e,[t-r[0],r[1]-t,h]),m=vec3.add(vec3.create(),e,[t-r[0],t-r[1],h]),p=vec3.add(vec3.create(),e,[r[0]-t,t-r[1],h]),f=[],g=[],E=[],b=[];for(let e=0;e<=u;e++){const r=u>0?TAU/4*e/u:0,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,l);const s=vec3.fromVec2(vec3.create(),t);f.push(vec3.add(vec3.create(),d,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),g.push(vec3.add(vec3.create(),v,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),E.push(vec3.add(vec3.create(),m,s)),vec3.rotateZ(s,s,[0,0,0],TAU/4),b.push(vec3.add(vec3.create(),p,s))}return o?[f,g,E,b]:(f.reverse(),g.reverse(),E.reverse(),b.reverse(),[b,E,g,f])},stitchCorners=(e,r)=>{const t=[];for(let s=0;s{const t=[];for(let s=0;s{e=(e=[e[3],e[2],e[1],e[0]]).map(e=>e.slice().reverse());const t=[];e.forEach(e=>{e.forEach(e=>t.push(e))});const s=[];r.forEach(e=>{e.forEach(e=>s.push(e))});const c=[];for(let e=0;e{let{center:r,size:t,roundRadius:s,segments:c}=Object.assign({},{center:[0,0,0],size:[2,2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,3))throw new Error("center must be an array of X, Y and Z values");if(!isNumberArray(t,3))throw new Error("size must be an array of X, Y and Z values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(!isGTE(s,0))throw new Error("roundRadius must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");if(0===t[0]||0===t[1]||0===t[2])return geom3.create();if(0===s)return cuboid({center:r,size:t});if(s>(t=t.map(e=>e/2))[0]-EPS||s>t[1]-EPS||s>t[2]-EPS)throw new Error("roundRadius must be smaller than the radius of all dimensions");c=Math.floor(c/4);let o=null,a=null,n=[];for(let e=0;e<=c;e++){const i=createCorners(r,t,s,c,e,!0),u=createCorners(r,t,s,c,e,!1);if(0===e&&(n=n.concat(stitchSides(u,i))),o&&(n=n.concat(stitchCorners(o,i),stitchWalls(o,i))),a&&(n=n.concat(stitchCorners(a,u),stitchWalls(a,u))),e===c){let e=i.map(e=>e[0]);n.push(poly3.create(e)),e=u.map(e=>e[0]),n.push(poly3.create(e))}o=i,a=u}return geom3.create(n)};module.exports=roundedCuboid; -},{"../geometries/geom3":160,"../geometries/poly3":198,"../maths/constants":213,"../maths/utils/trigonometry":292,"../maths/vec2":310,"../maths/vec3":341,"./commonChecks":489,"./cuboid":491}],503:[function(require,module,exports){ +},{"../geometries/geom3":161,"../geometries/poly3":199,"../maths/constants":214,"../maths/utils/trigonometry":293,"../maths/vec2":311,"../maths/vec3":342,"./commonChecks":490,"./cuboid":492}],504:[function(require,module,exports){ const{EPS:EPS,TAU:TAU}=require("../maths/constants"),vec3=require("../maths/vec3"),geom3=require("../geometries/geom3"),poly3=require("../geometries/poly3"),{sin:sin,cos:cos}=require("../maths/utils/trigonometry"),{isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),cylinder=require("./cylinder"),roundedCylinder=e=>{const{center:c,height:r,radius:s,roundRadius:a,segments:t}=Object.assign({},{center:[0,0,0],height:2,radius:1,roundRadius:.2,segments:32},e);if(!isNumberArray(c,3))throw new Error("center must be an array of X, Y and Z values");if(!isGTE(r,0))throw new Error("height must be positive");if(!isGTE(s,0))throw new Error("radius must be positive");if(!isGTE(a,0))throw new Error("roundRadius must be positive");if(a>s)throw new Error("roundRadius must be smaller than the radius");if(!isGTE(t,4))throw new Error("segments must be four or more");if(0===r||0===s)return geom3.create();if(0===a)return cylinder({center:c,height:r,radius:s});const v=[0,0,-r/2],o=[0,0,r/2],i=vec3.subtract(vec3.create(),o,v);if(2*a>vec3.length(i)-EPS)throw new Error("height must be larger than twice roundRadius");let u;u=Math.abs(i[0])>Math.abs(i[1])?vec3.fromValues(0,1,0):vec3.fromValues(1,0,0);const d=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),i),a),n=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),d,u)),s),l=vec3.scale(vec3.create(),vec3.normalize(vec3.create(),vec3.cross(vec3.create(),n,d)),s);vec3.add(v,v,d),vec3.subtract(o,o,d);const h=Math.floor(.25*t),m=e=>{const r=e.map(e=>vec3.add(e,e,c));return poly3.create(r)},p=[],b=vec3.create(),f=vec3.create();let g;for(let e=0;e<=t;e++){const c=TAU*e/t,r=vec3.add(vec3.create(),vec3.scale(b,n,cos(c)),vec3.scale(f,l,sin(c)));if(e>0){let e,c,s=[];s.push(vec3.add(vec3.create(),v,r)),s.push(vec3.add(vec3.create(),v,g)),s.push(vec3.add(vec3.create(),o,g)),s.push(vec3.add(vec3.create(),o,r)),p.push(m(s));for(let a=0;a<=h;a++){const t=TAU/4*a/h,i=cos(t),u=sin(t);if(a>0){let t;s=[],t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,g,e),vec3.scale(f,d,c))),s.push(t),t=vec3.add(vec3.create(),v,vec3.subtract(b,vec3.scale(b,r,e),vec3.scale(f,d,c))),s.push(t),a{let{center:r,size:t,roundRadius:a,segments:c}=Object.assign({},{center:[0,0],size:[2,2],roundRadius:.2,segments:32},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isNumberArray(t,2))throw new Error("size must be an array of X and Y values");if(!t.every(e=>e>=0))throw new Error("size values must be positive");if(!isGTE(a,0))throw new Error("roundRadius must be positive");if(!isGTE(c,4))throw new Error("segments must be four or more");if(0===t[0]||0===t[1])return geom2.create();if(0===a)return rectangle({center:r,size:t});if(a>(t=t.map(e=>e/2))[0]-EPS||a>t[1]-EPS)throw new Error("roundRadius must be smaller than the radius of all dimensions");const s=Math.floor(c/4),o=vec2.add(vec2.create(),r,[t[0]-a,t[1]-a]),n=vec2.add(vec2.create(),r,[a-t[0],t[1]-a]),i=vec2.add(vec2.create(),r,[a-t[0],a-t[1]]),u=vec2.add(vec2.create(),r,[t[0]-a,a-t[1]]),d=[],v=[],m=[],l=[];for(let e=0;e<=s;e++){const r=TAU/4*e/s,t=vec2.fromAngleRadians(vec2.create(),r);vec2.scale(t,t,a),d.push(vec2.add(vec2.create(),o,t)),vec2.rotate(t,t,vec2.create(),TAU/4),v.push(vec2.add(vec2.create(),n,t)),vec2.rotate(t,t,vec2.create(),TAU/4),m.push(vec2.add(vec2.create(),i,t)),vec2.rotate(t,t,vec2.create(),TAU/4),l.push(vec2.add(vec2.create(),u,t))}return geom2.fromPoints(d.concat(v,m,l))};module.exports=roundedRectangle; -},{"../geometries/geom2":144,"../maths/constants":213,"../maths/vec2":310,"./commonChecks":489,"./rectangle":501}],505:[function(require,module,exports){ +},{"../geometries/geom2":145,"../maths/constants":214,"../maths/vec2":311,"./commonChecks":490,"./rectangle":502}],506:[function(require,module,exports){ const ellipsoid=require("./ellipsoid"),{isGTE:isGTE}=require("./commonChecks"),sphere=e=>{let{center:s,radius:r,segments:i,axes:t}=Object.assign({},{center:[0,0,0],radius:1,segments:32,axes:[[1,0,0],[0,-1,0],[0,0,1]]},e);if(!isGTE(r,0))throw new Error("radius must be positive");return ellipsoid({center:s,radius:r=[r,r,r],segments:i,axes:t})};module.exports=sphere; -},{"./commonChecks":489,"./ellipsoid":495}],506:[function(require,module,exports){ +},{"./commonChecks":490,"./ellipsoid":496}],507:[function(require,module,exports){ const rectangle=require("./rectangle"),{isGTE:isGTE}=require("./commonChecks"),square=e=>{let{center:r,size:s}=Object.assign({},{center:[0,0],size:2},e);if(!isGTE(s,0))throw new Error("size must be positive");return rectangle({center:r,size:s=[s,s]})};module.exports=square; -},{"./commonChecks":489,"./rectangle":501}],507:[function(require,module,exports){ +},{"./commonChecks":490,"./rectangle":502}],508:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isGT:isGT,isGTE:isGTE,isNumberArray:isNumberArray}=require("./commonChecks"),getRadiusRatio=(e,r)=>e>0&&r>1&&r{const o=TAU/e,i=[];for(let a=0;a{let{center:r,vertices:t,outerRadius:s,innerRadius:o,density:i,startAngle:a}=Object.assign({},{center:[0,0],vertices:5,outerRadius:1,innerRadius:0,density:2,startAngle:0},e);if(!isNumberArray(r,2))throw new Error("center must be an array of X and Y values");if(!isGTE(t,2))throw new Error("vertices must be two or more");if(!isGT(s,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(o,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(a,0))throw new Error("startAngle must be greater than zero");if(t=Math.floor(t),i=Math.floor(i),a%=TAU,0===o){if(!isGTE(i,2))throw new Error("density must be two or more");o=s*getRadiusRatio(t,i)}const n=vec2.clone(r),u=getPoints(t,s,a,n),c=getPoints(t,o,a+Math.PI/t,n),h=[];for(let e=0;e{const r={innerRadius:1,innerSegments:32,outerRadius:4,outerSegments:32,innerRotation:0,startAngle:0,outerRotation:TAU},{innerRadius:t,innerSegments:o,outerRadius:n,outerSegments:s,innerRotation:i,startAngle:a,outerRotation:u}=Object.assign({},r,e);if(!isGT(t,0))throw new Error("innerRadius must be greater than zero");if(!isGTE(o,3))throw new Error("innerSegments must be three or more");if(!isGT(n,0))throw new Error("outerRadius must be greater than zero");if(!isGTE(s,3))throw new Error("outerSegments must be three or more");if(!isGTE(a,0))throw new Error("startAngle must be positive");if(!isGT(u,0))throw new Error("outerRotation must be greater than zero");if(t>=n)throw new Error("inner circle is two large to rotate about the outer circle");let m=circle({radius:t,segments:o});return 0!==i&&(m=rotate([0,0,i],m)),m=translate([n,0],m),extrudeRotate({startAngle:a,angle:u,segments:s},m)};module.exports=torus; -},{"../maths/constants":213,"../operations/extrusions/extrudeRotate":435,"../operations/transforms/rotate":483,"../operations/transforms/translate":486,"./circle":488,"./commonChecks":489}],509:[function(require,module,exports){ +},{"../maths/constants":214,"../operations/extrusions/extrudeRotate":436,"../operations/transforms/rotate":484,"../operations/transforms/translate":487,"./circle":489,"./commonChecks":490}],510:[function(require,module,exports){ const{NEPS:NEPS}=require("../maths/constants"),vec2=require("../maths/vec2"),geom2=require("../geometries/geom2"),{isNumberArray:isNumberArray}=require("./commonChecks"),solveAngleFromSSS=(e,r,t)=>Math.acos((e*e+r*r-t*t)/(2*e*r)),solveSideFromSAS=(e,r,t)=>r>NEPS?Math.sqrt(e*e+t*t-2*e*t*Math.cos(r)):Math.sqrt((e-t)*(e-t)+e*t*r*r*(1-r*r/12)),solveAAA=e=>{if(Math.abs(e[0]+e[1]+e[2]-Math.PI)>NEPS)throw new Error("AAA triangles require angles that sum to PI");const r=e[0],t=e[1],s=Math.PI-r-t,a=1/Math.sin(s)*Math.sin(r),n=1/Math.sin(s)*Math.sin(t);return createTriangle(r,t,s,a,n,1)},solveAAS=e=>{const r=e[0],t=e[1],s=Math.PI+NEPS-r-t;if(s{const r=e[0],t=e[2],s=Math.PI+NEPS-r-t;if(s{const r=e[0],t=e[1],s=e[2],a=solveSideFromSAS(r,t,s),n=solveAngleFromSSS(a,r,s),o=Math.PI-n-t;return createTriangle(n,t,o,s,a,r)},solveSSA=e=>{const r=e[0],t=e[1],s=e[2],a=Math.asin(t*Math.sin(s)/r),n=Math.PI-a-s,o=r/Math.sin(s)*Math.sin(n);return createTriangle(a,n,s,t,o,r)},solveSSS=e=>{const r=e[1],t=e[2],s=e[0];if(r+t<=s||t+s<=r||s+r<=t)throw new Error("SSS triangle is incorrect, as the longest side is longer than the sum of the other sides");const a=solveAngleFromSSS(t,s,r),n=solveAngleFromSSS(s,r,t),o=Math.PI-a-n;return createTriangle(a,n,o,r,t,s)},createTriangle=(e,r,t,s,a,n)=>{const o=vec2.fromValues(0,0),i=vec2.fromValues(n,0),S=vec2.fromValues(s,0);return vec2.add(S,vec2.rotate(S,S,[0,0],Math.PI-r),i),geom2.fromPoints([o,i,S])},triangle=e=>{let{type:r,values:t}=Object.assign({},{type:"SSS",values:[1,1,1]},e);if("string"!=typeof r)throw new Error("triangle type must be a string");if("A"!==(r=r.toUpperCase())[0]&&"S"!==r[0]||"A"!==r[1]&&"S"!==r[1]||"A"!==r[2]&&"S"!==r[2])throw new Error("triangle type must contain three letters; A or S");if(!isNumberArray(t,3))throw new Error("triangle values must contain three values");if(!t.every(e=>e>0))throw new Error("triangle values must be greater than zero");switch(r){case"AAA":return solveAAA(t);case"AAS":return solveAAS(t);case"ASA":return solveASA(t);case"SAS":return solveSAS(t);case"SSA":return solveSSA(t);case"SSS":return solveSSS(t);default:throw new Error("invalid triangle type, try again")}};module.exports=triangle; -},{"../geometries/geom2":144,"../maths/constants":213,"../maths/vec2":310,"./commonChecks":489}],510:[function(require,module,exports){ +},{"../geometries/geom2":145,"../maths/constants":214,"../maths/vec2":311,"./commonChecks":490}],511:[function(require,module,exports){ module.exports={height:14,32:[16],33:[10,5,21,5,7,void 0,5,2,4,1,5,0,6,1,5,2],34:[16,4,21,4,14,void 0,12,21,12,14],35:[21,11,25,4,-7,void 0,17,25,10,-7,void 0,4,12,18,12,void 0,3,6,17,6],36:[20,8,25,8,-4,void 0,12,25,12,-4,void 0,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],37:[24,21,21,3,0,void 0,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,void 0,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7],38:[26,23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2],39:[10,5,19,4,20,5,21,6,20,6,18,5,16,4,15],40:[14,11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7],41:[14,3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7],42:[16,8,21,8,9,void 0,3,18,13,12,void 0,13,18,3,12],43:[26,13,18,13,0,void 0,4,9,22,9],44:[10,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],45:[26,4,9,22,9],46:[10,5,2,4,1,5,0,6,1,5,2],47:[22,20,25,2,-7],48:[20,9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21],49:[20,6,17,8,18,11,21,11,0],50:[20,4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0],51:[20,5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],52:[20,13,21,3,7,18,7,void 0,13,21,13,0],53:[20,15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4],54:[20,16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7],55:[20,17,21,7,0,void 0,3,21,17,21],56:[20,8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21],57:[20,16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3],58:[10,5,14,4,13,5,12,6,13,5,14,void 0,5,2,4,1,5,0,6,1,5,2],59:[10,5,14,4,13,5,12,6,13,5,14,void 0,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4],60:[24,20,18,4,9,20,0],61:[26,4,12,22,12,void 0,4,6,22,6],62:[24,4,18,20,9,4,0],63:[18,3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,void 0,9,2,8,1,9,0,10,1,9,2],64:[27,18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,void 0,12,16,10,14,9,11,9,8,10,6,11,5,void 0,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,void 0,19,16,18,8,18,6,19,5],65:[18,9,21,1,0,void 0,9,21,17,0,void 0,4,7,14,7],66:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,void 0,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0],67:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5],68:[21,4,21,4,0,void 0,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0],69:[19,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11,void 0,4,0,17,0],70:[18,4,21,4,0,void 0,4,21,17,21,void 0,4,11,12,11],71:[21,18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,void 0,13,8,18,8],72:[22,4,21,4,0,void 0,18,21,18,0,void 0,4,11,18,11],73:[8,4,21,4,0],74:[16,12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7],75:[21,4,21,4,0,void 0,18,21,4,7,void 0,9,12,18,0],76:[17,4,21,4,0,void 0,4,0,16,0],77:[24,4,21,4,0,void 0,4,21,12,0,void 0,20,21,12,0,void 0,20,21,20,0],78:[22,4,21,4,0,void 0,4,21,18,0,void 0,18,21,18,0],79:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21],80:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10],81:[22,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,void 0,12,4,18,-2],82:[21,4,21,4,0,void 0,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,void 0,11,11,18,0],83:[20,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3],84:[16,8,21,8,0,void 0,1,21,15,21],85:[22,4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21],86:[18,1,21,9,0,void 0,17,21,9,0],87:[24,2,21,7,0,void 0,12,21,7,0,void 0,12,21,17,0,void 0,22,21,17,0],88:[20,3,21,17,0,void 0,17,21,3,0],89:[18,1,21,9,11,9,0,void 0,17,21,9,11],90:[20,17,21,3,0,void 0,3,21,17,21,void 0,3,0,17,0],91:[14,4,25,4,-7,void 0,5,25,5,-7,void 0,4,25,11,25,void 0,4,-7,11,-7],92:[14,0,21,14,-3],93:[14,9,25,9,-7,void 0,10,25,10,-7,void 0,3,25,10,25,void 0,3,-7,10,-7],94:[16,6,15,8,18,10,15,void 0,3,12,8,17,13,12,void 0,8,17,8,0],95:[16,0,-2,16,-2],96:[10,6,21,5,20,4,18,4,16,5,15,6,16,5,17],97:[19,15,14,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],98:[19,4,21,4,0,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],99:[18,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],100:[19,15,21,15,0,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],101:[18,3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],102:[12,10,21,8,21,6,20,5,17,5,0,void 0,2,14,9,14],103:[19,15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],104:[19,4,21,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],105:[8,3,21,4,20,5,21,4,22,3,21,void 0,4,14,4,0],106:[10,5,21,6,20,7,21,6,22,5,21,void 0,6,14,6,-3,5,-6,3,-7,1,-7],107:[17,4,21,4,0,void 0,14,14,4,4,void 0,8,8,15,0],108:[8,4,21,4,0],109:[30,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0,void 0,15,10,18,13,20,14,23,14,25,13,26,10,26,0],110:[19,4,14,4,0,void 0,4,10,7,13,9,14,12,14,14,13,15,10,15,0],111:[19,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14],112:[19,4,14,4,-7,void 0,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3],113:[19,15,14,15,-7,void 0,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3],114:[13,4,14,4,0,void 0,4,8,5,11,7,13,9,14,12,14],115:[17,14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3],116:[12,5,21,5,4,6,1,8,0,10,0,void 0,2,14,9,14],117:[19,4,14,4,4,5,1,7,0,10,0,12,1,15,4,void 0,15,14,15,0],118:[16,2,14,8,0,void 0,14,14,8,0],119:[22,3,14,7,0,void 0,11,14,7,0,void 0,11,14,15,0,void 0,19,14,15,0],120:[17,3,14,14,0,void 0,14,14,3,0],121:[16,2,14,8,0,void 0,14,14,8,0,6,-4,4,-6,2,-7,1,-7],122:[17,14,14,3,0,void 0,3,14,14,14,void 0,3,0,14,0],123:[14,9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,void 0,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,void 0,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7],124:[8,4,25,4,-7],125:[14,5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,void 0,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,void 0,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7],126:[24,3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,void 0,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]}; -},{}],511:[function(require,module,exports){ +},{}],512:[function(require,module,exports){ module.exports={vectorChar:require("./vectorChar"),vectorText:require("./vectorText")}; -},{"./vectorChar":512,"./vectorText":514}],512:[function(require,module,exports){ +},{"./vectorChar":513,"./vectorText":515}],513:[function(require,module,exports){ const vectorParams=require("./vectorParams"),vectorChar=(t,e)=>{const{xOffset:r,yOffset:s,input:h,font:o,height:c,extrudeOffset:n}=vectorParams(t,e);let a=h.charCodeAt(0);a&&o[a]||(a=63);const f=[].concat(o[a]),i=(c-n)/o.height,u=n/2,g=f.shift()*i,l=[];let v=[];for(let t=0,e=f.length;t{e||"string"!=typeof t||(t={input:t}),t=t||{};const s=Object.assign({},defaultsVectorParams,t);return s.input=e||s.input,s};module.exports=vectorParams; -},{"./fonts/single-line/hershey/simplex.js":510}],514:[function(require,module,exports){ +},{"./fonts/single-line/hershey/simplex.js":511}],515:[function(require,module,exports){ const vectorChar=require("./vectorChar"),vectorParams=require("./vectorParams"),translateLine=(t,e)=>{const{x:n,y:s}=Object.assign({x:0,y:0},t||{}),r=e.segments;let h=null,a=null;for(let t=0,e=r.length;t{const{xOffset:n,yOffset:s,input:r,font:h,height:a,align:o,extrudeOffset:i,lineSpacing:c,letterSpacing:g}=vectorParams(t,e);let l,f,m,x,u,d,[v,w]=[n,s],O={width:0,segments:[]};const p=[];let y=[],C=0;const L=v,P=()=>{p.push(O),C=Math.max(C,O.width),O={width:0,segments:[]}};for(l=0,f=r.length;lO.width&&(d=C-O.width,"right"===o?O=translateLine({x:d},O):"center"===o&&(O=translateLine({x:d/2},O))),y=y.concat(O.segments);return y};module.exports=vectorText; -},{"./vectorChar":512,"./vectorParams":513}],515:[function(require,module,exports){ +},{"./vectorChar":513,"./vectorParams":514}],516:[function(require,module,exports){ const geom2=require("../geometries/geom2"),geom3=require("../geometries/geom3"),path2=require("../geometries/path2"),areAllShapesTheSameType=e=>{let r;for(const o of e){let e=0;if(geom2.isA(o)&&(e=1),geom3.isA(o)&&(e=2),path2.isA(o)&&(e=3),r&&e!==r)return!1;r=e}return!0};module.exports=areAllShapesTheSameType; -},{"../geometries/geom2":144,"../geometries/geom3":160,"../geometries/path2":181}],516:[function(require,module,exports){ +},{"../geometries/geom2":145,"../geometries/geom3":161,"../geometries/path2":182}],517:[function(require,module,exports){ const degToRad=d=>.017453292519943295*d;module.exports=degToRad; -},{}],517:[function(require,module,exports){ +},{}],518:[function(require,module,exports){ const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten; -},{}],518:[function(require,module,exports){ +},{}],519:[function(require,module,exports){ const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort; -},{}],519:[function(require,module,exports){ +},{}],520:[function(require,module,exports){ module.exports={areAllShapesTheSameType:require("./areAllShapesTheSameType"),degToRad:require("./degToRad"),flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),insertSorted:require("./insertSorted"),radiusToSegments:require("./radiusToSegments"),radToDeg:require("./radToDeg")}; -},{"./areAllShapesTheSameType":515,"./degToRad":516,"./flatten":517,"./fnNumberSort":518,"./insertSorted":520,"./radToDeg":522,"./radiusToSegments":523}],520:[function(require,module,exports){ +},{"./areAllShapesTheSameType":516,"./degToRad":517,"./flatten":518,"./fnNumberSort":519,"./insertSorted":521,"./radToDeg":523,"./radiusToSegments":524}],521:[function(require,module,exports){ const insertSorted=(t,e,o)=>{let r=0,s=t.length;for(;s>r;){const l=Math.floor((r+s)/2);o(e,t[l])>0?r=l+1:s=l}t.splice(r,0,e)};module.exports=insertSorted; -},{}],521:[function(require,module,exports){ +},{}],522:[function(require,module,exports){ const padArrayToLength=(r,e,o)=>{for(r=r.slice();r.length57.29577951308232*o;module.exports=radToDeg; -},{}],523:[function(require,module,exports){ +},{}],524:[function(require,module,exports){ const{TAU:TAU}=require("../maths/constants"),radiusToSegments=(t,e,s)=>{const a=e>0?t*TAU/e:0,n=s>0?TAU/s:0;return Math.ceil(Math.max(a,n,4))};module.exports=radiusToSegments; -},{"../maths/constants":213}],524:[function(require,module,exports){ +},{"../maths/constants":214}],525:[function(require,module,exports){ const flatten=t=>t.reduce((t,a)=>Array.isArray(a)?t.concat(flatten(a)):t.concat(a),[]);module.exports=flatten; -},{}],525:[function(require,module,exports){ +},{}],526:[function(require,module,exports){ const fnNumberSort=(o,r)=>o-r;module.exports=fnNumberSort; -},{}],526:[function(require,module,exports){ +},{}],527:[function(require,module,exports){ const head=r=>{if(Array.isArray(r)&&0!==r.length)return r[0]};module.exports=head; -},{}],527:[function(require,module,exports){ +},{}],528:[function(require,module,exports){ module.exports={flatten:require("./flatten"),fnNumberSort:require("./fnNumberSort"),head:require("./head"),insertSorted:require("./insertSorted"),nth:require("./nth"),padToLength:require("./padToLength"),toArray:require("./toArray")}; -},{"./flatten":524,"./fnNumberSort":525,"./head":526,"./insertSorted":528,"./nth":529,"./padToLength":530,"./toArray":531}],528:[function(require,module,exports){ +},{"./flatten":525,"./fnNumberSort":526,"./head":527,"./insertSorted":529,"./nth":530,"./padToLength":531,"./toArray":532}],529:[function(require,module,exports){ const insertSorted=(t,e,o)=>{let r=0,n=t.length;for(;n>r;){const s=Math.floor((r+n)/2);o(e,t[s])>0?r=s+1:n=s}return t.splice(r,0,e),t};module.exports=insertSorted; -},{}],529:[function(require,module,exports){ +},{}],530:[function(require,module,exports){ const nth=(r,t)=>{if(Array.isArray(r)&&!(r.length{for(e=e.slice();e.lengthArray.isArray(r)?r:null==r?[]:[r];module.exports=toArray; -},{}],532:[function(require,module,exports){ +},{}],533:[function(require,module,exports){ var transform=require("./lib/projectMat4");function unproject(r,t,e,o){var n=e[0],u=e[1],a=e[2],c=e[3],p=t[0],f=t[1],i=t[2];return p-=n,f=c-f-1,f-=u,r[0]=2*p/a-1,r[1]=2*f/c-1,r[2]=2*i-1,transform(r,r,o)}module.exports=unproject; -},{"./lib/projectMat4":533}],533:[function(require,module,exports){ +},{"./lib/projectMat4":534}],534:[function(require,module,exports){ function project(r,e,o){var t=e[0],c=e[1],n=e[2],p=o[0],u=o[1],j=o[2],a=o[3],d=o[4],f=o[5],i=o[6],l=o[7],m=o[8],s=o[9],v=o[10],x=o[11],b=o[12],g=o[13],h=o[14],k=1/(t*a+c*l+n*x+o[15]);return r[0]=(t*p+c*d+n*m+b)*k,r[1]=(t*u+c*f+n*s+g)*k,r[2]=(t*j+c*i+n*v+h)*k,r}module.exports=project; -},{}],534:[function(require,module,exports){ +},{}],535:[function(require,module,exports){ function adjoint(n,o){var t=o[0],r=o[1],a=o[2],d=o[3],e=o[4],i=o[5],u=o[6],j=o[7],c=o[8],f=o[9],l=o[10],m=o[11],p=o[12],s=o[13],v=o[14],x=o[15];return n[0]=i*(l*x-m*v)-f*(u*x-j*v)+s*(u*m-j*l),n[1]=-(r*(l*x-m*v)-f*(a*x-d*v)+s*(a*m-d*l)),n[2]=r*(u*x-j*v)-i*(a*x-d*v)+s*(a*j-d*u),n[3]=-(r*(u*m-j*l)-i*(a*m-d*l)+f*(a*j-d*u)),n[4]=-(e*(l*x-m*v)-c*(u*x-j*v)+p*(u*m-j*l)),n[5]=t*(l*x-m*v)-c*(a*x-d*v)+p*(a*m-d*l),n[6]=-(t*(u*x-j*v)-e*(a*x-d*v)+p*(a*j-d*u)),n[7]=t*(u*m-j*l)-e*(a*m-d*l)+c*(a*j-d*u),n[8]=e*(f*x-m*s)-c*(i*x-j*s)+p*(i*m-j*f),n[9]=-(t*(f*x-m*s)-c*(r*x-d*s)+p*(r*m-d*f)),n[10]=t*(i*x-j*s)-e*(r*x-d*s)+p*(r*j-d*i),n[11]=-(t*(i*m-j*f)-e*(r*m-d*f)+c*(r*j-d*i)),n[12]=-(e*(f*v-l*s)-c*(i*v-u*s)+p*(i*l-u*f)),n[13]=t*(f*v-l*s)-c*(r*v-a*s)+p*(r*l-a*f),n[14]=-(t*(i*v-u*s)-e*(r*v-a*s)+p*(r*u-a*i)),n[15]=t*(i*l-u*f)-e*(r*l-a*f)+c*(r*u-a*i),n}module.exports=adjoint; -},{}],535:[function(require,module,exports){ +},{}],536:[function(require,module,exports){ function clone(e){var n=new Float32Array(16);return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n}module.exports=clone; -},{}],536:[function(require,module,exports){ +},{}],537:[function(require,module,exports){ function copy(o,c){return o[0]=c[0],o[1]=c[1],o[2]=c[2],o[3]=c[3],o[4]=c[4],o[5]=c[5],o[6]=c[6],o[7]=c[7],o[8]=c[8],o[9]=c[9],o[10]=c[10],o[11]=c[11],o[12]=c[12],o[13]=c[13],o[14]=c[14],o[15]=c[15],o}module.exports=copy; -},{}],537:[function(require,module,exports){ +},{}],538:[function(require,module,exports){ function create(){var e=new Float32Array(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e}module.exports=create; -},{}],538:[function(require,module,exports){ +},{}],539:[function(require,module,exports){ function determinant(e){var n=e[0],t=e[1],r=e[2],a=e[3],d=e[4],i=e[5],m=e[6],o=e[7],u=e[8],c=e[9],f=e[10],l=e[11],p=e[12],s=e[13],v=e[14],x=e[15];return(n*i-t*d)*(f*x-l*v)-(n*m-r*d)*(c*x-l*s)+(n*o-a*d)*(c*v-f*s)+(t*m-r*i)*(u*x-l*p)-(t*o-a*i)*(u*v-f*p)+(r*o-a*m)*(u*s-c*p)}module.exports=determinant; -},{}],539:[function(require,module,exports){ +},{}],540:[function(require,module,exports){ function fromQuat(r,o){var t=o[0],u=o[1],a=o[2],e=o[3],f=t+t,m=u+u,n=a+a,Q=t*f,c=u*f,d=u*m,i=a*f,l=a*m,p=a*n,s=e*f,v=e*m,x=e*n;return r[0]=1-d-p,r[1]=c+x,r[2]=i-v,r[3]=0,r[4]=c-x,r[5]=1-Q-p,r[6]=l+s,r[7]=0,r[8]=i+v,r[9]=l-s,r[10]=1-Q-d,r[11]=0,r[12]=0,r[13]=0,r[14]=0,r[15]=1,r}module.exports=fromQuat; -},{}],540:[function(require,module,exports){ +},{}],541:[function(require,module,exports){ function fromRotation(t,o,a){var n,r,s,e=a[0],h=a[1],i=a[2],u=Math.sqrt(e*e+h*h+i*i);return Math.abs(u)<1e-6?null:(e*=u=1/u,h*=u,i*=u,n=Math.sin(o),s=1-(r=Math.cos(o)),t[0]=e*e*s+r,t[1]=h*e*s+i*n,t[2]=i*e*s-h*n,t[3]=0,t[4]=e*h*s-i*n,t[5]=h*h*s+r,t[6]=i*h*s+e*n,t[7]=0,t[8]=e*i*s+h*n,t[9]=h*i*s-e*n,t[10]=i*i*s+r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)}module.exports=fromRotation; -},{}],541:[function(require,module,exports){ +},{}],542:[function(require,module,exports){ function fromRotationTranslation(o,n,t){var r=n[0],a=n[1],i=n[2],e=n[3],f=r+r,l=a+a,m=i+i,s=r*f,u=r*l,R=r*m,T=a*l,c=a*m,d=i*m,p=e*f,v=e*l,x=e*m;return o[0]=1-(T+d),o[1]=u+x,o[2]=R-v,o[3]=0,o[4]=u-x,o[5]=1-(s+d),o[6]=c+p,o[7]=0,o[8]=R+v,o[9]=c-p,o[10]=1-(s+T),o[11]=0,o[12]=t[0],o[13]=t[1],o[14]=t[2],o[15]=1,o}module.exports=fromRotationTranslation; -},{}],542:[function(require,module,exports){ +},{}],543:[function(require,module,exports){ function fromScaling(n,o){return n[0]=o[0],n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=o[1],n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=o[2],n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,n}module.exports=fromScaling; -},{}],543:[function(require,module,exports){ +},{}],544:[function(require,module,exports){ function fromTranslation(n,o){return n[0]=1,n[1]=0,n[2]=0,n[3]=0,n[4]=0,n[5]=1,n[6]=0,n[7]=0,n[8]=0,n[9]=0,n[10]=1,n[11]=0,n[12]=o[0],n[13]=o[1],n[14]=o[2],n[15]=1,n}module.exports=fromTranslation; -},{}],544:[function(require,module,exports){ +},{}],545:[function(require,module,exports){ function fromXRotation(o,t){var n=Math.sin(t),r=Math.cos(t);return o[0]=1,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=r,o[6]=n,o[7]=0,o[8]=0,o[9]=-n,o[10]=r,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o}module.exports=fromXRotation; -},{}],545:[function(require,module,exports){ +},{}],546:[function(require,module,exports){ function fromYRotation(o,t){var n=Math.sin(t),r=Math.cos(t);return o[0]=r,o[1]=0,o[2]=-n,o[3]=0,o[4]=0,o[5]=1,o[6]=0,o[7]=0,o[8]=n,o[9]=0,o[10]=r,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o}module.exports=fromYRotation; -},{}],546:[function(require,module,exports){ +},{}],547:[function(require,module,exports){ function fromZRotation(o,t){var n=Math.sin(t),r=Math.cos(t);return o[0]=r,o[1]=n,o[2]=0,o[3]=0,o[4]=-n,o[5]=r,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=1,o[11]=0,o[12]=0,o[13]=0,o[14]=0,o[15]=1,o}module.exports=fromZRotation; -},{}],547:[function(require,module,exports){ +},{}],548:[function(require,module,exports){ function frustum(u,r,t,e,f,m,n){var o=1/(t-r),s=1/(f-e),a=1/(m-n);return u[0]=2*m*o,u[1]=0,u[2]=0,u[3]=0,u[4]=0,u[5]=2*m*s,u[6]=0,u[7]=0,u[8]=(t+r)*o,u[9]=(f+e)*s,u[10]=(n+m)*a,u[11]=-1,u[12]=0,u[13]=0,u[14]=n*m*2*a,u[15]=0,u}module.exports=frustum; -},{}],548:[function(require,module,exports){ +},{}],549:[function(require,module,exports){ function identity(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}module.exports=identity; -},{}],549:[function(require,module,exports){ +},{}],550:[function(require,module,exports){ module.exports={create:require("./create"),clone:require("./clone"),copy:require("./copy"),identity:require("./identity"),transpose:require("./transpose"),invert:require("./invert"),adjoint:require("./adjoint"),determinant:require("./determinant"),multiply:require("./multiply"),translate:require("./translate"),scale:require("./scale"),rotate:require("./rotate"),rotateX:require("./rotateX"),rotateY:require("./rotateY"),rotateZ:require("./rotateZ"),fromRotation:require("./fromRotation"),fromRotationTranslation:require("./fromRotationTranslation"),fromScaling:require("./fromScaling"),fromTranslation:require("./fromTranslation"),fromXRotation:require("./fromXRotation"),fromYRotation:require("./fromYRotation"),fromZRotation:require("./fromZRotation"),fromQuat:require("./fromQuat"),frustum:require("./frustum"),perspective:require("./perspective"),perspectiveFromFieldOfView:require("./perspectiveFromFieldOfView"),ortho:require("./ortho"),lookAt:require("./lookAt"),str:require("./str")}; -},{"./adjoint":534,"./clone":535,"./copy":536,"./create":537,"./determinant":538,"./fromQuat":539,"./fromRotation":540,"./fromRotationTranslation":541,"./fromScaling":542,"./fromTranslation":543,"./fromXRotation":544,"./fromYRotation":545,"./fromZRotation":546,"./frustum":547,"./identity":548,"./invert":550,"./lookAt":551,"./multiply":552,"./ortho":553,"./perspective":554,"./perspectiveFromFieldOfView":555,"./rotate":556,"./rotateX":557,"./rotateY":558,"./rotateZ":559,"./scale":560,"./str":561,"./translate":562,"./transpose":563}],550:[function(require,module,exports){ +},{"./adjoint":535,"./clone":536,"./copy":537,"./create":538,"./determinant":539,"./fromQuat":540,"./fromRotation":541,"./fromRotationTranslation":542,"./fromScaling":543,"./fromTranslation":544,"./fromXRotation":545,"./fromYRotation":546,"./fromZRotation":547,"./frustum":548,"./identity":549,"./invert":551,"./lookAt":552,"./multiply":553,"./ortho":554,"./perspective":555,"./perspectiveFromFieldOfView":556,"./rotate":557,"./rotateX":558,"./rotateY":559,"./rotateZ":560,"./scale":561,"./str":562,"./translate":563,"./transpose":564}],551:[function(require,module,exports){ function invert(n,r){var e=r[0],t=r[1],u=r[2],i=r[3],l=r[4],o=r[5],v=r[6],a=r[7],c=r[8],d=r[9],f=r[10],m=r[11],p=r[12],s=r[13],x=r[14],b=r[15],g=e*o-t*l,h=e*v-u*l,j=e*a-i*l,k=t*v-u*o,q=t*a-i*o,w=u*a-i*v,y=c*s-d*p,z=c*x-f*p,A=c*b-m*p,B=d*x-f*s,C=d*b-m*s,D=f*b-m*x,E=g*D-h*C+j*B+k*A-q*z+w*y;return E?(E=1/E,n[0]=(o*D-v*C+a*B)*E,n[1]=(u*C-t*D-i*B)*E,n[2]=(s*w-x*q+b*k)*E,n[3]=(f*q-d*w-m*k)*E,n[4]=(v*A-l*D-a*z)*E,n[5]=(e*D-u*A+i*z)*E,n[6]=(x*j-p*w-b*h)*E,n[7]=(c*w-f*j+m*h)*E,n[8]=(l*C-o*A+a*y)*E,n[9]=(t*A-e*C-i*y)*E,n[10]=(p*q-s*j+b*g)*E,n[11]=(d*j-c*q-m*g)*E,n[12]=(o*z-l*B-v*y)*E,n[13]=(e*B-t*z+u*y)*E,n[14]=(s*h-p*k-x*g)*E,n[15]=(c*k-d*h+f*g)*E,n):null}module.exports=invert; -},{}],551:[function(require,module,exports){ +},{}],552:[function(require,module,exports){ var identity=require("./identity");function lookAt(t,a,e,r){var i,o,s,h,n,M,d,q,u,b,l=a[0],y=a[1],k=a[2],v=r[0],A=r[1],c=r[2],f=e[0],m=e[1],p=e[2];return Math.abs(l-f)<1e-6&&Math.abs(y-m)<1e-6&&Math.abs(k-p)<1e-6?identity(t):(d=l-f,q=y-m,u=k-p,i=A*(u*=b=1/Math.sqrt(d*d+q*q+u*u))-c*(q*=b),o=c*(d*=b)-v*u,s=v*q-A*d,(b=Math.sqrt(i*i+o*o+s*s))?(i*=b=1/b,o*=b,s*=b):(i=0,o=0,s=0),h=q*s-u*o,n=u*i-d*s,M=d*o-q*i,(b=Math.sqrt(h*h+n*n+M*M))?(h*=b=1/b,n*=b,M*=b):(h=0,n=0,M=0),t[0]=i,t[1]=h,t[2]=d,t[3]=0,t[4]=o,t[5]=n,t[6]=q,t[7]=0,t[8]=s,t[9]=M,t[10]=u,t[11]=0,t[12]=-(i*l+o*y+s*k),t[13]=-(h*l+n*y+M*k),t[14]=-(d*l+q*y+u*k),t[15]=1,t)}module.exports=lookAt; -},{"./identity":548}],552:[function(require,module,exports){ +},{"./identity":549}],553:[function(require,module,exports){ function multiply(l,t,u){var r=t[0],e=t[1],i=t[2],m=t[3],n=t[4],o=t[5],p=t[6],y=t[7],a=t[8],c=t[9],d=t[10],f=t[11],s=t[12],v=t[13],x=t[14],b=t[15],g=u[0],h=u[1],j=u[2],k=u[3];return l[0]=g*r+h*n+j*a+k*s,l[1]=g*e+h*o+j*c+k*v,l[2]=g*i+h*p+j*d+k*x,l[3]=g*m+h*y+j*f+k*b,g=u[4],h=u[5],j=u[6],k=u[7],l[4]=g*r+h*n+j*a+k*s,l[5]=g*e+h*o+j*c+k*v,l[6]=g*i+h*p+j*d+k*x,l[7]=g*m+h*y+j*f+k*b,g=u[8],h=u[9],j=u[10],k=u[11],l[8]=g*r+h*n+j*a+k*s,l[9]=g*e+h*o+j*c+k*v,l[10]=g*i+h*p+j*d+k*x,l[11]=g*m+h*y+j*f+k*b,g=u[12],h=u[13],j=u[14],k=u[15],l[12]=g*r+h*n+j*a+k*s,l[13]=g*e+h*o+j*c+k*v,l[14]=g*i+h*p+j*d+k*x,l[15]=g*m+h*y+j*f+k*b,l}module.exports=multiply; -},{}],553:[function(require,module,exports){ +},{}],554:[function(require,module,exports){ function ortho(o,r,t,e,n,u,h){var a=1/(r-t),c=1/(e-n),d=1/(u-h);return o[0]=-2*a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=-2*c,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=2*d,o[11]=0,o[12]=(r+t)*a,o[13]=(n+e)*c,o[14]=(h+u)*d,o[15]=1,o}module.exports=ortho; -},{}],554:[function(require,module,exports){ +},{}],555:[function(require,module,exports){ function perspective(e,t,r,p,n){var a=1/Math.tan(t/2),c=1/(p-n);return e[0]=a/r,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=a,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=(n+p)*c,e[11]=-1,e[12]=0,e[13]=0,e[14]=2*n*p*c,e[15]=0,e}module.exports=perspective; -},{}],555:[function(require,module,exports){ +},{}],556:[function(require,module,exports){ function perspectiveFromFieldOfView(e,t,a,r){var h=Math.tan(t.upDegrees*Math.PI/180),i=Math.tan(t.downDegrees*Math.PI/180),n=Math.tan(t.leftDegrees*Math.PI/180),M=Math.tan(t.rightDegrees*Math.PI/180),s=2/(n+M),o=2/(h+i);return e[0]=s,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=o,e[6]=0,e[7]=0,e[8]=-(n-M)*s*.5,e[9]=(h-i)*o*.5,e[10]=r/(a-r),e[11]=-1,e[12]=0,e[13]=0,e[14]=r*a/(a-r),e[15]=0,e}module.exports=perspectiveFromFieldOfView; -},{}],556:[function(require,module,exports){ +},{}],557:[function(require,module,exports){ function rotate(t,a,r,e){var o,n,s,h,u,M,l,c,i,b,d,f,m,p,q,v,x,g,j,k,w,y,z,A,B=e[0],C=e[1],D=e[2],E=Math.sqrt(B*B+C*C+D*D);return Math.abs(E)<1e-6?null:(B*=E=1/E,C*=E,D*=E,o=Math.sin(r),s=1-(n=Math.cos(r)),h=a[0],u=a[1],M=a[2],l=a[3],c=a[4],i=a[5],b=a[6],d=a[7],f=a[8],m=a[9],p=a[10],q=a[11],v=B*B*s+n,x=C*B*s+D*o,g=D*B*s-C*o,j=B*C*s-D*o,k=C*C*s+n,w=D*C*s+B*o,y=B*D*s+C*o,z=C*D*s-B*o,A=D*D*s+n,t[0]=h*v+c*x+f*g,t[1]=u*v+i*x+m*g,t[2]=M*v+b*x+p*g,t[3]=l*v+d*x+q*g,t[4]=h*j+c*k+f*w,t[5]=u*j+i*k+m*w,t[6]=M*j+b*k+p*w,t[7]=l*j+d*k+q*w,t[8]=h*y+c*z+f*A,t[9]=u*y+i*z+m*A,t[10]=M*y+b*z+p*A,t[11]=l*y+d*z+q*A,a!==t&&(t[12]=a[12],t[13]=a[13],t[14]=a[14],t[15]=a[15]),t)}module.exports=rotate; -},{}],557:[function(require,module,exports){ +},{}],558:[function(require,module,exports){ function rotateX(t,o,r){var a=Math.sin(r),e=Math.cos(r),n=o[4],s=o[5],u=o[6],c=o[7],h=o[8],i=o[9],M=o[10],X=o[11];return o!==t&&(t[0]=o[0],t[1]=o[1],t[2]=o[2],t[3]=o[3],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[4]=n*e+h*a,t[5]=s*e+i*a,t[6]=u*e+M*a,t[7]=c*e+X*a,t[8]=h*e-n*a,t[9]=i*e-s*a,t[10]=M*e-u*a,t[11]=X*e-c*a,t}module.exports=rotateX; -},{}],558:[function(require,module,exports){ +},{}],559:[function(require,module,exports){ function rotateY(t,o,r){var a=Math.sin(r),e=Math.cos(r),n=o[0],s=o[1],u=o[2],c=o[3],h=o[8],i=o[9],M=o[10],Y=o[11];return o!==t&&(t[4]=o[4],t[5]=o[5],t[6]=o[6],t[7]=o[7],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[0]=n*e-h*a,t[1]=s*e-i*a,t[2]=u*e-M*a,t[3]=c*e-Y*a,t[8]=n*a+h*e,t[9]=s*a+i*e,t[10]=u*a+M*e,t[11]=c*a+Y*e,t}module.exports=rotateY; -},{}],559:[function(require,module,exports){ +},{}],560:[function(require,module,exports){ function rotateZ(t,o,r){var a=Math.sin(r),e=Math.cos(r),n=o[0],s=o[1],u=o[2],c=o[3],h=o[4],i=o[5],M=o[6],Z=o[7];return o!==t&&(t[8]=o[8],t[9]=o[9],t[10]=o[10],t[11]=o[11],t[12]=o[12],t[13]=o[13],t[14]=o[14],t[15]=o[15]),t[0]=n*e+h*a,t[1]=s*e+i*a,t[2]=u*e+M*a,t[3]=c*e+Z*a,t[4]=h*e-n*a,t[5]=i*e-s*a,t[6]=M*e-u*a,t[7]=Z*e-c*a,t}module.exports=rotateZ; -},{}],560:[function(require,module,exports){ +},{}],561:[function(require,module,exports){ function scale(e,r,a){var c=a[0],l=a[1],n=a[2];return e[0]=r[0]*c,e[1]=r[1]*c,e[2]=r[2]*c,e[3]=r[3]*c,e[4]=r[4]*l,e[5]=r[5]*l,e[6]=r[6]*l,e[7]=r[7]*l,e[8]=r[8]*n,e[9]=r[9]*n,e[10]=r[10]*n,e[11]=r[11]*n,e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],e}module.exports=scale; -},{}],561:[function(require,module,exports){ +},{}],562:[function(require,module,exports){ function str(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"}module.exports=str; -},{}],562:[function(require,module,exports){ +},{}],563:[function(require,module,exports){ function translate(t,r,a){var e,n,l,o,s,u,c,d,f,i,m,p,v=a[0],x=a[1],b=a[2];return r===t?(t[12]=r[0]*v+r[4]*x+r[8]*b+r[12],t[13]=r[1]*v+r[5]*x+r[9]*b+r[13],t[14]=r[2]*v+r[6]*x+r[10]*b+r[14],t[15]=r[3]*v+r[7]*x+r[11]*b+r[15]):(e=r[0],n=r[1],l=r[2],o=r[3],s=r[4],u=r[5],c=r[6],d=r[7],f=r[8],i=r[9],m=r[10],p=r[11],t[0]=e,t[1]=n,t[2]=l,t[3]=o,t[4]=s,t[5]=u,t[6]=c,t[7]=d,t[8]=f,t[9]=i,t[10]=m,t[11]=p,t[12]=e*v+s*x+f*b+r[12],t[13]=n*v+u*x+i*b+r[13],t[14]=l*v+c*x+m*b+r[14],t[15]=o*v+d*x+p*b+r[15]),t}module.exports=translate; -},{}],563:[function(require,module,exports){ +},{}],564:[function(require,module,exports){ function transpose(e,r){if(e===r){var s=r[1],n=r[2],o=r[3],t=r[6],a=r[7],p=r[11];e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=s,e[6]=r[9],e[7]=r[13],e[8]=n,e[9]=t,e[11]=r[14],e[12]=o,e[13]=a,e[14]=p}else e[0]=r[0],e[1]=r[4],e[2]=r[8],e[3]=r[12],e[4]=r[1],e[5]=r[5],e[6]=r[9],e[7]=r[13],e[8]=r[2],e[9]=r[6],e[10]=r[10],e[11]=r[14],e[12]=r[3],e[13]=r[7],e[14]=r[11],e[15]=r[15];return e}module.exports=transpose; -},{}],564:[function(require,module,exports){ +},{}],565:[function(require,module,exports){ function add(d,e,n){return d[0]=e[0]+n[0],d[1]=e[1]+n[1],d[2]=e[2]+n[2],d}module.exports=add; -},{}],565:[function(require,module,exports){ +},{}],566:[function(require,module,exports){ module.exports=angle;var fromValues=require("./fromValues"),normalize=require("./normalize"),dot=require("./dot");function angle(r,e){var a=fromValues(r[0],r[1],r[2]),o=fromValues(e[0],e[1],e[2]);normalize(a,a),normalize(o,o);var l=dot(a,o);return l>1?0:Math.acos(l)} -},{"./dot":575,"./fromValues":581,"./normalize":592}],566:[function(require,module,exports){ +},{"./dot":576,"./fromValues":582,"./normalize":593}],567:[function(require,module,exports){ function ceil(e,c){return e[0]=Math.ceil(c[0]),e[1]=Math.ceil(c[1]),e[2]=Math.ceil(c[2]),e}module.exports=ceil; -},{}],567:[function(require,module,exports){ +},{}],568:[function(require,module,exports){ function clone(e){var n=new Float32Array(3);return n[0]=e[0],n[1]=e[1],n[2]=e[2],n}module.exports=clone; -},{}],568:[function(require,module,exports){ +},{}],569:[function(require,module,exports){ function copy(o,c){return o[0]=c[0],o[1]=c[1],o[2]=c[2],o}module.exports=copy; -},{}],569:[function(require,module,exports){ +},{}],570:[function(require,module,exports){ function create(){var e=new Float32Array(3);return e[0]=0,e[1]=0,e[2]=0,e}module.exports=create; -},{}],570:[function(require,module,exports){ +},{}],571:[function(require,module,exports){ function cross(r,o,s){var c=o[0],e=o[1],n=o[2],t=s[0],u=s[1],a=s[2];return r[0]=e*a-n*u,r[1]=n*t-c*a,r[2]=c*u-e*t,r}module.exports=cross; -},{}],571:[function(require,module,exports){ +},{}],572:[function(require,module,exports){ module.exports=require("./distance"); -},{"./distance":572}],572:[function(require,module,exports){ +},{"./distance":573}],573:[function(require,module,exports){ function distance(t,e){var n=e[0]-t[0],r=e[1]-t[1],a=e[2]-t[2];return Math.sqrt(n*n+r*r+a*a)}module.exports=distance; -},{}],573:[function(require,module,exports){ +},{}],574:[function(require,module,exports){ module.exports=require("./divide"); -},{"./divide":574}],574:[function(require,module,exports){ +},{"./divide":575}],575:[function(require,module,exports){ function divide(d,e,i){return d[0]=e[0]/i[0],d[1]=e[1]/i[1],d[2]=e[2]/i[2],d}module.exports=divide; -},{}],575:[function(require,module,exports){ +},{}],576:[function(require,module,exports){ function dot(o,t){return o[0]*t[0]+o[1]*t[1]+o[2]*t[2]}module.exports=dot; -},{}],576:[function(require,module,exports){ +},{}],577:[function(require,module,exports){ module.exports=1e-6; -},{}],577:[function(require,module,exports){ +},{}],578:[function(require,module,exports){ module.exports=equals;var EPSILON=require("./epsilon");function equals(a,t){var s=a[0],h=a[1],M=a[2],b=t[0],e=t[1],r=t[2];return Math.abs(s-b)<=EPSILON*Math.max(1,Math.abs(s),Math.abs(b))&&Math.abs(h-e)<=EPSILON*Math.max(1,Math.abs(h),Math.abs(e))&&Math.abs(M-r)<=EPSILON*Math.max(1,Math.abs(M),Math.abs(r))} -},{"./epsilon":576}],578:[function(require,module,exports){ +},{"./epsilon":577}],579:[function(require,module,exports){ function exactEquals(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]}module.exports=exactEquals; -},{}],579:[function(require,module,exports){ +},{}],580:[function(require,module,exports){ function floor(o,r){return o[0]=Math.floor(r[0]),o[1]=Math.floor(r[1]),o[2]=Math.floor(r[2]),o}module.exports=floor; -},{}],580:[function(require,module,exports){ +},{}],581:[function(require,module,exports){ module.exports=forEach;var vec=require("./create")();function forEach(e,c,r,v,t,a){var n,o;for(c||(c=3),r||(r=0),o=v?Math.min(v*c+r,e.length):e.length,n=r;n0&&(a=1/Math.sqrt(a),r[0]=e[0]*a,r[1]=e[1]*a,r[2]=e[2]*a),r}module.exports=normalize; -},{}],593:[function(require,module,exports){ +},{}],594:[function(require,module,exports){ function random(a,t){t=t||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,o=Math.sqrt(1-n*n)*t;return a[0]=Math.cos(r)*o,a[1]=Math.sin(r)*o,a[2]=n*t,a}module.exports=random; -},{}],594:[function(require,module,exports){ +},{}],595:[function(require,module,exports){ function rotateX(t,o,r,a){var e=r[1],n=r[2],s=o[1]-e,u=o[2]-n,c=Math.sin(a),h=Math.cos(a);return t[0]=o[0],t[1]=e+s*h-u*c,t[2]=n+s*c+u*h,t}module.exports=rotateX; -},{}],595:[function(require,module,exports){ +},{}],596:[function(require,module,exports){ function rotateY(t,o,r,a){var e=r[0],n=r[2],s=o[0]-e,u=o[2]-n,c=Math.sin(a),h=Math.cos(a);return t[0]=e+u*c+s*h,t[1]=o[1],t[2]=n+u*h-s*c,t}module.exports=rotateY; -},{}],596:[function(require,module,exports){ +},{}],597:[function(require,module,exports){ function rotateZ(t,o,r,a){var e=r[0],n=r[1],s=o[0]-e,u=o[1]-n,c=Math.sin(a),h=Math.cos(a);return t[0]=e+s*h-u*c,t[1]=n+s*c+u*h,t[2]=o[2],t}module.exports=rotateZ; -},{}],597:[function(require,module,exports){ +},{}],598:[function(require,module,exports){ function round(n,o){return n[0]=Math.round(o[0]),n[1]=Math.round(o[1]),n[2]=Math.round(o[2]),n}module.exports=round; -},{}],598:[function(require,module,exports){ +},{}],599:[function(require,module,exports){ function scale(e,c,l){return e[0]=c[0]*l,e[1]=c[1]*l,e[2]=c[2]*l,e}module.exports=scale; -},{}],599:[function(require,module,exports){ +},{}],600:[function(require,module,exports){ function scaleAndAdd(d,e,n,A){return d[0]=e[0]+n[0]*A,d[1]=e[1]+n[1]*A,d[2]=e[2]+n[2]*A,d}module.exports=scaleAndAdd; -},{}],600:[function(require,module,exports){ +},{}],601:[function(require,module,exports){ function set(e,t,n,o){return e[0]=t,e[1]=n,e[2]=o,e}module.exports=set; -},{}],601:[function(require,module,exports){ +},{}],602:[function(require,module,exports){ module.exports=require("./squaredDistance"); -},{"./squaredDistance":603}],602:[function(require,module,exports){ +},{"./squaredDistance":604}],603:[function(require,module,exports){ module.exports=require("./squaredLength"); -},{"./squaredLength":604}],603:[function(require,module,exports){ +},{"./squaredLength":605}],604:[function(require,module,exports){ function squaredDistance(e,r){var a=r[0]-e[0],n=r[1]-e[1],s=r[2]-e[2];return a*a+n*n+s*s}module.exports=squaredDistance; -},{}],604:[function(require,module,exports){ +},{}],605:[function(require,module,exports){ function squaredLength(e){var r=e[0],n=e[1],t=e[2];return r*r+n*n+t*t}module.exports=squaredLength; -},{}],605:[function(require,module,exports){ +},{}],606:[function(require,module,exports){ module.exports=require("./subtract"); -},{"./subtract":606}],606:[function(require,module,exports){ +},{"./subtract":607}],607:[function(require,module,exports){ function subtract(t,r,u){return t[0]=r[0]-u[0],t[1]=r[1]-u[1],t[2]=r[2]-u[2],t}module.exports=subtract; -},{}],607:[function(require,module,exports){ +},{}],608:[function(require,module,exports){ function transformMat3(r,t,a){var n=t[0],o=t[1],e=t[2];return r[0]=n*a[0]+o*a[3]+e*a[6],r[1]=n*a[1]+o*a[4]+e*a[7],r[2]=n*a[2]+o*a[5]+e*a[8],r}module.exports=transformMat3; -},{}],608:[function(require,module,exports){ +},{}],609:[function(require,module,exports){ function transformMat4(r,t,a){var n=t[0],o=t[1],e=t[2],f=a[3]*n+a[7]*o+a[11]*e+a[15];return f=f||1,r[0]=(a[0]*n+a[4]*o+a[8]*e+a[12])/f,r[1]=(a[1]*n+a[5]*o+a[9]*e+a[13])/f,r[2]=(a[2]*n+a[6]*o+a[10]*e+a[14])/f,r}module.exports=transformMat4; -},{}],609:[function(require,module,exports){ +},{}],610:[function(require,module,exports){ function transformQuat(r,t,a){var n=t[0],o=t[1],u=t[2],e=a[0],f=a[1],m=a[2],s=a[3],Q=s*n+f*u-m*o,c=s*o+m*n-e*u,d=s*u+e*o-f*n,i=-e*n-f*o-m*u;return r[0]=Q*s+i*-e+c*-m-d*-f,r[1]=c*s+i*-f+d*-e-Q*-m,r[2]=d*s+i*-m+Q*-f-c*-e,r}module.exports=transformQuat; -},{}],610:[function(require,module,exports){ +},{}],611:[function(require,module,exports){ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.createREGL=t()}(this,function(){function e(e,t){this.id=H++,this.type=e,this.data=t}function t(e){return"["+function e(t){if(0===t.length)return[];var r=t.charAt(0),n=t.charAt(t.length-1);if(1>>=t))<<3,(t|=r=(15<(e>>>=r))<<2)|(r=(3<(e>>>=r))<<1)|e>>>r>>1}function o(){function e(e){e:{for(var t=16;268435456>=t;t*=16)if(e<=t){e=t;break e}e=0}return 0<(t=r[f(e)>>2]).length?t.pop():new ArrayBuffer(e)}function t(e){r[f(e.byteLength)>>2].push(e)}var r=a(8,function(){return[]});return{alloc:e,free:t,allocType:function(t,r){var n=null;switch(t){case 5120:n=new Int8Array(e(r),0,r);break;case 5121:n=new Uint8Array(e(r),0,r);break;case 5122:n=new Int16Array(e(2*r),0,r);break;case 5123:n=new Uint16Array(e(2*r),0,r);break;case 5124:n=new Int32Array(e(4*r),0,r);break;case 5125:n=new Uint32Array(e(4*r),0,r);break;case 5126:n=new Float32Array(e(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(e){t(e.buffer)}}}function u(e){return!!e&&"object"==typeof e&&Array.isArray(e.shape)&&Array.isArray(e.stride)&&"number"==typeof e.offset&&e.shape.length===e.stride.length&&(Array.isArray(e.data)||G(e.data))}function s(e,t,r,n,i,a){for(var f=0;f(i=o)&&(i=n.buffer.byteLength,5123===l?i>>=1:5125===l&&(i>>=2)),n.vertCount=i,i=f,0>f&&(i=4,1===(f=n.buffer.dimension)&&(i=0),2===f&&(i=1),3===f&&(i=4)),n.primType=i}function f(e){n.elementsCount--,delete o[e.id],e.buffer.destroy(),e.buffer=null}var o={},s=0,c={uint8:5121,uint16:5123};t.oes_element_index_uint&&(c.uint32=5125),i.prototype.bind=function(){this.buffer.bind()};var l=[];return{create:function(e,t){function o(e){if(e)if("number"==typeof e)s(e),l.primType=4,l.vertCount=0|e,l.type=5121;else{var t=null,r=35044,n=-1,i=-1,f=0,p=0;Array.isArray(e)||G(e)||u(e)?t=e:("data"in e&&(t=e.data),"usage"in e&&(r=Z[e.usage]),"primitive"in e&&(n=re[e.primitive]),"count"in e&&(i=0|e.count),"type"in e&&(p=c[e.type]),"length"in e?f=0|e.length:(f=i,5123===p||5122===p?f*=2:5125!==p&&5124!==p||(f*=4))),a(l,t,r,n,i,f,p)}else s(),l.primType=4,l.vertCount=0,l.type=5121;return o}var s=r.create(null,34963,!0),l=new i(s._buffer);return n.elementsCount++,o(e),o._reglType="elements",o._elements=l,o.subdata=function(e,t){return s.subdata(e,t),o},o.destroy=function(){f(l)},o},createStream:function(e){var t=l.pop();return t||(t=new i(r.create(null,34963,!0,!1)._buffer)),a(t,e,35040,-1,-1,0,0),t},destroyStream:function(e){l.push(e)},getElements:function(e){return"function"==typeof e&&e._elements instanceof i?e._elements:null},clear:function(){Y(o).forEach(f)}}}function m(e){for(var t=q.allocType(5123,e.length),r=0;r>>31<<15,i=(a<<1>>>24)-127,a=a>>13&1023;t[r]=-24>i?n:-14>i?n+(a+1024>>-14-i):15>=i,r.height>>=i,d(r,n[i]),e.mipmask|=1<t;++t)e.images[t]=null;return e}function j(e){for(var t=e.images,r=0;rt){for(var r=0;r=--this.refCount&&P(this)}}),f.profile&&(a.getTotalTextureSize=function(){var e=0;return Object.keys(ye).forEach(function(t){e+=ye[t].stats.size}),e}),{create2D:function(t,r){function n(e,t){var r=i.texInfo;C.call(r);var a=S();return"number"==typeof e?E(a,0|e,"number"==typeof t?0|t:0|e):e?(V(r,e),D(a,e)):E(a,1,1),r.genMipmaps&&(a.mipmask=(a.width<<1)-1),i.mipmask=a.mipmask,s(i,a),i.internalformat=a.internalformat,n.width=a.width,n.height=a.height,z(i),T(a,3553),F(r,3553),I(),j(a),f.profile&&(i.stats.size=k(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format=ee[i.internalformat],n.type=te[i.type],n.mag=re[r.magFilter],n.min=ne[r.minFilter],n.wrapS=ie[r.wrapS],n.wrapT=ie[r.wrapT],n}var i=new B(3553);return ye[i.id]=i,a.textureCount++,n(t,r),n.subimage=function(e,t,r,a){t|=0,r|=0,a|=0;var f=g();return s(f,i),f.width=0,f.height=0,d(f,e),f.width=f.width||(i.width>>a)-t,f.height=f.height||(i.height>>a)-r,z(i),h(f,3553,t,r,a),I(),_(f),n},n.resize=function(t,r){var a=0|t,o=0|r||a;if(a===i.width&&o===i.height)return n;n.width=i.width=a,n.height=i.height=o,z(i);for(var u=0;i.mipmask>>u;++u){var s=a>>u,c=o>>u;if(!s||!c)break;e.texImage2D(3553,u,i.format,s,c,0,i.format,i.type,null)}return I(),f.profile&&(i.stats.size=k(i.internalformat,i.type,a,o,!1,!1)),n},n._reglType="texture2d",n._texture=i,f.profile&&(n.stats=i.stats),n.destroy=function(){i.decRef()},n},createCube:function(t,r,n,i,o,u){function l(e,t,r,n,i,a){var o,u=p.texInfo;for(C.call(u),o=0;6>o;++o)m[o]=S();if("number"!=typeof e&&e){if("object"==typeof e)if(t)D(m[0],e),D(m[1],t),D(m[2],r),D(m[3],n),D(m[4],i),D(m[5],a);else if(V(u,e),c(p,e),"faces"in e)for(e=e.faces,o=0;6>o;++o)s(m[o],p),D(m[o],e[o]);else for(o=0;6>o;++o)D(m[o],e)}else for(e=0|e||1,o=0;6>o;++o)E(m[o],e,e);for(s(p,m[0]),p.mipmask=u.genMipmaps?(m[0].width<<1)-1:m[0].mipmask,p.internalformat=m[0].internalformat,l.width=m[0].width,l.height=m[0].height,z(p),o=0;6>o;++o)T(m[o],34069+o);for(F(u,34067),I(),f.profile&&(p.stats.size=k(p.internalformat,p.type,l.width,l.height,u.genMipmaps,!0)),l.format=ee[p.internalformat],l.type=te[p.type],l.mag=re[u.magFilter],l.min=ne[u.minFilter],l.wrapS=ie[u.wrapS],l.wrapT=ie[u.wrapT],o=0;6>o;++o)j(m[o]);return l}var p=new B(34067);ye[p.id]=p,a.cubeCount++;var m=Array(6);return l(t,r,n,i,o,u),l.subimage=function(e,t,r,n,i){r|=0,n|=0,i|=0;var a=g();return s(a,p),a.width=0,a.height=0,d(a,t),a.width=a.width||(p.width>>i)-r,a.height=a.height||(p.height>>i)-n,z(p),h(a,34069+e,r,n,i),I(),_(a),l},l.resize=function(t){if((t|=0)!==p.width){l.width=p.width=t,l.height=p.height=t,z(p);for(var r=0;6>r;++r)for(var n=0;p.mipmask>>n;++n)e.texImage2D(34069+r,n,p.format,t>>n,t>>n,0,p.format,p.type,null);return I(),f.profile&&(p.stats.size=k(p.internalformat,p.type,l.width,l.height,!1,!0)),l}},l._reglType="textureCube",l._texture=p,f.profile&&(l.stats=p.stats),l.destroy=function(){p.decRef()},l},clear:function(){for(var t=0;tr;++r)if(0!=(t.mipmask&1<>r,t.height>>r,0,t.internalformat,t.type,null);else for(var n=0;6>n;++n)e.texImage2D(34069+n,r,t.internalformat,t.width>>r,t.height>>r,0,t.internalformat,t.type,null);F(t.texInfo,t.target)})},refresh:function(){for(var t=0;ti;++i){for(s=0;se;++e)r[e].resize(n);return t.width=t.height=n,t},_reglType:"framebufferCube",destroy:function(){r.forEach(function(e){e.destroy()})}})},clear:function(){Y(_).forEach(b)},restore:function(){v.cur=null,v.next=null,v.dirty=!0,Y(_).forEach(function(t){t.framebuffer=e.createFramebuffer(),g(t)})}})}function E(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function D(e,t,r,n,i,a,f){function o(){this.id=++l,this.attributes=[],this.elements=null,this.ownsElements=!1,this.offset=this.count=0,this.instances=-1,this.primitive=4;var e=t.oes_vertex_array_object;this.vao=e?e.createVertexArrayOES():null,p[this.id]=this,this.buffers=[]}var s=r.maxAttributes,c=Array(s);for(r=0;r=p.byteLength?s.subdata(p):(s.destroy(),r.buffers[o]=null)),r.buffers[o]||(s=r.buffers[o]=i.create(c,34962,!1,!0)),l.buffer=i.getBuffer(s),l.size=0|l.buffer.dimension,l.normalized=!1,l.type=l.buffer.dtype,l.offset=0,l.stride=0,l.divisor=0,l.state=1,e[o]=1;else i.getBuffer(c)?(l.buffer=i.getBuffer(c),l.size=0|l.buffer.dimension,l.normalized=!1,l.type=l.buffer.dtype,l.offset=0,l.stride=0,l.divisor=0,l.state=1):i.getBuffer(c.buffer)?(l.buffer=i.getBuffer(c.buffer),l.size=0|(+c.size||l.buffer.dimension),l.normalized=!!c.normalized||!1,l.type="type"in c?K[c.type]:l.buffer.dtype,l.offset=0|(c.offset||0),l.stride=0|(c.stride||0),l.divisor=0|(c.divisor||0),l.state=1):"x"in c&&(l.x=+c.x||0,l.y=+c.y||0,l.z=+c.z||0,l.w=+c.w||0,l.state=2)}for(s=0;se&&(e=t.stats.uniformsCount)}),e},r.getMaxAttributesCount=function(){var e=0;return p.forEach(function(t){t.stats.attributesCount>e&&(e=t.stats.attributesCount)}),e}),{clear:function(){var t=e.deleteShader.bind(e);Y(s).forEach(t),s={},Y(c).forEach(t),c={},p.forEach(function(t){e.deleteProgram(t.program)}),p.length=0,l={},r.shaderCount=0},program:function(t,n,i,a){var f=l[n];f||(f=l[n]={});var d=f[t];if(d&&(d.refCount++,!a))return d;var h=new o(n,t);return r.shaderCount++,u(h,i,a),d||(f[t]=h),p.push(h),R(h,{destroy:function(){if(h.refCount--,0>=h.refCount){e.deleteProgram(h.program);var t=p.indexOf(h);p.splice(t,1),r.shaderCount--}0>=f[h.vertId].refCount&&(e.deleteShader(c[h.vertId]),delete c[h.vertId],delete l[h.fragId][h.vertId]),Object.keys(l[h.fragId]).length||(e.deleteShader(s[h.fragId]),delete s[h.fragId],delete l[h.fragId])}})},restore:function(){s={},c={};for(var e=0;e"+t+"?"+i+".constant["+t+"]:0;"}).join(""),"}}else{","if(",o,"(",i,".buffer)){",c,"=",a,".createStream(",34962,",",i,".buffer);","}else{",c,"=",a,".getBuffer(",i,".buffer);","}",l,'="type" in ',i,"?",f.glTypes,"[",i,".type]:",c,".dtype;",u.normalized,"=!!",i,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",u.isStream,"){",a,".destroyStream(",c,");","}"),u})}),f}function O(e,t,n,i,f){function o(e){var t=s[e];t&&(p[e]=t)}var u=function(e,t){if("string"==typeof(r=e.static).frag&&"string"==typeof r.vert){if(0>1)",o],");")}function t(){r(u,".drawArraysInstancedANGLE(",[h,m,b,o],");")}d&&"null"!==d?y?e():(r("if(",d,"){"),e(),r("}else{"),t(),r("}")):t()}function f(){function e(){r(c+".drawElements("+[h,b,g,m+"<<(("+g+"-5121)>>1)"]+");")}function t(){r(c+".drawArrays("+[h,m,b]+");")}d&&"null"!==d?y?e():(r("if(",d,"){"),e(),r("}else{"),t(),r("}")):t()}var o,u,s=e.shared,c=s.gl,l=s.draw,p=n.draw,d=function(){var i=p.elements,a=t;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(e,a),p.elementsActive&&a("if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);")):(i=a.def(),a(i,"=",l,".","elements",";","if(",i,"){",c,".bindBuffer(",34963,",",i,".buffer.buffer);}","else if(",s.vao,".currentVAO){",i,"=",e.shared.elements+".getElements("+s.vao,".currentVAO.elements);",ne?"":"if("+i+")"+c+".bindBuffer(34963,"+i+".buffer.buffer);","}")),i}(),h=i("primitive"),m=i("offset"),b=function(){var i=p.count,a=t;return i?((i.contextDep&&n.contextDynamic||i.propDep)&&(a=r),i=i.append(e,a)):i=a.def(l,".","count"),i}();if("number"==typeof b){if(0===b)return}else r("if(",b,"){"),r.exit("}");ee&&(o=i("instances"),u=e.instancing);var g=d+".type",y=p.elements&&z(p.elements)&&!p.vaoActive;ee&&("number"!=typeof o||0<=o)?"string"==typeof o?(r("if(",o,">0){"),a(),r("}else if(",o,"<0){"),f(),r("}")):a():f()}function q(e,t,r,n,i){return i=(t=x()).proc("body",i),ee&&(t.instancing=i.def(t.shared.extensions,".angle_instanced_arrays")),e(t,i,r,n),t.compile().body}function Q(e,t,r,n){L(e,t),r.useVAO?r.drawVAO?t(e.shared.vao,".setVAO(",r.drawVAO.append(e,t),");"):t(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(t(e.shared.vao,".setVAO(null);"),H(e,t,r,n.attributes,function(){return!0})),U(e,t,r,n.uniforms,function(){return!0},!1),N(e,t,t,r)}function G(e,t,r,n){function i(){return!0}e.batchId="a1",L(e,t),H(e,t,r,n.attributes,i),U(e,t,r,n.uniforms,i,!1),N(e,t,t,r)}function Y(e,t,r,n){function i(e){return e.contextDep&&f||e.propDep}function a(e){return!i(e)}L(e,t);var f=r.contextDep,o=t.def(),u=t.def();e.shared.props=u,e.batchId=o;var s=e.scope(),c=e.scope();t(s.entry,"for(",o,"=0;",o,"<","a1",";++",o,"){",u,"=","a0","[",o,"];",c,"}",s.exit),r.needsContext&&E(e,c,r.context),r.needsFramebuffer&&D(e,c,r.framebuffer),S(e,c,r.state,i),r.profile&&i(r.profile)&&M(e,c,r,!1,!0),n?(r.useVAO?r.drawVAO?i(r.drawVAO)?c(e.shared.vao,".setVAO(",r.drawVAO.append(e,c),");"):s(e.shared.vao,".setVAO(",r.drawVAO.append(e,s),");"):s(e.shared.vao,".setVAO(",e.shared.vao,".targetVAO);"):(s(e.shared.vao,".setVAO(null);"),H(e,s,r,n.attributes,a),H(e,c,r,n.attributes,i)),U(e,s,r,n.uniforms,a,!1),U(e,c,r,n.uniforms,i,!0),N(e,s,c,r)):(t=e.global.def("{}"),n=r.shader.progVar.append(e,c),u=c.def(n,".id"),s=c.def(t,"[",u,"]"),c(e.shared.gl,".useProgram(",n,".program);","if(!",s,"){",s,"=",t,"[",u,"]=",e.link(function(t){return q(G,e,r,t,2)}),"(",n,");}",s,".call(this,a0[",o,"],",o,");"))}function X(e,r){function n(t){var n=r.shader[t];n&&i.set(a.shader,"."+t,n.append(e,i))}var i=e.proc("scope",3);e.batchId="a2";var a=e.shared,f=a.current;E(e,i,r.context),r.framebuffer&&r.framebuffer.append(e,i),F(Object.keys(r.state)).forEach(function(t){var n=r.state[t].append(e,i);b(n)?n.forEach(function(r,n){i.set(e.next[t],"["+n+"]",r)}):i.set(a.next,"."+t,n)}),M(e,i,r,!0,!0),["elements","offset","count","instances","primitive"].forEach(function(t){var n=r.draw[t];n&&i.set(a.draw,"."+t,""+n.append(e,i))}),Object.keys(r.uniforms).forEach(function(n){var f=r.uniforms[n].append(e,i);Array.isArray(f)&&(f="["+f.join()+"]"),i.set(a.uniforms,"["+t.id(n)+"]",f)}),Object.keys(r.attributes).forEach(function(t){var n=r.attributes[t].append(e,i),a=e.scopeAttrib(t);Object.keys(new Z).forEach(function(e){i.set(a,"."+e,n[e])})}),r.scopeVAO&&i.set(a.vao,".targetVAO",r.scopeVAO.append(e,i)),n("vert"),n("frag"),0=--this.refCount&&f(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var e=0;return Object.keys(c).forEach(function(t){e+=c[t].stats.size}),e}),{create:function(t,r){function f(t,r){var n=0,a=0,c=32854;if("object"==typeof t&&t?("shape"in t?(n=0|(a=t.shape)[0],a=0|a[1]):("radius"in t&&(n=a=0|t.radius),"width"in t&&(n=0|t.width),"height"in t&&(a=0|t.height)),"format"in t&&(c=o[t.format])):"number"==typeof t?(n=0|t,a="number"==typeof r?0|r:n):t||(n=a=1),n!==s.width||a!==s.height||c!==s.format)return f.width=s.width=n,f.height=s.height=a,s.format=c,e.bindRenderbuffer(36161,s.renderbuffer),e.renderbufferStorage(36161,c,n,a),i.profile&&(s.stats.size=ge[s.format]*s.width*s.height),f.format=u[s.format],f}var s=new a(e.createRenderbuffer());return c[s.id]=s,n.renderbufferCount++,f(t,r),f.resize=function(t,r){var n=0|t,a=0|r||n;return n===s.width&&a===s.height?f:(f.width=s.width=n,f.height=s.height=a,e.bindRenderbuffer(36161,s.renderbuffer),e.renderbufferStorage(36161,s.format,n,a),i.profile&&(s.stats.size=ge[s.format]*s.width*s.height),f)},f._reglType="renderbuffer",f._renderbuffer=s,i.profile&&(f.stats=s.stats),f.destroy=function(){s.decRef()},f},clear:function(){Y(c).forEach(f)},restore:function(){Y(c).forEach(function(t){t.renderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(36161,t.renderbuffer),e.renderbufferStorage(36161,t.format,t.width,t.height)}),e.bindRenderbuffer(36161,null)}}},ve=[];ve[6408]=4,ve[6407]=3;var xe=[];xe[5121]=1,xe[5126]=4,xe[36193]=2;var we=["x","y","z","w"],Ae="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),ke={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},_e={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Oe={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Ee={cw:2304,ccw:2305},De=new B(!1,!1,!1,function(){});return function(e){function t(){if(0===J.length)A&&A.update(),ee=null;else{ee=U.next(t),l();for(var e=J.length-1;0<=e;--e){var r=J[e];r&&r(C,null,0)}b.flush(),A&&A.update()}}function r(){!ee&&0=J.length&&n()}}}}function c(){var e=Y.viewport,t=Y.scissor_box;e[0]=e[1]=t[0]=t[1]=0,C.viewportWidth=C.framebufferWidth=C.drawingBufferWidth=e[2]=t[2]=b.drawingBufferWidth,C.viewportHeight=C.framebufferHeight=C.drawingBufferHeight=e[3]=t[3]=b.drawingBufferHeight}function l(){C.tick+=1,C.time=m(),c(),G.procs.poll()}function p(){P.refresh(),c(),G.procs.refresh(),A&&A.update()}function m(){return(N()-k)/1e3}if(!(e=i(e)))return null;var b=e.gl,g=b.getContextAttributes();b.isContextLost();var y=function(e,t){function r(t){var r;t=t.toLowerCase();try{r=n[t]=e.getExtension(t)}catch(e){}return!!r}for(var n={},i=0;it;++t)te(R({framebuffer:e.framebuffer.faces[t]},e),u);else te(e,u);else u(0,e)},prop:W.define.bind(null,1),context:W.define.bind(null,2),this:W.define.bind(null,3),draw:o({}),buffer:function(e){return F.create(e,34962,!1,!1)},elements:function(e){return B.create(e,!1)},texture:P.create2D,cube:P.createCube,renderbuffer:H.create,framebuffer:q.create,framebufferCube:q.createCube,vao:z.createVAO,attributes:g,frame:s,on:function(e,t){var r;switch(e){case"frame":return s(t);case"lost":r=K;break;case"restore":r=Z;break;case"destroy":r=$}return r.push(t),{cancel:function(){for(var e=0;e{if(0===r.length)return[[0,0,0],[0,0,0]];const e=Array.isArray(r)&&Array.isArray(r[0]),n=e?r[0].length:3,o=new Array(n),t=new Array(n);for(let r=0;r{for(let l=0;lt[l]?n:t[l],o[l]=nt[l]?n:t[l],o[l]=n{let c;(e=flatten(e)).forEach(e=>{let t=boundingBox(e.positions);t=t.map(c=>vec3.transformMat4(c,c,e.transforms)),c?(vec3.min(c[0],c[0],t[0]),vec3.max(c[1],c[1],t[1])):c=t});const t=vec3.min(vec3.create(),c[1],c[0]),a=vec3.max(vec3.create(),c[1],c[0]),n=vec3.subtract(vec3.create(),a,t);let r=vec3.scale(vec3.create(),n,.5);return r=vec3.add(r,t,r),{dia:vec3.distance(r,a),center:[...r],min:[...t],max:[...a],size:[...n]}};module.exports=computeBounds; -},{"./boundingBox":611,"@jscad/array-utils":527,"gl-vec3":582}],613:[function(require,module,exports){ +},{"./boundingBox":612,"@jscad/array-utils":528,"gl-vec3":583}],614:[function(require,module,exports){ const vec3=require("gl-vec3"),mat4=require("gl-mat4"),fromOrthographicToPerspective=e=>{const{near:t,far:r,fov:o,zoom:a}=e,{viewport:i}=e,c=require("./perspectiveCamera").setProjection(e,{width:i[2],height:i[3]}),{projectionType:p}=require("./perspectiveCamera").cameraState;return Object.assign({},e,c,{projectionType:p},{near:t,far:r,fov:o})},fromPerspectiveToOrthographic=e=>{const{fov:t,aspect:r}=e,o=.3*vec3.length(vec3.subtract([],e.position,e.target)),a=Math.tan(t)*o*r,i=Math.tan(t)*o,{near:c,far:p,viewport:s}=e,n={zoom:1,near:c,far:p},v=require("./orthographicCamera").cameraState,h=require("./orthographicCamera").setProjection(n,{width:a,height:i});return Object.assign({},v,e,h,{projectionType:v.projectionType,viewport:s})},toPerspectiveView=({camera:e})=>{const t=vec3.distance(e.position,e.target),r=[t,t,t];return{view:mat4.lookAt(mat4.create(),r,e.target,e.up),position:r}},toPresetView=(e,{camera:t})=>{const r=vec3.distance(t.position,t.target),o=vec3.add(vec3.create(),{top:[0,-1e-6,1],bottom:[0,0,-1],front:[0,1,0],back:[0,-1,0],left:[-1,0,0],right:[1,0,0],undefined:[0,0,0]}[e].map(e=>e*r),t.target);return{view:mat4.lookAt(mat4.create(),o,t.target,t.up),position:o}};module.exports={toPerspectiveView:toPerspectiveView,toPresetView:toPresetView,fromOrthographicToPerspective:fromOrthographicToPerspective,fromPerspectiveToOrthographic:fromPerspectiveToOrthographic}; -},{"./orthographicCamera":614,"./perspectiveCamera":615,"gl-mat4":549,"gl-vec3":582}],614:[function(require,module,exports){ +},{"./orthographicCamera":615,"./perspectiveCamera":616,"gl-mat4":550,"gl-vec3":583}],615:[function(require,module,exports){ const mat4=require("gl-mat4"),cameraState={view:mat4.identity(new Float32Array(16)),projection:mat4.identity(new Float32Array(16)),matrix:mat4.identity(new Float32Array(16)),near:1,far:1300,up:[0,0,1],eye:new Float32Array(3),position:[150,250,200],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],zoom:1,projectionType:"orthographic"},cameraProps={},setProjection=(t,e)=>{const{width:a,height:r}=e,o=a/r,i=[0,0,a,r],n=t.zoom,c=-a*n,m=a*n,p=-r*n,s=r*n;return{projection:mat4.ortho([],c,m,p,s,t.near,t.far),aspect:o,viewport:i}};module.exports={cameraState:cameraState,cameraProps:cameraProps,setProjection:setProjection}; -},{"gl-mat4":549}],615:[function(require,module,exports){ +},{"gl-mat4":550}],616:[function(require,module,exports){ const mat4=require("gl-mat4"),vec3=require("gl-vec3"),cameraState={view:mat4.identity(new Float32Array(16)),projection:mat4.identity(new Float32Array(16)),matrix:mat4.identity(new Float32Array(16)),near:1,far:18e3,up:[0,0,1],eye:new Float32Array(3),position:[450,550,700],target:[0,0,0],fov:Math.PI/4,aspect:1,viewport:[0,0,0,0],projectionType:"perspective"},cameraProps={},defaults=Object.assign({},cameraState,cameraProps),setProjection=(e,t,a)=>{const r=a.width/a.height,o=mat4.perspective(mat4.identity([]),t.fov,r,t.near,t.far),i=[0,0,a.width,a.height],c=e||{};return c.projection=o,c.aspect=r,c.viewport=i,c},update=(e,t)=>{t||(t=e);const{position:a,target:r,up:o}=t,i=vec3.subtract([],a,r),c=vec3.add(vec3.create(),r,i),n=mat4.lookAt(mat4.create(),c,r,o),p=e||{};return p.position=c,p.view=n,p};module.exports={cameraState:cameraState,cameraProps:cameraProps,defaults:defaults,setProjection:setProjection,update:update}; -},{"gl-mat4":549,"gl-vec3":582}],616:[function(require,module,exports){ +},{"gl-mat4":550,"gl-vec3":583}],617:[function(require,module,exports){ const vec3=require("gl-vec3"),mat4=require("gl-mat4"),{max:max,min:min,sqrt:sqrt,PI:PI,sin:sin,cos:cos,atan2:atan2}=Math,computeBounds=require("../bound-utils/computeBounds"),controlsProps={limits:{minDistance:.01,maxDistance:1e4},drag:.27,EPS:1e-6,zoomToFit:{auto:!0,targets:"all",tightness:1.5},userControl:{zoom:!0,zoomSpeed:1,rotate:!0,rotateSpeed:1,pan:!0,panSpeed:1},autoRotate:{enabled:!1,speed:1},autoAdjustPlanes:!0},controlsState={thetaDelta:0,phiDelta:0,scale:1},defaults=Object.assign({},controlsState,controlsProps),update=({controls:t,camera:e},a)=>{const{EPS:o,drag:s}=t,{position:r,target:n}=e,c=t.up?t.up:e.up;let i=t.thetaDelta;const l=t.phiDelta,m=t.scale,p=vec3.subtract([],r,n);let u,d;1===c[2]?(u=atan2(p[0],p[1]),d=atan2(sqrt(p[0]*p[0]+p[1]*p[1]),p[2])):(u=atan2(p[0],p[2]),d=atan2(sqrt(p[0]*p[0]+p[2]*p[2]),p[1])),t.autoRotate.enabled&&t.userControl.rotate&&(i+=2*Math.PI/60/60*t.autoRotate.speed),u+=i,d=max(o,min(PI-o,d+=l));const h=max(t.limits.minDistance,min(t.limits.maxDistance,vec3.length(p)*m));1===c[2]?(p[0]=h*sin(d)*sin(u),p[2]=h*cos(d),p[1]=h*sin(d)*cos(u)):(p[0]=h*sin(d)*sin(u),p[1]=h*cos(d),p[2]=h*sin(d)*cos(u));const g=vec3.add(vec3.create(),n,p),v=mat4.lookAt(mat4.create(),g,n,c),D=1-max(min(s,1),.01);return{controls:{thetaDelta:i*D,phiDelta:l*D,scale:1,changed:vec3.distance(r,g)>.001},camera:{position:g,view:v}}},rotate=({controls:t,camera:e,speed:a=1},o)=>{let{thetaDelta:s,phiDelta:r}=t;return t.userControl.rotate&&(s+=o[0]*a,r+=o[1]*a),{controls:{thetaDelta:s,phiDelta:r},camera:e}},zoom=({controls:t,camera:e,speed:a=1},o=0)=>{let{scale:s}=t;if(t.userControl.zoom&&e&&void 0!==o&&0!==o&&!isNaN(o)){const r=(o=o/o*(0===Math.sign(o)?1:Math.sign(o))*a)+t.scale,n=vec3.distance(e.position,e.target)*r;if(n>t.limits.minDistance&&n{const s=require("camera-unproject"),{projection:r,view:n,viewport:c}=e,i=mat4.multiply([],r,n),l=mat4.invert([],i),m=[c[2],c[3],0],p=[c[2]-o[0],c[3]+o[1],0],u=s([],m,c,l),d=s([],p,c,l),h=vec3.distance(e.position,e.eye),g=vec3.subtract([],u,d).map(e=>e*a*h*t.scale);return{controls:t,camera:{position:vec3.add(vec3.create(),e.position,g),target:vec3.add(vec3.create(),e.target,g)}}},zoomToFit=({controls:t,camera:e,entities:a})=>{const{zoomToFit:o}=t;if("all"!==o.targets)return{controls:t,camera:e};if(0===a.length)return{controls:t,camera:e};const s=a.map(t=>t.geometry),r=computeBounds(s),{fov:n,target:c,position:i}=e,{tightness:l}=Object.assign({},o,controlsProps.zoomToFit),m=r.dia*l/Math.tan(n/2)/vec3.distance(c,i);return{camera:{target:r.center},controls:{scale:m}}},reset=({controls:t,camera:e},a)=>{return{camera:{position:a.camera.position,target:a.camera.target,projection:mat4.perspective([],e.fov,e.aspect,e.near,e.far),view:a.camera.view},controls:{thetaDelta:a.controls.thetaDelta,phiDelta:a.controls.phiDelta,scale:a.controls.scale}}};module.exports={controlsProps:controlsProps,controlsState:controlsState,defaults:defaults,update:update,rotate:rotate,zoom:zoom,pan:pan,zoomToFit:zoomToFit,reset:reset}; -},{"../bound-utils/computeBounds":612,"../cameras/orthographicCamera":614,"camera-unproject":532,"gl-mat4":549,"gl-vec3":582}],617:[function(require,module,exports){ +},{"../bound-utils/computeBounds":613,"../cameras/orthographicCamera":615,"camera-unproject":533,"gl-mat4":550,"gl-vec3":583}],618:[function(require,module,exports){ const{flatten:flatten,toArray:toArray}=require("@jscad/array-utils"),{meshColor:meshColor}=require("../rendering/renderDefaults"),geom2ToGeometries=require("./geom2ToGeometries"),geom3ToGeometries=require("./geom3ToGeometries"),path2ToGeometries=require("./path2ToGeometries"),assembleEntities=e=>{return e.map(e=>{return{geometry:e,visuals:{drawCmd:"2d"===e.type?"drawLines":"drawMesh",show:!0,transparent:e.isTransparent,useVertexColors:!0}}})},entitiesFromSolids=(e,...o)=>{const r={color:meshColor,smoothNormals:!0},{color:t,smoothNormals:s}=Object.assign({},r,e);o=(o=flatten(toArray(o))).filter(e=>e&&e instanceof Object);const i=[];return o.forEach(e=>{let o=[];"sides"in e?o=geom2ToGeometries({color:t},e):"points"in e?o=path2ToGeometries({color:t},e):"polygons"in e&&(o=geom3ToGeometries({smoothLighting:s,normalThreshold:.3,color:t},e)),i.push(...assembleEntities(o))}),i};module.exports=entitiesFromSolids; -},{"../rendering/renderDefaults":634,"./geom2ToGeometries":618,"./geom3ToGeometries":619,"./path2ToGeometries":620,"@jscad/array-utils":527}],618:[function(require,module,exports){ +},{"../rendering/renderDefaults":635,"./geom2ToGeometries":619,"./geom3ToGeometries":620,"./path2ToGeometries":621,"@jscad/array-utils":528}],619:[function(require,module,exports){ const mat4=require("gl-mat4"),maxIndex=Math.floor(32767.5),geom2ToGeometries=(o,e)=>{let{color:t}=o;const n=e.sides;if(0===n.length)return[];"color"in e&&(t=e.color);const r=t[3]<1,s=[],l=Math.floor(n.length/maxIndex)+1,a=(o,e)=>{s.push(o,e||o)},m=[];for(let o=0;o0){const o=h.length;for(let e=0;e[0,0,-1]),f=h.map((o,e)=>e),p=e.transforms?mat4.clone(e.transforms):mat4.create();m.push({type:"2d",positions:h,normals:i,indices:f,transforms:p,color:t,colors:s,isTransparent:r})}return m};module.exports=geom2ToGeometries; -},{"gl-mat4":549}],619:[function(require,module,exports){ +},{"gl-mat4":550}],620:[function(require,module,exports){ const vec3=require("gl-vec3"),mat4=require("gl-mat4"),maxIndex=65535,geom3ToGeometries=(o,e)=>{let{color:t,smoothLighting:n}=o;"color"in e&&(t=e.color);const r=e.polygons,l=e.transforms?mat4.clone(e.transforms):mat4.create(),s=[];let c=0;for(;c65535);t++)e++;const n=[],i=[],a=[],p=[],m=t[3]<1;for(let o=c;o{const o=[],e=[];let t=!0;const n=[],r=[],l=[],s=[],c=[];let i=0;for(let a=0;a{let t=e;return o.color&&(t=o.color),t&&t.length<4&&t.push(1),t},calculateNormal=o=>{if(o.plane)return vec3.clone(o.plane);const e=o.vertices,t=vec3.create();vec3.subtract(t,e[1],e[0]);const n=vec3.create();vec3.subtract(n,e[2],e[0]);const r=vec3.create();return vec3.cross(r,t,n),vec3.normalize(r,r),r},areNormalsSimilar=(o,e,t)=>vec3.distance(o,e)<=t,fuzyNormalAndPositionLookup=(o,e,t)=>{const n=o[e.position];if(n)for(let o=0;o{let{color:e}=o;const s=t.points;if(0===s.length)return[];"color"in t&&(e=t.color);const n=e[3]<1,r=Math.floor(s.length/maxIndex)+1,a=[];for(let o=0;o[0,0,-1]),h=c.map((o,t)=>t),f=t.transforms?mat4.clone(t.transforms):mat4.create();a.push({type:"2d",positions:c,normals:p,indices:h,transforms:f,color:e,isTransparent:n})}return a};module.exports=path2ToGeometries; -},{"gl-mat4":549}],621:[function(require,module,exports){ +},{"gl-mat4":550}],622:[function(require,module,exports){ module.exports={prepareRender:require("./rendering/render"),drawCommands:{drawGrid:require("./rendering/commands/drawGrid/multi.js"),drawAxis:require("./rendering/commands/drawAxis"),drawMesh:require("./rendering/commands/drawMesh"),drawLines:require("./rendering/commands/drawLines")},cameras:{camera:require("./cameras/camera"),orthographic:require("./cameras/orthographicCamera"),perspective:require("./cameras/perspectiveCamera")},controls:{orbit:require("./controls/orbitControls")},entitiesFromSolids:require("./geometry-utils-V2/entitiesFromSolids")}; -},{"./cameras/camera":613,"./cameras/orthographicCamera":614,"./cameras/perspectiveCamera":615,"./controls/orbitControls":616,"./geometry-utils-V2/entitiesFromSolids":617,"./rendering/commands/drawAxis":622,"./rendering/commands/drawGrid/multi.js":624,"./rendering/commands/drawLines":626,"./rendering/commands/drawMesh":629,"./rendering/render":632}],622:[function(require,module,exports){ +},{"./cameras/camera":614,"./cameras/orthographicCamera":615,"./cameras/perspectiveCamera":616,"./controls/orbitControls":617,"./geometry-utils-V2/entitiesFromSolids":618,"./rendering/commands/drawAxis":623,"./rendering/commands/drawGrid/multi.js":625,"./rendering/commands/drawLines":627,"./rendering/commands/drawMesh":630,"./rendering/render":633}],623:[function(require,module,exports){ const mat4=require("gl-mat4"),drawAxis=(t,i)=>{let{size:o,xColor:e,yColor:l,zColor:m,lineWidth:a,alwaysVisible:n}=Object.assign({},{xColor:[1,0,0,1],yColor:[0,1,0,1],zColor:[0,0,1,1],size:10,lineWidth:3,alwaysVisible:!0},i);a>t.limits.lineWidthDims[1]&&(a=t.limits.lineWidthDims[1]);const r=[0,0,0,o,0,0],d={frag:"precision mediump float;\n uniform vec4 color;\n void main() {\n gl_FragColor = color;\n }",vert:"\n precision mediump float;\n attribute vec3 position;\n uniform mat4 model, view, projection;\n void main() {\n gl_Position = projection * view * model * vec4(position, 1);\n }",uniforms:{model:(t,i)=>i&&i.model?i.model:mat4.identity([]),color:(t,i)=>i.color,angle:(t,i)=>i.angle},attributes:{position:r},count:r.length/3,primitive:"line loop",lineWidth:a,depth:{enable:!n}},s=mat4.identity([]),c=mat4.rotateZ(mat4.create(),mat4.identity([]),Math.PI/2),p=mat4.rotateY(mat4.create(),mat4.identity([]),-Math.PI/2),u=t(d);return t=>{const i={model:mat4.identity([])};return t=Object.assign({},i,t),u([{color:e,model:mat4.multiply(mat4.create(),t.model,s)},{color:l,model:mat4.multiply(mat4.create(),t.model,c)},{color:m,model:mat4.multiply(mat4.create(),t.model,p)}])}};module.exports=drawAxis; -},{"gl-mat4":549}],623:[function(require,module,exports){ +},{"gl-mat4":550}],624:[function(require,module,exports){ const mat4=require("gl-mat4"),makeDrawGrid=(o,i={})=>{const n=[],t={visuals:{color:[0,0,1,1],fadeOut:!1},ticks:1,size:[16,16],centered:!1,lineWidth:2},e=Object.assign({},t.visuals,i.visuals||{}),{fadeOut:r,color:s}=e,{size:l,ticks:a,centered:c,lineWidth:d}=Object.assign({},t,i),f=l[0],u=l[1];if(c){const o=.5*f,i=.5*u,t=-o+o%a,e=-t,r=-i+i%a,s=-r,l=0;for(let o=t,i=0;o<=e;o+=a,i+=1)i%l!=0&&(n.push(r,o,0),n.push(s,o,0),n.push(r,o,0));for(let o=r,i=0;o<=s;o+=a,i+=1)i%l!=0&&(n.push(o,t,0),n.push(o,e,0),n.push(o,t,0))}else{for(let o=.5*-f;o<=.5*f;o+=a)n.push(.5*-u,o,0),n.push(.5*u,o,0),n.push(.5*-u,o,0);for(let o=.5*-u;o<=.5*u;o+=a)n.push(o,.5*-f,0),n.push(o,.5*f,0),n.push(o,.5*-f,0)}return o({vert:"precision mediump float;\n\n uniform float camNear, camFar;\n uniform mat4 model, view, projection;\n\n attribute vec3 position;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n void main() {\n fragPosition = position;\n worldPosition = model * vec4(position, 1);\n vec4 glPosition = projection * view * worldPosition;\n gl_Position = glPosition;\n }",frag:"precision mediump float;\n uniform vec4 color;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n uniform vec4 fogColor;\n uniform bool fadeOut;\n void main() {\n float dist = .5;\n if(fadeOut){\n dist = distance( vec2(0.,0.), vec2(worldPosition.x, worldPosition.y));\n dist *= 0.0025;\n dist = sqrt(dist);\n }\n\n gl_FragColor = mix(color, fogColor, dist);\n }\n ",attributes:{position:o.buffer(n)},count:n.length/3,uniforms:{model:(o,i)=>i&&i.model?i.model:mat4.identity([]),color:(o,i)=>i&&i.color?i.color:s,fogColor:(o,i)=>i&&i.color?[i.color[0],i.color[1],i.color[2],0]:[s[0],s[1],s[2],0],fadeOut:(o,i)=>i&&void 0!==i.fadeOut?i.fadeOut:r},lineWidth:(i,n)=>Math.min(n&&n.lineWidth?n.lineWidth:d,o.limits.lineWidthDims[1]),primitive:"lines",cull:{enable:!0,face:"front"},polygonOffset:{enable:!0,offset:{factor:1,units:10*Math.random()}},blend:{enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}})};module.exports=makeDrawGrid; -},{"gl-mat4":549}],624:[function(require,module,exports){ +},{"gl-mat4":550}],625:[function(require,module,exports){ const makeDrawMultiGrid=(e,i)=>{const{size:s,ticks:r}=Object.assign({},{size:[50,50],ticks:[10,1]},i),t=require("./index")(e,{size:s,ticks:r[0]}),u=require("./index")(e,{size:s,ticks:r[1]});return e=>{t(e),u({color:e.subColor,fadeOut:e.fadeOut})}};module.exports=makeDrawMultiGrid; -},{"./index":623}],625:[function(require,module,exports){ +},{"./index":624}],626:[function(require,module,exports){ const vColorFrag="\nprecision mediump float;\nuniform vec4 ucolor;\n\nvoid main () {\n gl_FragColor = ucolor;\n}\n";module.exports={frag:vColorFrag}; -},{}],626:[function(require,module,exports){ +},{}],627:[function(require,module,exports){ const mat4=require("gl-mat4"),{meshColor:meshColor}=require("../../renderDefaults"),drawLines=(e,r={})=>{const o={color:meshColor,geometry:void 0};let{geometry:t,color:s,transparent:a}=Object.assign({},o,r);"color"in t&&(s=t.color);const l=!!(t.indices&&t.indices.length>0),i=!!(t.normals&&t.normals.length>0),n=!!(t.colors&&t.colors.length>0),c={primitive:"lines",vert:n?require("./vColorShaders").vert:require("./meshShaders").vert,frag:n?require("./vColorShaders").frag:require("./colorOnlyShaders").frag,uniforms:{model:(e,r)=>r.model||t.transforms||mat4.create(),ucolor:(e,r)=>r&&r.color?r.color:s},attributes:{position:e.buffer({usage:"static",type:"float",data:t.positions})}};return a&&(c.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),n&&(c.attributes.color=e.buffer({usage:"static",type:"float",data:t.colors})),l&&(c.elements=e.elements({usage:"static",type:"uint16",data:t.indices})),i&&(c.attributes.normal=e.buffer({usage:"static",type:"float",data:t.normals})),e(c)};module.exports=drawLines; -},{"../../renderDefaults":634,"./colorOnlyShaders":625,"./meshShaders":627,"./vColorShaders":628,"gl-mat4":549}],627:[function(require,module,exports){ +},{"../../renderDefaults":635,"./colorOnlyShaders":626,"./meshShaders":628,"./vColorShaders":629,"gl-mat4":550}],628:[function(require,module,exports){ const meshVert="\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\n\nvoid main() {\n\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",meshFrag="\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}";module.exports={vert:meshVert,frag:meshFrag}; -},{}],628:[function(require,module,exports){ +},{}],629:[function(require,module,exports){ const vColorVert="\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n vColor = color;\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n",vColorFrag="\nprecision mediump float;\nvarying vec4 vColor;\n\nvoid main () {\n gl_FragColor = vColor;\n}\n";module.exports={frag:vColorFrag,vert:vColorVert}; -},{}],629:[function(require,module,exports){ +},{}],630:[function(require,module,exports){ const mat4=require("gl-mat4"),{meshColor:meshColor}=require("../../renderDefaults"),drawMesh=(e,r={extras:{}})=>{const t={useVertexColors:!0,dynamicCulling:!0,geometry:void 0,color:meshColor,visuals:{}},{geometry:s,dynamicCulling:a,useVertexColors:o,color:l,visuals:n}=Object.assign({},t,r),i=e.buffer([]),u=!!(s.indices&&s.indices.length>0),c=!!(s.normals&&s.normals.length>0),m="transparent"in n&&n.transparent,g=!!(o&&s.colors&&s.colors.length>0),d=s.transforms||mat4.create(),f=mat4.determinant(d)<0,h=a&&f?"front":"back",p=g?require("./vColorShaders").vert:require("./meshShaders").vert,b=g?require("./vColorShaders").frag:require("./meshShaders").frag,v=mat4.invert(mat4.create(),d);let C={primitive:"triangles",vert:p,frag:b,uniforms:{model:(e,r)=>d,ucolor:(e,r)=>r&&r.color?r.color:l,vColorToggler:(e,r)=>r&&r.useVertexColors&&!0===r.useVertexColors?1:0,unormal:(e,r)=>{const t=mat4.invert(mat4.create(),r.camera.view);return mat4.multiply(t,v,t),mat4.transpose(t,t),t}},attributes:{position:e.buffer({usage:"static",type:"float",data:s.positions}),ao:i},cull:{enable:!0,face:h}};return m&&(C.blend={enable:!0,func:{src:"src alpha",dst:"one minus src alpha"}}),s.cells?C.elements=s.cells:u?C.elements=e.elements({usage:"static",type:"uint16",data:s.indices}):s.triangles?C.elements=s.triangles:C.count=s.positions.length/3,c&&(C.attributes.normal=e.buffer({usage:"static",type:"float",data:s.normals})),g&&(C.attributes.color=e.buffer({usage:"static",type:"float",data:s.colors})),e(C=Object.assign({},C,r.extras))};module.exports=drawMesh; -},{"../../renderDefaults":634,"./meshShaders":630,"./vColorShaders":631,"gl-mat4":549}],630:[function(require,module,exports){ +},{"../../renderDefaults":635,"./meshShaders":631,"./vColorShaders":632,"gl-mat4":550}],631:[function(require,module,exports){ const meshFrag="\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}",meshVert="\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\nvoid main() {\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n";module.exports={vert:meshVert,frag:meshFrag}; -},{}],631:[function(require,module,exports){ +},{}],632:[function(require,module,exports){ const vColorVert="\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection, unormal;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nattribute float ao;\nvarying float ambientAo;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n surfacePosition = (unormal * vec4(position, 1.0)).xyz;\n surfaceNormal = normalize((unormal * vec4(normal, 1.0)).xyz); //vec4 transformedNormal = uNormalMatrix * vec4(aVertexNormal, 1.0);\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n //gl_Position = projection * view * worldSpacePosition;\n\n vColor = color;\n\n //ambientAo = (1. - ao) * (0.5 * max(normal.x, 0.) + 0.5);\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n //gl_Position = zBufferAdjust(glPosition, camNear, camFar);\n}\n",vColorFrag="\nprecision mediump float;\nvarying vec3 surfaceNormal, surfacePosition;\n\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform float specularLightAmount;\n\nuniform vec3 lightDirection;\nuniform vec4 lightColor;\nuniform vec3 opacity;\nuniform float uMaterialShininess;\n\nvarying vec4 vColor;\nuniform vec4 ucolor;\nuniform float vColorToggler;\n\nuniform vec2 printableArea;\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);//vec4(0.15, 0.15, 0.15, 0.3);\nvarying vec4 _worldSpacePosition;\nvarying float ambientAo;\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n vec4 endColor = vColor * vColorToggler + ucolor * (1.0 - vColorToggler);\n\n vec3 ambient = ambientLightAmount * endColor.rgb ; //ambientAo * \n\n float diffuseWeight = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(diffuseWeight , 0.0, 1.0 );\n\n //specular\n \n vec4 specularColor = vec4(lightColor);\n vec3 eyeDirection = normalize(surfacePosition.xyz);\n vec3 reflectionDirection = reflect(-lightDirection, -surfaceNormal);\n float specularLightWeight = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);\n vec3 specular = specularColor.rgb * specularLightWeight * specularLightAmount;\n\n gl_FragColor = vec4((ambient + diffuse + specular), endColor.a);\n}\n";module.exports={frag:vColorFrag,vert:vColorVert}; -},{}],632:[function(require,module,exports){ +},{}],633:[function(require,module,exports){ const renderContext=require("./renderContext"),renderDefaults=require("./renderDefaults"),prepareRender=e=>{const r=Object.assign({},{},e.glOptions,{onDone:(e,r)=>{if(e)throw e}}),n=require("regl")(r),a=new Map;return function(e){var r;n.poll(),(r=e).rendering=Object.assign({},renderDefaults,r.rendering),renderContext(n)(r,e=>{n.clear({color:r.rendering.background,depth:1}),r.entities&&r.entities.sort((e,r)=>{const n="transparent"in e.visuals&&e.visuals.transparent;return n===("transparent"in r.visuals&&r.visuals.transparent)?0:n?1:-1}).forEach(e=>{const{visuals:t}=e;if((!("show"in t)||t.show)&&t.drawCmd&&r.drawCommands[t.drawCmd]){let s;t.cacheId?s=a.get(t.cacheId):(t.cacheId=a.size,s=r.drawCommands[t.drawCmd](n,e),a.set(t.cacheId,s)),s({...e,...t,camera:r.camera})}})})}};module.exports=prepareRender; -},{"./renderContext":633,"./renderDefaults":634,"regl":610}],633:[function(require,module,exports){ +},{"./renderContext":634,"./renderDefaults":635,"regl":611}],634:[function(require,module,exports){ const mat4=require("gl-mat4"),renderWrapper=(e,i={})=>{const{fbo:r}=i,n={cull:{enable:!0},context:{lightDirection:[.2,.2,1]},uniforms:{view:(e,i)=>i.camera.view,eye:(e,i)=>i.camera.position,projection:(e,i)=>i.camera.projection,camNear:(e,i)=>i.camera.near,camFar:(e,i)=>i.camera.far,invertedView:(e,i)=>mat4.invert([],i.camera.view),lightPosition:(e,i)=>i&&i.rendering&&i.rendering.lightPosition?i.rendering.lightPosition:[100,200,100],lightDirection:(e,i)=>i&&i.rendering&&i.rendering.lightDirection?i.rendering.lightDirection:e.lightDirection||[0,0,0],lightView:e=>mat4.lookAt([],e.lightDirection,[0,0,0],[0,0,1]),lightProjection:mat4.ortho([],-25,-25,-20,20,-25,25),lightColor:(e,i)=>i&&i.rendering&&i.rendering.lightColor?i.rendering.lightColor:[1,.8,0],ambientLightAmount:(e,i)=>i&&i.rendering&&i.rendering.ambientLightAmount?i.rendering.ambientLightAmount:.3,diffuseLightAmount:(e,i)=>i&&i.rendering&&i.rendering.diffuseLightAmount?i&&i.rendering&&i.rendering.diffuseLightAmount:.89,specularLightAmount:(e,i)=>i&&i.rendering&&i.rendering.specularLightAmount?i.rendering.specularLightAmount:.16,uMaterialShininess:(e,i)=>i&&i.rendering&&i.rendering.materialShininess?i.rendering.materialShininess:8,materialAmbient:[.5,.8,.3],materialDiffuse:[.5,.8,.3],materialSpecular:[.5,.8,.3]},framebuffer:r};return e(Object.assign({},n,i.extras))};module.exports=renderWrapper; -},{"gl-mat4":549}],634:[function(require,module,exports){ +},{"gl-mat4":550}],635:[function(require,module,exports){ module.exports={background:[1,1,1,1],meshColor:[0,.6,1,1],lightColor:[1,1,1,1],lightDirection:[.2,.2,1],lightPosition:[100,200,100],ambientLightAmount:.3,diffuseLightAmount:.89,specularLightAmount:.16,materialShininess:8}; -},{}],635:[function(require,module,exports){ +},{}],636:[function(require,module,exports){ module.exports=[ {"key": "f", "command": "toPresetView", "args": "front" }, {"key": "b", "command": "toPresetView", "args": "back" }, @@ -2294,29 +2303,29 @@ module.exports=[ {"key": "shift+enter", "command": "editorCommand", "args": "reevaluate"} ] -},{}],636:[function(require,module,exports){ +},{}],637:[function(require,module,exports){ module.exports={ "livereloadUrl": "ws://127.0.0.1:35729/livereload" } -},{}],637:[function(require,module,exports){ -module.exports={"name":"Arctic Sunrise","viewer":{"rendering":{"background":[1,0.8,0.7333333333333333,1],"meshColor":[0.43137254901960786,0.7098039215686275,0.7529411764705882,1]},"grid":{"color":[0,0.4235294117647059,0.5176470588235295,1],"subColor":[0.8862745098039215,0.9098039215686274,0.8941176470588236,1]}},"mainTextColor":[0,0.4235294117647059,0.5176470588235295,1],"secondaryTextColor":"#000000"} },{}],638:[function(require,module,exports){ -module.exports={"name":"Back to School","viewer":{"rendering":{"background":[0.5058823529411764,0.44313725490196076,0.3686274509803922,1],"meshColor":[0.9803921568627451,0.6823529411764706,0.23921568627450981,1]},"grid":{"color":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"subColor":[0.9176470588235294,0.3254901960784314,0.3686274509803922,1]}},"mainTextColor":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Arctic Sunrise","viewer":{"rendering":{"background":[1,0.8,0.7333333333333333,1],"meshColor":[0.43137254901960786,0.7098039215686275,0.7529411764705882,1]},"grid":{"color":[0,0.4235294117647059,0.5176470588235295,1],"subColor":[0.8862745098039215,0.9098039215686274,0.8941176470588236,1]}},"mainTextColor":[0,0.4235294117647059,0.5176470588235295,1],"secondaryTextColor":"#000000"} },{}],639:[function(require,module,exports){ -module.exports={"name":"Beyond Black & White","viewer":{"rendering":{"background":[0.3568627450980392,0.7843137254901961,0.6745098039215687,1],"meshColor":[0.6862745098039216,0.10980392156862745,0.10980392156862745,1]},"grid":{"color":[0.9411764705882353,0.9372549019607843,0.996078431372549,1],"subColor":[0.00784313725490196,0.0196078431372549,0.03529411764705882,1]}},"mainTextColor":[0.9411764705882353,0.9372549019607843,0.996078431372549,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Back to School","viewer":{"rendering":{"background":[0.5058823529411764,0.44313725490196076,0.3686274509803922,1],"meshColor":[0.9803921568627451,0.6823529411764706,0.23921568627450981,1]},"grid":{"color":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"subColor":[0.9176470588235294,0.3254901960784314,0.3686274509803922,1]}},"mainTextColor":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"secondaryTextColor":"#000000"} },{}],640:[function(require,module,exports){ -module.exports={"name":"Bold Berries","viewer":{"rendering":{"background":[0.3137254901960784,0.19215686274509805,0.1843137254901961,1],"meshColor":[0.796078431372549,0,0,1]},"grid":{"color":[0.8941176470588236,0.9176470588235294,0.5490196078431373,1],"subColor":[0.24705882352941178,0.4235294117647059,0.27058823529411763,1]}},"mainTextColor":[0.8941176470588236,0.9176470588235294,0.5490196078431373,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Beyond Black & White","viewer":{"rendering":{"background":[0.3568627450980392,0.7843137254901961,0.6745098039215687,1],"meshColor":[0.6862745098039216,0.10980392156862745,0.10980392156862745,1]},"grid":{"color":[0.9411764705882353,0.9372549019607843,0.996078431372549,1],"subColor":[0.00784313725490196,0.0196078431372549,0.03529411764705882,1]}},"mainTextColor":[0.9411764705882353,0.9372549019607843,0.996078431372549,1],"secondaryTextColor":"#000000"} },{}],641:[function(require,module,exports){ -module.exports={"name":"Candy-coated Brights","viewer":{"rendering":{"background":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"meshColor":[0.8823529411764706,0.19215686274509805,0.34509803921568627,1]},"grid":{"color":[1,0.9254901960784314,0.3607843137254902,1],"subColor":[0,0.5529411764705883,0.796078431372549,1]}},"mainTextColor":[1,0.9254901960784314,0.3607843137254902,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Bold Berries","viewer":{"rendering":{"background":[0.3137254901960784,0.19215686274509805,0.1843137254901961,1],"meshColor":[0.796078431372549,0,0,1]},"grid":{"color":[0.8941176470588236,0.9176470588235294,0.5490196078431373,1],"subColor":[0.24705882352941178,0.4235294117647059,0.27058823529411763,1]}},"mainTextColor":[0.8941176470588236,0.9176470588235294,0.5490196078431373,1],"secondaryTextColor":"#000000"} },{}],642:[function(require,module,exports){ -module.exports={"name":"Cheerful & Friendly","viewer":{"rendering":{"background":[0.16862745098039217,0.3803921568627451,0.42745098039215684,1],"meshColor":[0.6980392156862745,0.8588235294117647,0.8352941176470589,1]},"grid":{"color":[1,1,1,1],"subColor":[0.9803921568627451,0.5529411764705883,0.3843137254901961,1]}},"mainTextColor":[1,1,1,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Candy-coated Brights","viewer":{"rendering":{"background":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"meshColor":[0.8823529411764706,0.19215686274509805,0.34509803921568627,1]},"grid":{"color":[1,0.9254901960784314,0.3607843137254902,1],"subColor":[0,0.5529411764705883,0.796078431372549,1]}},"mainTextColor":[1,0.9254901960784314,0.3607843137254902,1],"secondaryTextColor":"#000000"} },{}],643:[function(require,module,exports){ -module.exports={"name":"Classic Metallics","viewer":{"rendering":{"background":[0.03137254901960784,0.027450980392156862,0.023529411764705882,1],"meshColor":[0.9568627450980393,0.9568627450980393,0.9372549019607843,1]},"grid":{"color":[0.8196078431372549,0.6980392156862745,0.5019607843137255,1],"subColor":[0.34901960784313724,0.30196078431372547,0.27450980392156865,1]}},"mainTextColor":[0.8196078431372549,0.6980392156862745,0.5019607843137255,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Cheerful & Friendly","viewer":{"rendering":{"background":[0.16862745098039217,0.3803921568627451,0.42745098039215684,1],"meshColor":[0.6980392156862745,0.8588235294117647,0.8352941176470589,1]},"grid":{"color":[1,1,1,1],"subColor":[0.9803921568627451,0.5529411764705883,0.3843137254901961,1]}},"mainTextColor":[1,1,1,1],"secondaryTextColor":"#000000"} },{}],644:[function(require,module,exports){ -module.exports={"name":"Cozy & Warm","viewer":{"rendering":{"background":[0.4,0.13333333333333333,0.1450980392156863,1],"meshColor":[0.7098039215686275,0.11372549019607843,0.0392156862745098,1]},"grid":{"color":[0.9176470588235294,0.8274509803921568,0.611764705882353,1],"subColor":[0.49019607843137253,0.3686274509803922,0.23529411764705882,1]}},"mainTextColor":[0.9176470588235294,0.8274509803921568,0.611764705882353,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Classic Metallics","viewer":{"rendering":{"background":[0.03137254901960784,0.027450980392156862,0.023529411764705882,1],"meshColor":[0.9568627450980393,0.9568627450980393,0.9372549019607843,1]},"grid":{"color":[0.8196078431372549,0.6980392156862745,0.5019607843137255,1],"subColor":[0.34901960784313724,0.30196078431372547,0.27450980392156865,1]}},"mainTextColor":[0.8196078431372549,0.6980392156862745,0.5019607843137255,1],"secondaryTextColor":"#000000"} },{}],645:[function(require,module,exports){ -module.exports={"name":"Crisp & Dramatic","viewer":{"rendering":{"background":[0.3137254901960784,0.3176470588235294,0.3764705882352941,1],"meshColor":[0.40784313725490196,0.5098039215686274,0.6196078431372549,1]},"grid":{"color":[0.6823529411764706,0.7411764705882353,0.2196078431372549,1],"subColor":[0.34901960784313724,0.5098039215686274,0.20392156862745098,1]}},"mainTextColor":[0.6823529411764706,0.7411764705882353,0.2196078431372549,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Cozy & Warm","viewer":{"rendering":{"background":[0.4,0.13333333333333333,0.1450980392156863,1],"meshColor":[0.7098039215686275,0.11372549019607843,0.0392156862745098,1]},"grid":{"color":[0.9176470588235294,0.8274509803921568,0.611764705882353,1],"subColor":[0.49019607843137253,0.3686274509803922,0.23529411764705882,1]}},"mainTextColor":[0.9176470588235294,0.8274509803921568,0.611764705882353,1],"secondaryTextColor":"#000000"} },{}],646:[function(require,module,exports){ +module.exports={"name":"Crisp & Dramatic","viewer":{"rendering":{"background":[0.3137254901960784,0.3176470588235294,0.3764705882352941,1],"meshColor":[0.40784313725490196,0.5098039215686274,0.6196078431372549,1]},"grid":{"color":[0.6823529411764706,0.7411764705882353,0.2196078431372549,1],"subColor":[0.34901960784313724,0.5098039215686274,0.20392156862745098,1]}},"mainTextColor":[0.6823529411764706,0.7411764705882353,0.2196078431372549,1],"secondaryTextColor":"#000000"} +},{}],647:[function(require,module,exports){ module.exports={ "name": "Dark", "viewer": { @@ -2333,13 +2342,13 @@ module.exports={ "secondaryTextColor": "#000" } -},{}],647:[function(require,module,exports){ -module.exports={"name":"Distinctive & Unexpected","viewer":{"rendering":{"background":[0.3568627450980392,0.7843137254901961,0.6745098039215687,1],"meshColor":[0.6941176470588235,0.8431372549019608,0.8235294117647058,1]},"grid":{"color":[0.2627450980392157,0.1803921568627451,0.2,1],"subColor":[0.9058823529411765,0.2784313725490196,0.1803921568627451,1]}},"mainTextColor":[0.2627450980392157,0.1803921568627451,0.2,1],"secondaryTextColor":"#000000"} },{}],648:[function(require,module,exports){ -module.exports={"name":"Exotic & High-impact","viewer":{"rendering":{"background":[0.058823529411764705,0.12156862745098039,0.2196078431372549,1],"meshColor":[0.45098039215686275,0.3764705882352941,0.3568627450980392,1]},"grid":{"color":[0.9607843137254902,0.32941176470588235,0.28627450980392155,1],"subColor":[0.10588235294117647,0.29411764705882354,0.35294117647058826,1]}},"mainTextColor":[0.9607843137254902,0.32941176470588235,0.28627450980392155,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Distinctive & Unexpected","viewer":{"rendering":{"background":[0.3568627450980392,0.7843137254901961,0.6745098039215687,1],"meshColor":[0.6941176470588235,0.8431372549019608,0.8235294117647058,1]},"grid":{"color":[0.2627450980392157,0.1803921568627451,0.2,1],"subColor":[0.9058823529411765,0.2784313725490196,0.1803921568627451,1]}},"mainTextColor":[0.2627450980392157,0.1803921568627451,0.2,1],"secondaryTextColor":"#000000"} },{}],649:[function(require,module,exports){ -module.exports={"name":"Golden Afternoon","viewer":{"rendering":{"background":[0.5333333333333333,0.1411764705882353,0.14901960784313725,1],"meshColor":[0.803921568627451,0.7450980392156863,0.6549019607843137,1]},"grid":{"color":[0.19607843137254902,0.18823529411764706,0.18823529411764706,1],"subColor":[0.7607843137254902,0.5843137254901961,0.27058823529411763,1]}},"mainTextColor":[0.19607843137254902,0.18823529411764706,0.18823529411764706,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Exotic & High-impact","viewer":{"rendering":{"background":[0.058823529411764705,0.12156862745098039,0.2196078431372549,1],"meshColor":[0.45098039215686275,0.3764705882352941,0.3568627450980392,1]},"grid":{"color":[0.9607843137254902,0.32941176470588235,0.28627450980392155,1],"subColor":[0.10588235294117647,0.29411764705882354,0.35294117647058826,1]}},"mainTextColor":[0.9607843137254902,0.32941176470588235,0.28627450980392155,1],"secondaryTextColor":"#000000"} },{}],650:[function(require,module,exports){ +module.exports={"name":"Golden Afternoon","viewer":{"rendering":{"background":[0.5333333333333333,0.1411764705882353,0.14901960784313725,1],"meshColor":[0.803921568627451,0.7450980392156863,0.6549019607843137,1]},"grid":{"color":[0.19607843137254902,0.18823529411764706,0.18823529411764706,1],"subColor":[0.7607843137254902,0.5843137254901961,0.27058823529411763,1]}},"mainTextColor":[0.19607843137254902,0.18823529411764706,0.18823529411764706,1],"secondaryTextColor":"#000000"} +},{}],651:[function(require,module,exports){ module.exports={ "name": "Grass", "viewer": { @@ -2356,13 +2365,13 @@ module.exports={ "secondaryTextColor": "#000" } -},{}],651:[function(require,module,exports){ -module.exports={"name":"Grecian Holiday","viewer":{"rendering":{"background":[0.1607843137254902,0.5333333333333333,0.7372549019607844,1],"meshColor":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1]},"grid":{"color":[0.9568627450980393,0.9176470588235294,0.8705882352941177,1],"subColor":[0.9294117647058824,0.5490196078431373,0.4470588235294118,1]}},"mainTextColor":[0.9568627450980393,0.9176470588235294,0.8705882352941177,1],"secondaryTextColor":"#000000"} },{}],652:[function(require,module,exports){ -module.exports={"name":"Green Fields","viewer":{"rendering":{"background":[0.5686274509803921,0.5882352941176471,0.21176470588235294,1],"meshColor":[0.3215686274509804,0.2901960784313726,0.22745098039215686,1]},"grid":{"color":[1,0.9803921568627451,0.8823529411764706,1],"subColor":[0.35294117647058826,0.37254901960784315,0.21568627450980393,1]}},"mainTextColor":[1,0.9803921568627451,0.8823529411764706,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Grecian Holiday","viewer":{"rendering":{"background":[0.1607843137254902,0.5333333333333333,0.7372549019607844,1],"meshColor":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1]},"grid":{"color":[0.9568627450980393,0.9176470588235294,0.8705882352941177,1],"subColor":[0.9294117647058824,0.5490196078431373,0.4470588235294118,1]}},"mainTextColor":[0.9568627450980393,0.9176470588235294,0.8705882352941177,1],"secondaryTextColor":"#000000"} },{}],653:[function(require,module,exports){ -module.exports={"name":"Icy Blues and Grays","viewer":{"rendering":{"background":[0.9450980392156862,0.9450980392156862,0.9490196078431372,1],"meshColor":[0.7372549019607844,0.7294117647058823,0.7450980392156863,1]},"grid":{"color":[0.6313725490196078,0.8392156862745098,0.8862745098039215,1],"subColor":[0.09803921568627451,0.5843137254901961,0.6784313725490196,1]}},"mainTextColor":[0.6313725490196078,0.8392156862745098,0.8862745098039215,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Green Fields","viewer":{"rendering":{"background":[0.5686274509803921,0.5882352941176471,0.21176470588235294,1],"meshColor":[0.3215686274509804,0.2901960784313726,0.22745098039215686,1]},"grid":{"color":[1,0.9803921568627451,0.8823529411764706,1],"subColor":[0.35294117647058826,0.37254901960784315,0.21568627450980393,1]}},"mainTextColor":[1,0.9803921568627451,0.8823529411764706,1],"secondaryTextColor":"#000000"} },{}],654:[function(require,module,exports){ +module.exports={"name":"Icy Blues and Grays","viewer":{"rendering":{"background":[0.9450980392156862,0.9450980392156862,0.9490196078431372,1],"meshColor":[0.7372549019607844,0.7294117647058823,0.7450980392156863,1]},"grid":{"color":[0.6313725490196078,0.8392156862745098,0.8862745098039215,1],"subColor":[0.09803921568627451,0.5843137254901961,0.6784313725490196,1]}},"mainTextColor":[0.6313725490196078,0.8392156862745098,0.8862745098039215,1],"secondaryTextColor":"#000000"} +},{}],655:[function(require,module,exports){ module.exports={ "name": "Light", "viewer": { @@ -2379,17 +2388,17 @@ module.exports={ "secondaryTextColor": "#000" } -},{}],655:[function(require,module,exports){ -module.exports={"name":"Light & Natural","viewer":{"rendering":{"background":[0.2,0.4196078431372549,0.5294117647058824,1],"meshColor":[0.6313725490196078,0.7450980392156863,0.5843137254901961,1]},"grid":{"color":[0.9803921568627451,0.9372549019607843,0.8313725490196079,1],"subColor":[0.6470588235294118,0.48627450980392156,0.396078431372549,1]}},"mainTextColor":[0.9803921568627451,0.9372549019607843,0.8313725490196079,1],"secondaryTextColor":"#000000"} },{}],656:[function(require,module,exports){ -module.exports={"name":"Modern & Urban","viewer":{"rendering":{"background":[0.9764705882352941,0.7294117647058823,0.19607843137254902,1],"meshColor":[0.25882352941176473,0.43137254901960786,0.5254901960784314,1]},"grid":{"color":[0.9725490196078431,0.9450980392156862,0.8980392156862745,1],"subColor":[0.1843137254901961,0.19215686274509805,0.19215686274509805,1]}},"mainTextColor":[0.9725490196078431,0.9450980392156862,0.8980392156862745,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Light & Natural","viewer":{"rendering":{"background":[0.2,0.4196078431372549,0.5294117647058824,1],"meshColor":[0.6313725490196078,0.7450980392156863,0.5843137254901961,1]},"grid":{"color":[0.9803921568627451,0.9372549019607843,0.8313725490196079,1],"subColor":[0.6470588235294118,0.48627450980392156,0.396078431372549,1]}},"mainTextColor":[0.9803921568627451,0.9372549019607843,0.8313725490196079,1],"secondaryTextColor":"#000000"} },{}],657:[function(require,module,exports){ -module.exports={"name":"Naturally Elegant","viewer":{"rendering":{"background":[0.9215686274509803,0.8745098039215686,0,1],"meshColor":[0.49411764705882355,0.4823529411764706,0.08235294117647059,1]},"grid":{"color":[0.33725490196078434,0.24313725490196078,0.12549019607843137,1],"subColor":[0.788235294117647,0.6196078431372549,0.06274509803921569,1]}},"mainTextColor":[0.33725490196078434,0.24313725490196078,0.12549019607843137,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Modern & Urban","viewer":{"rendering":{"background":[0.9764705882352941,0.7294117647058823,0.19607843137254902,1],"meshColor":[0.25882352941176473,0.43137254901960786,0.5254901960784314,1]},"grid":{"color":[0.9725490196078431,0.9450980392156862,0.8980392156862745,1],"subColor":[0.1843137254901961,0.19215686274509805,0.19215686274509805,1]}},"mainTextColor":[0.9725490196078431,0.9450980392156862,0.8980392156862745,1],"secondaryTextColor":"#000000"} },{}],658:[function(require,module,exports){ -module.exports={"name":"Neon Night","viewer":{"rendering":{"background":[0.9686274509803922,0.4627450980392157,0.01568627450980392,1],"meshColor":[0.1450980392156863,0.5019607843137255,0.2235294117647059,1]},"grid":{"color":[0.9607843137254902,0.4235294117647059,0.3411764705882353,1],"subColor":[0.13725490196078433,0.10588235294117647,0.07058823529411765,1]}},"mainTextColor":[0.9607843137254902,0.4235294117647059,0.3411764705882353,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Naturally Elegant","viewer":{"rendering":{"background":[0.9215686274509803,0.8745098039215686,0,1],"meshColor":[0.49411764705882355,0.4823529411764706,0.08235294117647059,1]},"grid":{"color":[0.33725490196078434,0.24313725490196078,0.12549019607843137,1],"subColor":[0.788235294117647,0.6196078431372549,0.06274509803921569,1]}},"mainTextColor":[0.33725490196078434,0.24313725490196078,0.12549019607843137,1],"secondaryTextColor":"#000000"} },{}],659:[function(require,module,exports){ -module.exports={"name":"Nightlife","viewer":{"rendering":{"background":[0,0.8117647058823529,0.9803921568627451,1],"meshColor":[1,0,0.2196078431372549,1]},"grid":{"color":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1],"subColor":[0.00784313725490196,0.0196078431372549,0.03529411764705882,1]}},"mainTextColor":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Neon Night","viewer":{"rendering":{"background":[0.9686274509803922,0.4627450980392157,0.01568627450980392,1],"meshColor":[0.1450980392156863,0.5019607843137255,0.2235294117647059,1]},"grid":{"color":[0.9607843137254902,0.4235294117647059,0.3411764705882353,1],"subColor":[0.13725490196078433,0.10588235294117647,0.07058823529411765,1]}},"mainTextColor":[0.9607843137254902,0.4235294117647059,0.3411764705882353,1],"secondaryTextColor":"#000000"} },{}],660:[function(require,module,exports){ +module.exports={"name":"Nightlife","viewer":{"rendering":{"background":[0,0.8117647058823529,0.9803921568627451,1],"meshColor":[1,0,0.2196078431372549,1]},"grid":{"color":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1],"subColor":[0.00784313725490196,0.0196078431372549,0.03529411764705882,1]}},"mainTextColor":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1],"secondaryTextColor":"#000000"} +},{}],661:[function(require,module,exports){ module.exports={ "name": "Ocean", "viewer": { @@ -2406,44 +2415,44 @@ module.exports={ "secondaryTextColor": "#000" } -},{}],661:[function(require,module,exports){ -module.exports={"name":"Outdoorsy & Natural","viewer":{"rendering":{"background":[0.1803921568627451,0.27450980392156865,0,1],"meshColor":[0.2823529411764706,0.4196078431372549,0,1]},"grid":{"color":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1],"subColor":[0.49019607843137253,0.26666666666666666,0.15294117647058825,1]}},"mainTextColor":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1],"secondaryTextColor":"#000000"} },{}],662:[function(require,module,exports){ -module.exports={"name":"Pool Party","viewer":{"rendering":{"background":[0.20392156862745098,0.30196078431372547,0.5647058823529412,1],"meshColor":[0.3607843137254902,0.7725490196078432,0.9372549019607843,1]},"grid":{"color":[0.9764705882352941,0.6509803921568628,0.011764705882352941,1],"subColor":[0.9058823529411765,0.3333333333333333,0.17254901960784313,1]}},"mainTextColor":[0.9764705882352941,0.6509803921568628,0.011764705882352941,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Outdoorsy & Natural","viewer":{"rendering":{"background":[0.1803921568627451,0.27450980392156865,0,1],"meshColor":[0.2823529411764706,0.4196078431372549,0,1]},"grid":{"color":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1],"subColor":[0.49019607843137253,0.26666666666666666,0.15294117647058825,1]}},"mainTextColor":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1],"secondaryTextColor":"#000000"} },{}],663:[function(require,module,exports){ -module.exports={"name":"Primary Colors","viewer":{"rendering":{"background":[0.21568627450980393,0.3686274509803922,0.592156862745098,1],"meshColor":[0.984313725490196,0.396078431372549,0.25882352941176473,1]},"grid":{"color":[1,0.7333333333333333,0,1],"subColor":[0.2823529411764706,0.4196078431372549,0,1]}},"mainTextColor":[1,0.7333333333333333,0,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Pool Party","viewer":{"rendering":{"background":[0.20392156862745098,0.30196078431372547,0.5647058823529412,1],"meshColor":[0.3607843137254902,0.7725490196078432,0.9372549019607843,1]},"grid":{"color":[0.9764705882352941,0.6509803921568628,0.011764705882352941,1],"subColor":[0.9058823529411765,0.3333333333333333,0.17254901960784313,1]}},"mainTextColor":[0.9764705882352941,0.6509803921568628,0.011764705882352941,1],"secondaryTextColor":"#000000"} },{}],664:[function(require,module,exports){ -module.exports={"name":"Serene & Spa-like","viewer":{"rendering":{"background":[0.6313725490196078,0.7450980392156863,0.5843137254901961,1],"meshColor":[0.8862745098039215,0.8745098039215686,0.6352941176470588,1]},"grid":{"color":[0.5725490196078431,0.6666666666666666,0.7803921568627451,1],"subColor":[0.9294117647058824,0.3411764705882353,0.3215686274509804,1]}},"mainTextColor":[0.5725490196078431,0.6666666666666666,0.7803921568627451,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Primary Colors","viewer":{"rendering":{"background":[0.21568627450980393,0.3686274509803922,0.592156862745098,1],"meshColor":[0.984313725490196,0.396078431372549,0.25882352941176473,1]},"grid":{"color":[1,0.7333333333333333,0,1],"subColor":[0.2823529411764706,0.4196078431372549,0,1]}},"mainTextColor":[1,0.7333333333333333,0,1],"secondaryTextColor":"#000000"} },{}],665:[function(require,module,exports){ -module.exports={"name":"Shades of Citrus","viewer":{"rendering":{"background":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"meshColor":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1]},"grid":{"color":[0.29411764705882354,0.4549019607843137,0.2784313725490196,1],"subColor":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1]}},"mainTextColor":[0.29411764705882354,0.4549019607843137,0.2784313725490196,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Serene & Spa-like","viewer":{"rendering":{"background":[0.6313725490196078,0.7450980392156863,0.5843137254901961,1],"meshColor":[0.8862745098039215,0.8745098039215686,0.6352941176470588,1]},"grid":{"color":[0.5725490196078431,0.6666666666666666,0.7803921568627451,1],"subColor":[0.9294117647058824,0.3411764705882353,0.3215686274509804,1]}},"mainTextColor":[0.5725490196078431,0.6666666666666666,0.7803921568627451,1],"secondaryTextColor":"#000000"} },{}],666:[function(require,module,exports){ -module.exports={"name":"Sleek & Modern","viewer":{"rendering":{"background":[0.00784313725490196,0.10980392156862745,0.11764705882352941,1],"meshColor":[0.6941176470588235,0.8431372549019608,0.8235294117647058,1]},"grid":{"color":[1,1,1,1],"subColor":[0.22745098039215686,0.3176470588235294,0.6,1]}},"mainTextColor":[1,1,1,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Shades of Citrus","viewer":{"rendering":{"background":[0.9215686274509803,0.5411764705882353,0.26666666666666666,1],"meshColor":[0.9764705882352941,0.8627450980392157,0.1411764705882353,1]},"grid":{"color":[0.29411764705882354,0.4549019607843137,0.2784313725490196,1],"subColor":[0.6352941176470588,0.7725490196078432,0.13725490196078433,1]}},"mainTextColor":[0.29411764705882354,0.4549019607843137,0.2784313725490196,1],"secondaryTextColor":"#000000"} },{}],667:[function(require,module,exports){ -module.exports={"name":"Smoky Purples","viewer":{"rendering":{"background":[0.7372549019607844,0.7294117647058823,0.7450980392156863,1],"meshColor":[0.4470588235294118,0.4392156862745098,0.4666666666666667,1]},"grid":{"color":[0.9333333333333333,0.8470588235294118,0.788235294117647,1],"subColor":[0.9137254901960784,0.592156862745098,0.5294117647058824,1]}},"mainTextColor":[0.9333333333333333,0.8470588235294118,0.788235294117647,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Sleek & Modern","viewer":{"rendering":{"background":[0.00784313725490196,0.10980392156862745,0.11764705882352941,1],"meshColor":[0.6941176470588235,0.8431372549019608,0.8235294117647058,1]},"grid":{"color":[1,1,1,1],"subColor":[0.22745098039215686,0.3176470588235294,0.6,1]}},"mainTextColor":[1,1,1,1],"secondaryTextColor":"#000000"} },{}],668:[function(require,module,exports){ -module.exports={"name":"Subtle & Versatile","viewer":{"rendering":{"background":[0.17254901960784313,0.2901960784313726,0.3215686274509804,1],"meshColor":[0.7490196078431373,0.8627450980392157,0.8117647058823529,1]},"grid":{"color":[0.8784313725490196,0.34509803921568627,0.34509803921568627,1],"subColor":[0.8352941176470589,0.788235294117647,0.6941176470588235,1]}},"mainTextColor":[0.8784313725490196,0.34509803921568627,0.34509803921568627,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Smoky Purples","viewer":{"rendering":{"background":[0.7372549019607844,0.7294117647058823,0.7450980392156863,1],"meshColor":[0.4470588235294118,0.4392156862745098,0.4666666666666667,1]},"grid":{"color":[0.9333333333333333,0.8470588235294118,0.788235294117647,1],"subColor":[0.9137254901960784,0.592156862745098,0.5294117647058824,1]}},"mainTextColor":[0.9333333333333333,0.8470588235294118,0.788235294117647,1],"secondaryTextColor":"#000000"} },{}],669:[function(require,module,exports){ -module.exports={"name":"Summer Barbeque","viewer":{"rendering":{"background":[0.3607843137254902,0.5607843137254902,0.13333333333333333,1],"meshColor":[0.4588235294117647,0.16470588235294117,0.027450980392156862,1]},"grid":{"color":[0.984313725490196,0.796078431372549,0.4823529411764706,1],"subColor":[0.8117647058823529,0.21568627450980393,0.12941176470588237,1]}},"mainTextColor":[0.984313725490196,0.796078431372549,0.4823529411764706,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Subtle & Versatile","viewer":{"rendering":{"background":[0.17254901960784313,0.2901960784313726,0.3215686274509804,1],"meshColor":[0.7490196078431373,0.8627450980392157,0.8117647058823529,1]},"grid":{"color":[0.8784313725490196,0.34509803921568627,0.34509803921568627,1],"subColor":[0.8352941176470589,0.788235294117647,0.6941176470588235,1]}},"mainTextColor":[0.8784313725490196,0.34509803921568627,0.34509803921568627,1],"secondaryTextColor":"#000000"} },{}],670:[function(require,module,exports){ -module.exports={"name":"Summer Sunflower","viewer":{"rendering":{"background":[0.30196078431372547,0.5215686274509804,0.7411764705882353,1],"meshColor":[0.48627450980392156,0.6666666666666666,0.17647058823529413,1]},"grid":{"color":[1,0.7333333333333333,0,1],"subColor":[0.796078431372549,0.38823529411764707,0.09411764705882353,1]}},"mainTextColor":[1,0.7333333333333333,0,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Summer Barbeque","viewer":{"rendering":{"background":[0.3607843137254902,0.5607843137254902,0.13333333333333333,1],"meshColor":[0.4588235294117647,0.16470588235294117,0.027450980392156862,1]},"grid":{"color":[0.984313725490196,0.796078431372549,0.4823529411764706,1],"subColor":[0.8117647058823529,0.21568627450980393,0.12941176470588237,1]}},"mainTextColor":[0.984313725490196,0.796078431372549,0.4823529411764706,1],"secondaryTextColor":"#000000"} },{}],671:[function(require,module,exports){ -module.exports={"name":"Surf & Turf","viewer":{"rendering":{"background":[0.9568627450980393,0.8,0.4392156862745098,1],"meshColor":[0.8705882352941177,0.47843137254901963,0.13333333333333333,1]},"grid":{"color":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1],"subColor":[0.41568627450980394,0.6941176470588235,0.5294117647058824,1]}},"mainTextColor":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Summer Sunflower","viewer":{"rendering":{"background":[0.30196078431372547,0.5215686274509804,0.7411764705882353,1],"meshColor":[0.48627450980392156,0.6666666666666666,0.17647058823529413,1]},"grid":{"color":[1,0.7333333333333333,0,1],"subColor":[0.796078431372549,0.38823529411764707,0.09411764705882353,1]}},"mainTextColor":[1,0.7333333333333333,0,1],"secondaryTextColor":"#000000"} },{}],672:[function(require,module,exports){ -module.exports={"name":"Technology Meets Nature","viewer":{"rendering":{"background":[0.984313725490196,0.803921568627451,0.29411764705882354,1],"meshColor":[0.6392156862745098,0.6470588235294118,0.6,1]},"grid":{"color":[0.11764705882352941,0,0,1],"subColor":[0.3607843137254902,0.5607843137254902,0.13333333333333333,1]}},"mainTextColor":[0.11764705882352941,0,0,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Surf & Turf","viewer":{"rendering":{"background":[0.9568627450980393,0.8,0.4392156862745098,1],"meshColor":[0.8705882352941177,0.47843137254901963,0.13333333333333333,1]},"grid":{"color":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1],"subColor":[0.41568627450980394,0.6941176470588235,0.5294117647058824,1]}},"mainTextColor":[0.12549019607843137,0.5803921568627451,0.5450980392156862,1],"secondaryTextColor":"#000000"} },{}],673:[function(require,module,exports){ -module.exports={"name":"Understated & Versatile","viewer":{"rendering":{"background":[0.2,0.3215686274509804,0.3215686274509804,1],"meshColor":[0.788235294117647,0.8196078431372549,0.7843137254901961,1]},"grid":{"color":[0.6078431372549019,0.30980392156862746,0.058823529411764705,1],"subColor":[0.17647058823529413,0.18823529411764706,0.2,1]}},"mainTextColor":[0.6078431372549019,0.30980392156862746,0.058823529411764705,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Technology Meets Nature","viewer":{"rendering":{"background":[0.984313725490196,0.803921568627451,0.29411764705882354,1],"meshColor":[0.6392156862745098,0.6470588235294118,0.6,1]},"grid":{"color":[0.11764705882352941,0,0,1],"subColor":[0.3607843137254902,0.5607843137254902,0.13333333333333333,1]}},"mainTextColor":[0.11764705882352941,0,0,1],"secondaryTextColor":"#000000"} },{}],674:[function(require,module,exports){ -module.exports={"name":"Warm & Cool","viewer":{"rendering":{"background":[0.26666666666666666,0.2980392156862745,0.3607843137254902,1],"meshColor":[0.807843137254902,0.35294117647058826,0.3411764705882353,1]},"grid":{"color":[0.47058823529411764,0.6470588235294118,0.6392156862745098,1],"subColor":[0.8823529411764706,0.6941176470588235,0.41568627450980394,1]}},"mainTextColor":[0.47058823529411764,0.6470588235294118,0.6392156862745098,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Understated & Versatile","viewer":{"rendering":{"background":[0.2,0.3215686274509804,0.3215686274509804,1],"meshColor":[0.788235294117647,0.8196078431372549,0.7843137254901961,1]},"grid":{"color":[0.6078431372549019,0.30980392156862746,0.058823529411764705,1],"subColor":[0.17647058823529413,0.18823529411764706,0.2,1]}},"mainTextColor":[0.6078431372549019,0.30980392156862746,0.058823529411764705,1],"secondaryTextColor":"#000000"} },{}],675:[function(require,module,exports){ -module.exports={"name":"Warm & Rustic","viewer":{"rendering":{"background":[0.996078431372549,0.9490196078431372,0.8941176470588236,1],"meshColor":[0.9921568627450981,0.592156862745098,0.30980392156862746,1]},"grid":{"color":[0.7764705882352941,0,0,1],"subColor":[0.5019607843137255,0.35294117647058826,0.23137254901960785,1]}},"mainTextColor":[0.7764705882352941,0,0,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Warm & Cool","viewer":{"rendering":{"background":[0.26666666666666666,0.2980392156862745,0.3607843137254902,1],"meshColor":[0.807843137254902,0.35294117647058826,0.3411764705882353,1]},"grid":{"color":[0.47058823529411764,0.6470588235294118,0.6392156862745098,1],"subColor":[0.8823529411764706,0.6941176470588235,0.41568627450980394,1]}},"mainTextColor":[0.47058823529411764,0.6470588235294118,0.6392156862745098,1],"secondaryTextColor":"#000000"} },{}],676:[function(require,module,exports){ -module.exports={"name":"Wintery Reds","viewer":{"rendering":{"background":[0.9254901960784314,0.5882352941176471,0.6431372549019608,1],"meshColor":[0.8431372549019608,0.17254901960784313,0.08627450980392157,1]},"grid":{"color":[0.9411764705882353,0.9372549019607843,0.9176470588235294,1],"subColor":[0.7529411764705882,0.6980392156862745,0.7098039215686275,1]}},"mainTextColor":[0.9411764705882353,0.9372549019607843,0.9176470588235294,1],"secondaryTextColor":"#000000"} +module.exports={"name":"Warm & Rustic","viewer":{"rendering":{"background":[0.996078431372549,0.9490196078431372,0.8941176470588236,1],"meshColor":[0.9921568627450981,0.592156862745098,0.30980392156862746,1]},"grid":{"color":[0.7764705882352941,0,0,1],"subColor":[0.5019607843137255,0.35294117647058826,0.23137254901960785,1]}},"mainTextColor":[0.7764705882352941,0,0,1],"secondaryTextColor":"#000000"} },{}],677:[function(require,module,exports){ +module.exports={"name":"Wintery Reds","viewer":{"rendering":{"background":[0.9254901960784314,0.5882352941176471,0.6431372549019608,1],"meshColor":[0.8431372549019608,0.17254901960784313,0.08627450980392157,1]},"grid":{"color":[0.9411764705882353,0.9372549019607843,0.9176470588235294,1],"subColor":[0.7529411764705882,0.6980392156862745,0.7098039215686275,1]}},"mainTextColor":[0.9411764705882353,0.9372549019607843,0.9176470588235294,1],"secondaryTextColor":"#000000"} +},{}],678:[function(require,module,exports){ module.exports={dark:require("./theme.dark.json"),grass:require("./theme.grass.json"),light:require("./theme.light.json"),ocean:require("./theme.ocean.json"),arcticsunrise:require("./theme.arcticsunrise.json"),backtoschool:require("./theme.backtoschool.json"),beyondblackwhite:require("./theme.beyondblackwhite.json"),boldberries:require("./theme.boldberries.json"),candycoatedbrights:require("./theme.candycoatedbrights.json"),cheerfulfriendly:require("./theme.cheerfulfriendly.json"),classicmetallics:require("./theme.classicmetallics.json"),cozywarm:require("./theme.cozywarm.json"),crispdramatic:require("./theme.crispdramatic.json"),distinctiveunexpected:require("./theme.distinctiveunexpected.json"),exotichighimpact:require("./theme.exotichighimpact.json"),goldenafternoon:require("./theme.goldenafternoon.json"),grecianholiday:require("./theme.grecianholiday.json"),greenfields:require("./theme.greenfields.json"),icybluesandgrays:require("./theme.icybluesandgrays.json"),lightnatural:require("./theme.lightnatural.json"),modernurban:require("./theme.modernurban.json"),naturallyelegant:require("./theme.naturallyelegant.json"),neonnight:require("./theme.neonnight.json"),nightlife:require("./theme.nightlife.json"),outdoorsynatural:require("./theme.outdoorsynatural.json"),poolparty:require("./theme.poolparty.json"),primarycolors:require("./theme.primarycolors.json"),serenespalike:require("./theme.serenespalike.json"),shadesofcitrus:require("./theme.shadesofcitrus.json"),sleekmodern:require("./theme.sleekmodern.json"),smokypurples:require("./theme.smokypurples.json"),subtleversatile:require("./theme.subtleversatile.json"),summerbarbeque:require("./theme.summerbarbeque.json"),summersunflower:require("./theme.summersunflower.json"),surfturf:require("./theme.surfturf.json"),technologymeetsnature:require("./theme.technologymeetsnature.json"),understatedversatile:require("./theme.understatedversatile.json"),warmcool:require("./theme.warmcool.json"),warmrustic:require("./theme.warmrustic.json"),winteryreds:require("./theme.winteryreds.json")}; -},{"./theme.arcticsunrise.json":637,"./theme.backtoschool.json":638,"./theme.beyondblackwhite.json":639,"./theme.boldberries.json":640,"./theme.candycoatedbrights.json":641,"./theme.cheerfulfriendly.json":642,"./theme.classicmetallics.json":643,"./theme.cozywarm.json":644,"./theme.crispdramatic.json":645,"./theme.dark.json":646,"./theme.distinctiveunexpected.json":647,"./theme.exotichighimpact.json":648,"./theme.goldenafternoon.json":649,"./theme.grass.json":650,"./theme.grecianholiday.json":651,"./theme.greenfields.json":652,"./theme.icybluesandgrays.json":653,"./theme.light.json":654,"./theme.lightnatural.json":655,"./theme.modernurban.json":656,"./theme.naturallyelegant.json":657,"./theme.neonnight.json":658,"./theme.nightlife.json":659,"./theme.ocean.json":660,"./theme.outdoorsynatural.json":661,"./theme.poolparty.json":662,"./theme.primarycolors.json":663,"./theme.serenespalike.json":664,"./theme.shadesofcitrus.json":665,"./theme.sleekmodern.json":666,"./theme.smokypurples.json":667,"./theme.subtleversatile.json":668,"./theme.summerbarbeque.json":669,"./theme.summersunflower.json":670,"./theme.surfturf.json":671,"./theme.technologymeetsnature.json":672,"./theme.understatedversatile.json":673,"./theme.warmcool.json":674,"./theme.warmrustic.json":675,"./theme.winteryreds.json":676}],678:[function(require,module,exports){ +},{"./theme.arcticsunrise.json":638,"./theme.backtoschool.json":639,"./theme.beyondblackwhite.json":640,"./theme.boldberries.json":641,"./theme.candycoatedbrights.json":642,"./theme.cheerfulfriendly.json":643,"./theme.classicmetallics.json":644,"./theme.cozywarm.json":645,"./theme.crispdramatic.json":646,"./theme.dark.json":647,"./theme.distinctiveunexpected.json":648,"./theme.exotichighimpact.json":649,"./theme.goldenafternoon.json":650,"./theme.grass.json":651,"./theme.grecianholiday.json":652,"./theme.greenfields.json":653,"./theme.icybluesandgrays.json":654,"./theme.light.json":655,"./theme.lightnatural.json":656,"./theme.modernurban.json":657,"./theme.naturallyelegant.json":658,"./theme.neonnight.json":659,"./theme.nightlife.json":660,"./theme.ocean.json":661,"./theme.outdoorsynatural.json":662,"./theme.poolparty.json":663,"./theme.primarycolors.json":664,"./theme.serenespalike.json":665,"./theme.shadesofcitrus.json":666,"./theme.sleekmodern.json":667,"./theme.smokypurples.json":668,"./theme.subtleversatile.json":669,"./theme.summerbarbeque.json":670,"./theme.summersunflower.json":671,"./theme.surfturf.json":672,"./theme.technologymeetsnature.json":673,"./theme.understatedversatile.json":674,"./theme.warmcool.json":675,"./theme.warmrustic.json":676,"./theme.winteryreds.json":677}],679:[function(require,module,exports){ module.exports={"Creating Shapes":[{"title":"2D Primitives Demonstration","filePath":"examples/core/primitives/primitives2D.js","sort":1,"description":"Demonstrating the basics of a variety of 2D primitives"},{"title":"3D Primitives Demonstration","filePath":"examples/core/primitives/primitives3D.js","sort":1,"description":"Demonstrating the basics of a variety of 3D primitives"},{"title":"Rounded Cuboid","filePath":"examples/core/primitives/roundedCuboid.js","sort":1,"description":"Demonstrating the roundedCuboid() functiom"},{"title":"Spheres of all sorts","filePath":"examples/core/primitives/sphere.js","sort":1,"description":"Demonstrating the sphere() and geodesicSphere() functions"},{"title":"Building a Dodecahedron","filePath":"examples/core/primitives/dodecahedron.js","sort":2,"description":"building dodecahedron() from cuboids"},{"title":"Torus Variety","filePath":"examples/core/primitives/torus.js","sort":2,"description":"Demonstrating the capabilities and variations of the torus() primitive"},{"title":"Building a Polyhedron from scratch","filePath":"examples/core/primitives/polyhedron.js","sort":4,"description":"Demonstrating the polyhedron() function"},{"title":"Basic Extrude Functions","filePath":"examples/core/extrusions/basicExtrusions.js","sort":5,"description":"Demonstrating the basic types of extrusions, and the variety of objects they can create."},{"title":"Extrude Along a Bezier Path","filePath":"examples/core/curves/bezier/extrudeAlongPath.js","sort":5,"description":"Using a 3D bezier path to create a solid tube"},{"title":"Extrude From Slices","filePath":"examples/core/extrusions/extrudeFromSlices.js","sort":5,"description":"Demonstrating the advanced extrusion using slices with varying numbers of points."},{"title":"Simple Bezier Extrude","filePath":"examples/core/curves/bezier/simpleExtrude.js","sort":5,"description":"Using a 1D bezier function to create a non-uniform extrusion"},{"title":"Hull and HullChain 2D example","filePath":"examples/core/hulls/hull2D.js","sort":8,"description":"Demonstrating the basics of Hulls in two dimensions"},{"title":"Hull and HullChain 3D example","filePath":"examples/core/hulls/hull3D.js","sort":8,"description":"Demonstrating the basics of Hulls in three dimensions"},{"title":"Nuts and Bolts","filePath":"examples/core/extrusions/nutsAndBolts.js","sort":8,"description":"Demonstrating the advanced extrusion using slices to generate screw threads."},{"title":"Basic Text Creation","filePath":"examples/core/text/text.js","sort":10,"description":"Demonstrating methods of building 3D text"}],"Manipulating Shapes":[{"title":"Basic Booleans Demonstration","filePath":"examples/core/booleans/basicBooleans.js","sort":2,"description":"Demonstrating the basics of boolean shape combinations"},{"title":"Align function demonstration","filePath":"examples/core/transforms/align.js","sort":3,"description":"Demonstrating aligning shapes using the align function"},{"title":"Expanding 2D and 3D Shapes","filePath":"examples/core/expansions/expand.js","sort":5,"description":"Exploring the expand() function on 2D and 3D geometries"},{"title":"Offsetting 2D Shapes","filePath":"examples/core/expansions/offset.js","sort":5,"description":"Demonstrating the offset() function. Moves all points in a 2d path or 2D geometry perpendicular to the line's tangent."},{"title":"Center function demonstration","filePath":"examples/core/transforms/center.js","sort":10,"description":"Using center() to translate objects"},{"title":"Measure Aggregate Bounding Box","filePath":"examples/core/measurements/measureAggregateBounds.js","sort":10,"description":"Examples of measureAggregateBoundingBox function"},{"title":"Measure Area and Volume","filePath":"examples/core/measurements/measureAreaAndVolume.js","sort":10,"description":"Examples of measureArea() and measureVolume() function"},{"title":"Measure Bounding Box","filePath":"examples/core/measurements/measureBounds.js","sort":10,"description":"Examples of measureBoundingBox function"}],"Colors":[{"title":"Basic Colors","filePath":"examples/core/colors/basicColors.js","sort":1,"description":"showing various color functions"},{"title":"Color Cube","filePath":"examples/core/colors/colorCube.js","sort":2,"description":"looking at the different ways to specify a color"},{"title":"Transparency","filePath":"examples/core/colors/transparency.js","sort":2,"description":"showing transparent objects"}],"Parameters":[{"title":"All Parameter Types Demo","filePath":"examples/parameters/allParamTypes.js","sort":1,"description":"Example of interactive parameters"},{"title":"Birthday Balloons","filePath":"examples/parameters/balloons.js","sort":1,"description":"Example of building models from interactive parameters"},{"title":"Parametric Involute Gear","filePath":"examples/parameters/gear.js","sort":1,"description":"Build a proper involute gear, demonstrating parameters, and how they can be used in complex math."}],"Other":[{"title":"Coordinate system and Rotation demonstration","filePath":"examples/core/other/orientation.js","sort":1,"description":"Demonstrating rotation about the three axes."}]} -},{}],679:[function(require,module,exports){ +},{}],680:[function(require,module,exports){ module.exports={ "language":"german", @@ -2507,7 +2516,7 @@ module.exports={ "always":"Immer" } -},{}],680:[function(require,module,exports){ +},{}],681:[function(require,module,exports){ module.exports={ "language":"english", @@ -2571,7 +2580,7 @@ module.exports={ "always":"Always" } -},{}],681:[function(require,module,exports){ +},{}],682:[function(require,module,exports){ module.exports={ "language":"french", @@ -2635,7 +2644,7 @@ module.exports={ "always":"Toujours" } -},{}],682:[function(require,module,exports){ +},{}],683:[function(require,module,exports){ module.exports={ "language":"croatian", @@ -2699,7 +2708,7 @@ module.exports={ "always":"Uvijek" } -},{}],683:[function(require,module,exports){ +},{}],684:[function(require,module,exports){ module.exports={ "language":"japanese", @@ -2775,7 +2784,7 @@ module.exports={ "always":"いつも" } -},{}],684:[function(require,module,exports){ +},{}],685:[function(require,module,exports){ module.exports={ "language":"chinese", @@ -2839,413 +2848,413 @@ module.exports={ "always":"永远" } -},{}],685:[function(require,module,exports){ +},{}],686:[function(require,module,exports){ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("most"),require("@most/multicast")):"function"==typeof define&&define.amd?define(["exports","most","@most/multicast"],e):e(t.mostCreate=t.mostCreate||{},t.most,t.mostMulticast)}(this,function(t,e,i){"use strict";function n(t){return Promise.resolve(t).then(s)}function s(t){try{return t.run()}catch(e){return t.error(e)}}var r=function(t,e,i){this.sink=t,this.time=e,this.events=i};r.prototype.run=function(){for(var t,e=this.events,i=this.sink,n=0,s=e.length;n=0&&(this.sinks=e.remove(s,this.sinks)),this.sinks.length},u.prototype.event=function(t,e){var s=this.sinks;if(1===s.length)return s[0].event(t,e);for(var n=0;n= 0");var e=n.length;return 0===r||0===e?n:r>=e?[]:function(r,n,e){for(var t=new Array(e),u=0;u= 0");var e=n.length;return 0===e||r>=e?n:1===e?[]:function(r,n,e){var t,u=new Array(e);for(t=0;t= 0");for(var t=e.length,u=new Array(t),o=0;o0)throw new Error("Invalid string. Length must be a multiple of 4");var e=o.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function byteLength(o){var r=getLens(o),e=r[0],t=r[1];return 3*(e+t)/4-t}function _byteLength(o,r,e){return 3*(r+e)/4-e}function toByteArray(o){var r,e,t=getLens(o),n=t[0],u=t[1],p=new Arr(_byteLength(o,n,u)),a=0,h=u>0?n-4:n;for(e=0;e>16&255,p[a++]=r>>8&255,p[a++]=255&r;return 2===u&&(r=revLookup[o.charCodeAt(e)]<<2|revLookup[o.charCodeAt(e+1)]>>4,p[a++]=255&r),1===u&&(r=revLookup[o.charCodeAt(e)]<<10|revLookup[o.charCodeAt(e+1)]<<4|revLookup[o.charCodeAt(e+2)]>>2,p[a++]=r>>8&255,p[a++]=255&r),p}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[63&o]}function encodeChunk(o,r,e){for(var t,n=[],u=r;up?p:u+16383));return 1===t?(r=o[e-1],n.push(lookup[r>>2]+lookup[r<<4&63]+"==")):2===t&&(r=(o[e-2]<<8)+o[e-1],n.push(lookup[r>>10]+lookup[r>>4&63]+lookup[r<<2&63]+"=")),n.join("")}revLookup["-".charCodeAt(0)]=62,revLookup["_".charCodeAt(0)]=63; - },{}],689:[function(require,module,exports){ +"use strict";exports.byteLength=byteLength,exports.toByteArray=toByteArray,exports.fromByteArray=fromByteArray;for(var lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var e=o.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function byteLength(o){var r=getLens(o),e=r[0],t=r[1];return 3*(e+t)/4-t}function _byteLength(o,r,e){return 3*(r+e)/4-e}function toByteArray(o){var r,e,t=getLens(o),n=t[0],u=t[1],p=new Arr(_byteLength(o,n,u)),a=0,h=u>0?n-4:n;for(e=0;e>16&255,p[a++]=r>>8&255,p[a++]=255&r;return 2===u&&(r=revLookup[o.charCodeAt(e)]<<2|revLookup[o.charCodeAt(e+1)]>>4,p[a++]=255&r),1===u&&(r=revLookup[o.charCodeAt(e)]<<10|revLookup[o.charCodeAt(e+1)]<<4|revLookup[o.charCodeAt(e+2)]>>2,p[a++]=r>>8&255,p[a++]=255&r),p}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[63&o]}function encodeChunk(o,r,e){for(var t,n=[],u=r;up?p:u+16383));return 1===t?(r=o[e-1],n.push(lookup[r>>2]+lookup[r<<4&63]+"==")):2===t&&(r=(o[e-2]<<8)+o[e-1],n.push(lookup[r>>10]+lookup[r>>4&63]+lookup[r<<2&63]+"=")),n.join("")}revLookup["-".charCodeAt(0)]=62,revLookup["_".charCodeAt(0)]=63; },{}],690:[function(require,module,exports){ + +},{}],691:[function(require,module,exports){ (function (Buffer){(function (){ "use strict";var base64=require("base64-js"),ieee754=require("ieee754");exports.Buffer=Buffer,exports.SlowBuffer=SlowBuffer,exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=2147483647;function typedArraySupport(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()}catch(e){return!1}}function createBuffer(e){if(e>K_MAX_LENGTH)throw new RangeError('The value "'+e+'" is invalid for option "size"');var t=new Uint8Array(e);return t.__proto__=Buffer.prototype,t}function Buffer(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return allocUnsafe(e)}return from(e,t,r)}function from(e,t,r){if("string"==typeof e)return fromString(e,t);if(ArrayBuffer.isView(e))return fromArrayLike(e);if(null==e)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer))return fromArrayBuffer(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return Buffer.from(n,t,r);var f=fromObject(e);if(f)return f;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return Buffer.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function assertSize(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function alloc(e,t,r){return assertSize(e),e<=0?createBuffer(e):void 0!==t?"string"==typeof r?createBuffer(e).fill(t,r):createBuffer(e).fill(t):createBuffer(e)}function allocUnsafe(e){return assertSize(e),createBuffer(e<0?0:0|checked(e))}function fromString(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!Buffer.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var r=0|byteLength(e,t),n=createBuffer(r),f=n.write(e,t);return f!==r&&(n=n.slice(0,f)),n}function fromArrayLike(e){for(var t=e.length<0?0:0|checked(e.length),r=createBuffer(t),n=0;n=K_MAX_LENGTH)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+K_MAX_LENGTH.toString(16)+" bytes");return 0|e}function SlowBuffer(e){return+e!=e&&(e=0),Buffer.alloc(+e)}function byteLength(e,t){if(Buffer.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);var r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;for(var f=!1;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return utf8ToBytes(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(e).length;default:if(f)return n?-1:utf8ToBytes(e).length;t=(""+t).toLowerCase(),f=!0}}function slowToString(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return hexSlice(this,t,r);case"utf8":case"utf-8":return utf8Slice(this,t,r);case"ascii":return asciiSlice(this,t,r);case"latin1":case"binary":return latin1Slice(this,t,r);case"base64":return base64Slice(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function swap(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function bidirectionalIndexOf(e,t,r,n,f){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),numberIsNaN(r=+r)&&(r=f?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(f)return-1;r=e.length-1}else if(r<0){if(!f)return-1;r=0}if("string"==typeof t&&(t=Buffer.from(t,n)),Buffer.isBuffer(t))return 0===t.length?-1:arrayIndexOf(e,t,r,n,f);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?f?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):arrayIndexOf(e,[t],r,n,f);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(e,t,r,n,f){var i,o=1,u=e.length,s=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;o=2,u/=2,s/=2,r/=2}function a(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(f){var h=-1;for(i=r;iu&&(r=u-s),i=r;i>=0;i--){for(var c=!0,l=0;lf&&(n=f):n=f;var i=t.length;n>i/2&&(n=i/2);for(var o=0;o239?4:a>223?3:a>191?2:1;if(f+c<=r)switch(c){case 1:a<128&&(h=a);break;case 2:128==(192&(i=e[f+1]))&&(s=(31&a)<<6|63&i)>127&&(h=s);break;case 3:i=e[f+1],o=e[f+2],128==(192&i)&&128==(192&o)&&(s=(15&a)<<12|(63&i)<<6|63&o)>2047&&(s<55296||s>57343)&&(h=s);break;case 4:i=e[f+1],o=e[f+2],u=e[f+3],128==(192&i)&&128==(192&o)&&128==(192&u)&&(s=(15&a)<<18|(63&i)<<12|(63&o)<<6|63&u)>65535&&s<1114112&&(h=s)}null===h?(h=65533,c=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),f+=c}return decodeCodePointsArray(n)}exports.kMaxLength=K_MAX_LENGTH,Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport(),Buffer.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(Buffer.prototype,"parent",{enumerable:!0,get:function(){if(Buffer.isBuffer(this))return this.buffer}}),Object.defineProperty(Buffer.prototype,"offset",{enumerable:!0,get:function(){if(Buffer.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&Buffer[Symbol.species]===Buffer&&Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),Buffer.poolSize=8192,Buffer.from=function(e,t,r){return from(e,t,r)},Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array,Buffer.alloc=function(e,t,r){return alloc(e,t,r)},Buffer.allocUnsafe=function(e){return allocUnsafe(e)},Buffer.allocUnsafeSlow=function(e){return allocUnsafe(e)},Buffer.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==Buffer.prototype},Buffer.compare=function(e,t){if(isInstance(e,Uint8Array)&&(e=Buffer.from(e,e.offset,e.byteLength)),isInstance(t,Uint8Array)&&(t=Buffer.from(t,t.offset,t.byteLength)),!Buffer.isBuffer(e)||!Buffer.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;for(var r=e.length,n=t.length,f=0,i=Math.min(r,n);ft&&(e+=" ... "),""},Buffer.prototype.compare=function(e,t,r,n,f){if(isInstance(e,Uint8Array)&&(e=Buffer.from(e,e.offset,e.byteLength)),!Buffer.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===f&&(f=this.length),t<0||r>e.length||n<0||f>this.length)throw new RangeError("out of range index");if(n>=f&&t>=r)return 0;if(n>=f)return-1;if(t>=r)return 1;if(this===e)return 0;for(var i=(f>>>=0)-(n>>>=0),o=(r>>>=0)-(t>>>=0),u=Math.min(i,o),s=this.slice(n,f),a=e.slice(t,r),h=0;h>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var f=this.length-t;if((void 0===r||r>f)&&(r=f),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return hexWrite(this,e,t,r);case"utf8":case"utf-8":return utf8Write(this,e,t,r);case"ascii":return asciiWrite(this,e,t,r);case"latin1":case"binary":return latin1Write(this,e,t,r);case"base64":return base64Write(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,e,t,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},Buffer.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var MAX_ARGUMENTS_LENGTH=4096;function decodeCodePointsArray(e){var t=e.length;if(t<=MAX_ARGUMENTS_LENGTH)return String.fromCharCode.apply(String,e);for(var r="",n=0;nn)&&(r=n);for(var f="",i=t;ir)throw new RangeError("Trying to access beyond buffer length")}function checkInt(e,t,r,n,f,i){if(!Buffer.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>f||te.length)throw new RangeError("Index out of range")}function checkIEEE754(e,t,r,n,f,i){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(e,t,r,n,f){return t=+t,r>>>=0,f||checkIEEE754(e,t,r,4,3.4028234663852886e38,-3.4028234663852886e38),ieee754.write(e,t,r,n,23,4),r+4}function writeDouble(e,t,r,n,f){return t=+t,r>>>=0,f||checkIEEE754(e,t,r,8,1.7976931348623157e308,-1.7976931348623157e308),ieee754.write(e,t,r,n,52,8),r+8}Buffer.prototype.slice=function(e,t){var r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t>>=0,t>>>=0,r||checkOffset(e,t,this.length);for(var n=this[e],f=1,i=0;++i>>=0,t>>>=0,r||checkOffset(e,t,this.length);for(var n=this[e+--t],f=1;t>0&&(f*=256);)n+=this[e+--t]*f;return n},Buffer.prototype.readUInt8=function(e,t){return e>>>=0,t||checkOffset(e,1,this.length),this[e]},Buffer.prototype.readUInt16LE=function(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]|this[e+1]<<8},Buffer.prototype.readUInt16BE=function(e,t){return e>>>=0,t||checkOffset(e,2,this.length),this[e]<<8|this[e+1]},Buffer.prototype.readUInt32LE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},Buffer.prototype.readUInt32BE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},Buffer.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||checkOffset(e,t,this.length);for(var n=this[e],f=1,i=0;++i=(f*=128)&&(n-=Math.pow(2,8*t)),n},Buffer.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||checkOffset(e,t,this.length);for(var n=t,f=1,i=this[e+--n];n>0&&(f*=256);)i+=this[e+--n]*f;return i>=(f*=128)&&(i-=Math.pow(2,8*t)),i},Buffer.prototype.readInt8=function(e,t){return e>>>=0,t||checkOffset(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},Buffer.prototype.readInt16LE=function(e,t){e>>>=0,t||checkOffset(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function(e,t){e>>>=0,t||checkOffset(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},Buffer.prototype.readInt32BE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},Buffer.prototype.readFloatLE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),ieee754.read(this,e,!0,23,4)},Buffer.prototype.readFloatBE=function(e,t){return e>>>=0,t||checkOffset(e,4,this.length),ieee754.read(this,e,!1,23,4)},Buffer.prototype.readDoubleLE=function(e,t){return e>>>=0,t||checkOffset(e,8,this.length),ieee754.read(this,e,!0,52,8)},Buffer.prototype.readDoubleBE=function(e,t){return e>>>=0,t||checkOffset(e,8,this.length),ieee754.read(this,e,!1,52,8)},Buffer.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||checkInt(this,e,t,r,Math.pow(2,8*r)-1,0);var f=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n)||checkInt(this,e,t,r,Math.pow(2,8*r)-1,0);var f=r-1,i=1;for(this[t+f]=255&e;--f>=0&&(i*=256);)this[t+f]=e/i&255;return t+r},Buffer.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,255,0),this[t]=255&e,t+1},Buffer.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},Buffer.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var f=Math.pow(2,8*r-1);checkInt(this,e,t,r,f-1,-f)}var i=0,o=1,u=0;for(this[t]=255&e;++i>0)-u&255;return t+r},Buffer.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var f=Math.pow(2,8*r-1);checkInt(this,e,t,r,f-1,-f)}var i=r-1,o=1,u=0;for(this[t+i]=255&e;--i>=0&&(o*=256);)e<0&&0===u&&0!==this[t+i+1]&&(u=1),this[t+i]=(e/o>>0)-u&255;return t+r},Buffer.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},Buffer.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},Buffer.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},Buffer.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},Buffer.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||checkInt(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},Buffer.prototype.writeFloatLE=function(e,t,r){return writeFloat(this,e,t,!0,r)},Buffer.prototype.writeFloatBE=function(e,t,r){return writeFloat(this,e,t,!1,r)},Buffer.prototype.writeDoubleLE=function(e,t,r){return writeDouble(this,e,t,!0,r)},Buffer.prototype.writeDoubleBE=function(e,t,r){return writeDouble(this,e,t,!1,r)},Buffer.prototype.copy=function(e,t,r,n){if(!Buffer.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t=0;--i)e[i+t]=this[i+r];else Uint8Array.prototype.set.call(e,this.subarray(r,n),t);return f},Buffer.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!Buffer.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){var f=e.charCodeAt(0);("utf8"===n&&f<128||"latin1"===n)&&(e=f)}}else"number"==typeof e&&(e&=255);if(t<0||this.length>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(i=t;i55295&&r<57344){if(!f){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&i.push(239,191,189);continue}f=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),f=r;continue}r=65536+(f-55296<<10|r-56320)}else f&&(t-=3)>-1&&i.push(239,191,189);if(f=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function asciiToBytes(e){for(var t=[],r=0;r>8,f=r%256,i.push(f),i.push(n);return i}function base64ToBytes(e){return base64.toByteArray(base64clean(e))}function blitBuffer(e,t,r,n){for(var f=0;f=t.length||f>=e.length);++f)t[f+r]=e[f];return f}function isInstance(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function numberIsNaN(e){return e!=e} }).call(this)}).call(this,require("buffer").Buffer) -},{"base64-js":688,"buffer":690,"ieee754":711}],691:[function(require,module,exports){ +},{"base64-js":689,"buffer":691,"ieee754":712}],692:[function(require,module,exports){ "use strict";var GetIntrinsic=require("get-intrinsic"),callBind=require("./"),$indexOf=callBind(GetIntrinsic("String.prototype.indexOf"));module.exports=function(i,n){var t=GetIntrinsic(i,!!n);return"function"==typeof t&&$indexOf(i,".prototype.")>-1?callBind(t):t}; -},{"./":692,"get-intrinsic":704}],692:[function(require,module,exports){ +},{"./":693,"get-intrinsic":705}],693:[function(require,module,exports){ "use strict";var bind=require("function-bind"),GetIntrinsic=require("get-intrinsic"),setFunctionLength=require("set-function-length"),$TypeError=require("es-errors/type"),$apply=GetIntrinsic("%Function.prototype.apply%"),$call=GetIntrinsic("%Function.prototype.call%"),$reflectApply=GetIntrinsic("%Reflect.apply%",!0)||bind.call($call,$apply),$defineProperty=require("es-define-property"),$max=GetIntrinsic("%Math.max%");module.exports=function(e){if("function"!=typeof e)throw new $TypeError("a function is required");var t=$reflectApply(bind,$call,arguments);return setFunctionLength(t,1+$max(0,e.length-(arguments.length-1)),!0)};var applyBind=function(){return $reflectApply(bind,$apply,arguments)};$defineProperty?$defineProperty(module.exports,"apply",{value:applyBind}):module.exports.apply=applyBind; -},{"es-define-property":694,"es-errors/type":700,"function-bind":703,"get-intrinsic":704,"set-function-length":721}],693:[function(require,module,exports){ +},{"es-define-property":695,"es-errors/type":701,"function-bind":704,"get-intrinsic":705,"set-function-length":722}],694:[function(require,module,exports){ "use strict";var $defineProperty=require("es-define-property"),$SyntaxError=require("es-errors/syntax"),$TypeError=require("es-errors/type"),gopd=require("gopd");module.exports=function(e,r,o){if(!e||"object"!=typeof e&&"function"!=typeof e)throw new $TypeError("`obj` must be an object or a function`");if("string"!=typeof r&&"symbol"!=typeof r)throw new $TypeError("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new $TypeError("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new $TypeError("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new $TypeError("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new $TypeError("`loose`, if provided, must be a boolean");var n=arguments.length>3?arguments[3]:null,l=arguments.length>4?arguments[4]:null,t=arguments.length>5?arguments[5]:null,i=arguments.length>6&&arguments[6],u=!!gopd&&gopd(e,r);if($defineProperty)$defineProperty(e,r,{configurable:null===t&&u?u.configurable:!t,enumerable:null===n&&u?u.enumerable:!n,value:o,writable:null===l&&u?u.writable:!l});else{if(!i&&(n||l||t))throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");e[r]=o}}; -},{"es-define-property":694,"es-errors/syntax":699,"es-errors/type":700,"gopd":705}],694:[function(require,module,exports){ +},{"es-define-property":695,"es-errors/syntax":700,"es-errors/type":701,"gopd":706}],695:[function(require,module,exports){ "use strict";var GetIntrinsic=require("get-intrinsic"),$defineProperty=GetIntrinsic("%Object.defineProperty%",!0)||!1;if($defineProperty)try{$defineProperty({},"a",{value:1})}catch(e){$defineProperty=!1}module.exports=$defineProperty; -},{"get-intrinsic":704}],695:[function(require,module,exports){ +},{"get-intrinsic":705}],696:[function(require,module,exports){ "use strict";module.exports=EvalError; -},{}],696:[function(require,module,exports){ +},{}],697:[function(require,module,exports){ "use strict";module.exports=Error; -},{}],697:[function(require,module,exports){ +},{}],698:[function(require,module,exports){ "use strict";module.exports=RangeError; -},{}],698:[function(require,module,exports){ +},{}],699:[function(require,module,exports){ "use strict";module.exports=ReferenceError; -},{}],699:[function(require,module,exports){ +},{}],700:[function(require,module,exports){ "use strict";module.exports=SyntaxError; -},{}],700:[function(require,module,exports){ +},{}],701:[function(require,module,exports){ "use strict";module.exports=TypeError; -},{}],701:[function(require,module,exports){ +},{}],702:[function(require,module,exports){ "use strict";module.exports=URIError; -},{}],702:[function(require,module,exports){ +},{}],703:[function(require,module,exports){ "use strict";var ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr=Object.prototype.toString,max=Math.max,funcType="[object Function]",concatty=function(t,n){for(var r=[],o=0;o1&&"boolean"!=typeof e)throw new $TypeError('"allowMissing" argument must be a boolean');if(null===$exec(/^%?[^%]*%?$/,r))throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var t=stringToPath(r),o=t.length>0?t[0]:"",n=getBaseIntrinsic("%"+o+"%",e),a=n.name,y=n.value,i=!1,p=n.alias;p&&(o=p[0],$spliceApply(t,$concat([0,1],p)));for(var d=1,s=!0;d=t.length){var c=$gOPD(y,f);y=(s=!!c)&&"get"in c&&!("originalValue"in c.get)?c.get:y[f]}else s=hasOwn(y,f),y=y[f];s&&!i&&(INTRINSICS[a]=y)}}return y}; -},{"es-errors":696,"es-errors/eval":695,"es-errors/range":697,"es-errors/ref":698,"es-errors/syntax":699,"es-errors/type":700,"es-errors/uri":701,"function-bind":703,"has-proto":707,"has-symbols":708,"hasown":710}],705:[function(require,module,exports){ +},{"es-errors":697,"es-errors/eval":696,"es-errors/range":698,"es-errors/ref":699,"es-errors/syntax":700,"es-errors/type":701,"es-errors/uri":702,"function-bind":704,"has-proto":708,"has-symbols":709,"hasown":711}],706:[function(require,module,exports){ "use strict";var GetIntrinsic=require("get-intrinsic"),$gOPD=GetIntrinsic("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch(t){$gOPD=null}module.exports=$gOPD; -},{"get-intrinsic":704}],706:[function(require,module,exports){ +},{"get-intrinsic":705}],707:[function(require,module,exports){ "use strict";var $defineProperty=require("es-define-property"),hasPropertyDescriptors=function(){return!!$defineProperty};hasPropertyDescriptors.hasArrayLengthDefineBug=function(){if(!$defineProperty)return null;try{return 1!==$defineProperty([],"length",{value:1}).length}catch(r){return!0}},module.exports=hasPropertyDescriptors; -},{"es-define-property":694}],707:[function(require,module,exports){ +},{"es-define-property":695}],708:[function(require,module,exports){ "use strict";var test={__proto__:null,foo:{}},$Object=Object;module.exports=function(){return{__proto__:test}.foo===test.foo&&!(test instanceof $Object)}; -},{}],708:[function(require,module,exports){ +},{}],709:[function(require,module,exports){ "use strict";var origSymbol="undefined"!=typeof Symbol&&Symbol,hasSymbolSham=require("./shams");module.exports=function(){return"function"==typeof origSymbol&&("function"==typeof Symbol&&("symbol"==typeof origSymbol("foo")&&("symbol"==typeof Symbol("bar")&&hasSymbolSham())))}; -},{"./shams":709}],709:[function(require,module,exports){ +},{"./shams":710}],710:[function(require,module,exports){ "use strict";module.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),r=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var o=Object.getOwnPropertySymbols(t);if(1!==o.length||o[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var n=Object.getOwnPropertyDescriptor(t,e);if(42!==n.value||!0!==n.enumerable)return!1}return!0}; -},{}],710:[function(require,module,exports){ +},{}],711:[function(require,module,exports){ "use strict";var call=Function.prototype.call,$hasOwn=Object.prototype.hasOwnProperty,bind=require("function-bind");module.exports=bind.call(call,$hasOwn); -},{"function-bind":703}],711:[function(require,module,exports){ +},{"function-bind":704}],712:[function(require,module,exports){ exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:1/0*(s?-1:1);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=o<0||0===o&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),(o+=p+N>=1?n/f:n*Math.pow(2,1-N))*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l}; -},{}],712:[function(require,module,exports){ +},{}],713:[function(require,module,exports){ (function (global){(function (){ -var hasMap="function"==typeof Map&&Map.prototype,mapSizeDescriptor=Object.getOwnPropertyDescriptor&&hasMap?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,mapSize=hasMap&&mapSizeDescriptor&&"function"==typeof mapSizeDescriptor.get?mapSizeDescriptor.get:null,mapForEach=hasMap&&Map.prototype.forEach,hasSet="function"==typeof Set&&Set.prototype,setSizeDescriptor=Object.getOwnPropertyDescriptor&&hasSet?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,setSize=hasSet&&setSizeDescriptor&&"function"==typeof setSizeDescriptor.get?setSizeDescriptor.get:null,setForEach=hasSet&&Set.prototype.forEach,hasWeakMap="function"==typeof WeakMap&&WeakMap.prototype,weakMapHas=hasWeakMap?WeakMap.prototype.has:null,hasWeakSet="function"==typeof WeakSet&&WeakSet.prototype,weakSetHas=hasWeakSet?WeakSet.prototype.has:null,hasWeakRef="function"==typeof WeakRef&&WeakRef.prototype,weakRefDeref=hasWeakRef?WeakRef.prototype.deref:null,booleanValueOf=Boolean.prototype.valueOf,objectToString=Object.prototype.toString,functionToString=Function.prototype.toString,$match=String.prototype.match,$slice=String.prototype.slice,$replace=String.prototype.replace,$toUpperCase=String.prototype.toUpperCase,$toLowerCase=String.prototype.toLowerCase,$test=RegExp.prototype.test,$concat=Array.prototype.concat,$join=Array.prototype.join,$arrSlice=Array.prototype.slice,$floor=Math.floor,bigIntValueOf="function"==typeof BigInt?BigInt.prototype.valueOf:null,gOPS=Object.getOwnPropertySymbols,symToString="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,hasShammedSymbols="function"==typeof Symbol&&"object"==typeof Symbol.iterator,toStringTag="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===hasShammedSymbols||"symbol")?Symbol.toStringTag:null,isEnumerable=Object.prototype.propertyIsEnumerable,gPO=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null);function addNumericSeparator(t,e){if(t===1/0||t===-1/0||t!=t||t&&t>-1e3&&t<1e3||$test.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var n=t<0?-$floor(-t):$floor(t);if(n!==t){var o=String(n),a=$slice.call(e,o.length+1);return $replace.call(o,r,"$&_")+"."+$replace.call($replace.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,r,"$&_")}var utilInspect=require("./util.inspect"),inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null;function wrapQuotes(t,e,r){var n="double"===(r.quoteStyle||e)?'"':"'";return n+t+n}function quote(t){return $replace.call(String(t),/"/g,""")}function isArray(t){return!("[object Array]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isDate(t){return!("[object Date]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isRegExp(t){return!("[object RegExp]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isError(t){return!("[object Error]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isString(t){return!("[object String]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isNumber(t){return!("[object Number]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isBoolean(t){return!("[object Boolean]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isSymbol(t){if(hasShammedSymbols)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!symToString)return!1;try{return symToString.call(t),!0}catch(t){}return!1}function isBigInt(t){if(!t||"object"!=typeof t||!bigIntValueOf)return!1;try{return bigIntValueOf.call(t),!0}catch(t){}return!1}module.exports=function t(e,r,n,o){var a=r||{};if(has(a,"quoteStyle")&&"single"!==a.quoteStyle&&"double"!==a.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has(a,"maxStringLength")&&("number"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var i=!has(a,"customInspect")||a.customInspect;if("boolean"!=typeof i&&"symbol"!==i)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has(a,"indent")&&null!==a.indent&&"\t"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has(a,"numericSeparator")&&"boolean"!=typeof a.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var l=a.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return inspectString(e,a);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var c=String(e);return l?addNumericSeparator(e,c):c}if("bigint"==typeof e){var u=String(e)+"n";return l?addNumericSeparator(e,u):u}var p=void 0===a.depth?5:a.depth;if(void 0===n&&(n=0),n>=p&&p>0&&"object"==typeof e)return isArray(e)?"[Array]":"[Object]";var f=getIndent(a,n);if(void 0===o)o=[];else if(indexOf(o,e)>=0)return"[Circular]";function s(e,r,i){if(r&&(o=$arrSlice.call(o)).push(r),i){var l={depth:a.depth};return has(a,"quoteStyle")&&(l.quoteStyle=a.quoteStyle),t(e,l,n+1,o)}return t(e,a,n+1,o)}if("function"==typeof e&&!isRegExp(e)){var y=nameOf(e),S=arrObjKeys(e,s);return"[Function"+(y?": "+y:" (anonymous)")+"]"+(S.length>0?" { "+$join.call(S,", ")+" }":"")}if(isSymbol(e)){var g=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return"object"!=typeof e||hasShammedSymbols?g:markBoxed(g)}if(isElement(e)){for(var b="<"+$toLowerCase.call(String(e.nodeName)),m=e.attributes||[],h=0;h"}if(isArray(e)){if(0===e.length)return"[]";var d=arrObjKeys(e,s);return f&&!singleLineValues(d)?"["+indentedJoin(d,f)+"]":"[ "+$join.call(d,", ")+" ]"}if(isError(e)){var j=arrObjKeys(e,s);return"cause"in Error.prototype||!("cause"in e)||isEnumerable.call(e,"cause")?0===j.length?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(j,", ")+" }":"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+s(e.cause),j),", ")+" }"}if("object"==typeof e&&i){if(inspectSymbol&&"function"==typeof e[inspectSymbol]&&utilInspect)return utilInspect(e,{depth:p-n});if("symbol"!==i&&"function"==typeof e.inspect)return e.inspect()}if(isMap(e)){var O=[];return mapForEach&&mapForEach.call(e,function(t,r){O.push(s(r,e,!0)+" => "+s(t,e))}),collectionOf("Map",mapSize.call(e),O,f)}if(isSet(e)){var w=[];return setForEach&&setForEach.call(e,function(t){w.push(s(t,e))}),collectionOf("Set",setSize.call(e),w,f)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(s(Number(e)));if(isBigInt(e))return markBoxed(s(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(s(String(e)));if("undefined"!=typeof window&&e===window)return"{ [object Window] }";if("undefined"!=typeof globalThis&&e===globalThis||"undefined"!=typeof global&&e===global)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp(e)){var $=arrObjKeys(e,s),k=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,v=e instanceof Object?"":"null prototype",T=!k&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):v?"Object":"",E=(k||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(T||v?"["+$join.call($concat.call([],T||[],v||[]),": ")+"] ":"");return 0===$.length?E+"{}":f?E+"{"+indentedJoin($,f)+"}":E+"{ "+$join.call($,", ")+" }"}return String(e)};var hasOwn=Object.prototype.hasOwnProperty||function(t){return t in this};function has(t,e){return hasOwn.call(t,e)}function toStr(t){return objectToString.call(t)}function nameOf(t){if(t.name)return t.name;var e=$match.call(functionToString.call(t),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;re.maxStringLength){var r=t.length-e.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return inspectString($slice.call(t,0,e.maxStringLength),e)+n}return wrapQuotes($replace.call($replace.call(t,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte),"single",e)}function lowbyte(t){var e=t.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return r?"\\"+r:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(t){return"Object("+t+")"}function weakCollectionOf(t){return t+" { ? }"}function collectionOf(t,e,r,n){return t+" ("+e+") {"+(n?indentedJoin(r,n):$join.call(r,", "))+"}"}function singleLineValues(t){for(var e=0;e=0)return!1;return!0}function getIndent(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=$join.call(Array(t.indent+1)," ")}return{base:r,prev:$join.call(Array(e+1),r)}}function indentedJoin(t,e){if(0===t.length)return"";var r="\n"+e.prev+e.base;return r+$join.call(t,","+r)+"\n"+e.prev}function arrObjKeys(t,e){var r=isArray(t),n=[];if(r){n.length=t.length;for(var o=0;o-1e3&&t<1e3||$test.call(/e/,e))return e;var r=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof t){var n=t<0?-$floor(-t):$floor(t);if(n!==t){var o=String(n),a=$slice.call(e,o.length+1);return $replace.call(o,r,"$&_")+"."+$replace.call($replace.call(a,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,r,"$&_")}var utilInspect=require("./util.inspect"),inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null,quotes={__proto__:null,double:'"',single:"'"},quoteREs={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};function wrapQuotes(t,e,r){var n=r.quoteStyle||e,o=quotes[n];return o+t+o}function quote(t){return $replace.call(String(t),/"/g,""")}function isArray(t){return!("[object Array]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isDate(t){return!("[object Date]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isRegExp(t){return!("[object RegExp]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isError(t){return!("[object Error]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isString(t){return!("[object String]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isNumber(t){return!("[object Number]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isBoolean(t){return!("[object Boolean]"!==toStr(t)||toStringTag&&"object"==typeof t&&toStringTag in t)}function isSymbol(t){if(hasShammedSymbols)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!symToString)return!1;try{return symToString.call(t),!0}catch(t){}return!1}function isBigInt(t){if(!t||"object"!=typeof t||!bigIntValueOf)return!1;try{return bigIntValueOf.call(t),!0}catch(t){}return!1}module.exports=function t(e,r,n,o){var a=r||{};if(has(a,"quoteStyle")&&!has(quotes,a.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has(a,"maxStringLength")&&("number"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var i=!has(a,"customInspect")||a.customInspect;if("boolean"!=typeof i&&"symbol"!==i)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has(a,"indent")&&null!==a.indent&&"\t"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has(a,"numericSeparator")&&"boolean"!=typeof a.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var l=a.numericSeparator;if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return inspectString(e,a);if("number"==typeof e){if(0===e)return 1/0/e>0?"0":"-0";var c=String(e);return l?addNumericSeparator(e,c):c}if("bigint"==typeof e){var u=String(e)+"n";return l?addNumericSeparator(e,u):u}var p=void 0===a.depth?5:a.depth;if(void 0===n&&(n=0),n>=p&&p>0&&"object"==typeof e)return isArray(e)?"[Array]":"[Object]";var f=getIndent(a,n);if(void 0===o)o=[];else if(indexOf(o,e)>=0)return"[Circular]";function s(e,r,i){if(r&&(o=$arrSlice.call(o)).push(r),i){var l={depth:a.depth};return has(a,"quoteStyle")&&(l.quoteStyle=a.quoteStyle),t(e,l,n+1,o)}return t(e,a,n+1,o)}if("function"==typeof e&&!isRegExp(e)){var y=nameOf(e),S=arrObjKeys(e,s);return"[Function"+(y?": "+y:" (anonymous)")+"]"+(S.length>0?" { "+$join.call(S,", ")+" }":"")}if(isSymbol(e)){var g=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return"object"!=typeof e||hasShammedSymbols?g:markBoxed(g)}if(isElement(e)){for(var b="<"+$toLowerCase.call(String(e.nodeName)),m=e.attributes||[],h=0;h"}if(isArray(e)){if(0===e.length)return"[]";var d=arrObjKeys(e,s);return f&&!singleLineValues(d)?"["+indentedJoin(d,f)+"]":"[ "+$join.call(d,", ")+" ]"}if(isError(e)){var j=arrObjKeys(e,s);return"cause"in Error.prototype||!("cause"in e)||isEnumerable.call(e,"cause")?0===j.length?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(j,", ")+" }":"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+s(e.cause),j),", ")+" }"}if("object"==typeof e&&i){if(inspectSymbol&&"function"==typeof e[inspectSymbol]&&utilInspect)return utilInspect(e,{depth:p-n});if("symbol"!==i&&"function"==typeof e.inspect)return e.inspect()}if(isMap(e)){var O=[];return mapForEach&&mapForEach.call(e,function(t,r){O.push(s(r,e,!0)+" => "+s(t,e))}),collectionOf("Map",mapSize.call(e),O,f)}if(isSet(e)){var w=[];return setForEach&&setForEach.call(e,function(t){w.push(s(t,e))}),collectionOf("Set",setSize.call(e),w,f)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(s(Number(e)));if(isBigInt(e))return markBoxed(s(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(s(String(e)));if("undefined"!=typeof window&&e===window)return"{ [object Window] }";if("undefined"!=typeof globalThis&&e===globalThis||"undefined"!=typeof global&&e===global)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp(e)){var $=arrObjKeys(e,s),k=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,v=e instanceof Object?"":"null prototype",T=!k&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):v?"Object":"",E=(k||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(T||v?"["+$join.call($concat.call([],T||[],v||[]),": ")+"] ":"");return 0===$.length?E+"{}":f?E+"{"+indentedJoin($,f)+"}":E+"{ "+$join.call($,", ")+" }"}return String(e)};var hasOwn=Object.prototype.hasOwnProperty||function(t){return t in this};function has(t,e){return hasOwn.call(t,e)}function toStr(t){return objectToString.call(t)}function nameOf(t){if(t.name)return t.name;var e=$match.call(functionToString.call(t),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(t,e){if(t.indexOf)return t.indexOf(e);for(var r=0,n=t.length;re.maxStringLength){var r=t.length-e.maxStringLength,n="... "+r+" more character"+(r>1?"s":"");return inspectString($slice.call(t,0,e.maxStringLength),e)+n}var o=quoteREs[e.quoteStyle||"single"];return o.lastIndex=0,wrapQuotes($replace.call($replace.call(t,o,"\\$1"),/[\x00-\x1f]/g,lowbyte),"single",e)}function lowbyte(t){var e=t.charCodeAt(0),r={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return r?"\\"+r:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(t){return"Object("+t+")"}function weakCollectionOf(t){return t+" { ? }"}function collectionOf(t,e,r,n){return t+" ("+e+") {"+(n?indentedJoin(r,n):$join.call(r,", "))+"}"}function singleLineValues(t){for(var e=0;e=0)return!1;return!0}function getIndent(t,e){var r;if("\t"===t.indent)r="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;r=$join.call(Array(t.indent+1)," ")}return{base:r,prev:$join.call(Array(e+1),r)}}function indentedJoin(t,e){if(0===t.length)return"";var r="\n"+e.prev+e.base;return r+$join.call(t,","+r)+"\n"+e.prev}function arrObjKeys(t,e){var r=isArray(t),n=[];if(r){n.length=t.length;for(var o=0;o=0;n--){var o=r[n];"."===o?r.splice(n,1):".."===o?(r.splice(n,1),e++):e&&(r.splice(n,1),e--)}if(t)for(;e--;e)r.unshift("..");return r}function basename(r){"string"!=typeof r&&(r+="");var t,e=0,n=-1,o=!0;for(t=r.length-1;t>=0;--t)if(47===r.charCodeAt(t)){if(!o){e=t+1;break}}else-1===n&&(o=!1,n=t+1);return-1===n?"":r.slice(e,n)}function filter(r,t){if(r.filter)return r.filter(t);for(var e=[],n=0;n=-1&&!t;e--){var n=e>=0?arguments[e]:process.cwd();if("string"!=typeof n)throw new TypeError("Arguments to path.resolve must be strings");n&&(r=n+"/"+r,t="/"===n.charAt(0))}return(t?"/":"")+(r=normalizeArray(filter(r.split("/"),function(r){return!!r}),!t).join("/"))||"."},exports.normalize=function(r){var t=exports.isAbsolute(r),e="/"===substr(r,-1);return(r=normalizeArray(filter(r.split("/"),function(r){return!!r}),!t).join("/"))||t||(r="."),r&&e&&(r+="/"),(t?"/":"")+r},exports.isAbsolute=function(r){return"/"===r.charAt(0)},exports.join=function(){var r=Array.prototype.slice.call(arguments,0);return exports.normalize(filter(r,function(r,t){if("string"!=typeof r)throw new TypeError("Arguments to path.join must be strings");return r}).join("/"))},exports.relative=function(r,t){function e(r){for(var t=0;t=0&&""===r[e];e--);return t>e?[]:r.slice(t,e-t+1)}r=exports.resolve(r).substr(1),t=exports.resolve(t).substr(1);for(var n=e(r.split("/")),o=e(t.split("/")),s=Math.min(n.length,o.length),i=s,u=0;u=1;--s)if(47===(t=r.charCodeAt(s))){if(!o){n=s;break}}else o=!1;return-1===n?e?"/":".":e&&1===n?"/":r.slice(0,n)},exports.basename=function(r,t){var e=basename(r);return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},exports.extname=function(r){"string"!=typeof r&&(r+="");for(var t=-1,e=0,n=-1,o=!0,s=0,i=r.length-1;i>=0;--i){var u=r.charCodeAt(i);if(47!==u)-1===n&&(o=!1,n=i+1),46===u?-1===t?t=i:1!==s&&(s=1):-1!==t&&(s=-1);else if(!o){e=i+1;break}}return-1===t||-1===n||0===s||1===s&&t===n-1&&t===e+1?"":r.slice(t,n)};var substr="b"==="ab".substr(-1)?function(r,t,e){return r.substr(t,e)}:function(r,t,e){return t<0&&(t=r.length+t),r.substr(t,e)}; }).call(this)}).call(this,require('_process')) -},{"_process":714}],714:[function(require,module,exports){ +},{"_process":715}],715:[function(require,module,exports){ var cachedSetTimeout,cachedClearTimeout,process=module.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(e){if(cachedSetTimeout===setTimeout)return setTimeout(e,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(e,0);try{return cachedSetTimeout(e,0)}catch(t){try{return cachedSetTimeout.call(null,e,0)}catch(t){return cachedSetTimeout.call(this,e,0)}}}function runClearTimeout(e){if(cachedClearTimeout===clearTimeout)return clearTimeout(e);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(e);try{return cachedClearTimeout(e)}catch(t){try{return cachedClearTimeout.call(null,e)}catch(t){return cachedClearTimeout.call(this,e)}}}!function(){try{cachedSetTimeout="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){cachedSetTimeout=defaultSetTimout}try{cachedClearTimeout="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){cachedClearTimeout=defaultClearTimeout}}();var currentQueue,queue=[],draining=!1,queueIndex=-1;function cleanUpNextTick(){draining&¤tQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var e=runTimeout(cleanUpNextTick);draining=!0;for(var t=queue.length;t;){for(currentQueue=queue,queue=[];++queueIndex1)for(var r=1;r= 0x80 (not a basic code point)","invalid-input":"Invalid input"},b=f-c,y=Math.floor,C=String.fromCharCode;function m(e){throw new RangeError(x[e])}function j(e,o){for(var n=e.length,t=[];n--;)t[n]=o(e[n]);return t}function A(e,o){var n=e.split("@"),t="";return n.length>1&&(t=n[0]+"@",e=n[1]),t+j((e=e.replace(w,".")).split("."),o).join(".")}function I(e){for(var o,n,t=[],r=0,u=e.length;r=55296&&o<=56319&&r65535&&(o+=C((e-=65536)>>>10&1023|55296),e=56320|1023&e),o+=C(e)}).join("")}function F(e,o){return e+22+75*(e<26)-((0!=o)<<5)}function O(e,o,n){var t=0;for(e=n?y(e/d):e>>1,e+=y(e/o);e>b*l>>1;t+=f)e=y(e/b);return y(t+(b+1)*e/(e+s))}function S(e){var o,n,t,r,u,s,d,v,g,w,x,b=[],C=e.length,j=0,A=a,I=p;for((n=e.lastIndexOf(h))<0&&(n=0),t=0;t=128&&m("not-basic"),b.push(e.charCodeAt(t));for(r=n>0?n+1:0;r=C&&m("invalid-input"),((v=(x=e.charCodeAt(r++))-48<10?x-22:x-65<26?x-65:x-97<26?x-97:f)>=f||v>y((i-j)/s))&&m("overflow"),j+=v*s,!(v<(g=d<=I?c:d>=I+l?l:d-I));d+=f)s>y(i/(w=f-g))&&m("overflow"),s*=w;I=O(j-u,o=b.length+1,0==u),y(j/o)>i-A&&m("overflow"),A+=y(j/o),j%=o,b.splice(j++,0,A)}return E(b)}function T(e){var o,n,t,r,u,s,d,v,g,w,x,b,j,A,E,S=[];for(b=(e=I(e)).length,o=a,n=0,u=p,s=0;s=o&&xy((i-n)/(j=t+1))&&m("overflow"),n+=(d-o)*j,o=d,s=0;si&&m("overflow"),x==o){for(v=n,g=f;!(v<(w=g<=u?c:g>=u+l?l:g-u));g+=f)E=v-w,A=f-w,S.push(C(F(w+E%A,0))),v=y(E/A);S.push(C(F(v,0))),u=O(n,j,t==r),n=0,++t}++n,++o}return S.join("")}if(r={version:"1.4.1",ucs2:{decode:I,encode:E},decode:S,encode:T,toASCII:function(e){return A(e,function(e){return g.test(e)?"xn--"+T(e):e})},toUnicode:function(e){return A(e,function(e){return v.test(e)?S(e.slice(4).toLowerCase()):e})}},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return r});else if(o&&n)if(module.exports==o)n.exports=r;else for(u in r)r.hasOwnProperty(u)&&(o[u]=r[u]);else e.punycode=r}(this); }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],716:[function(require,module,exports){ +},{}],717:[function(require,module,exports){ "use strict";var replace=String.prototype.replace,percentTwenties=/%20/g,Format={RFC1738:"RFC1738",RFC3986:"RFC3986"};module.exports={default:Format.RFC3986,formatters:{RFC1738:function(e){return replace.call(e,percentTwenties,"+")},RFC3986:function(e){return String(e)}},RFC1738:Format.RFC1738,RFC3986:Format.RFC3986}; -},{}],717:[function(require,module,exports){ +},{}],718:[function(require,module,exports){ "use strict";var stringify=require("./stringify"),parse=require("./parse"),formats=require("./formats");module.exports={formats:formats,parse:parse,stringify:stringify}; -},{"./formats":716,"./parse":718,"./stringify":719}],718:[function(require,module,exports){ +},{"./formats":717,"./parse":719,"./stringify":720}],719:[function(require,module,exports){ "use strict";var utils=require("./utils"),has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictNullHandling:!1},interpretNumericEntities=function(e){return e.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function(e,t){var r={__proto__:null},a=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;a=a.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var i,o=t.parameterLimit===1/0?void 0:t.parameterLimit,l=a.split(t.delimiter,o),s=-1,n=t.charset;if(t.charsetSentinel)for(i=0;i-1&&(c=isArray(c)?[c]:c);var y=has.call(r,p);y&&"combine"===t.duplicates?r[p]=utils.combine(r[p],c):y&&"last"!==t.duplicates||(r[p]=c)}return r},parseObject=function(e,t,r,a){for(var i=a?t:parseArrayValue(t,r),o=e.length-1;o>=0;--o){var l,s=e[o];if("[]"===s&&r.parseArrays)l=r.allowEmptyArrays&&(""===i||r.strictNullHandling&&null===i)?[]:[].concat(i);else{l=r.plainObjects?Object.create(null):{};var n="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,p=r.decodeDotInKeys?n.replace(/%2E/g,"."):n,c=parseInt(p,10);r.parseArrays||""!==p?!isNaN(c)&&s!==p&&String(c)===p&&c>=0&&r.parseArrays&&c<=r.arrayLimit?(l=[])[c]=i:"__proto__"!==p&&(l[p]=i):l={0:i}}i=l}return i},parseKeys=function(e,t,r,a){if(e){var i=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,o=/(\[[^[\]]*])/g,l=r.depth>0&&/(\[[^[\]]*])/.exec(i),s=l?i.slice(0,l.index):i,n=[];if(s){if(!r.plainObjects&&has.call(Object.prototype,s)&&!r.allowPrototypes)return;n.push(s)}for(var p=0;r.depth>0&&null!==(l=o.exec(i))&&p0?b.join(",")||null:void 0}];else if(isArray(u))N=u;else{var T=Object.keys(b);N=d?T.sort(d):T}var O=s?t.replace(/\./g,"%2E"):t,k=a&&isArray(b)&&1===b.length?O+"[]":O;if(n&&isArray(b)&&0===b.length)return k+"[]";for(var I=0;I0?y+d:""}; -},{"./formats":716,"./utils":720,"side-channel":722}],720:[function(require,module,exports){ +},{"./formats":717,"./utils":721,"side-channel":723}],721:[function(require,module,exports){ "use strict";var formats=require("./formats"),has=Object.prototype.hasOwnProperty,isArray=Array.isArray,hexTable=function(){for(var e=[],r=0;r<256;++r)e.push("%"+((r<16?"0":"")+r.toString(16)).toUpperCase());return e}(),compactQueue=function(e){for(;e.length>1;){var r=e.pop(),t=r.obj[r.prop];if(isArray(t)){for(var o=[],n=0;n=limit?a.slice(i,i+limit):a,f=[],p=0;p=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||n===formats.RFC1738&&(40===s||41===s)?f[f.length]=u.charAt(p):s<128?f[f.length]=hexTable[s]:s<2048?f[f.length]=hexTable[192|s>>6]+hexTable[128|63&s]:s<55296||s>=57344?f[f.length]=hexTable[224|s>>12]+hexTable[128|s>>6&63]+hexTable[128|63&s]:(p+=1,s=65536+((1023&s)<<10|1023&u.charCodeAt(p)),f[f.length]=hexTable[240|s>>18]+hexTable[128|s>>12&63]+hexTable[128|s>>6&63]+hexTable[128|63&s])}c+=f.join("")}return c},compact=function(e){for(var r=[{obj:{o:e},prop:"o"}],t=[],o=0;o4294967295||$floor(r)!==r)throw new $TypeError("`length` must be a positive 32-bit integer");var t=arguments.length>2&&!!arguments[2],i=!0,n=!0;if("length"in e&&gOPD){var o=gOPD(e,"length");o&&!o.configurable&&(i=!1),o&&!o.writable&&(n=!1)}return(i||n||!t)&&(hasDescriptors?define(e,"length",r,!0,!0):define(e,"length",r)),e}; -},{"define-data-property":693,"es-errors/type":700,"get-intrinsic":704,"gopd":705,"has-property-descriptors":706}],722:[function(require,module,exports){ +},{"define-data-property":694,"es-errors/type":701,"get-intrinsic":705,"gopd":706,"has-property-descriptors":707}],723:[function(require,module,exports){ "use strict";var GetIntrinsic=require("get-intrinsic"),callBound=require("call-bind/callBound"),inspect=require("object-inspect"),$TypeError=require("es-errors/type"),$WeakMap=GetIntrinsic("%WeakMap%",!0),$Map=GetIntrinsic("%Map%",!0),$weakMapGet=callBound("WeakMap.prototype.get",!0),$weakMapSet=callBound("WeakMap.prototype.set",!0),$weakMapHas=callBound("WeakMap.prototype.has",!0),$mapGet=callBound("Map.prototype.get",!0),$mapSet=callBound("Map.prototype.set",!0),$mapHas=callBound("Map.prototype.has",!0),listGetNode=function(e,t){for(var a,n=e;null!==(a=n.next);n=a)if(a.key===t)return n.next=a.next,a.next=e.next,e.next=a,a},listGet=function(e,t){var a=listGetNode(e,t);return a&&a.value},listSet=function(e,t,a){var n=listGetNode(e,t);n?n.value=a:e.next={key:t,next:e.next,value:a}},listHas=function(e,t){return!!listGetNode(e,t)};module.exports=function(){var e,t,a,n={assert:function(e){if(!n.has(e))throw new $TypeError("Side channel does not contain "+inspect(e))},get:function(n){if($WeakMap&&n&&("object"==typeof n||"function"==typeof n)){if(e)return $weakMapGet(e,n)}else if($Map){if(t)return $mapGet(t,n)}else if(a)return listGet(a,n)},has:function(n){if($WeakMap&&n&&("object"==typeof n||"function"==typeof n)){if(e)return $weakMapHas(e,n)}else if($Map){if(t)return $mapHas(t,n)}else if(a)return listHas(a,n);return!1},set:function(n,r){$WeakMap&&n&&("object"==typeof n||"function"==typeof n)?(e||(e=new $WeakMap),$weakMapSet(e,n,r)):$Map?(t||(t=new $Map),$mapSet(t,n,r)):(a||(a={key:{},next:null}),listSet(a,n,r))}};return n}; -},{"call-bind/callBound":691,"es-errors/type":700,"get-intrinsic":704,"object-inspect":712}],723:[function(require,module,exports){ +},{"call-bind/callBound":692,"es-errors/type":701,"get-intrinsic":705,"object-inspect":713}],724:[function(require,module,exports){ "use strict";var punycode=require("punycode/");function Url(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,simplePathPattern=/^(\/\/?(?!\/)[^?\s]*)(\?[^\s]*)?$/,delims=["<",">",'"',"`"," ","\r","\n","\t"],unwise=["{","}","|","\\","^","`"].concat(delims),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnameMaxLen=255,hostnamePartPattern=/^[+a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring=require("qs");function urlParse(t,s,e){if(t&&"object"==typeof t&&t instanceof Url)return t;var h=new Url;return h.parse(t,s,e),h}function urlFormat(t){return"string"==typeof t&&(t=urlParse(t)),t instanceof Url?t.format():Url.prototype.format.call(t)}function urlResolve(t,s){return urlParse(t,!1,!0).resolve(s)}function urlResolveObject(t,s){return t?urlParse(t,!1,!0).resolveObject(s):s}Url.prototype.parse=function(t,s,e){if("string"!=typeof t)throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var h=t.indexOf("?"),r=-1!==h&&h127?b+="x":b+=d[q];if(!b.match(hostnamePartPattern)){var j=g.slice(0,m),O=g.slice(m+1),U=d.match(hostnamePartStart);U&&(j.push(U[1]),O.unshift(U[2])),O.length&&(o="/"+O.join(".")+o),this.hostname=j.join(".");break}}}this.hostname.length>hostnameMaxLen?this.hostname="":this.hostname=this.hostname.toLowerCase(),y||(this.hostname=punycode.toASCII(this.hostname));var C=this.port?":"+this.port:"",A=this.hostname||"";this.host=A+C,this.href+=this.host,y&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==o[0]&&(o="/"+o))}if(!unsafeProtocol[l])for(m=0,P=autoEscape.length;m0)&&e.host.split("@"))&&(e.auth=U.shift(),e.hostname=U.shift(),e.host=e.hostname);return e.search=t.search,e.query=t.query,null===e.pathname&&null===e.search||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.href=e.format(),e}if(!d.length)return e.pathname=null,e.search?e.path="/"+e.search:e.path=null,e.href=e.format(),e;for(var q=d.slice(-1)[0],x=(e.host||t.host||d.length>1)&&("."===q||".."===q)||""===q,j=0,O=d.length;O>=0;O--)"."===(q=d[O])?d.splice(O,1):".."===q?(d.splice(O,1),j++):j&&(d.splice(O,1),j--);if(!g&&!P)for(;j--;j)d.unshift("..");!g||""===d[0]||d[0]&&"/"===d[0].charAt(0)||d.unshift(""),x&&"/"!==d.join("/").substr(-1)&&d.push("");var U,C=""===d[0]||d[0]&&"/"===d[0].charAt(0);b&&(e.hostname=C?"":d.length?d.shift():"",e.host=e.hostname,(U=!!(e.host&&e.host.indexOf("@")>0)&&e.host.split("@"))&&(e.auth=U.shift(),e.hostname=U.shift(),e.host=e.hostname));return(g=g||e.host&&d.length)&&!C&&d.unshift(""),d.length>0?e.pathname=d.join("/"):(e.pathname=null,e.path=null),null===e.pathname&&null===e.search||(e.path=(e.pathname?e.pathname:"")+(e.search?e.search:"")),e.auth=t.auth||e.auth,e.slashes=e.slashes||t.slashes,e.href=e.format(),e},Url.prototype.parseHost=function(){var t=this.host,s=portPattern.exec(t);s&&(":"!==(s=s[0])&&(this.port=s.substr(1)),t=t.substr(0,t.length-s.length)),t&&(this.hostname=t)},exports.parse=urlParse,exports.resolve=urlResolve,exports.resolveObject=urlResolveObject,exports.format=urlFormat,exports.Url=Url; -},{"punycode/":715,"qs":717}],724:[function(require,module,exports){ +},{"punycode/":716,"qs":718}],725:[function(require,module,exports){ !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(t){var e=t.Pos;function r(t,e){for(var r=0,n=t.length;rs.ch&&(a.end=s.ch,a.string=a.string.slice(0,s.ch-a.start)):a={start:s.ch,end:s.ch,string:"",state:a.state,type:"."==a.string?"property":null};for(var f=a;"property"==f.type;){if("."!=(f=i(r,e(s.line,f.start))).string)return;if(f=i(r,e(s.line,f.start)),!p)var p=[];p.push(f)}return{list:c(a,p,n,o),from:e(s.line,a.start),to:e(s.line,a.end)}}}}function i(t,e){var r=t.getTokenAt(e);return e.ch==r.start+1&&"."==r.string.charAt(0)?(r.end=r.start,r.string=".",r.type="property"):/^\.[\w$_]*$/.test(r.string)&&(r.type="property",r.start++,r.string=r.string.replace(/\./,"")),r}t.registerHelper("hint","javascript",function(t,e){return n(t,l,function(t,e){return t.getTokenAt(e)},e)}),t.registerHelper("hint","coffeescript",function(t,e){return n(t,f,i,e)});var o="charAt charCodeAt indexOf lastIndexOf substring substr slice trim trimLeft trimRight toUpperCase toLowerCase split concat match replace search".split(" "),s="length concat join splice push pop shift unshift slice reverse sort indexOf lastIndexOf every some filter forEach map reduce reduceRight ".split(" "),a="prototype apply call bind".split(" "),l="break case catch class const continue debugger default delete do else export extends false finally for function if in import instanceof new null return super switch this throw true try typeof var void while with yield".split(" "),f="and break catch class continue delete do else extends false finally for if in instanceof isnt new no not null of off on or return switch then throw true try typeof until void while with yes".split(" ");function c(t,e,n,i){var l=[],f=t.string,c=i&&i.globalScope||window;function p(t){0!=t.lastIndexOf(f,0)||function(t,e){if(!Array.prototype.indexOf){for(var r=t.length;r--;)if(t[r]===e)return!0;return!1}return-1!=t.indexOf(e)}(l,t)||l.push(t)}function u(t){"string"==typeof t?r(o,p):t instanceof Array?r(s,p):t instanceof Function&&r(a,p),function(t,e){if(Object.getOwnPropertyNames&&Object.getPrototypeOf)for(var r=t;r;r=Object.getPrototypeOf(r))Object.getOwnPropertyNames(r).forEach(e);else for(var n in t)e(n)}(t,p)}if(e&&e.length){var d,g=e.pop();for(g.type&&0===g.type.indexOf("variable")?(i&&i.additionalContext&&(d=i.additionalContext[g.string]),i&&!1===i.useGlobalScope||(d=d||c[g.string])):"string"==g.type?d="":"atom"==g.type?d=1:"function"==g.type&&(null==c.jQuery||"$"!=g.string&&"jQuery"!=g.string||"function"!=typeof c.jQuery?null!=c._&&"_"==g.string&&"function"==typeof c._&&(d=c._()):d=c.jQuery());null!=d&&e.length;)d=d[e.pop().string];null!=d&&u(d)}else{for(var y=t.state.localVars;y;y=y.next)p(y.name);for(var h=t.state.context;h;h=h.prev)for(y=h.vars;y;y=y.next)p(y.name);for(y=t.state.globalVars;y;y=y.next)p(y.name);if(i&&null!=i.additionalContext)for(var v in i.additionalContext)p(v);i&&!1===i.useGlobalScope||u(c),r(n,p)}return l}}); -},{"../../lib/codemirror":725}],725:[function(require,module,exports){ +},{"../../lib/codemirror":726}],726:[function(require,module,exports){ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).CodeMirror=t()}(this,function(){"use strict";var e=navigator.userAgent,t=navigator.platform,r=/gecko\/\d/i.test(e),n=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\//.test(e),u=a&&/Qt\/\d+\.\d+/.test(e),c=!o&&/Chrome\//.test(e),h=/Opera\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),g=f&&(/Mobile\/\w+/.test(e)||navigator.maxTouchPoints>2),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\/(\d*\.\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var z=function(){this.id=null,this.f=null,this.time=0,this.handler=E(this.onTimeout,this)};function B(e,t){for(var r=0;r=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[""];function $(e){for(;Y.length<=e;)Y.push(_(Y)+" ");return Y[e]}function _(e){return e[e.length-1]}function q(e,t){for(var r=[],n=0;n"€"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:tr?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}var se=null;function ae(e,t,r){var n;se=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==r?n=i:se=i),o.from==t&&(o.from!=o.to&&"before"!=r?n=i:se=i)}return null!=n?n:se}var ue=function(){var e="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",t="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";var r=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c="ltr"==u?"L":"R";if(0==a.length||"ltr"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function ge(e,t){var r=de(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i0}function be(e){e.prototype.on=function(e,t){fe(this,e,t)},e.prototype.off=function(e,t){pe(this,e,t)}}function we(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function xe(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function Ce(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){we(e),xe(e)}function Le(e){return e.target||e.srcElement}function ke(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Me,Ne=function(){if(l&&s<9)return!1;var e=O("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Te){var t=O("span","​");N(e,O("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=Te?O("span","​"):O("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return r.setAttribute("cm-text",""),r}function Ae(e){if(null!=Me)return Me;var t=N(e,document.createTextNode("AخA")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(Me=n.right-r.right<3)}var De,We=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),l=o.indexOf("\r");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\r\n?|\n/)},He=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Fe="oncopy"in(De=O("div"))||(De.setAttribute("oncopy","return;"),"function"==typeof De.oncopy),Pe=null;var Ee={},Ie={};function Re(e){if("string"==typeof e&&Ie.hasOwnProperty(e))e=Ie[e];else if(e&&"string"==typeof e.name&&Ie.hasOwnProperty(e.name)){var t=Ie[e.name];"string"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return Re("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return Re("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function ze(e,t){t=Re(t);var r=Ee[t.name];if(!r)return ze(e,"text/plain");var n=r(e,t);if(Be.hasOwnProperty(t.name)){var i=Be[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n["_"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Be={};function Ge(e,t){I(t,Be.hasOwnProperty(e)?Be[e]:Be[e]={})}function Ue(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function Ve(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Ke(e,t,r){return!e.startState||e.startState(t,r)}var je=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};function Xe(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t=e.first&&tr?et(r,Xe(e,r).text.length):function(e,t){var r=e.ch;return null==r||r>t?et(e.line,t):r<0?et(e.line,0):e}(t,Xe(e,t.line).text.length)}function at(e,t){for(var r=[],n=0;n=this.string.length},je.prototype.sol=function(){return this.pos==this.lineStart},je.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},je.prototype.next=function(){if(this.post},je.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},je.prototype.skipToEnd=function(){this.pos=this.string.length},je.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},je.prototype.backUp=function(e){this.pos-=e},je.prototype.column=function(){return this.lastColumnPos0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},je.prototype.current=function(){return this.string.slice(this.start,this.pos)},je.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},je.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},je.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ut=function(e,t){this.state=e,this.lookAhead=t},ct=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function ht(e,t,r,n){var i=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,wt(e,t.text,s.mode,r,function(e,t){for(var r=a;ue&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,"overlay "+t),a=r+2;else for(;re.options.maxHighlightLength&&Ue(e.doc.mode,n.state),o=ht(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function dt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new ct(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=Xe(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof ut?u.lookAhead:0)<=o.modeFrontier))return s;var c=R(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&Xe(n,o-1).stateAfter,s=l?ct.fromSaved(n,l,o):new ct(n,Ke(n.mode),o);return n.iter(o,t,function(r){pt(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&nt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ct.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ct.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ct.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ct.fromSaved=function(e,t,r){return t instanceof ut?new ct(e,Ue(e.mode,t.state),r,t.lookAhead):new ct(e,Ue(e.mode,t),r)},ct.prototype.save=function(e){var t=!1!==e?Ue(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ut(t,this.maxLookAhead):t};var mt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function yt(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=Xe(l,(t=st(l,t)).line),u=dt(e,t.line,r),c=new je(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pose.options.maxHighlightLength?(s=!1,l&&pt(e,t,n,h.pos),h.pos=t.length,a=null):a=bt(vt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a="m-"+(a?d+" "+a:d))}if(!s||c!=a){for(;u=t:o.to>t);(n||(n=[])).push(new St(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from0&&s)for(var b=0;bt)&&(!r||Wt(r,o.marker)<0)&&(r=o.marker)}return r}function It(e,t,r,n,i){var o=Xe(e,t),l=Ct&&o.markedSpans;if(l)for(var s=0;s=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.to,r)>=0:tt(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?tt(u.from,n)<=0:tt(u.from,n)<0)))return!0}}}function Rt(e){for(var t;t=Ft(e);)e=t.find(-1,!0).line;return e}function zt(e,t){var r=Xe(e,t),n=Rt(r);return r==n?t:qe(n)}function Bt(e,t){if(t>e.lastLine())return t;var r,n=Xe(e,t);if(!Gt(e,n))return t;for(;r=Pt(n);)n=r.find(1,!0).line;return qe(n)+1}function Gt(e,t){var r=Ct&&t.markedSpans;if(r)for(var n=void 0,i=0;it.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var Xt=function(e,t,r){this.text=e,Ot(this,t),this.height=r?r(this):1};function Yt(e){e.parent=null,Nt(e)}Xt.prototype.lineNo=function(){return qe(this)},be(Xt);var $t={},_t={};function qt(e,t){if(!e||/^\s*$/.test(e))return null;var r=t.addModeClass?_t:$t;return r[e]||(r[e]=e.replace(/\S+/g,"cm-$&"))}function Zt(e,t){var r=A("span",null,null,a?"padding-right: .1px":null),n={pre:A("pre",[r],"CodeMirror-line"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,l=void 0;n.pos=0,n.addToken=Jt,Ae(e.display.measure)&&(l=ce(o,e.doc.direction))&&(n.addToken=er(n.addToken,l)),n.map=[],rr(o,n,ft(e,o,t!=e.display.externalMeasured&&qe(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||"")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||""))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var s=n.content.lastChild;(/\bcm-tab\b/.test(s.className)||s.querySelector&&s.querySelector(".cm-tab"))&&(n.content.className="cm-tab-wrap-hack")}return ge(e,"renderLine",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||"")),n}function Qt(e){var t=O("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n="",i=0;iu&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function tr(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function rr(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v="",m=0;;){if(m==p){a=u=c=s="",f=null,h=null,m=1/0;for(var y=[],b=void 0,w=0;wp||C.collapsed&&x.to==p&&x.from==p)){if(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=""),C.className&&(a+=" "+C.className),C.css&&(s=(s?s+";":"")+C.css),C.startStyle&&x.from==p&&(c+=" "+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&((f||(f={})).title=C.title),C.attributes)for(var S in C.attributes)(f||(f={}))[S]=C.attributes[S];C.collapsed&&(!h||Wt(h.marker,C)<0)&&(h=x)}else x.from>p&&m>x.from&&(m=x.from)}if(b)for(var L=0;L=d)break;for(var T=Math.min(d,m);;){if(v){var M=p+v.length;if(!h){var N=M>T?v.slice(0,T-p):v;t.addToken(t,N,l?l+a:a,c,p+N.length==m?u:"",s,f)}if(M>=T){v=v.slice(T-p),p=T;break}p=M,c=""}v=i.slice(o,o=r[g++]),l=qt(r[g++],t.cm.options)}}else for(var O=1;Or)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}}function Or(e,t,r,n){return Wr(e,Dr(e,t),r,n)}function Ar(e,t){if(t>=e.display.viewFrom&&t=r.lineN&&t2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Pr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n="right"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d["right"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+tn(e.display),top:p.top,bottom:p.bottom}:Fr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=a-s)-1,t>=a&&(l="right")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?"left":"right")&&(l=r),"left"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l="left";if("right"==r&&i==a-s)for(;u=0&&(r=e[i]).left==r.right;i--);return r}function Ir(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=n.text.length?(a=n.text.length,u="before"):a<=0&&(a=0,u="after"),!s)return l("before"==u?a-1:a,"before"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=ae(s,a,u),f=se,d=c(a,h,"before"==u);return null!=f&&(d.other=c(a,f,"before"!=u)),d}function Yr(e,t){var r=0;t=st(e.doc,t),e.options.lineWrapping||(r=tn(e.display)*t.ch);var n=Xe(e.doc,t.line),i=Vt(n)+Cr(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function $r(e,t,r,n,i){var o=et(e,t,r);return o.xRel=i,n&&(o.outside=n),o}function _r(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return $r(n.first,0,null,-1,-1);var i=Ze(n,r),o=n.first+n.size-1;if(i>o)return $r(n.first+n.size-1,Xe(n,o).text.length,null,1,1);t<0&&(t=0);for(var l=Xe(n,i);;){var s=Jr(e,l,i,t,r),a=Et(l,s.ch+(s.xRel>0||s.outside>0?1:0));if(!a)return s;var u=a.find(1);if(u.line==i)return u;l=Xe(n,i=u.line)}}function qr(e,t,r,n){n-=Ur(t);var i=t.text.length,o=le(function(t){return Wr(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Wr(e,r,t).top>n},o,i)}}function Zr(e,t,r,n){return r||(r=Dr(e,t)),qr(e,t,r,Vr(e,t,Wr(e,r,n),"line").top)}function Qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function Jr(e,t,r,n,i){i-=Vt(t);var o=Dr(e,t),l=Ur(t),s=0,a=t.text.length,u=!0,c=ce(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=qr(e,t,n,l),a=s.begin,u=s.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f=u||d.to<=a)){var p=1!=d.level,g=Wr(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=gv)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.fromu&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return Qr(Xr(e,et(r,u?a.to:a.from,u?"before":"after"),"line",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Xr(e,et(r,u?a.from:a.to,u?"after":"before"),"line",t,n);Qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Wr(e,o,t);return r.top+=l,r.bottom+=l,!!Qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left=w.bottom?1:0}return $r(r,v=oe(t.text,v,1),d,m,n-f)}function en(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hr){Hr=O("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hr.appendChild(document.createTextNode("x")),Hr.appendChild(O("br"));Hr.appendChild(document.createTextNode("x"))}N(e.measure,Hr);var r=Hr.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function tn(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O("span","xxxxxxxxxx"),r=O("pre",[t],"CodeMirror-line-like");N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function rn(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l){var s=e.display.gutterSpecs[l].className;r[s]=o.offsetLeft+o.clientLeft+i,n[s]=o.clientWidth}return{fixedPos:nn(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function nn(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function on(e){var t=en(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/tn(e.display)-3);return function(i){if(Gt(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l0&&(a=Xe(e.doc,u.line).text).length==u.ch){var c=R(a,a.length,e.options.tabSize)-a.length;u=et(u.line,Math.max(0,Math.round((o-Lr(e.display).left)/tn(e.display))-c))}return u}function an(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;nt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)Ct&&zt(e.doc,t)i.viewFrom?hn(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)hn(e);else if(t<=i.viewFrom){var o=fn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):hn(e)}else if(r>=i.viewTo){var l=fn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):hn(e)}else{var s=fn(e,t,t,-1),a=fn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(ir(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):hn(e)}var u=i.externalMeasured;u&&(r=i.lineN&&t=n.viewTo)){var o=n.view[an(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function hn(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function fn(e,t,r,n){var i,o=an(e,t),l=e.display.view;if(!Ct||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;zt(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function dn(e){for(var t=e.display.view,r=0,n=0;n=e.display.viewTo||a.to().line0?l:e.defaultCharWidth())+"px"}if(n.other){var s=r.appendChild(O("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));s.style.display="",s.style.left=n.other.left+"px",s.style.top=n.other.top+"px",s.style.height=.85*(n.other.bottom-n.other.top)+"px"}}function mn(e,t){return e.top-t.top||e.left-t.left}function yn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),l=Lr(e.display),s=l.left,a=Math.max(n.sizerWidth,Tr(e)-n.sizer.offsetLeft)-l.right,u="ltr"==i.direction;function c(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(O("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==r?a-e:r)+"px;\n height: "+(n-t)+"px"))}function h(t,r,n){var o,l,h=Xe(i,t),f=h.text.length;function d(r,n){return jr(e,et(t,r),"div",h,n)}function p(t,r,n){var i=Zr(e,h,null,t),o="ltr"==r==("after"==n)?"left":"right";return d("after"==n?i.begin:i.end-(/\s/.test(h.text.charAt(i.end-1))?2:1),o)[o]}var g=ce(h,i.direction);return function(e,t,r,n){if(!e)return n(t,r,"ltr",0);for(var i=!1,o=0;ot||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?"rtl":"ltr",o),i=!0)}i||n(t,r,"ltr")}(g,r||0,null==n?f:n,function(e,t,i,h){var v="ltr"==i,m=d(e,v?"left":"right"),y=d(t-1,v?"right":"left"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,"before"),N=u?s:p(t,i,"after"),O=u&&w&&C?a:y.right):(T=u?p(e,i,"before"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,"after"):a),c(T,m.top,M-T,m.bottom),m.bottom0?t.blinker=setInterval(function(){e.hasFocus()||Sn(e),t.cursorDiv.style.visibility=(r=!r)?"":"hidden"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function wn(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Cn(e))}function xn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Sn(e))},100)}function Cn(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ge(e,"focus",e,t),e.state.focused=!0,H(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),bn(e))}function Sn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ge(e,"blur",e,t),e.state.focused=!1,T(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function Ln(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=Math.max(0,t.scroller.getBoundingClientRect().top),i=t.lineDiv.getBoundingClientRect().top,o=0,a=0;a.005||g<-.005)&&(ie.display.sizerWidth){var m=Math.ceil(f/tn(e.display));m>e.display.maxLineLength&&(e.display.maxLineLength=m,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function kn(e){if(e.widgets)for(var t=0;t=l&&(o=Ze(t,Vt(Xe(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function Mn(e,t){var r=e.display,n=en(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Mr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+Sr(r),a=t.tops-n;if(t.topi+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.options.fixedGutter?0:r.gutters.offsetWidth,f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft-h,d=Tr(e)-r.gutters.offsetWidth,p=t.right-t.left>d;return p&&(t.right=t.left+d),t.left<10?l.scrollLeft=0:t.leftd+f-3&&(l.scrollLeft=t.right+(p?0:10)-d),l}function Nn(e,t){null!=t&&(Dn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function On(e){Dn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function An(e,t,r){null==t&&null==r||Dn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function Dn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Wn(e,Yr(e,t.from),Yr(e,t.to),t.margin))}function Wn(e,t,r,n){var i=Mn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});An(e,i.scrollLeft,i.scrollTop)}function Hn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||oi(e,{top:t}),Fn(e,t,!0),r&&oi(e),ei(e,100))}function Fn(e,t,r){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function Pn(e,t,r,n){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,ai(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function En(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+Sr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+kr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var In=function(e,t,r){this.cm=r;var n=this.vert=O("div",[O("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=O("div",[O("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");n.tabIndex=i.tabIndex=-1,e(n),e(i),fe(n,"scroll",function(){n.clientHeight&&t(n.scrollTop,"vertical")}),fe(i,"scroll",function(){i.clientWidth&&t(i.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};In.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display="block",this.vert.style.bottom=t?n+"px":"0";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=r?n+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},In.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},In.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},In.prototype.zeroWidthHack=function(){var e=y&&!d?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new z,this.disableVert=new z},In.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents="auto",t.set(1e3,function n(){var i=e.getBoundingClientRect();("vert"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,n)})},In.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Rn=function(){};function zn(e,t){t||(t=En(e));var r=e.display.barWidth,n=e.display.barHeight;Bn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&Ln(e),Bn(e,En(e)),r=e.display.barWidth,n=e.display.barHeight}function Bn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+"px",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+"px",r.heightForcer.style.borderBottom=n.bottom+"px solid transparent",n.right&&n.bottom?(r.scrollbarFiller.style.display="block",r.scrollbarFiller.style.height=n.bottom+"px",r.scrollbarFiller.style.width=n.right+"px"):r.scrollbarFiller.style.display="",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display="block",r.gutterFiller.style.height=n.bottom+"px",r.gutterFiller.style.width=t.gutterWidth+"px"):r.gutterFiller.style.display=""}Rn.prototype.update=function(){return{bottom:0,right:0}},Rn.prototype.setScrollLeft=function(){},Rn.prototype.setScrollTop=function(){},Rn.prototype.clear=function(){};var Gn={native:In,null:Rn};function Un(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),fe(t,"mousedown",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute("cm-not-content","true")},function(t,r){"horizontal"==r?Pn(e,t):Hn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var Vn=0;function Kn(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vn,markArrays:null},t=e.curOp,or?or.ops.push(t):t.ownsGroup=or={ops:[t],delayedCallbacks:[]}}function jn(e){var t=e.curOp;t&&function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r=r.viewTo)||r.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new ri(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Yn(e){var t=e.cm,r=t.display;e.updatedDisplay&&Ln(t),e.barMeasure=En(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Or(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+kr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Tr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function $n(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O("div","​",null,"position: absolute;\n top: "+(t.top-r.viewOffset-Cr(e.display))+"px;\n height: "+(t.bottom-t.top+kr(e)+r.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r="before"==t.sticky?et(t.line,t.ch+1,"before"):t,t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t);for(var o=0;o<5;o++){var l=!1,s=Xr(e,t),a=r&&r!=t?Xr(e,r):s,u=Mn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Hn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(Pn(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,st(n,e.scrollToPos.from),st(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l=e.display.viewTo)){var r=+new Date+e.options.workTime,n=dt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ue(t.mode,n.state):null,a=ht(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&fr)return ei(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&qn(e,function(){for(var t=0;t=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==dn(e))return!1;ui(e)&&(hn(e),t.dims=rn(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFroml&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),Ct&&(o=zt(e.doc,o),l=Bt(e.doc,l));var s=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;!function(e,t,r){var n=e.display;0==n.view.length||t>=n.viewTo||r<=n.viewFrom?(n.view=ir(e,t,r),n.viewFrom=t):(n.viewFrom>t?n.view=ir(e,t,n.viewFrom).concat(n.view):n.viewFromr&&(n.view=n.view.slice(0,an(e,r)))),n.viewTo=r}(e,o,l),r.viewOffset=Vt(Xe(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+"px";var u=dn(e);if(!s&&0==u&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var c=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return u>4&&(r.lineDiv.style.display="none"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h-1&&(d=!1),ur(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(Je(e.options,c)))),l=f.node.nextSibling}else{var p=vr(e,f,c,r);o.insertBefore(p,l)}c+=f.size}for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),u>4&&(r.lineDiv.style.display=""),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(c),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,s&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,ei(e,400)),r.updateLineNumbers=null,!0}function ii(e,t){for(var r=t.viewport,n=!0;;n=!1){if(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Tr(e))n&&(t.visible=Tn(e.display,e.doc,r));else if(r&&null!=r.top&&(r={top:Math.min(e.doc.height+Sr(e.display)-Mr(e),r.top)}),t.visible=Tn(e.display,e.doc,r),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!ni(e,t))break;Ln(e);var i=En(e);pn(e),zn(e,i),si(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function oi(e,t){var r=new ri(e,t);if(ni(e,r)){Ln(e),ii(e,r);var n=En(e);pn(e),zn(e,n),si(e,n),r.finish()}}function li(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",sr(e,"gutterChanged",e)}function si(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+kr(e)+"px"}function ai(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=nn(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+"px",l=0;lu.clientWidth,f=u.scrollHeight>u.clientHeight;if(i&&c||o&&f){if(o&&y&&a)e:for(var d=t.target,p=s.view;d!=u;d=d.parentNode)for(var g=0;g=0&&tt(e,n.to())<=0)return r}return-1};var wi=function(e,t){this.anchor=e,this.head=t};function xi(e,t,r){var n=e&&e.options.selectionsMayTouch,i=t[r];t.sort(function(e,t){return tt(e.from(),t.from())}),r=B(t,i);for(var o=1;o0:a>=0){var u=ot(s.from(),l.from()),c=it(s.to(),l.to()),h=s.empty()?l.from()==l.head:s.from()==s.head;o<=r&&--r,t.splice(--o,2,new wi(h?c:u,h?u:c))}}return new bi(t,r)}function Ci(e,t){return new bi([new wi(e,t||e)],0)}function Si(e){return e.text?et(e.from.line+e.text.length-1,_(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Li(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Si(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=Si(t).ch-t.to.ch),et(r,n)}function ki(e,t){for(var r=[],n=0;n1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}sr(e,"change",e,t)}function Di(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;ls-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Ei(e.done),_(e.done)):e.done.length&&!_(e.done).ranges?_(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),_(e.done)):void 0}(i,i.lastOp==n)))l=_(o.changes),0==tt(t.from,t.to)&&0==tt(t.from,l.to)?l.to=Si(t):o.changes.push(Pi(e,t));else{var a=_(i.done);for(a&&a.ranges||zi(e.sel,i.done),o={changes:[Pi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=s,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||ge(e,"historyAdded")}function Ri(e,t,r,n){var i=e.history,o=n&&n.origin;r==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,r,n){var i=t.charAt(0);return"*"==i||"+"==i&&r.ranges.length==n.ranges.length&&r.somethingSelected()==n.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,_(i.done),t))?i.done[i.done.length-1]=t:zi(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=r,n&&!1!==n.clearRedo&&Ei(i.undone)}function zi(e,t){var r=_(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Bi(e,t,r,n){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=r.markedSpans),++o})}function Gi(e){if(!e)return null;for(var t,r=0;r-1&&(_(s)[h]=u[h],delete u[h])}}}return n}function Ki(e,t,r,n){if(n){var i=e.anchor;if(r){var o=tt(t,i)<0;o!=tt(r,i)<0?(i=t,t=r):o!=tt(t,r)<0&&(t=r)}return new wi(i,t)}return new wi(r||t,t)}function ji(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),qi(e,new bi([Ki(e.sel.primary(),t,r,i)],0),n)}function Xi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:s.to>t.ch))){if(i&&(ge(a,"beforeCursorEnter"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var h=a.find(n<0?1:-1),f=void 0;if((n<0?c:u)&&(h=no(e,h,-n,h&&h.line==t.line?o:null)),h&&h.line==t.line&&(f=tt(h,r))&&(n<0?f<0:f>0))return to(e,h,t,n,i)}var d=a.find(n<0?-1:1);return(n<0?u:c)&&(d=no(e,d,n,d.line==t.line?o:null)),d?to(e,d,t,n,i):null}}return t}function ro(e,t,r,n,i){var o=n||1,l=to(e,t,r,o,i)||!i&&to(e,t,r,o,!0)||to(e,t,r,-o,i)||!i&&to(e,t,r,-o,!0);return l||(e.cantEdit=!0,et(e.first,0))}function no(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?st(e,et(t.line-1)):null:r>0&&t.ch==(n||Xe(e,t.line)).text.length?t.line0)){var c=[a,1],h=tt(u.from,s.from),f=tt(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)so(e,{from:n[i].from,to:n[i].to,text:i?[""]:t.text,origin:t.origin});else so(e,t)}}function so(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var r=ki(e,t);Ii(e,t,r,e.cm?e.cm.curOp.id:NaN),co(e,t,r,Tt(e,t));var n=[];Di(e,function(e,r){r||-1!=B(n,e.history)||(go(e.history,t),n.push(e.history)),co(e,t,null,Tt(e,t))})}}function ao(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s="undo"==t?o.done:o.undone,a="undo"==t?o.undone:o.done,u=0;u=0;--d){var p=f(d);if(p)return p.v}}}}function uo(e,t){if(0!=t&&(e.first+=t,e.sel=new bi(q(e.sel.ranges,function(e){return new wi(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){un(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;ne.lastLine())){if(t.from.lineo&&(t={from:t.from,to:et(o,Xe(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ye(e,t.from,t.to),r||(r=ki(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=qe(Rt(Xe(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&me(e);Ai(n,t,r,on(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Kt(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontierr;n--){var i=Xe(e,n).stateAfter;if(i&&(!(i instanceof ut)||n+i.lookAhead1||!(this.children[0]instanceof mo))){var s=[];this.collapse(s),this.children=[new mo(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var l=i.lines.length%25+25,s=l;s10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),n.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(It(e,t.line,t,r,o)||t.line!=r.line&&It(e,r.line,t,r,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");Ct=!0}o.addToHistory&&Ii(e,{from:t,to:r,origin:"markText"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(n){u&&o.collapsed&&!u.options.lineWrapping&&Rt(n)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&_e(n,0),function(e,t,r){var n=r&&window.WeakSet&&(r.markedSpans||(r.markedSpans=new WeakSet));n&&n.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],n&&n.add(e.markedSpans)),t.marker.attachLine(e)}(n,new St(o,a==t.line?t.ch:null,a==r.line?r.ch:null),e.cm&&e.cm.curOp),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Gt(e,t)&&_e(t,0)}),o.clearOnEnter&&fe(o,"beforeCursorEnter",function(){return o.clear()}),o.readOnly&&(xt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++xo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)un(u,t.line,r.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=r.line;c++)cn(u,c,"text");o.atomic&&Ji(u.doc),sr(u,"markerAdded",u,o)}return o}Co.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Kn(e),ye(this,"clear")){var r=this.find();r&&sr(this,"clear",r.from,r.to)}for(var n=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=n&&e&&this.collapsed&&un(e,n,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&Ji(e.doc)),e&&sr(e,"markerCleared",e,this,n,i),t&&jn(e),this.parent&&this.parent.clear()}},Co.prototype.find=function(e,t){var r,n;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;a--)lo(this,n[a]);s?_i(this,s):this.cm&&On(this.cm)}),undo:Jn(function(){ao(this,"undo")}),redo:Jn(function(){ao(this,"redo")}),undoSelection:Jn(function(){ao(this,"undo",!0)}),redoSelection:Jn(function(){ao(this,"redo",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=st(this,e),t=st(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;ne)return t=e,!0;e-=o,++r}),st(this,et(r,t))},indexFromPos:function(e){var t=(e=st(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var h=e.dataTransfer.getData("Text");if(h){var f;if(t.state.draggingText&&!t.state.draggingText.copy&&(f=t.listSelections()),Zi(t.doc,Ci(r,r)),f)for(var d=0;d=0;t--)ho(e.doc,"",n[t].from,n[t].to,"+delete");On(e)})}function _o(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function qo(e,t,r){var n=_o(e,t.ch,r);return null==n?null:new et(t.line,n,r<0?"after":"before")}function Zo(e,t,r,n,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o=ce(r,t.doc.direction);if(o){var l,s=i<0?_(o):o[0],a=i<0==(1==s.level)?"after":"before";if(s.level>0||"rtl"==t.doc.direction){var u=Dr(t,r);l=i<0?r.text.length-1:0;var c=Wr(t,u,l).top;l=le(function(e){return Wr(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),"before"==a&&(l=_o(r,l,1))}else l=i<0?s.to:s.from;return new et(n,l,a)}}return new et(n,i<0?r.text.length:0,i<0?"before":"after")}Bo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Bo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Bo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Bo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Bo.default=y?Bo.macDefault:Bo.pcDefault;var Qo={selectAll:io,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),V)},killLine:function(e){return $o(e,function(t){if(t.empty()){var r=Xe(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var l=Xe(e.doc,i.line-1).text;l&&(i=new et(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),et(i.line-1,l.length-1),i,"+transpose"))}r.push(new wi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return qn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,"+input");t=e.listSelections();for(var n=0;n-1&&(tt((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=Zn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:xn(e)),pe(i.wrapper.ownerDocument,"mouseup",u),pe(i.wrapper.ownerDocument,"mousemove",c),pe(i.scroller,"dragstart",h),pe(i.scroller,"drop",u),o||(we(t),n.addNew||ji(e.doc,r,null,null,n.extend),a&&!f||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,fe(i.wrapper.ownerDocument,"mouseup",u),fe(i.wrapper.ownerDocument,"mousemove",c),fe(i.scroller,"dragstart",h),fe(i.scroller,"drop",u),e.state.delayingBlurEvent=!0,setTimeout(function(){return i.input.focus()},20),i.scroller.dragDrop&&i.scroller.dragDrop()}(e,n,t,o):function(e,t,r,n){l&&xn(e);var i=e.display,o=e.doc;we(t);var s,a,u=o.sel,c=u.ranges;n.addNew&&!n.extend?(a=o.sel.contains(r),s=a>-1?c[a]:new wi(r,r)):(s=o.sel.primary(),a=o.sel.primIndex);if("rectangle"==n.unit)n.addNew||(s=new wi(r,r)),r=sn(e,t,!0,!0),a=-1;else{var h=pl(e,r,n.unit);s=n.extend?Ki(s,h.anchor,h.head,n.extend):h}n.addNew?-1==a?(a=c.length,qi(o,xi(e,c.concat([s]),a),{scroll:!1,origin:"*mouse"})):c.length>1&&c[a].empty()&&"char"==n.unit&&!n.extend?(qi(o,xi(e,c.slice(0,a).concat(c.slice(a+1)),0),{scroll:!1,origin:"*mouse"}),u=o.sel):Yi(o,a,s,K):(a=0,qi(o,new bi([s],0),K),u=o.sel);var f=r;function d(t){if(0!=tt(f,t))if(f=t,"rectangle"==n.unit){for(var i=[],l=e.options.tabSize,c=R(Xe(o,r.line).text,r.ch,l),h=R(Xe(o,t.line).text,t.ch,l),d=Math.min(c,h),p=Math.max(c,h),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=Xe(o,g).text,y=X(m,d,l);d==p?i.push(new wi(et(g,y),et(g,y))):m.length>y&&i.push(new wi(et(g,y),et(g,X(m,p,l))))}i.length||i.push(new wi(r,r)),qi(o,xi(e,u.ranges.slice(0,a).concat(i),a),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,w=s,x=pl(e,t,n.unit),C=w.anchor;tt(x.anchor,C)>0?(b=x.head,C=ot(w.from(),x.anchor)):(b=x.anchor,C=it(w.to(),x.head));var S=u.ranges.slice(0);S[a]=function(e,t){var r=t.anchor,n=t.head,i=Xe(e.doc,r.line);if(0==tt(r,n)&&r.sticky==n.sticky)return t;var o=ce(i);if(!o)return t;var l=ae(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ae(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?"after":"before";return r.ch==p&&r.sticky==g?t:new wi(new et(r.line,p,g),n)}(e,new wi(st(o,C),b)),qi(o,xi(e,S,a),K)}}var p=i.wrapper.getBoundingClientRect(),g=0;function v(t){e.state.selectingText=!1,g=1/0,t&&(we(t),i.input.focus()),pe(i.wrapper.ownerDocument,"mousemove",m),pe(i.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var m=Zn(e,function(t){0!==t.buttons&&ke(t)?function t(r){var l=++g;var s=sn(e,r,!0,"rectangle"==n.unit);if(!s)return;if(0!=tt(s,f)){e.curOp.focus=W(),d(s);var a=Tn(i,o);(s.line>=a.to||s.linep.bottom?20:0;u&&setTimeout(Zn(e,function(){g==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):v(t)}),y=Zn(e,v);e.state.selectingText=y,fe(i.wrapper.ownerDocument,"mousemove",m),fe(i.wrapper.ownerDocument,"mouseup",y)}(e,n,t,o)}(t,n,o,e):Le(e)==r.scroller&&we(e):2==i?(n&&ji(t.doc,n),setTimeout(function(){return r.input.focus()},20)):3==i&&(S?t.display.input.onContextMenu(e):xn(t)))}}function pl(e,t,r){if("char"==r)return new wi(t,t);if("word"==r)return e.findWordAt(t);if("line"==r)return new wi(et(t.line,0),st(e.doc,et(t.line+1,0)));var n=r(e,t);return new wi(n.from,n.to)}function gl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&we(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ye(e,r))return Ce(t);o-=s.top-l.viewOffset;for(var a=0;a=i)return ge(e,r,e,Ze(e.doc,o),e.display.gutterSpecs[a].className,t),Ce(t)}}function vl(e,t){return gl(e,t,"gutterClick",!0)}function ml(e,t){xr(e.display,t)||function(e,t){if(!ye(e,"gutterContextMenu"))return!1;return gl(e,t,"gutterContextMenu",!1)}(e,t)||ve(e,t,"contextmenu")||S||e.display.input.onContextMenu(t)}function yl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),zr(e)}fl.prototype.compare=function(e,t,r){return this.time+400>e&&0==tt(t,this.pos)&&r==this.button};var bl={toString:function(){return"CodeMirror.Init"}},wl={},xl={};function Cl(e,t,r){if(!t!=!(r&&r!=bl)){var n=e.display.dragFunctions,i=t?fe:pe;i(e.display.scroller,"dragstart",n.start),i(e.display.scroller,"dragenter",n.enter),i(e.display.scroller,"dragover",n.over),i(e.display.scroller,"dragleave",n.leave),i(e.display.scroller,"drop",n.drop)}}function Sl(e){e.options.lineWrapping?(H(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(T(e.display.wrapper,"CodeMirror-wrap"),jt(e)),ln(e),un(e),zr(e),setTimeout(function(){return zn(e)},100)}function Ll(e,t){var r=this;if(!(this instanceof Ll))return new Ll(e,t);this.options=t=t?I(t):{},I(wl,t,!1);var n=t.value;"string"==typeof n?n=new No(n,t.mode,null,t.lineSeparator,t.direction):t.mode&&(n.modeOption=t.mode),this.doc=n;var i=new Ll.inputStyles[t.inputStyle](this),o=this.display=new di(e,n,i,t);for(var u in o.wrapper.CodeMirror=this,yl(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Un(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new z,keySeq:null,specialChars:null},t.autofocus&&!m&&o.input.focus(),l&&s<11&&setTimeout(function(){return r.display.input.reset(!0)},20),function(e){var t=e.display;fe(t.scroller,"mousedown",Zn(e,dl)),fe(t.scroller,"dblclick",l&&s<11?Zn(e,function(t){if(!ve(e,t)){var r=sn(e,t);if(r&&!vl(e,t)&&!xr(e.display,t)){we(t);var n=e.findWordAt(r);ji(e.doc,n.anchor,n.head)}}}):function(t){return ve(e,t)||we(t)});fe(t.scroller,"contextmenu",function(t){return ml(e,t)}),fe(t.input.getField(),"contextmenu",function(r){t.scroller.contains(r.target)||ml(e,r)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}fe(t.scroller,"touchstart",function(i){if(!ve(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!vl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),fe(t.scroller,"touchmove",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),fe(t.scroller,"touchend",function(r){var n=t.activeTouch;if(n&&!xr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,"page");l=!n.prev||o(n,n.prev)?new wi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new wi(et(s.line,0),st(e.doc,et(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),we(r)}i()}),fe(t.scroller,"touchcancel",i),fe(t.scroller,"scroll",function(){t.scroller.clientHeight&&(Hn(e,t.scroller.scrollTop),Pn(e,t.scroller.scrollLeft,!0),ge(e,"scroll",e))}),fe(t.scroller,"mousewheel",function(t){return yi(e,t)}),fe(t.scroller,"DOMMouseScroll",function(t){return yi(e,t)}),fe(t.wrapper,"scroll",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){ve(e,t)||Se(t)},over:function(t){ve(e,t)||(!function(e,t){var r=sn(e,t);if(r){var n=document.createDocumentFragment();vn(e,r,n),e.display.dragCursor||(e.display.dragCursor=O("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),Se(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-Oo<100))Se(t);else if(!ve(e,t)&&!xr(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var r=O("img",null,null,"position: fixed; left: 0; top: 0;");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:Zn(e,Ao),leave:function(t){ve(e,t)||Do(e)}};var a=t.input.getField();fe(a,"keyup",function(t){return al.call(e,t)}),fe(a,"keydown",Zn(e,sl)),fe(a,"keypress",Zn(e,ul)),fe(a,"focus",function(t){return Cn(e,t)}),fe(a,"blur",function(t){return Sn(e,t)})}(this),Fo(),Kn(this),this.curOp.forceUpdate=!0,Wi(this,n),t.autofocus&&!m||this.hasFocus()?setTimeout(function(){r.hasFocus()&&!r.state.focused&&Cn(r)},20):Sn(this),xl)xl.hasOwnProperty(u)&&xl[u](this,t[u],bl);ui(this),t.finishInit&&t.finishInit(this);for(var c=0;c150)){if(!n)return;r="prev"}}else u=0,r="not";"prev"==r?u=t>o.first?R(Xe(o,t-1).text,null,l):0:"add"==r?u=a+e.options.indentUnit:"subtract"==r?u=a-e.options.indentUnit:"number"==typeof r&&(u=a+r),u=Math.max(0,u);var h="",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+="\t";if(fl,a=We(t),u=null;if(s&&n.ranges.length>1)if(Ml&&Ml.text.join("\n")==t){if(n.ranges.length%Ml.text.length==0){u=[];for(var c=0;c=0;f--){var d=n.ranges[f],p=d.from(),g=d.to();d.empty()&&(r&&r>0?p=et(p.line,p.ch-r):e.state.overwrite&&!s?g=et(g.line,Math.min(Xe(o,g.line).text.length,g.ch+_(a).length)):s&&Ml&&Ml.lineWise&&Ml.text.join("\n")==a.join("\n")&&(p=g=et(p.line,0)));var v={from:p,to:g,text:u?u[f%u.length]:a,origin:i||(s?"paste":e.state.cutIncoming>l?"cut":"+input")};lo(e.doc,v),sr(e,"inputRead",e,v)}t&&!s&&Dl(e,t),On(e),e.curOp.updateInput<2&&(e.curOp.updateInput=h),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Al(e,t){var r=e.clipboardData&&e.clipboardData.getData("Text");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||qn(t,function(){return Ol(t,r,0,null,"paste")}),!0}function Dl(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s-1){l=Tl(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Xe(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Tl(e,i.head.line,"smart"));l&&sr(e,"electricInput",e,i.head.line)}}}function Wl(e){for(var t=[],r=[],n=0;n0?0:-1));if(isNaN(c))l=null;else{var h=r>0?c>=55296&&c<56320:c>=56320&&c<57343;l=new et(t.line,Math.max(0,Math.min(s.text.length,t.ch+r*(h?2:1))),-r)}}else l=i?function(e,t,r,n){var i=ce(t,e.doc.direction);if(!i)return qo(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky="before"):r.ch<=0&&(r.ch=0,r.sticky="after");var o=ae(i,r.ch,r.sticky),l=i[o];if("ltr"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from=l.from&&f>=c.begin)){var d=h?"before":"after";return new et(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new et(r.line,a(e,1),"before"):new et(r.line,e,"after")};e>=0&&e0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):qo(s,t,r);if(null==l){if(o||(u=t.line+a)=e.first+e.size||(t=new et(u,t.ch,t.sticky),!(s=Xe(e,u))))return!1;t=Zo(i,e.cm,s,t.line,a)}else t=l;return!0}if("char"==n||"codepoint"==n)u();else if("column"==n)u(!0);else if("word"==n||"group"==n)for(var c=null,h="group"==n,f=e.cm&&e.cm.getHelper(t,"wordChars"),d=!0;!(r<0)||u(!d);d=!1){var p=s.text.charAt(t.ch)||"\n",g=te(p,f)?"w":h&&"\n"==p?"n":!h||/\s/.test(p)?null:"p";if(!h||d||g||(g="s"),c&&c!=g){r<0&&(r=1,u(),t.sticky="after");break}if(g&&(c=g),r>0&&!u(!d))break}var v=ro(e,t,o,l,!0);return rt(o,v)&&(v.hitSide=!0),v}function El(e,t,r,n){var i,o,l=e.doc,s=t.left;if("page"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*en(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else"line"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=_r(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var Il=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new z,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Rl(e,t){var r=Ar(e,t.line);if(!r||r.hidden)return null;var n=Xe(e.doc,t.line),i=Nr(r,n,t.line),o=ce(n,e.doc.direction),l="left";o&&(l=ae(o,t.ch)%2?"right":"left");var s=Pr(i.map,t.ch,l);return s.offset="right"==s.collapse?s.end:s.start,s}function zl(e,t){return t&&(e.bad=!0),e}function Bl(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return zl(e.clipPos(et(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Rl(t,i)||{node:a[0].measure.map[2],offset:0},c=o.linen.firstLine()&&(l=et(l.line-1,Xe(n.doc,l.line-1).length)),s.ch==Xe(n.doc,s.line).text.length&&s.linei.viewTo-1)return!1;l.line==i.viewFrom||0==(e=an(n,l.line))?(t=qe(i.view[0].line),r=i.view[0].node):(t=qe(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=an(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=qe(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o="",l=!1,s=e.doc.lineSeparator(),a=!1;function u(){l&&(o+=s,a&&(o+=s),l=a=!1)}function c(e){e&&(u(),o+=e)}function h(t){if(1==t.nodeType){var r=t.getAttribute("cm-text");if(r)return void c(r);var o,f=t.getAttribute("cm-marker");if(f){var d=e.findMarks(et(n,0),et(i+1,0),(v=+f,function(e){return e.id==v}));return void(d.length&&(o=d[0].find(0))&&c(Ye(e.doc,o.from,o.to).join(s)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&u();for(var g=0;g1&&f.length>1;)if(_(h)==_(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);dl.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),h[0]=h[0].slice(d).replace(/\u200b+$/,"");var x=et(t,d),C=et(a,f.length?_(f).length-p:0);return h.length>1||h[0]||tt(x,C)?(ho(n.doc,h,x,C,"+input"),!0):void 0},Il.prototype.ensurePolled=function(){this.forceCompositionEnd()},Il.prototype.reset=function(){this.forceCompositionEnd()},Il.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Il.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Il.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||qn(this.cm,function(){return un(e.cm)})},Il.prototype.setUneditable=function(e){e.contentEditable="false"},Il.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||Zn(this.cm,Ol)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Il.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Il.prototype.onContextMenu=function(){},Il.prototype.resetPosition=function(){},Il.prototype.needsContentAttribute=!0;var Ul=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new z,this.hasSelection=!1,this.composing=null};Ul.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!ve(n,e)){if(n.somethingSelected())Nl({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Wl(n);Nl({lineWise:!0,text:t.text}),"cut"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput="",i.value=t.text.join("\n"),P(i))}"cut"==e.type&&(n.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width="0px"),fe(i,"input",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),fe(i,"paste",function(e){ve(n,e)||Al(e,n)||(n.state.pasteIncoming=+new Date,r.fastPoll())}),fe(i,"cut",o),fe(i,"copy",o),fe(e.scroller,"paste",function(t){if(!xr(e,t)&&!ve(n,t)){if(!i.dispatchEvent)return n.state.pasteIncoming=+new Date,void r.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}}),fe(e.lineSpace,"selectstart",function(t){xr(e,t)||we(t)}),fe(i,"compositionstart",function(){var e=n.getCursor("from");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor("to"),{className:"CodeMirror-composing"})}}),fe(i,"compositionend",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Ul.prototype.createField=function(e){this.wrapper=Fl(),this.textarea=this.wrapper.firstChild},Ul.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Ul.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=gn(e);if(e.options.moveInputWithCursor){var i=Xr(e,r.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Ul.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ul.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value="",l&&s>=9&&(this.hasSelection=null))}},Ul.prototype.getField=function(){return this.textarea},Ul.prototype.supportsTouch=function(){return!1},Ul.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Ul.prototype.blur=function(){this.textarea.blur()},Ul.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ul.prototype.receivedFocus=function(){this.slowPoll()},Ul.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Ul.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Ul.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||He(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var a=0,u=Math.min(n.length,i.length);a1e3||i.indexOf("\n")>-1?r.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Ul.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ul.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Ul.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=sn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&Zn(r,qi)(r.doc,Ci(o),V);var c,f=i.style.cssText,d=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(l?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",a&&(c=window.scrollY),n.input.focus(),a&&window.scrollTo(null,c),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=m,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){Se(e);var g=function(){pe(window,"mouseup",g),setTimeout(m,20)};fe(window,"mouseup",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending==m&&(t.contextMenuPending=!1,t.wrapper.style.cssText=d,i.style.cssText=f,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart)){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?Zn(r,io)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Ul.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Ul.prototype.setUneditable=function(){},Ul.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=bl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=bl,r("value","",function(e,t){return e.setValue(t)},!0),r("mode",null,function(e,t){e.doc.modeOption=t,Mi(e)},!0),r("indentUnit",2,Mi,!0),r("indentWithTabs",!1),r("smartIndent",!0),r("tabSize",4,function(e){Ni(e),zr(e),un(e)},!0),r("lineSeparator",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(et(n,o))}n++});for(var i=r.length-1;i>=0;i--)ho(e.doc,t,r[i],et(r[i].line,r[i].ch+t.length))}}),r("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),r!=bl&&e.refresh()}),r("specialCharPlaceholder",Qt,function(e){return e.refresh()},!0),r("electricChars",!0),r("inputStyle",m?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),r("spellcheck",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r("autocorrect",!1,function(e,t){return e.getInputField().autocorrect=t},!0),r("autocapitalize",!1,function(e,t){return e.getInputField().autocapitalize=t},!0),r("rtlMoveVisually",!w),r("wholeLineUpdateBefore",!0),r("theme","default",function(e){yl(e),fi(e)},!0),r("keyMap","default",function(e,t,r){var n=Yo(t),i=r!=bl&&Yo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r("extraKeys",null),r("configureMouse",null),r("lineWrapping",!1,Sl,!0),r("gutters",[],function(e,t){e.display.gutterSpecs=ci(t,e.options.lineNumbers),fi(e)},!0),r("fixedGutter",!0,function(e,t){e.display.gutters.style.left=t?nn(e.display)+"px":"0",e.refresh()},!0),r("coverGutterNextToScrollbar",!1,function(e){return zn(e)},!0),r("scrollbarStyle","native",function(e){Un(e),zn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r("lineNumbers",!1,function(e,t){e.display.gutterSpecs=ci(e.options.gutters,t),fi(e)},!0),r("firstLineNumber",1,fi,!0),r("lineNumberFormatter",function(e){return e},fi,!0),r("showCursorWhenSelecting",!1,pn,!0),r("resetSelectionOnContextMenu",!0),r("lineWiseCopyCut",!0),r("pasteLinesPerSelection",!0),r("selectionsMayTouch",!1),r("readOnly",!1,function(e,t){"nocursor"==t&&(Sn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r("screenReaderLabel",null,function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)}),r("disableInput",!1,function(e,t){t||e.display.input.reset()},!0),r("dragDrop",!0,Cl),r("allowDropFileTypes",null),r("cursorBlinkRate",530),r("cursorScrollMargin",0),r("cursorHeight",1,pn,!0),r("singleCursorHeightPerLine",!0,pn,!0),r("workTime",100),r("workDelay",100),r("flattenSpans",!0,Ni,!0),r("addModeClass",!1,Ni,!0),r("pollInterval",100),r("undoDepth",200,function(e,t){return e.doc.history.undoDepth=t}),r("historyEventDelay",1250),r("viewportMargin",10,function(e){return e.refresh()},!0),r("maxHighlightLength",1e4,Ni,!0),r("moveInputWithCursor",!0,function(e,t){t||e.display.input.resetPosition()}),r("tabindex",null,function(e,t){return e.display.input.getField().tabIndex=t||""}),r("autofocus",null),r("direction","ltr",function(e,t){return e.doc.setDirection(t)},!0),r("phrases",null)}(Ll),function(e){var t=e.optionHandlers,r=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,r){var n=this.options,i=n[e];n[e]==r&&"mode"!=e||(n[e]=r,t.hasOwnProperty(e)&&Zn(this,t[e])(this,r,i),ge(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Yo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;rr&&(Tl(this,i.head.line,e,!0),r=i.head.line,n==this.doc.sel.primIndex&&On(this));else{var o=i.from(),l=i.to(),s=Math.max(r,o.line);r=Math.min(this.lastLine(),l.line-(l.ch?0:1))+1;for(var a=s;a0&&Yi(this.doc,n,new wi(o,u[n].to()),V)}}}),getTokenAt:function(e,t){return yt(this,e,t)},getLineTokens:function(e,t){return yt(this,et(e),t,!0)},getTokenTypeAt:function(e){e=st(this.doc,e);var t,r=ft(this,Xe(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]o&&(e=o,i=!0),n=Xe(this.doc,e)}else n=e;return Vr(this,n,{top:0,left:0},t||"page",r||i).top+(i?this.doc.height-Vt(n):0)},defaultTextHeight:function(){return en(this.display)},defaultCharWidth:function(){return tn(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Xr(this,st(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),a.sizer.appendChild(t),"over"==n)u=e.top;else if("above"==n||"near"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);("above"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?c=0:"middle"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=Mn(o,l)).scrollTop&&Hn(o,s.scrollTop),null!=s.scrollLeft&&Pn(o,s.scrollLeft))},triggerOnKeyDown:Qn(sl),triggerOnKeyPress:Qn(ul),triggerOnKeyUp:al,triggerOnMouseDown:Qn(dl),execCommand:function(e){if(Qo.hasOwnProperty(e))return Qo[e].call(null,this)},triggerElectric:Qn(function(e){Dl(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=st(this.doc,e),l=0;l0&&l(t.charAt(r-1));)--r;for(;n.5||this.options.lineWrapping)&&ln(this),ge(this,"refresh",this)}),swapDoc:Qn(function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Wi(this,e),zr(this),this.display.input.reset(),An(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sr(this,"swapDoc",this,t),t}),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},be(e),e.registerHelper=function(t,n,i){r.hasOwnProperty(t)||(r[t]=e[t]={_global:[]}),r[t][n]=i},e.registerGlobalHelper=function(t,n,i,o){e.registerHelper(t,n,o),r[t]._global.push({pred:i,val:o})}}(Ll);var Vl="iter insert remove copy getEditor constructor".split(" ");for(var Kl in No.prototype)No.prototype.hasOwnProperty(Kl)&&B(Vl,Kl)<0&&(Ll.prototype[Kl]=function(e){return function(){return e.apply(this.doc,arguments)}}(No.prototype[Kl]));return be(No),Ll.inputStyles={textarea:Ul,contenteditable:Il},Ll.defineMode=function(e){Ll.defaults.mode||"null"==e||(Ll.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Ee[e]=t}.apply(this,arguments)},Ll.defineMIME=function(e,t){Ie[e]=t},Ll.defineMode("null",function(){return{token:function(e){return e.skipToEnd()}}}),Ll.defineMIME("text/plain","null"),Ll.defineExtension=function(e,t){Ll.prototype[e]=t},Ll.defineDocExtension=function(e,t){No.prototype[e]=t},Ll.fromTextArea=function(e,t){if((t=t?I(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute("autofocus")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(fe(e.form,"submit",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(r){r.save=n,r.getTextArea=function(){return e},r.toTextArea=function(){r.toTextArea=isNaN,n(),e.parentNode.removeChild(r.getWrapperElement()),e.style.display="",e.form&&(pe(e.form,"submit",n),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var s=Ll(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},function(e){e.off=pe,e.on=fe,e.wheelEventPixels=mi,e.Doc=No,e.splitLines=We,e.countColumn=R,e.findColumn=X,e.isWordChar=ee,e.Pass=U,e.signal=ge,e.Line=Xt,e.changeEnd=Si,e.scrollbarModel=Gn,e.Pos=et,e.cmpPos=tt,e.modes=Ee,e.mimeModes=Ie,e.resolveMode=Re,e.getMode=ze,e.modeExtensions=Be,e.extendMode=Ge,e.copyState=Ue,e.startState=Ke,e.innerMode=Ve,e.commands=Qo,e.keyMap=Bo,e.keyName=Xo,e.isModifierKey=Ko,e.lookupKey=Vo,e.normalizeKeyMap=Uo,e.StringStream=je,e.SharedTextMarker=Lo,e.TextMarker=Co,e.LineWidget=bo,e.e_preventDefault=we,e.e_stopPropagation=xe,e.e_stop=Se,e.addClass=H,e.contains=D,e.rmClass=T,e.keyNames=Eo}(Ll),Ll.version="5.65.2",Ll}); -},{}],726:[function(require,module,exports){ +},{}],727:[function(require,module,exports){ !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("javascript",function(t,r){var n,a,i=t.indentUnit,o=r.statementIndent,c=r.jsonld,s=r.json||c,u=!1!==r.trackScope,f=r.typescript,l=r.wordCharacters||/[\w$\xa1-\uffff]/,d=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),r=e("keyword b"),n=e("keyword c"),a=e("keyword d"),i=e("operator"),o={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:e("new"),delete:n,void:n,throw:n,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:i,typeof:i,instanceof:i,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e("this"),class:e("class"),super:e("atom"),yield:n,export:e("export"),import:e("import"),extends:n,await:n}}(),p=/[+\-*&%=<>!?|~^@]/,m=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function v(e,t,r){return n=e,a=r,t}function k(e,t){var r,n=e.next();if('"'==n||"'"==n)return t.tokenize=(r=n,function(e,t){var n,a=!1;if(c&&"@"==e.peek()&&e.match(m))return t.tokenize=k,v("jsonld-keyword","meta");for(;null!=(n=e.next())&&(n!=r||a);)a=!a&&"\\"==n;return a||(t.tokenize=k),v("string","string")}),t.tokenize(e,t);if("."==n&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return v("number","number");if("."==n&&e.match(".."))return v("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(n))return v(n);if("="==n&&e.eat(">"))return v("=>","operator");if("0"==n&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return v("number","number");if(/\d/.test(n))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),v("number","number");if("/"==n)return e.eat("*")?(t.tokenize=y,y(e,t)):e.eat("/")?(e.skipToEnd(),v("comment","comment")):Ze(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if("/"==t&&!n)return;"["==t?n=!0:n&&"]"==t&&(n=!1)}r=!r&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),v("regexp","string-2")):(e.eat("="),v("operator","operator",e.current()));if("`"==n)return t.tokenize=w,w(e,t);if("#"==n&&"!"==e.peek())return e.skipToEnd(),v("meta","meta");if("#"==n&&e.eatWhile(l))return v("variable","property");if("<"==n&&e.match("!--")||"-"==n&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),v("comment","comment");if(p.test(n))return">"==n&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=n&&"="!=n||e.eat("="):/[<>*+\-|&?]/.test(n)&&(e.eat(n),">"==n&&e.eat(n))),"?"==n&&e.eat(".")?v("."):v("operator","operator",e.current());if(l.test(n)){e.eatWhile(l);var a=e.current();if("."!=t.lastType){if(d.propertyIsEnumerable(a)){var i=d[a];return v(i.type,i.style,a)}if("async"==a&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return v("async","keyword",a)}return v("variable","variable",a)}}function y(e,t){for(var r,n=!1;r=e.next();){if("/"==r&&n){t.tokenize=k;break}n="*"==r}return v("comment","comment")}function w(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&("`"==r||"$"==r&&e.eat("{"))){t.tokenize=k;break}n=!n&&"\\"==r}return v("quasi","string-2",e.current())}var b="([{}])";function x(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf("=>",e.start);if(!(r<0)){if(f){var n=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var a=0,i=!1,o=r-1;o>=0;--o){var c=e.string.charAt(o),s=b.indexOf(c);if(s>=0&&s<3){if(!a){++o;break}if(0==--a){"("==c&&(i=!0);break}}else if(s>=3&&s<6)++a;else if(l.test(c))i=!0;else if(/["'\/`]/.test(c))for(;;--o){if(0==o)return;if(e.string.charAt(o-1)==c&&"\\"!=e.string.charAt(o-2)){o--;break}}else if(i&&!a){++o;break}}i&&!a&&(t.fatArrowAt=o)}}var h={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function g(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function j(e,t){if(!u)return!1;for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}function M(e,t,r,n,a){var i=e.cc;for(A.state=e,A.stream=a,A.marked=null,A.cc=i,A.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;){if((i.length?i.pop():s?F:W)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return A.marked?A.marked:"variable"==r&&j(e,n)?"variable-2":t}}}var A={state:null,column:null,marked:null,cc:null};function V(){for(var e=arguments.length-1;e>=0;e--)A.cc.push(arguments[e])}function E(){return V.apply(null,arguments),!0}function z(e,t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}function I(e){var t=A.state;if(A.marked="def",u){if(t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var n=function e(t,r){if(r){if(r.block){var n=e(t,r.prev);return n?n==r.prev?r:new $(n,r.vars,!0):null}return z(t,r.vars)?r:new $(r.prev,new q(t,r.vars),!1)}return null}(e,t.context);if(null!=n)return void(t.context=n)}else if(!z(e,t.localVars))return void(t.localVars=new q(e,t.localVars));r.globalVars&&!z(e,t.globalVars)&&(t.globalVars=new q(e,t.globalVars))}}function T(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function $(e,t,r){this.prev=e,this.vars=t,this.block=r}function q(e,t){this.name=e,this.next=t}var C=new q("this",new q("arguments",null));function S(){A.state.context=new $(A.state.context,A.state.localVars,!1),A.state.localVars=C}function _(){A.state.context=new $(A.state.context,A.state.localVars,!0),A.state.localVars=null}function O(){A.state.localVars=A.state.context.vars,A.state.context=A.state.context.prev}function P(e,t){var r=function(){var r=A.state,n=r.indented;if("stat"==r.lexical.type)n=r.lexical.indented;else for(var a=r.lexical;a&&")"==a.type&&a.align;a=a.prev)n=a.indented;r.lexical=new g(n,A.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function N(){var e=A.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function U(e){return function t(r){return r==e?E():";"==e||"}"==r||")"==r||"]"==r?V():E(t)}}function W(e,t){return"var"==e?E(P("vardef",t),Me,U(";"),N):"keyword a"==e?E(P("form"),D,W,N):"keyword b"==e?E(P("form"),W,N):"keyword d"==e?A.stream.match(/^\s*$/,!1)?E():E(P("stat"),J,U(";"),N):"debugger"==e?E(U(";")):"{"==e?E(P("}"),_,se,N,O):";"==e?E():"if"==e?("else"==A.state.lexical.info&&A.state.cc[A.state.cc.length-1]==N&&A.state.cc.pop()(),E(P("form"),D,W,N,Te)):"function"==e?E(Se):"for"==e?E(P("form"),_,$e,W,O,N):"class"==e||f&&"interface"==t?(A.marked="keyword",E(P("form","class"==e?e:t),Ue,N)):"variable"==e?f&&"declare"==t?(A.marked="keyword",E(W)):f&&("module"==t||"enum"==t||"type"==t)&&A.stream.match(/^\s*\w/,!1)?(A.marked="keyword","enum"==t?E(Xe):"type"==t?E(Oe,U("operator"),pe,U(";")):E(P("form"),Ae,U("{"),P("}"),se,N,N)):f&&"namespace"==t?(A.marked="keyword",E(P("form"),F,W,N)):f&&"abstract"==t?(A.marked="keyword",E(W)):E(P("stat"),te):"switch"==e?E(P("form"),D,U("{"),P("}","switch"),_,se,N,N,O):"case"==e?E(F,U(":")):"default"==e?E(U(":")):"catch"==e?E(P("form"),S,B,W,N,O):"export"==e?E(P("stat"),He,N):"import"==e?E(P("stat"),Ge,N):"async"==e?E(W):"@"==t?E(F,W):V(P("stat"),F,U(";"),N)}function B(e){if("("==e)return E(Pe,U(")"))}function F(e,t){return G(e,t,!1)}function H(e,t){return G(e,t,!0)}function D(e){return"("!=e?V():E(P(")"),J,U(")"),N)}function G(e,t,r){if(A.state.fatArrowAt==A.stream.start){var n=r?Y:X;if("("==e)return E(S,P(")"),oe(Pe,")"),N,U("=>"),n,O);if("variable"==e)return V(S,Ae,U("=>"),n,O)}var a=r?L:K;return h.hasOwnProperty(e)?E(a):"function"==e?E(Se,a):"class"==e||f&&"interface"==t?(A.marked="keyword",E(P("form"),Ne,N)):"keyword c"==e||"async"==e?E(r?H:F):"("==e?E(P(")"),J,U(")"),N,a):"operator"==e||"spread"==e?E(r?H:F):"["==e?E(P("]"),Re,N,a):"{"==e?ce(ne,"}",null,a):"quasi"==e?V(Q,a):"new"==e?E(function(e){return function(t){return"."==t?E(e?ee:Z):"variable"==t&&f?E(he,e?L:K):V(e?H:F)}}(r)):E()}function J(e){return e.match(/[;\}\)\],]/)?V():V(F)}function K(e,t){return","==e?E(J):L(e,t,!1)}function L(e,t,r){var n=0==r?K:L,a=0==r?F:H;return"=>"==e?E(S,r?Y:X,O):"operator"==e?/\+\+|--/.test(t)||f&&"!"==t?E(n):f&&"<"==t&&A.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?E(P(">"),oe(pe,">"),N,n):"?"==t?E(F,U(":"),a):E(a):"quasi"==e?V(Q,n):";"!=e?"("==e?ce(H,")","call",n):"."==e?E(re,n):"["==e?E(P("]"),J,U("]"),N,n):f&&"as"==t?(A.marked="keyword",E(pe,n)):"regexp"==e?(A.state.lastType=A.marked="operator",A.stream.backUp(A.stream.pos-A.stream.start-1),E(a)):void 0:void 0}function Q(e,t){return"quasi"!=e?V():"${"!=t.slice(t.length-2)?E(Q):E(J,R)}function R(e){if("}"==e)return A.marked="string-2",A.state.tokenize=w,E(Q)}function X(e){return x(A.stream,A.state),V("{"==e?W:F)}function Y(e){return x(A.stream,A.state),V("{"==e?W:H)}function Z(e,t){if("target"==t)return A.marked="keyword",E(K)}function ee(e,t){if("target"==t)return A.marked="keyword",E(L)}function te(e){return":"==e?E(N,W):V(K,U(";"),N)}function re(e){if("variable"==e)return A.marked="property",E()}function ne(e,t){return"async"==e?(A.marked="property",E(ne)):"variable"==e||"keyword"==A.style?(A.marked="property","get"==t||"set"==t?E(ae):(f&&A.state.fatArrowAt==A.stream.start&&(r=A.stream.match(/^\s*:\s*/,!1))&&(A.state.fatArrowAt=A.stream.pos+r[0].length),E(ie))):"number"==e||"string"==e?(A.marked=c?"property":A.style+" property",E(ie)):"jsonld-keyword"==e?E(ie):f&&T(t)?(A.marked="keyword",E(ne)):"["==e?E(F,ue,U("]"),ie):"spread"==e?E(H,ie):"*"==t?(A.marked="keyword",E(ne)):":"==e?V(ie):void 0;var r}function ae(e){return"variable"!=e?V(ie):(A.marked="property",E(Se))}function ie(e){return":"==e?E(H):"("==e?V(Se):void 0}function oe(e,t,r){function n(a,i){if(r?r.indexOf(a)>-1:","==a){var o=A.state.lexical;return"call"==o.info&&(o.pos=(o.pos||0)+1),E(function(r,n){return r==t||n==t?V():V(e)},n)}return a==t||i==t?E():r&&r.indexOf(";")>-1?V(e):E(U(t))}return function(r,a){return r==t||a==t?E():V(e,n)}}function ce(e,t,r){for(var n=3;n"),pe):"quasi"==e?V(ye,xe):void 0}function me(e){if("=>"==e)return E(pe)}function ve(e){return e.match(/[\}\)\]]/)?E():","==e||";"==e?E(ve):V(ke,ve)}function ke(e,t){return"variable"==e||"keyword"==A.style?(A.marked="property",E(ke)):"?"==t||"number"==e||"string"==e?E(ke):":"==e?E(pe):"["==e?E(U("variable"),fe,U("]"),ke):"("==e?V(_e,ke):e.match(/[;\}\)\],]/)?void 0:E()}function ye(e,t){return"quasi"!=e?V():"${"!=t.slice(t.length-2)?E(ye):E(pe,we)}function we(e){if("}"==e)return A.marked="string-2",A.state.tokenize=w,E(ye)}function be(e,t){return"variable"==e&&A.stream.match(/^\s*[?:]/,!1)||"?"==t?E(be):":"==e?E(pe):"spread"==e?E(be):V(pe)}function xe(e,t){return"<"==t?E(P(">"),oe(pe,">"),N,xe):"|"==t||"."==e||"&"==t?E(pe):"["==e?E(pe,U("]"),xe):"extends"==t||"implements"==t?(A.marked="keyword",E(pe)):"?"==t?E(pe,U(":"),pe):void 0}function he(e,t){if("<"==t)return E(P(">"),oe(pe,">"),N,xe)}function ge(){return V(pe,je)}function je(e,t){if("="==t)return E(pe)}function Me(e,t){return"enum"==t?(A.marked="keyword",E(Xe)):V(Ae,ue,ze,Ie)}function Ae(e,t){return f&&T(t)?(A.marked="keyword",E(Ae)):"variable"==e?(I(t),E()):"spread"==e?E(Ae):"["==e?ce(Ee,"]"):"{"==e?ce(Ve,"}"):void 0}function Ve(e,t){return"variable"!=e||A.stream.match(/^\s*:/,!1)?("variable"==e&&(A.marked="property"),"spread"==e?E(Ae):"}"==e?V():"["==e?E(F,U("]"),U(":"),Ve):E(U(":"),Ae,ze)):(I(t),E(ze))}function Ee(){return V(Ae,ze)}function ze(e,t){if("="==t)return E(H)}function Ie(e){if(","==e)return E(Me)}function Te(e,t){if("keyword b"==e&&"else"==t)return E(P("form","else"),W,N)}function $e(e,t){return"await"==t?E($e):"("==e?E(P(")"),qe,N):void 0}function qe(e){return"var"==e?E(Me,Ce):"variable"==e?E(Ce):V(Ce)}function Ce(e,t){return")"==e?E():";"==e?E(Ce):"in"==t||"of"==t?(A.marked="keyword",E(F,Ce)):V(F,Ce)}function Se(e,t){return"*"==t?(A.marked="keyword",E(Se)):"variable"==e?(I(t),E(Se)):"("==e?E(S,P(")"),oe(Pe,")"),N,le,W,O):f&&"<"==t?E(P(">"),oe(ge,">"),N,Se):void 0}function _e(e,t){return"*"==t?(A.marked="keyword",E(_e)):"variable"==e?(I(t),E(_e)):"("==e?E(S,P(")"),oe(Pe,")"),N,le,O):f&&"<"==t?E(P(">"),oe(ge,">"),N,_e):void 0}function Oe(e,t){return"keyword"==e||"variable"==e?(A.marked="type",E(Oe)):"<"==t?E(P(">"),oe(ge,">"),N):void 0}function Pe(e,t){return"@"==t&&E(F,Pe),"spread"==e?E(Pe):f&&T(t)?(A.marked="keyword",E(Pe)):f&&"this"==e?E(ue,ze):V(Ae,ue,ze)}function Ne(e,t){return"variable"==e?Ue(e,t):We(e,t)}function Ue(e,t){if("variable"==e)return I(t),E(We)}function We(e,t){return"<"==t?E(P(">"),oe(ge,">"),N,We):"extends"==t||"implements"==t||f&&","==e?("implements"==t&&(A.marked="keyword"),E(f?pe:F,We)):"{"==e?E(P("}"),Be,N):void 0}function Be(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||f&&T(t))&&A.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(A.marked="keyword",E(Be)):"variable"==e||"keyword"==A.style?(A.marked="property",E(Fe,Be)):"number"==e||"string"==e?E(Fe,Be):"["==e?E(F,ue,U("]"),Fe,Be):"*"==t?(A.marked="keyword",E(Be)):f&&"("==e?V(_e,Be):";"==e||","==e?E(Be):"}"==e?E():"@"==t?E(F,Be):void 0}function Fe(e,t){if("!"==t)return E(Fe);if("?"==t)return E(Fe);if(":"==e)return E(pe,ze);if("="==t)return E(H);var r=A.state.lexical.prev;return V(r&&"interface"==r.info?_e:Se)}function He(e,t){return"*"==t?(A.marked="keyword",E(Qe,U(";"))):"default"==t?(A.marked="keyword",E(F,U(";"))):"{"==e?E(oe(De,"}"),Qe,U(";")):V(W)}function De(e,t){return"as"==t?(A.marked="keyword",E(U("variable"))):"variable"==e?V(H,De):void 0}function Ge(e){return"string"==e?E():"("==e?V(F):"."==e?V(K):V(Je,Ke,Qe)}function Je(e,t){return"{"==e?ce(Je,"}"):("variable"==e&&I(t),"*"==t&&(A.marked="keyword"),E(Le))}function Ke(e){if(","==e)return E(Je,Ke)}function Le(e,t){if("as"==t)return A.marked="keyword",E(Je)}function Qe(e,t){if("from"==t)return A.marked="keyword",E(F)}function Re(e){return"]"==e?E():V(oe(H,"]"))}function Xe(){return V(P("form"),Ae,U("{"),P("}"),oe(Ye,"}"),N,N)}function Ye(){return V(Ae,ze)}function Ze(e,t,r){return t.tokenize==k&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return S.lex=_.lex=!0,O.lex=!0,N.lex=!0,{startState:function(e){var t={tokenize:k,lastType:"sof",cc:[],lexical:new g((e||0)-i,0,"block",!1),localVars:r.localVars,context:r.localVars&&new $(null,null,!1),indented:e||0};return r.globalVars&&"object"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),x(e,t)),t.tokenize!=y&&e.eatSpace())return null;var r=t.tokenize(e,t);return"comment"==n?r:(t.lastType="operator"!=n||"++"!=a&&"--"!=a?n:"incdec",M(t,r,n,a,e))},indent:function(t,n){if(t.tokenize==y||t.tokenize==w)return e.Pass;if(t.tokenize!=k)return 0;var a,c=n&&n.charAt(0),s=t.lexical;if(!/^\s*else\b/.test(n))for(var u=t.cc.length-1;u>=0;--u){var f=t.cc[u];if(f==N)s=s.prev;else if(f!=Te&&f!=O)break}for(;("stat"==s.type||"form"==s.type)&&("}"==c||(a=t.cc[t.cc.length-1])&&(a==K||a==L)&&!/^[,\.=+\-*:?[\(]/.test(n));)s=s.prev;o&&")"==s.type&&"stat"==s.prev.type&&(s=s.prev);var l=s.type,d=c==l;return"vardef"==l?s.indented+("operator"==t.lastType||","==t.lastType?s.info.length+1:0):"form"==l&&"{"==c?s.indented:"form"==l?s.indented+i:"stat"==l?s.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||p.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,n)?o||i:0):"switch"!=s.info||d||0==r.doubleIndentSwitch?s.align?s.column+(d?0:1):s.indented+(d?0:i):s.indented+(/^(?:case|default)\b/.test(n)?i:2*i)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:c,jsonMode:s,expressionAllowed:Ze,skipExpression:function(t){M(t,"atom","atom","true",new e.StringStream("",2,null))}}}),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/manifest+json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}); -},{"../../lib/codemirror":725}],727:[function(require,module,exports){ +},{"../../lib/codemirror":726}],728:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_createClass=function(){function t(t,n){for(var e=0;e3?s-3:0),l=3;l3?u-3:0),s=3;s1?n-1:0),i=1;i1?n-1:0),i=1;i1?i-1:0),o=1;o1?i-1:0),o=1;o1?e-1:0),r=1;r1?e-1:0),r=1;r1?n-1:0),i=1;i1?i-1:0),o=1;o1?i-1:0),o=1;o=t.status}function n(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var o="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),i=o.saveAs||("object"!=typeof window||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(a,i,r){var c=o.URL||o.webkitURL,l=document.createElement("a");i=i||a.name||"download",l.download=i,l.rel="noopener","string"==typeof a?(l.href=a,l.origin===location.origin?n(l):t(l.href)?e(a,i,r):n(l,l.target="_blank")):(l.href=c.createObjectURL(a),setTimeout(function(){c.revokeObjectURL(l.href)},4e4),setTimeout(function(){n(l)},0))}:"msSaveOrOpenBlob"in navigator?function(o,a,i){if(a=a||o.name||"download","string"!=typeof o)navigator.msSaveOrOpenBlob(function(e,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\ufeff",e],{type:e.type}):e}(o,i),a);else if(t(o))e(o,a,i);else{var r=document.createElement("a");r.href=o,r.target="_blank",setTimeout(function(){n(r)})}}:function(t,n,i,r){if((r=r||open("","_blank"))&&(r.document.title=r.document.body.innerText="downloading..."),"string"==typeof t)return e(t,n,i);var c="application/octet-stream"===t.type,l=/constructor/i.test(o.HTMLElement)||o.safari,s=/CriOS\/[\d]+/.test(navigator.userAgent);if((s||c&&l||a)&&"undefined"!=typeof FileReader){var f=new FileReader;f.onloadend=function(){var e=f.result;e=s?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),r?r.location.href=e:location=e,r=null},f.readAsDataURL(t)}else{var u=o.URL||o.webkitURL,d=u.createObjectURL(t);r?r.location=d:location.href=d,r=null,setTimeout(function(){u.revokeObjectURL(d)},4e4)}});o.saveAs=i.saveAs=i,"undefined"!=typeof module&&(module.exports=i)}); }).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],729:[function(require,module,exports){ +},{}],730:[function(require,module,exports){ (function (process){(function (){ function isElectron(){return"undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type||(!("undefined"==typeof process||"object"!=typeof process.versions||!process.versions.electron)||"object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent.indexOf("Electron")>=0)}module.exports=isElectron; }).call(this)}).call(this,require('_process')) -},{"_process":714}],730:[function(require,module,exports){ +},{"_process":715}],731:[function(require,module,exports){ "use strict";var range,DOCUMENT_FRAGMENT_NODE=11;function morphAttrs(e,t){var n,r,o,a,i=t.attributes;if(t.nodeType!==DOCUMENT_FRAGMENT_NODE&&e.nodeType!==DOCUMENT_FRAGMENT_NODE){for(var d=i.length-1;d>=0;d--)r=(n=i[d]).name,o=n.namespaceURI,a=n.value,o?(r=n.localName||r,e.getAttributeNS(o,r)!==a&&("xmlns"===n.prefix&&(r=n.name),e.setAttributeNS(o,r,a))):e.getAttribute(r)!==a&&e.setAttribute(r,a);for(var l=e.attributes,c=l.length-1;c>=0;c--)r=(n=l[c]).name,(o=n.namespaceURI)?(r=n.localName||r,t.hasAttributeNS(o,r)||e.removeAttributeNS(o,r)):t.hasAttribute(r)||e.removeAttribute(r)}}var NS_XHTML="http://www.w3.org/1999/xhtml",doc="undefined"==typeof document?void 0:document,HAS_TEMPLATE_SUPPORT=!!doc&&"content"in doc.createElement("template"),HAS_RANGE_SUPPORT=!!doc&&doc.createRange&&"createContextualFragment"in doc.createRange();function createFragmentFromTemplate(e){var t=doc.createElement("template");return t.innerHTML=e,t.content.childNodes[0]}function createFragmentFromRange(e){return range||(range=doc.createRange()).selectNode(doc.body),range.createContextualFragment(e).childNodes[0]}function createFragmentFromWrap(e){var t=doc.createElement("body");return t.innerHTML=e,t.childNodes[0]}function toElement(e){return e=e.trim(),HAS_TEMPLATE_SUPPORT?createFragmentFromTemplate(e):HAS_RANGE_SUPPORT?createFragmentFromRange(e):createFragmentFromWrap(e)}function compareNodeNames(e,t){var n,r,o=e.nodeName,a=t.nodeName;return o===a||(n=o.charCodeAt(0),r=a.charCodeAt(0),n<=90&&r>=97?o===a.toUpperCase():r<=90&&n>=97&&a===o.toUpperCase())}function createElementNS(e,t){return t&&t!==NS_XHTML?doc.createElementNS(t,e):doc.createElement(e)}function moveChildren(e,t){for(var n=e.firstChild;n;){var r=n.nextSibling;t.appendChild(n),n=r}return t}function syncBooleanAttrProp(e,t,n){e[n]!==t[n]&&(e[n]=t[n],e[n]?e.setAttribute(n,""):e.removeAttribute(n))}var specialElHandlers={OPTION:function(e,t){var n=e.parentNode;if(n){var r=n.nodeName.toUpperCase();"OPTGROUP"===r&&(r=(n=n.parentNode)&&n.nodeName.toUpperCase()),"SELECT"!==r||n.hasAttribute("multiple")||(e.hasAttribute("selected")&&!t.selected&&(e.setAttribute("selected","selected"),e.removeAttribute("selected")),n.selectedIndex=-1)}syncBooleanAttrProp(e,t,"selected")},INPUT:function(e,t){syncBooleanAttrProp(e,t,"checked"),syncBooleanAttrProp(e,t,"disabled"),e.value!==t.value&&(e.value=t.value),t.hasAttribute("value")||e.removeAttribute("value")},TEXTAREA:function(e,t){var n=t.value;e.value!==n&&(e.value=n);var r=e.firstChild;if(r){var o=r.nodeValue;if(o==n||!n&&o==e.placeholder)return;r.nodeValue=n}},SELECT:function(e,t){if(!t.hasAttribute("multiple")){for(var n,r,o=-1,a=0,i=e.firstChild;i;)if("OPTGROUP"===(r=i.nodeName&&i.nodeName.toUpperCase()))i=(n=i).firstChild;else{if("OPTION"===r){if(i.hasAttribute("selected")){o=a;break}a++}!(i=i.nextSibling)&&n&&(i=n.nextSibling,n=null)}e.selectedIndex=o}}},ELEMENT_NODE=1,DOCUMENT_FRAGMENT_NODE$1=11,TEXT_NODE=3,COMMENT_NODE=8;function noop(){}function defaultGetNodeKey(e){if(e)return e.getAttribute&&e.getAttribute("id")||e.id}function morphdomFactory(e){return function(t,n,r){if(r||(r={}),"string"==typeof n)if("#document"===t.nodeName||"HTML"===t.nodeName||"BODY"===t.nodeName){var o=n;(n=doc.createElement("html")).innerHTML=o}else n=toElement(n);var a=r.getNodeKey||defaultGetNodeKey,i=r.onBeforeNodeAdded||noop,d=r.onNodeAdded||noop,l=r.onBeforeElUpdated||noop,c=r.onElUpdated||noop,u=r.onBeforeNodeDiscarded||noop,N=r.onNodeDiscarded||noop,m=r.onBeforeElChildrenUpdated||noop,f=!0===r.childrenOnly,E=Object.create(null),s=[];function p(e){s.push(e)}function T(e,t,n){!1!==u(e)&&(t&&t.removeChild(e),N(e),function e(t,n){if(t.nodeType===ELEMENT_NODE)for(var r=t.firstChild;r;){var o=void 0;n&&(o=a(r))?p(o):(N(r),r.firstChild&&e(r,n)),r=r.nextSibling}}(e,n))}function v(e){d(e);for(var t=e.firstChild;t;){var n=t.nextSibling,r=a(t);if(r){var o=E[r];o&&compareNodeNames(t,o)?(t.parentNode.replaceChild(o,t),A(o,t)):v(t)}else v(t);t=n}}function A(t,n,r){var o=a(n);if(o&&delete E[o],!r){if(!1===l(t,n))return;if(e(t,n),c(t),!1===m(t,n))return}"TEXTAREA"!==t.nodeName?function(e,t){var n,r,o,d,l,c=t.firstChild,u=e.firstChild;e:for(;c;){for(d=c.nextSibling,n=a(c);u;){if(o=u.nextSibling,c.isSameNode&&c.isSameNode(u)){c=d,u=o;continue e}r=a(u);var N=u.nodeType,m=void 0;if(N===c.nodeType&&(N===ELEMENT_NODE?(n?n!==r&&((l=E[n])?o===l?m=!1:(e.insertBefore(l,u),r?p(r):T(u,e,!0),u=l):m=!1):r&&(m=!1),(m=!1!==m&&compareNodeNames(u,c))&&A(u,c)):N!==TEXT_NODE&&N!=COMMENT_NODE||(m=!0,u.nodeValue!==c.nodeValue&&(u.nodeValue=c.nodeValue))),m){c=d,u=o;continue e}r?p(r):T(u,e,!0),u=o}if(n&&(l=E[n])&&compareNodeNames(l,c))e.appendChild(l),A(l,c);else{var f=i(c);!1!==f&&(f&&(c=f),c.actualize&&(c=c.actualize(e.ownerDocument||doc)),e.appendChild(c),v(c))}c=d,u=o}!function(e,t,n){for(;t;){var r=t.nextSibling;(n=a(t))?p(n):T(t,e,!0),t=r}}(e,u,r);var s=specialElHandlers[e.nodeName];s&&s(e,t)}(t,n):specialElHandlers.TEXTAREA(t,n)}!function e(t){if(t.nodeType===ELEMENT_NODE||t.nodeType===DOCUMENT_FRAGMENT_NODE$1)for(var n=t.firstChild;n;){var r=a(n);r&&(E[r]=n),e(n),n=n.nextSibling}}(t);var h=t,O=h.nodeType,C=n.nodeType;if(!f)if(O===ELEMENT_NODE)C===ELEMENT_NODE?compareNodeNames(t,n)||(N(t),h=moveChildren(t,createElementNS(n.nodeName,n.namespaceURI))):h=n;else if(O===TEXT_NODE||O===COMMENT_NODE){if(C===O)return h.nodeValue!==n.nodeValue&&(h.nodeValue=n.nodeValue),h;h=n}if(h===n)N(t);else{if(n.isSameNode&&n.isSameNode(h))return;if(A(h,n,f),s)for(var b=0,g=s.length;b=0&&(this.sinks=e.remove(s,this.sinks)),this.sinks.length},u.prototype.event=function(t,e){var s=this.sinks;if(1===s.length)return s[0].event(t,e);for(var n=0;n= 0");var e=n.length;return 0===r||0===e?n:r>=e?[]:function(r,n,e){for(var t=new Array(e),u=0;u= 0");var e=n.length;return 0===e||r>=e?n:1===e?[]:function(r,n,e){var t,u=new Array(e);for(t=0;t= 0");for(var t=e.length,u=new Array(t),o=0;oe&©(this,0,this,e,i&e-1)}; -},{}],739:[function(require,module,exports){ +},{}],740:[function(require,module,exports){ "use strict";function Stream(e){this.source=e}Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=Stream,Stream.prototype.run=function(e,t){return this.source.run(e,t)}; -},{}],740:[function(require,module,exports){ +},{}],741:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.scan=scan,exports.reduce=reduce;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_runSource=require("../runSource"),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose),_PropagateTask=require("../scheduler/PropagateTask"),_PropagateTask2=_interopRequireDefault(_PropagateTask);function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function scan(e,t,r){return new _Stream2.default(new Scan(e,t,r.source))}function Scan(e,t,r){this.source=r,this.f=e,this.value=t}function ScanSink(e,t,r){this.f=e,this.value=t,this.sink=r}function reduce(e,t,r){return(0,_runSource.withDefaultScheduler)(new Reduce(e,t,r.source))}function Reduce(e,t,r){this.source=r,this.f=e,this.value=t}function ReduceSink(e,t,r){this.f=e,this.value=t,this.sink=r}Scan.prototype.run=function(e,t){var r=t.asap(_PropagateTask2.default.event(this.value,e)),i=this.source.run(new ScanSink(this.f,this.value,e),t);return dispose.all([r,i])},ScanSink.prototype.event=function(e,t){var r=this.f;this.value=r(this.value,t),this.sink.event(e,this.value)},ScanSink.prototype.error=_Pipe2.default.prototype.error,ScanSink.prototype.end=_Pipe2.default.prototype.end,Reduce.prototype.run=function(e,t){return this.source.run(new ReduceSink(this.f,this.value,e),t)},ReduceSink.prototype.event=function(e,t){var r=this.f;this.value=r(this.value,t),this.sink.event(e,this.value)},ReduceSink.prototype.error=_Pipe2.default.prototype.error,ReduceSink.prototype.end=function(e){this.sink.end(e,this.value)}; -},{"../Stream":739,"../disposable/dispose":767,"../runSource":778,"../scheduler/PropagateTask":780,"../sink/Pipe":787}],741:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../runSource":779,"../scheduler/PropagateTask":781,"../sink/Pipe":788}],742:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ap=ap;var _combine=require("./combine"),_prelude=require("@most/prelude");function ap(e,r){return(0,_combine.combine)(_prelude.apply,e,r)} -},{"./combine":743,"@most/prelude":803}],742:[function(require,module,exports){ +},{"./combine":744,"@most/prelude":804}],743:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cons=cons,exports.concat=concat;var _core=require("../source/core"),_continueWith=require("./continueWith");function cons(e,n){return concat((0,_core.of)(e),n)}function concat(e,n){return(0,_continueWith.continueWith)(function(){return n},e)} -},{"../source/core":791,"./continueWith":745}],743:[function(require,module,exports){ +},{"../source/core":792,"./continueWith":746}],744:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combine=combine,exports.combineArray=combineArray;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_transform=require("./transform"),transform=_interopRequireWildcard(_transform),_core=require("../source/core"),core=_interopRequireWildcard(_core),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_IndexSink=require("../sink/IndexSink"),_IndexSink2=_interopRequireDefault(_IndexSink),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose),_prelude=require("@most/prelude"),base=_interopRequireWildcard(_prelude),_invoke=require("../invoke"),_invoke2=_interopRequireDefault(_invoke);function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var i={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(i[r]=e[r]);return i.default=e,i}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var map=base.map,tail=base.tail;function combine(e){return combineArray(e,tail(arguments))}function combineArray(e,i){var r=i.length;return 0===r?core.empty():1===r?transform.map(e,i[0]):new _Stream2.default(combineSources(e,i))}function combineSources(e,i){return new Combine(e,map(getSource,i))}function getSource(e){return e.source}function Combine(e,i){this.f=e,this.sources=i}function CombineSink(e,i,r,t){this.sink=r,this.disposables=e,this.sinks=i,this.f=t;var n=i.length;this.awaiting=n,this.values=new Array(n),this.hasValue=new Array(n);for(var o=0;o0&&(this.hasValue[e]||(this.hasValue[e]=!0,this.awaiting-=1)),this.awaiting},CombineSink.prototype.end=function(e,i){dispose.tryDispose(e,this.disposables[i.index],this.sink),0==--this.activeCount&&this.sink.end(e,i.value)}; -},{"../Stream":739,"../disposable/dispose":767,"../invoke":773,"../sink/IndexSink":786,"../sink/Pipe":787,"../source/core":791,"./transform":763,"@most/prelude":803}],744:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../invoke":774,"../sink/IndexSink":787,"../sink/Pipe":788,"../source/core":792,"./transform":764,"@most/prelude":804}],745:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.concatMap=concatMap;var _mergeConcurrently=require("./mergeConcurrently");function concatMap(e,r){return(0,_mergeConcurrently.mergeMapConcurrently)(e,1,r)} -},{"./mergeConcurrently":753}],745:[function(require,module,exports){ +},{"./mergeConcurrently":754}],746:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.continueWith=continueWith;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose);function _interopRequireWildcard(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function continueWith(t,e){return new _Stream2.default(new ContinueWith(t,e.source))}function ContinueWith(t,e){this.f=t,this.source=e}function ContinueWithSink(t,e,i,n){this.f=t,this.sink=i,this.scheduler=n,this.active=!0,this.disposable=dispose.once(e.run(this,n))}ContinueWith.prototype.run=function(t,e){return new ContinueWithSink(this.f,this.source,t,e)},ContinueWithSink.prototype.error=_Pipe2.default.prototype.error,ContinueWithSink.prototype.event=function(t,e){this.active&&this.sink.event(t,e)},ContinueWithSink.prototype.end=function(t,e){this.active&&(dispose.tryDispose(t,this.disposable,this.sink),this._startNext(t,e,this.sink))},ContinueWithSink.prototype._startNext=function(t,e,i){try{this.disposable=this._continue(this.f,e,i)}catch(e){i.error(t,e)}},ContinueWithSink.prototype._continue=function(t,e,i){return t(e).source.run(i,this.scheduler)},ContinueWithSink.prototype.dispose=function(){return this.active=!1,this.disposable.dispose()}; -},{"../Stream":739,"../disposable/dispose":767,"../sink/Pipe":787}],746:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../sink/Pipe":788}],747:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.delay=delay;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose),_PropagateTask=require("../scheduler/PropagateTask"),_PropagateTask2=_interopRequireDefault(_PropagateTask);function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function delay(e,t){return e<=0?t:new _Stream2.default(new Delay(e,t.source))}function Delay(e,t){this.dt=e,this.source=t}function DelaySink(e,t,r){this.dt=e,this.sink=t,this.scheduler=r}Delay.prototype.run=function(e,t){var r=new DelaySink(this.dt,e,t);return dispose.all([r,this.source.run(r,t)])},DelaySink.prototype.dispose=function(){var e=this;this.scheduler.cancelAll(function(t){return t.task.sink===e.sink})},DelaySink.prototype.event=function(e,t){this.scheduler.delay(this.dt,_PropagateTask2.default.event(t,this.sink))},DelaySink.prototype.end=function(e,t){this.scheduler.delay(this.dt,_PropagateTask2.default.end(t,this.sink))},DelaySink.prototype.error=_Pipe2.default.prototype.error; -},{"../Stream":739,"../disposable/dispose":767,"../scheduler/PropagateTask":780,"../sink/Pipe":787}],747:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../scheduler/PropagateTask":781,"../sink/Pipe":788}],748:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flatMapError=void 0,exports.recoverWith=recoverWith,exports.throwError=throwError;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_SafeSink=require("../sink/SafeSink"),_SafeSink2=_interopRequireDefault(_SafeSink),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose),_tryEvent=require("../source/tryEvent"),tryEvent=_interopRequireWildcard(_tryEvent),_PropagateTask=require("../scheduler/PropagateTask"),_PropagateTask2=_interopRequireDefault(_PropagateTask);function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t]);return r.default=e,r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function recoverWith(e,r){return new _Stream2.default(new RecoverWith(e,r.source))}var flatMapError=exports.flatMapError=recoverWith;function throwError(e){return new _Stream2.default(new ErrorSource(e))}function ErrorSource(e){this.value=e}function runError(e,r,t){t.error(e,r)}function RecoverWith(e,r){this.f=e,this.source=r}function RecoverWithSink(e,r,t,i){this.f=e,this.sink=new _SafeSink2.default(t),this.scheduler=i,this.disposable=r.run(this,i)}ErrorSource.prototype.run=function(e,r){return r.asap(new _PropagateTask2.default(runError,this.value,e))},RecoverWith.prototype.run=function(e,r){return new RecoverWithSink(this.f,this.source,e,r)},RecoverWithSink.prototype.event=function(e,r){tryEvent.tryEvent(e,r,this.sink)},RecoverWithSink.prototype.end=function(e,r){tryEvent.tryEnd(e,r,this.sink)},RecoverWithSink.prototype.error=function(e,r){var t=this.sink.disable();dispose.tryDispose(e,this.disposable,this.sink),this._startNext(e,r,t)},RecoverWithSink.prototype._startNext=function(e,r,t){try{this.disposable=this._continue(this.f,r,t)}catch(r){t.error(e,r)}},RecoverWithSink.prototype._continue=function(e,r,t){return e(r).source.run(t,this.scheduler)},RecoverWithSink.prototype.dispose=function(){return this.disposable.dispose()}; -},{"../Stream":739,"../disposable/dispose":767,"../scheduler/PropagateTask":780,"../sink/SafeSink":788,"../source/tryEvent":799}],748:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../scheduler/PropagateTask":781,"../sink/SafeSink":789,"../source/tryEvent":800}],749:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filter=filter,exports.skipRepeats=skipRepeats,exports.skipRepeatsWith=skipRepeatsWith;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_Filter=require("../fusion/Filter"),_Filter2=_interopRequireDefault(_Filter);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function filter(e,t){return new _Stream2.default(_Filter2.default.create(e,t.source))}function skipRepeats(e){return skipRepeatsWith(same,e)}function skipRepeatsWith(e,t){return new _Stream2.default(new SkipRepeats(e,t.source))}function SkipRepeats(e,t){this.equals=e,this.source=t}function SkipRepeatsSink(e,t){this.equals=e,this.sink=t,this.value=void 0,this.init=!0}function same(e,t){return e===t}SkipRepeats.prototype.run=function(e,t){return this.source.run(new SkipRepeatsSink(this.equals,e),t)},SkipRepeatsSink.prototype.end=_Pipe2.default.prototype.end,SkipRepeatsSink.prototype.error=_Pipe2.default.prototype.error,SkipRepeatsSink.prototype.event=function(e,t){this.init?(this.init=!1,this.value=t,this.sink.event(e,t)):this.equals(this.value,t)||(this.value=t,this.sink.event(e,t))}; -},{"../Stream":739,"../fusion/Filter":769,"../sink/Pipe":787}],749:[function(require,module,exports){ +},{"../Stream":740,"../fusion/Filter":770,"../sink/Pipe":788}],750:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flatMap=flatMap,exports.join=join;var _mergeConcurrently=require("./mergeConcurrently");function flatMap(e,r){return(0,_mergeConcurrently.mergeMapConcurrently)(e,1/0,r)}function join(e){return(0,_mergeConcurrently.mergeConcurrently)(1/0,e)} -},{"./mergeConcurrently":753}],750:[function(require,module,exports){ +},{"./mergeConcurrently":754}],751:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.throttle=throttle,exports.debounce=debounce;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_Map=require("../fusion/Map"),_Map2=_interopRequireDefault(_Map);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function throttle(e,t){return new _Stream2.default(throttleSource(e,t.source))}function throttleSource(e,t){return t instanceof _Map2.default?commuteMapThrottle(e,t):t instanceof Throttle?fuseThrottle(e,t):new Throttle(e,t)}function commuteMapThrottle(e,t){return _Map2.default.create(t.f,throttleSource(e,t.source))}function fuseThrottle(e,t){return new Throttle(Math.max(e,t.period),t.source)}function Throttle(e,t){this.period=e,this.source=t}function ThrottleSink(e,t){this.time=0,this.period=e,this.sink=t}function debounce(e,t){return new _Stream2.default(new Debounce(e,t.source))}function Debounce(e,t){this.dt=e,this.source=t}function DebounceSink(e,t,o,r){this.dt=e,this.sink=o,this.scheduler=r,this.value=void 0,this.timer=null,this.disposable=t.run(this,r)}function DebounceTask(e,t){this.debounce=e,this.value=t}Throttle.prototype.run=function(e,t){return this.source.run(new ThrottleSink(this.period,e),t)},ThrottleSink.prototype.event=function(e,t){e>=this.time&&(this.time=e+this.period,this.sink.event(e,t))},ThrottleSink.prototype.end=_Pipe2.default.prototype.end,ThrottleSink.prototype.error=_Pipe2.default.prototype.error,Debounce.prototype.run=function(e,t){return new DebounceSink(this.dt,this.source,e,t)},DebounceSink.prototype.event=function(e,t){this._clearTimer(),this.value=t,this.timer=this.scheduler.delay(this.dt,new DebounceTask(this,t))},DebounceSink.prototype._event=function(e,t){this._clearTimer(),this.sink.event(e,t)},DebounceSink.prototype.end=function(e,t){this._clearTimer()&&(this.sink.event(e,this.value),this.value=void 0),this.sink.end(e,t)},DebounceSink.prototype.error=function(e,t){this._clearTimer(),this.sink.error(e,t)},DebounceSink.prototype.dispose=function(){return this._clearTimer(),this.disposable.dispose()},DebounceSink.prototype._clearTimer=function(){return null!==this.timer&&(this.timer.dispose(),this.timer=null,!0)},DebounceTask.prototype.run=function(e){this.debounce._event(e,this.value)},DebounceTask.prototype.error=function(e,t){this.debounce.error(e,t)},DebounceTask.prototype.dispose=function(){}; -},{"../Stream":739,"../fusion/Map":771,"../sink/Pipe":787}],751:[function(require,module,exports){ +},{"../Stream":740,"../fusion/Map":772,"../sink/Pipe":788}],752:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.loop=loop;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function loop(e,t,o){return new _Stream2.default(new Loop(e,t,o.source))}function Loop(e,t,o){this.step=e,this.seed=t,this.source=o}function LoopSink(e,t,o){this.step=e,this.seed=t,this.sink=o}Loop.prototype.run=function(e,t){return this.source.run(new LoopSink(this.step,this.seed,e),t)},LoopSink.prototype.error=_Pipe2.default.prototype.error,LoopSink.prototype.event=function(e,t){var o=this.step(this.seed,t);this.seed=o.seed,this.sink.event(e,o.value)},LoopSink.prototype.end=function(e){this.sink.end(e,this.seed)}; -},{"../Stream":739,"../sink/Pipe":787}],752:[function(require,module,exports){ +},{"../Stream":740,"../sink/Pipe":788}],753:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.merge=merge,exports.mergeArray=mergeArray;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_Pipe=require("../sink/Pipe"),_Pipe2=_interopRequireDefault(_Pipe),_IndexSink=require("../sink/IndexSink"),_IndexSink2=_interopRequireDefault(_IndexSink),_core=require("../source/core"),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose),_prelude=require("@most/prelude"),base=_interopRequireWildcard(_prelude);function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[t]=e[t]);return r.default=e,r}function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var copy=base.copy,reduce=base.reduce;function merge(){return mergeArray(copy(arguments))}function mergeArray(e){var r=e.length;return 0===r?(0,_core.empty)():1===r?e[0]:new _Stream2.default(mergeSources(e))}function mergeSources(e){return new Merge(reduce(appendSources,[],e))}function appendSources(e,r){var t=r.source;return t instanceof Merge?e.concat(t.sources):e.concat(t)}function Merge(e){this.sources=e}function MergeSink(e,r,t){this.sink=t,this.disposables=e,this.activeCount=r.length}Merge.prototype.run=function(e,r){for(var t,n=this.sources.length,i=new Array(n),o=new Array(n),u=new MergeSink(i,o,e),s=0;s0?this.skip-=1:0!==this.take&&(this.take-=1,this.sink.event(e,i),0===this.take&&(this.disposable.dispose(),this.sink.end(e,i)))},TakeWhile.prototype.run=function(e,i){var t=dispose.settable(),r=new TakeWhileSink(this.p,e,t);return t.setDisposable(this.source.run(r,i)),t},TakeWhileSink.prototype.end=_Pipe2.default.prototype.end,TakeWhileSink.prototype.error=_Pipe2.default.prototype.error,TakeWhileSink.prototype.event=function(e,i){if(this.active){var t=this.p;this.active=t(i),this.active?this.sink.event(e,i):(this.disposable.dispose(),this.sink.end(e,i))}},SkipWhile.prototype.run=function(e,i){return this.source.run(new SkipWhileSink(this.p,e),i)},SkipWhileSink.prototype.end=_Pipe2.default.prototype.end,SkipWhileSink.prototype.error=_Pipe2.default.prototype.error,SkipWhileSink.prototype.event=function(e,i){if(this.skipping){var t=this.p;if(this.skipping=t(i),this.skipping)return}this.sink.event(e,i)},SkipAfter.prototype.run=function(e,i){return this.source.run(new SkipAfterSink(this.p,e),i)},SkipAfterSink.prototype.event=function(e,i){if(!this.skipping){var t=this.p;this.skipping=t(i),this.sink.event(e,i),this.skipping&&this.sink.end(e,i)}},SkipAfterSink.prototype.end=_Pipe2.default.prototype.end,SkipAfterSink.prototype.error=_Pipe2.default.prototype.error; -},{"../Stream":739,"../disposable/dispose":767,"../fusion/Map":771,"../sink/Pipe":787,"../source/core":791}],758:[function(require,module,exports){ +},{"../Stream":740,"../disposable/dispose":768,"../fusion/Map":772,"../sink/Pipe":788,"../source/core":792}],759:[function(require,module,exports){ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.switch=void 0,exports.switchLatest=switchLatest;var _Stream=require("../Stream"),_Stream2=_interopRequireDefault(_Stream),_dispose=require("../disposable/dispose"),dispose=_interopRequireWildcard(_dispose);function _interopRequireWildcard(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function switchLatest(t){return new _Stream2.default(new Switch(t.source))}function Switch(t){this.source=t}function SwitchSink(t,e){this.sink=t,this.scheduler=e,this.current=null,this.ended=!1}function Segment(t,e,i,n){this.min=t,this.max=e,this.outer=i,this.sink=n,this.disposable=dispose.empty()}exports.switch=switchLatest,Switch.prototype.run=function(t,e){var i=new SwitchSink(t,e);return dispose.all([i,this.source.run(i,e)])},SwitchSink.prototype.event=function(t,e){this._disposeCurrent(t),this.current=new Segment(t,1/0,this,this.sink),this.current.disposable=e.source.run(this.current,this.scheduler)},SwitchSink.prototype.end=function(t,e){this.ended=!0,this._checkEnd(t,e)},SwitchSink.prototype.error=function(t,e){this.ended=!0,this.sink.error(t,e)},SwitchSink.prototype.dispose=function(){return this._disposeCurrent(this.scheduler.now())},SwitchSink.prototype._disposeCurrent=function(t){if(null!==this.current)return this.current._dispose(t)},SwitchSink.prototype._disposeInner=function(t,e){e._dispose(t),e===this.current&&(this.current=null)},SwitchSink.prototype._checkEnd=function(t,e){this.ended&&null===this.current&&this.sink.end(t,e)},SwitchSink.prototype._endInner=function(t,e,i){this._disposeInner(t,i),this._checkEnd(t,e)},SwitchSink.prototype._errorInner=function(t,e,i){this._disposeInner(t,i),this.sink.error(t,e)},Segment.prototype.event=function(t,e){t=this.min.value&&e=0&&n.active&&(n.time=n.time+n.period,insertByTime(n,i)))}return i}function insertByTime(e,t){var i=t.length;if(0!==i){var r=binarySearch(e.time,t);r>=i?t.push(newTimeslot(e.time,[e])):e.time===t[r].time?t[r].events.push(e):t.splice(r,0,newTimeslot(e.time,[e]))}else t.push(newTimeslot(e.time,[e]))}function removeAllFrom(e,t){t.events=base.removeAll(e,t.events)}function binarySearch(e,t){for(var i,r,s=0,n=t.length;s=0&&t=0)return this.tasks[t].events.splice(i,1),!0}return!1},Timeline.prototype.removeAll=function(e){for(var t=0,i=this.tasks.length;t1){for(var o=new Array(i),u=0;u=0&&(this.sinks=e.remove(s,this.sinks)),this.sinks.length},u.prototype.event=function(t,e){var s=this.sinks;if(1===s.length)return s[0].event(t,e);for(var n=0;n= 0");var e=n.length;return 0===r||0===e?n:r>=e?[]:function(r,n,e){for(var t=new Array(e),u=0;u= 0");var e=n.length;return 0===e||r>=e?n:1===e?[]:function(r,n,e){var t,u=new Array(e);for(t=0;t= 0");for(var t=e.length,u=new Array(t),o=0;o1&&(f.pop(),f[f.length-1][0][2][a]=T(p[0],p[1],p[2].length?p[2]:void 0))}else if(u===OPEN){var g=[l[1],{},[]];p[2].push(g),f.push([g,p[2].length-1])}else if(u===ATTR_KEY||u===VAR&&l[1]===ATTR_KEY){for(var L,V="";_1&&/^\s*$/.test(i[2][0])&&i[2].shift(),i[2].length>2||2===i[2].length&&/\S/.test(i[2][1])){if(e.createFragment)return e.createFragment(i[2]);throw new Error("multiple root elements must be wrapped in an enclosing tag")}return Array.isArray(i[2][0])&&"string"==typeof i[2][0][0]&&Array.isArray(i[2][0][2])&&(i[2][0]=T(i[2][0][0],i[2][0][1],i[2][0][2])),i[2][0];function U(T){var A=[];n===ATTR_VALUE_W&&(n=ATTR);for(var t=0;t"!==E||quot(n)||n===COMMENT?n===COMMENT&&/-$/.test(r)&&"-"===E?(e.comments&&A.push([ATTR_VALUE,r.substr(0,r.length-1)]),r="",n=TEXT):n===OPEN&&/^!--$/.test(r)?(e.comments&&A.push([OPEN,r],[ATTR_KEY,"comment"],[ATTR_EQ]),r=E,n=COMMENT):n===TEXT||n===COMMENT?r+=E:n===OPEN&&"/"===E&&r.length||(n===OPEN&&/\s/.test(E)?(r.length&&A.push([OPEN,r]),r="",n=ATTR):n===OPEN?r+=E:n===ATTR&&/[^\s"'=/]/.test(E)?(n=ATTR_KEY,r=E):n===ATTR&&/\s/.test(E)?(r.length&&A.push([ATTR_KEY,r]),A.push([ATTR_BREAK])):n===ATTR_KEY&&/\s/.test(E)?(A.push([ATTR_KEY,r]),r="",n=ATTR_KEY_W):n===ATTR_KEY&&"="===E?(A.push([ATTR_KEY,r],[ATTR_EQ]),r="",n=ATTR_VALUE_W):n===ATTR_KEY?r+=E:n!==ATTR_KEY_W&&n!==ATTR||"="!==E?n!==ATTR_KEY_W&&n!==ATTR||/\s/.test(E)?n===ATTR_VALUE_W&&'"'===E?n=ATTR_VALUE_DQ:n===ATTR_VALUE_W&&"'"===E?n=ATTR_VALUE_SQ:n===ATTR_VALUE_DQ&&'"'===E?(A.push([ATTR_VALUE,r],[ATTR_BREAK]),r="",n=ATTR):n===ATTR_VALUE_SQ&&"'"===E?(A.push([ATTR_VALUE,r],[ATTR_BREAK]),r="",n=ATTR):n!==ATTR_VALUE_W||/\s/.test(E)?n===ATTR_VALUE&&/\s/.test(E)?(A.push([ATTR_VALUE,r],[ATTR_BREAK]),r="",n=ATTR):n!==ATTR_VALUE&&n!==ATTR_VALUE_SQ&&n!==ATTR_VALUE_DQ||(r+=E):(n=ATTR_VALUE,t--):(A.push([ATTR_BREAK]),/[\w-]/.test(E)?(r+=E,n=ATTR_KEY):n=ATTR):(A.push([ATTR_EQ]),n=ATTR_VALUE_W)):(n===OPEN&&r.length?A.push([OPEN,r]):n===ATTR_KEY?A.push([ATTR_KEY,r]):n===ATTR_VALUE&&r.length&&A.push([ATTR_VALUE,r]),A.push([CLOSE]),r="",n=TEXT)}return n===TEXT&&r.length?(A.push([TEXT,r]),r=""):n===ATTR_VALUE&&r.length?(A.push([ATTR_VALUE,r]),r=""):n===ATTR_VALUE_DQ&&r.length?(A.push([ATTR_VALUE,r]),r=""):n===ATTR_VALUE_SQ&&r.length?(A.push([ATTR_VALUE,r]),r=""):n===ATTR_KEY&&(A.push([ATTR_KEY,r]),r=""),A}};function t(T){return"function"==typeof T?T:"string"==typeof T?T:T&&"object"==typeof T?T:null==T?T:A("",T)}};var closeRE=RegExp("^("+["area","base","basefont","bgsound","br","col","command","embed","frame","hr","img","input","isindex","keygen","link","meta","param","source","track","wbr","!--","animate","animateTransform","circle","cursor","desc","ellipse","feBlend","feColorMatrix","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","font-face-format","font-face-name","font-face-uri","glyph","glyphRef","hkern","image","line","missing-glyph","mpath","path","polygon","polyline","rect","set","stop","tref","use","view","vkern"].join("|")+")(?:[.#][a-zA-Z0-9-￿_:-]+)*$");function selfClosing(T){return closeRE.test(T)} -},{"hyperscript-attribute-to-property":812}],814:[function(require,module,exports){ +},{"hyperscript-attribute-to-property":813}],815:[function(require,module,exports){ var bundleFn=arguments[3],sources=arguments[4],cache=arguments[5],stringify=JSON.stringify;module.exports=function(r,e){for(var t,o=Object.keys(cache),n=0,a=o.length;n{const r=["jscad","js"],o=supportedFormatsForObjects(a).filter(a=>!r.includes(a)).map(a=>({name:a,displayName:formats[a].displayName}));return{exportFormat:head(o)?head(o).name:void 0,availableExportFormats:o}},exportFilePathFromFormatAndDesign=(a,r)=>{const o=r?formats[r].extension:"",t=`${a.name}.${o}`;return{exportFilePath:path.join(a.path,t)}};module.exports={availableExportFormatsFromSolids:availableExportFormatsFromSolids,exportFilePathFromFormatAndDesign:exportFilePathFromFormatAndDesign}; -},{"@jscad/array-utils":527,"@jscad/io/formats":68,"path":713}],817:[function(require,module,exports){ +},{"@jscad/array-utils":528,"@jscad/io/formats":69,"path":714}],818:[function(require,module,exports){ const html=require("nanohtml"),{evaluation:evaluation}=require("@jscad/core"),callbackToObservable=require("./most-utils/callbackToObservable"),packageMetadata=require("../package.json"),keyBindings=require("../data/keybindings.json");let instances=0;const makeJscad=async(e,s)=>{const{name:a,logging:r}=Object.assign({},{name:"jscad",logging:!1},s),i=html`
`;e.appendChild(i);const t=require("./sideEffects/localStorage")({name:a,logging:r}),o=require("./sideEffects/titleBar")({logging:r}),l=require("./sideEffects/dragDrop")({targetEl:i,logging:r}),n=require("./sideEffects/fileDialog")({targetEl:i,logging:r}),c=require("./sideEffects/dom")({targetEl:i},r),g=require("./sideEffects/state/index")({logging:r,packageMetadata:packageMetadata,keyBindings:keyBindings}),u=await require("./sideEffects/localFs")({logging:r}),d=require("./sideEffects/http")({logging:r}),k=await require("./sideEffects/dat")({logging:r}),f=require("./sideEffects/i18n")({translations:{en:require("../locales/en.json"),fr:require("../locales/fr.json"),de:require("../locales/de.json"),ja:require("../locales/ja.json"),hr:require("../locales/hr.json"),zh:require("../locales/zh.json")},logging:r}),m=require("./sideEffects/worker")(evaluation.rebuildGeometryWorker),q=callbackToObservable(),b=callbackToObservable(),p={paramChanges:q.stream,editor:b.stream,state:g.source(),store:t.source(),fs:u.source(),http:d.source(),https:d.source(),drops:l.source(),dom:c.source(),solidWorker:m.source(),i18n:f.source(),titleBar:o.source(),fileDialog:n.source(),dat:await k.source()},E={store:t.sink,fs:u.sink,http:d.sink,https:d.sink,i18n:f.sink,dom:c.sink,solidWorker:m.sink,state:g.sink,fileDialog:n.sink,dat:k.sink},j=require("./ui/flow/flowIn")(p),h={jscadEl:i,paramsCallbacktoStream:q,editorCallbackToStream:b};require("./ui/flow/flowOut")({sinks:E,sources:p,outputs$:j,extras:h}),instances+=1,setTimeout(()=>{document.getElementById("toggleAxes").click()},100),setTimeout(()=>{document.getElementById("toggleAxes").click()},200);const v=callbackToObservable();return e=>{v.callback(e)}};module.exports=makeJscad; -},{"../data/keybindings.json":635,"../locales/de.json":679,"../locales/en.json":680,"../locales/fr.json":681,"../locales/hr.json":682,"../locales/ja.json":683,"../locales/zh.json":684,"../package.json":815,"./most-utils/callbackToObservable":824,"./sideEffects/dat":829,"./sideEffects/dom":830,"./sideEffects/dragDrop":831,"./sideEffects/fileDialog":832,"./sideEffects/http":833,"./sideEffects/i18n":834,"./sideEffects/localFs":835,"./sideEffects/localStorage":837,"./sideEffects/state/index":838,"./sideEffects/titleBar":839,"./sideEffects/worker":840,"./ui/flow/flowIn":845,"./ui/flow/flowOut":846,"@jscad/core":19,"nanohtml":808}],818:[function(require,module,exports){ +},{"../data/keybindings.json":636,"../locales/de.json":680,"../locales/en.json":681,"../locales/fr.json":682,"../locales/hr.json":683,"../locales/ja.json":684,"../locales/zh.json":685,"../package.json":816,"./most-utils/callbackToObservable":825,"./sideEffects/dat":830,"./sideEffects/dom":831,"./sideEffects/dragDrop":832,"./sideEffects/fileDialog":833,"./sideEffects/http":834,"./sideEffects/i18n":835,"./sideEffects/localFs":836,"./sideEffects/localStorage":838,"./sideEffects/state/index":839,"./sideEffects/titleBar":840,"./sideEffects/worker":841,"./ui/flow/flowIn":846,"./ui/flow/flowOut":847,"@jscad/core":19,"nanohtml":809}],819:[function(require,module,exports){ const{merge:merge}=require("most");let isPinching=!1;"undefined"!=typeof window&&(window.addEventListener("pinchStarted",e=>{isPinching=!0}),window.addEventListener("pinchEnded",e=>{isPinching=!1}));const mouseDrags=(e,t,s,o)=>{const{pixelRatio:n}=o;return e.flatMap(e=>{const o=e.pageX*n,a=e.pageY*n;let r=o,i=a;return s.map(e=>{const t=e.pageX*n,s=e.pageY*n,u={left:t-o,top:s-a,x:r-t,y:s-i};return r=t,i=s,{originalEvents:[e],delta:u,normalized:{x:t,y:s},type:"mouse"}}).takeUntil(t)})},touchDrags=(e,t,s,o)=>{const{pixelRatio:n}=o;return e.filter(e=>1===e.touches.length||3===e.touches.length).flatMap(e=>{const o=e.touches[0].pageX*n,a=e.touches[0].pageY*n;let r=o,i=a;return s.takeWhile(e=>!1===isPinching).map(e=>{const t=e.touches[0].pageX*n,s=e.touches[0].pageY*n,u={left:t-o,top:s-a,x:r-t,y:s-i};return r=t,i=s,{originalEvents:[e],delta:u,normalized:{x:t,y:s},type:"touch"}}).takeUntil(t)})},drags=({mouseDowns$:e,mouseUps$:t,mouseMoves$:s,touchStarts$:o,touchEnds$:n,longTaps$:a,touchMoves$:r},i)=>{return merge(mouseDrags(e,t,s,i),touchDrags(o,n,r,i))};module.exports={mouseDrags:mouseDrags,touchDrags:touchDrags,drags:drags}; -},{"most":772}],819:[function(require,module,exports){ +},{"most":773}],820:[function(require,module,exports){ const{fromEvent:fromEvent,merge:merge}=require("most"),{normalizeWheel:normalizeWheel,preventDefault:preventDefault}=require("./utils"),{presses:presses}=require("./presses"),{taps:taps}=require("./taps"),{drags:drags}=require("./drags"),{zooms:zooms}=require("./zooms"),baseInteractionsFromEvents=(e,s)=>{s=Object.assign({},{passiveEventsHandlers:!0,preventScroll:!0,preventMenu:!0},s);const{passiveEventsHandlers:t,preventScroll:r,preventMenu:o}=s,a=fromEvent("mousedown",e,{passive:t,capture:!1}),n=fromEvent("mouseup",e,{passive:t,capture:!1}),p=fromEvent("mousemove",e,{passive:t,capture:!1}),i=fromEvent("contextmenu",e,{passive:!s.preventMenu,capture:!1}),u=fromEvent("touchstart",e,{passive:t,capture:!1}),v=fromEvent("touchmove",e,{passive:t,capture:!1}),m=fromEvent("touchend",e,{passive:t,capture:!1}),l=merge(a,u),c=merge(n,m),f=merge(p,v.filter(e=>1===e.touches.length));return r&&(e=>{fromEvent("mousewheel",e,{passive:!1,capture:!1}).forEach(preventDefault),fromEvent("DOMMouseScroll",e,{passive:!1,capture:!1}).forEach(preventDefault),fromEvent("wheel",e,{passive:!1,capture:!1}).forEach(preventDefault),fromEvent("touchmove",e,{passive:!1,capture:!1}).forEach(preventDefault)})(e),o&&i.forEach(preventDefault),{mouseDowns$:a,mouseUps$:n,mouseMoves$:p,rightClicks$:i,wheel$:merge(fromEvent("wheel",e,{passive:t,capture:!1}),fromEvent("DOMMouseScroll",e,{passive:t,capture:!1}),fromEvent("mousewheel",e,{passive:t,capture:!1})).map(normalizeWheel),touchStarts$:u,touchMoves$:v,touchEnds$:m,pointerDowns$:l,pointerUps$:c,pointerMoves$:f}},pointerGestures=(e,s)=>{const t="addEventListener"in e?baseInteractionsFromEvents(e,s):e,r={multiTapDelay:250,longPressDelay:250,maxStaticDeltaSqr:100,zoomMultiplier:200,pinchThreshold:4e3,pixelRatio:"undefined"!=typeof window&&window.devicePixelRatio?window.devicePixelRatio:1},o=Object.assign({},r,s),a=presses(t,o),n=a.filter(e=>e.timeDelta>o.longPressDelay).filter(e=>e.moveDelta.sqrd{l=l.filter(e=>1===e.touches.length);const r=merge(e,u),i=merge(s,a);return r.timestamp().flatMap(e=>merge(just(e),i.take(1).timestamp())).loop((e,s)=>{let t;if(1===e.length){const u=s.time-e[0].time,a="touches"in s.value?s.value.changedTouches[0].pageX:s.value.pageX,l="touches"in s.value?s.value.changedTouches[0].pageY:s.value.pageY,o="touches"in e[0].value?e[0].value.touches[0].pageX:e[0].value.pageX,r="touches"in e[0].value?e[0].value.touches[0].pageY:e[0].value.pageY;let i=[a-o,l-r];const v={x:o-a,y:l-r,sqrd:i=i[0]*i[0]+i[1]*i[1]};t={value:s.value,originalEvent:s.value,timeDelta:u,moveDelta:v,x:a,y:l},e=[]}else e.push(s);return{seed:e,value:t}},[]).filter(exists).filter(e=>void 0!==e.value).multicast()},presses=(e,s)=>{return basePresses(e)};module.exports={presses:presses}; -},{"./utils":822,"most":772}],821:[function(require,module,exports){ +},{"./utils":823,"most":773}],822:[function(require,module,exports){ const{exists:exists}=require("./utils"),taps=(t,e)=>{const{longPressDelay:a,maxStaticDeltaSqr:s,multiTapDelay:l}=e;return t.filter(t=>t.timeDelta<=a).filter(t=>t.moveDelta.sqrd({type:"data",data:t})).merge(t.debounce(l).map(t=>({type:"reset"}))).loop((t,{type:e,data:a})=>{let s;return"data"===e?t.push(a):(s=t,t=[]),{seed:t,value:s}},[]).filter(exists).map(t=>({list:t,nb:t.length})).multicast()};module.exports={taps:taps}; -},{"./utils":822}],822:[function(require,module,exports){ +},{"./utils":823}],823:[function(require,module,exports){ const{empty:empty,continueWith:continueWith}=require("most"),repeat=(e,t)=>0===e?empty():1===e?t:continueWith(()=>repeat(e-1,t),t),preventDefault=e=>(e.preventDefault(),e),isMoving=(e,t)=>!0,normalizeWheel=e=>{let t={x:0,y:0};return e.wheelDelta?t=e.wheelDelta:e.detail?t=-e.detail:e.deltaY&&(t=-e.deltaY),t=t>=0?1:-1},exists=e=>null!=e;module.exports={repeat:repeat,preventDefault:preventDefault,isMoving:isMoving,normalizeWheel:normalizeWheel,exists:exists}; -},{"most":772}],823:[function(require,module,exports){ +},{"most":773}],824:[function(require,module,exports){ const{merge:merge}=require("most"),pinchZooms=({touchStarts$:e,touchMoves$:t,touchEnds$:o},s)=>{const{pixelRatio:n,pinchThreshold:u}=s;return e.filter(e=>2===e.touches.length).flatMap(e=>{const s=e.touches[0].pageX*n,c=e.touches[0].pageY*n,h=e.touches[1].pageX*n,a=e.touches[1].pageY*n,p=(s-h)*(s-h)+(c-a)*(c-a);return t.tap(e=>e.preventDefault()).filter(e=>2===e.touches.length).tap(e=>{if("undefined"!=typeof CustomEvent){const e=new CustomEvent("pinchStarted",{detail:!0});window.dispatchEvent(e)}}).map(e=>{const t=e.touches[0].pageX*n,o=e.touches[0].pageY*n,s=e.touches[1].pageX*n,u=e.touches[1].pageY*n;return(t-s)*(t-s)+(o-u)*(o-u)}).loop((e,t)=>e?Math.abs(t-e)void 0!==e).map(e=>3e-6*e).takeUntil(o.tap(e=>{if("undefined"!=typeof CustomEvent){const e=new CustomEvent("pinchEnded",{detail:!0});window.dispatchEvent(e)}}))})},zooms=({touchStarts$:e,touchMoves$:t,touchEnds$:o,wheel$:s},n)=>{return merge(pinchZooms({touchStarts$:e,touchMoves$:t,touchEnds$:o},n),s).map(e=>e*n.zoomMultiplier)};module.exports={pinchZooms:pinchZooms,zooms:zooms}; -},{"most":772}],824:[function(require,module,exports){ +},{"most":773}],825:[function(require,module,exports){ const{create:create}=require("@most/create"),callBackToStream=()=>{let e=function(){};const t=t=>{e(t)};return{stream:create((t,a,c)=>{e=t}),callback:t}};module.exports=callBackToStream; -},{"@most/create":685}],825:[function(require,module,exports){ +},{"@most/create":686}],826:[function(require,module,exports){ const most=require("most"),delayFromObservable=(e,s)=>{const t=(e,s)=>most.just(s).delay(e),o=s.map(e);return e=>most.combine(t,o,e).switchLatest()};module.exports=delayFromObservable; -},{"most":772}],826:[function(require,module,exports){ +},{"most":773}],827:[function(require,module,exports){ const withLatestFrom=require("./withLatestFrom"),holdUntil=t=>{return e=>e.skipUntil(t).merge(t.take(1).thru(withLatestFrom(t=>t,e)))};module.exports=holdUntil; -},{"./withLatestFrom":828}],827:[function(require,module,exports){ +},{"./withLatestFrom":829}],828:[function(require,module,exports){ module.exports={callbackToObservable:require("./callbackToObservable"),delayFromObservable:require("./delayFromObservable"),holdUntil:require("./holdUntil"),withLatestFrom:require("./withLatestFrom")}; -},{"./callbackToObservable":824,"./delayFromObservable":825,"./holdUntil":826,"./withLatestFrom":828}],828:[function(require,module,exports){ +},{"./callbackToObservable":825,"./delayFromObservable":826,"./holdUntil":827,"./withLatestFrom":829}],829:[function(require,module,exports){ const most=require("most"),withLatestFrom=(t,o)=>s=>most.sample(t,s,o,s);module.exports=withLatestFrom; -},{"most":772}],829:[function(require,module,exports){ +},{"most":773}],830:[function(require,module,exports){ const{getFileExtensionFromString:getFileExtensionFromString}=require("@jscad/core").utils,callbackToObservable=require("../../most-utils/callbackToObservable"),makeLogger=require("../../utils/logger"),makeDatSideEffect=async e=>{const a=callbackToObservable(),{logging:t}=Object.assign({},{logging:!1},e),n=makeLogger({enabled:t});let r=!0;const i=window.DatArchive;i||(n.error("Dat archives not supported in this environment!"),r=!1);return{source:()=>a.stream.multicast(),sink:e=>{let t,l,o,s=[];e.forEach(e=>{const{type:c,id:d,urls:m,path:u}=e;if(!r)return void a.callback({type:c,id:d,error:new Error("Dat archives not supported in this environment!")});const h={unhandled:()=>{a.callback({type:c,id:d,error:new Error(`Dat: no handler found for command ${c}`)})},read:()=>{m.map(async e=>{e=e.replace(" ","+"),l=e,t=new i(e,{});const n=await t.readdir(u,{recursive:!0,stat:!0}),r=await Promise.all(n.map(async e=>{const a=`${u}/${e.name}`;if(e.stat.isFile()&&e.name.includes("js"))return{content:await t.readFile(a),name:e.name,fullPath:e.name,isFile:!0}})),m=await t.getInfo();o=m.title||"unnamed";const h=r.filter(e=>void 0!==e).map(e=>({name:e.name,ext:getFileExtensionFromString(e.name),source:e.content,fullPath:`/${o}/`+e.fullPath}));s=[{children:h,fullPath:`/${o}`,name:o}],a.callback({type:c,id:d,url:e,data:s}),await t.history()})},write:()=>{n.warning("writing to dat archives is not implemented yet")},watch:()=>{t.watch().addEventListener("changed",async({path:e})=>{const n=await t.readFile(e),r={name:require("path").basename(e),ext:"js",source:n,fullPath:`/${o}`+e},i=s[0].children.findIndex(e=>e.fullPath===r.fullPath);(s=JSON.parse(JSON.stringify(s)))[0].children[i]=r,a.callback({type:"read",id:"loadRemote",url:l,data:s})})}};(h[c]||h.unhandled)()})}}};module.exports=makeDatSideEffect; -},{"../../most-utils/callbackToObservable":824,"../../utils/logger":867,"@jscad/core":19,"path":713}],830:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825,"../../utils/logger":868,"@jscad/core":19,"path":714}],831:[function(require,module,exports){ const most=require("most"),morph=require("morphdom"),{proxy:proxy}=require("most-proxy"),makeDomSideEffect=({targetEl:e})=>{const{attach:t,stream:r}=proxy(),o=r,s={};return{source:()=>{const t=t=>Array.from(e.querySelectorAll(t));return o.forEach(()=>{Object.keys(s).forEach(e=>{const[r]=e.split("@@"),o=t(r);if(o&&o.length>0){const t=s[e];if(!1===t.live){t.live=!0;const e=o.map(e=>most.fromEvent(t.events,e)),r=most.mergeArray(e);t.observable.attach(r)}}})}),{select:e=>{const r=t(e);let o;return{events:function(t){if(!r||r&&0===r.length){const r=proxy();o=r.stream,s[e+"@@"+t]={observable:r,live:!1}}return s[e+"@@"+t].events=t,o.multicast()}}},element:e}},sink:((e,r)=>{let o;const s=r.take(1).map(t=>{o=t,e.appendChild(o)}),m=r.skip(1).map(e=>{morph(o,e)}),n=most.mergeArray([s,m]).multicast();t(n),n.forEach(e=>e)}).bind(null,e)}};module.exports=makeDomSideEffect; -},{"morphdom":730,"most":772,"most-proxy":733}],831:[function(require,module,exports){ +},{"morphdom":731,"most":773,"most-proxy":734}],832:[function(require,module,exports){ const{fromEvent:fromEvent}=require("most"),preventDefault=t=>(t.preventDefault(),t),isTextNotEmpty=t=>""!==t,exists=t=>null!=t,itemListToArray=t=>{const e=[];for(let r=0;r{if(isTextNotEmpty(t.dataTransfer.getData("url")))return{type:"url",data:t.dataTransfer.getData("url")};if(t.dataTransfer.types.includes("text/plain")){const e=t.dataTransfer.getData("text");try{return{type:"url",data:new URL(e).href}}catch{return{type:"text",data:e}}}return t.dataTransfer.items&&t.dataTransfer.items.length>0?{type:"fileOrFolder",data:itemListToArray(t.dataTransfer.items)}:void 0},makeDragAndDropSideEffect=({targetEl:t})=>{return{source:()=>{const{dragOvers$:e,drops$:r}=(t=>({dragOvers$:fromEvent("dragover",t),drops$:fromEvent("drop",t)}))(t);return r.multicast(),r.forEach(preventDefault),e.forEach(preventDefault),r.map(t=>extractData(t)).filter(exists).multicast()}}};module.exports=makeDragAndDropSideEffect; -},{"most":772}],832:[function(require,module,exports){ +},{"most":773}],833:[function(require,module,exports){ const callbackToObservable=require("../../most-utils/callbackToObservable"),makeFileDialog=e=>{const a=callbackToObservable();return{source:()=>{},sink:e=>{e.forEach(e=>{a.callback(e);const l=document.createElement("input");l.id="foo",l.name="gna",l.setAttribute("type","file"),l.click(),l.addEventListener("change",()=>{})})}}};module.exports=makeFileDialog; -},{"../../most-utils/callbackToObservable":824}],833:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825}],834:[function(require,module,exports){ const path=require("path"),{getFileExtensionFromString:getFileExtensionFromString}=require("@jscad/core").utils,{formats:formats}=require("@jscad/io/formats"),callbackToObservable=require("../../most-utils/callbackToObservable"),makeLogger=require("../../utils/logger"),proxyUrl="./remote.pl?url=",binaryMimetypes={stl:"application/sla"},makeHttpSideEffect=e=>{const{logging:t}=Object.assign({},{logging:!1},e),r=callbackToObservable(),a=makeLogger({enabled:t});return{source:()=>r.stream.multicast(),sink:e=>{e.forEach(e=>{const{type:t,id:o,urls:n,origin:i,proxy:l}=e,s={read:()=>{let e=[];n.forEach(n=>{const s=e=>{r.callback({type:t,id:o,url:n,error:e}),a.error(e)},c=a=>{e=e.concat(a),r.callback({type:t,id:o,url:n,data:e})};l?readProxy(n,s,e=>{if(e.file){const t=new URL(i),r=new URL(e.file,t);readFile(r.toString(),s,c)}}):readFile(n,s,c)})},write:()=>{a.warning("writing to http is not implemented yet")},watch:()=>{a.warning("watching http is not implemented yet")},unhandled:()=>{r.callback({type:t,id:o,error:new Error(`http: no handler found for command ${t}`)})}};(s[t]||s.unhandled)()})}}},readFile=(e,t,r)=>{const a=getFileExtensionFromString(e),o=void 0!==binaryMimetypes[a];fetch(e).then(e=>{if(e.ok)return o?e.arrayBuffer():e.text();t(new Error(`fetch error: ${e.status} ${e.statusText}`))}).then(t=>{const o=path.basename(e),n=`/${o}`,i=formats[a]?formats[a].mimetype:"";r({name:o,ext:a,mimetype:i,source:t,fullPath:n})}).catch(e=>{t(e)})},readProxy=(e,t,r)=>{fetch(proxyUrl+e).then(e=>{if(e.ok)return e.json();t(new Error(`fetch error: ${e.status} ${e.statusText}`))}).then(e=>{r(e)}).catch(e=>{t(e)})};module.exports=makeHttpSideEffect; -},{"../../most-utils/callbackToObservable":824,"../../utils/logger":867,"@jscad/core":19,"@jscad/io/formats":68,"path":713}],834:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825,"../../utils/logger":868,"@jscad/core":19,"@jscad/io/formats":69,"path":714}],835:[function(require,module,exports){ const isElectron=require("is-electron"),callBackToStream=require("../../most-utils/callbackToObservable"),longNames={en:"english",de:"german",fr:"french",ja:"japanese",hr:"croatian",zh:"chinese"},getDefaultLocale=()=>{let a;return isElectron()||(a=navigator.languages&&navigator.languages.length?navigator.languages[0]:navigator.language),a?a.split("-")[0]:""},initTranslations=a=>{const{translations:e}=Object.assign({},{translations:{}},a);return e},i18nImport=require("es2015-i18n-tag"),i18n=i18nImport.default,{i18nConfig:i18nConfig}=i18nImport,makei18nSideEffect=a=>{const e=callBackToStream();let t=initTranslations(a);const n={setAvailableTranslations:a=>{t=a.data},getDefaultLocale:a=>{e.callback({data:getDefaultLocale(),type:a.type})},changeSettings:a=>{const n=a.data;i18nConfig({locales:n,translations:t[n]}),e.callback({data:i18n,type:"changeSettings"})},getAvailableLanguages:a=>{const n=Object.keys(t).map(a=>{let e=longNames[a]?longNames[a]:"placeholder";const n=t[a];return n&&"language"in n&&(e=n.language),{code:a,fullName:e}});e.callback({data:n,type:"getAvailableLanguages"})}};return{sink:a=>{a.forEach(a=>{const e=n[a.type];e&&e(a)})},source:()=>e.stream.multicast()}};module.exports=makei18nSideEffect; -},{"../../most-utils/callbackToObservable":824,"es2015-i18n-tag":727,"is-electron":729}],835:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825,"es2015-i18n-tag":728,"is-electron":730}],836:[function(require,module,exports){ const{walkFileTree:walkFileTree}=require("@jscad/core").web,callbackToObservable=require("../../most-utils/callbackToObservable"),{changedFiles:changedFiles,flattenFiles:flattenFiles}=require("./utils"),localFsOptions=require("../../../data/localFsOptions.json"),makeLocalFsSideEffect=async e=>{const l=callbackToObservable();let o=null,a=0;const t=e=>o.send(JSON.stringify(e));return{source:()=>l.stream.multicast(),sink:e=>{let n,c,r,s=5e3;e.forEach(e=>{const{type:i,id:d,data:f,options:m,path:u}=e,h={unhandled:()=>{l.callback({type:i,id:d,error:new Error(`LocalFs: no handler found for command ${i}`)})},read:async()=>{n=void 0,c=void 0,r&&(clearInterval(r),r=0,o&&o.close()),f.length&&f[0]instanceof File||(c=f),n=await walkFileTree(f),l.callback({type:i,id:d,data:n})},watch:()=>{if(void 0===c)return;const{enabled:e}=m;e?(o||((o=new WebSocket(localFsOptions.livereloadUrl)).onopen=function(e){t({command:"hello",protocols:["http://livereload.com/protocols/official-6","http://livereload.com/protocols/official-7"],ver:"2.0.8",ext:"Chrome",extver:"2.1.0"})},o.onmessage=function(e){const l=JSON.parse(e.data);"hello"===l.command&&t({command:"info",plugins:{less:{disable:!1,version:"1.0"}},url:document.location}),"reload"===l.command&&(a=0)},o.onerror=function(e){console.warn("websocket error",e)},o.onclose=function(e){o=null}),r=setInterval(()=>{const e=Date.now();!c||o&&a||e-a{console.error("failed to read files",e)}).then(o=>{const a=flattenFiles(n),t=flattenFiles(o),c=changedFiles(a,t);c.length>0&&(n=o,l.callback({type:"read",id:"loadRemote",data:n,path:u,changed:c}));const r=Date.now();s=Math.max(2*(r-e),1e3)}))},50)):r&&(clearInterval(r),r=0)},write:()=>{}};(h[i]||h.unhandled)()})}}};module.exports=makeLocalFsSideEffect; -},{"../../../data/localFsOptions.json":636,"../../most-utils/callbackToObservable":824,"./utils":836,"@jscad/core":19}],836:[function(require,module,exports){ +},{"../../../data/localFsOptions.json":637,"../../most-utils/callbackToObservable":825,"./utils":837,"@jscad/core":19}],837:[function(require,module,exports){ const sameFile=(e,t)=>{if(e.fullPath===t.fullPath&&typeof e.source==typeof t.source){if(e.source.byteLength){const n=new Uint8Array(e.source),r=new Uint8Array(t.source);return n.length===r.length&&n.every((e,t)=>e===r[t])}return e.length===t.length&&e.source===t.source}return!1},changedFiles=(e,t)=>{const n=e.slice();return t.filter(e=>{const t=n.findIndex((t,n)=>sameFile(t,e));return t<0||(n.splice(t,1),!1)})},flattenFiles=e=>{let t=[];return e.forEach(e=>{e.children?t=t.concat(flattenFiles(e.children)):t.push(e)}),t};module.exports={changedFiles:changedFiles,flattenFiles:flattenFiles}; -},{}],837:[function(require,module,exports){ +},{}],838:[function(require,module,exports){ const callbackToObservable=require("../../most-utils/callbackToObservable"),makeStorageSideEffect=({name:e})=>{const a=callbackToObservable();return{sink:t=>{let r=!0;try{localStorage.getItem("jscad:")}catch(e){r=!1}r?t&&t.forEach(t=>{const{type:r,key:c,data:o}=t;if("write"===r)localStorage.setItem(`jscad:${e}-${c}`,JSON.stringify(o));else if("read"===r){const t=localStorage.getItem(`jscad:${e}-${c}`),o=JSON.parse(t)||{};a.callback({type:r,key:c,data:o})}}):callbackToObservable().callback({type:void 0,id:void 0,error:new Error("Local storage not supported in this environment!")})},source:()=>{return a.stream.multicast()}}};module.exports=makeStorageSideEffect; -},{"../../most-utils/callbackToObservable":824}],838:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825}],839:[function(require,module,exports){ const most=require("most"),callbackToObservable=require("../../most-utils/callbackToObservable"),makeState=t=>{const{packageMetadata:s,keyBindings:a}=t,e=callbackToObservable(),r={appTitle:`jscad v ${s.version}`,activeTool:void 0,status:{message:"",error:void 0,busy:!1},shortcuts:a,storage:{path:""},version:s.version};return{source:()=>{const t=e.stream.multicast();return most.scan((t,s)=>Object.assign({},t,s.state),r,t).startWith(r).skipRepeatsWith((t,s)=>JSON.stringify(t)===JSON.stringify(s)).multicast()},sink:t=>{t.forEach(t=>{e.callback(t)})}}};module.exports=makeState; -},{"../../most-utils/callbackToObservable":824,"most":772}],839:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825,"most":773}],840:[function(require,module,exports){ const most=require("most"),makeTitleBarSideEffect=()=>{return{sink:e=>{e.forEach(e=>{document.title=e})},source:()=>{const e=window.location.href;return most.just(e).filter(e=>void 0!==e).multicast().skipRepeats()}}};module.exports=makeTitleBarSideEffect; -},{"most":772}],840:[function(require,module,exports){ +},{"most":773}],841:[function(require,module,exports){ const WebWorkify=require("webworkify"),callBackToStream=require("../../most-utils/callbackToObservable"),makeWorkerEffect=e=>{const r=callBackToStream();let a=WebWorkify(e,{});a.onerror=(e=>r.callback({error:e})),a.onmessage=(e=>r.callback(e));return{sink:c=>{c.filter(({cmd:e})=>"cancel"===e).forEach(c=>{a.terminate(),(a=WebWorkify(e)).onerror=(e=>r.callback({error:e})),a.onmessage=(e=>r.callback(e))}),c.filter(({cmd:e})=>"cancel"!==e).forEach(e=>{a.postMessage(e)})},source:function(){return r.stream.multicast()}}};module.exports=makeWorkerEffect; -},{"../../most-utils/callbackToObservable":824,"webworkify":814}],841:[function(require,module,exports){ +},{"../../most-utils/callbackToObservable":825,"webworkify":815}],842:[function(require,module,exports){ const most=require("most"),{delayFromObservable:delayFromObservable,holdUntil:holdUntil,withLatestFrom:withLatestFrom}=require("../../most-utils"),{getParameterValuesFromUIControls:getParameterValuesFromUIControls}=require("@jscad/core").parameters,{fetchUriParams:fetchUriParams,getAllUriParams:getAllUriParams}=require("../../utils/urlUtils"),reducers=require("./reducers"),jsonCompare=(e,t)=>JSON.stringify(e)===JSON.stringify(t),actions=({sources:e})=>{const t=most.just({}).thru(withLatestFrom(reducers.initialize,e.state)).map(e=>({type:"initializeDesign",state:e,sink:"state"})).multicast(),r=t.map(e=>({sink:"store",key:"design",type:"read"})),s=e.state.filter(reducers.isDesignValid).skipRepeatsWith(reducers.isDesignTheSameForSerialization).thru(holdUntil(e.store.filter(e=>"design"===e.key&&"read"===e.type))).map(reducers.requestSaveSettings).map(e=>Object.assign({},{data:e},{sink:"store",key:"design",type:"write"})).multicast(),a=e.store.filter(e=>"design"===e.key&&"read"===e.type&&void 0!==e.data).thru(withLatestFrom(reducers.setSettings,e.state)).map(e=>({type:"setDesignSettings",state:e,sink:"state"})).multicast(),i=most.mergeArray([e.drops.filter(e=>"fileOrFolder"===e.type).tap(e=>console.log("dropped file",e)).map(({data:e})=>({sink:"fs",data:e,path:"realFs",urls:[]})),e.drops.filter(e=>"url"===e.type).tap(e=>console.log("dropped url",e)).map(e=>{const t=window.location.href,r=e.data,s=new URL(r),a=r?[r]:[],{protocol:i,pathname:o}=s;return{sink:i.replace(":",""),urls:a,origin:t,path:o,proxy:!0}}),e.dom.select(".example").events("click").map(e=>e.target.dataset.path).map(e=>{const t=new URL(e),r=e?[e]:[],{protocol:s,origin:a}=t;return{sink:s.replace(":",""),urls:r,origin:a}}).tap(e=>console.log("load example",e)),e.dom.select("#fileLoader").events("change").tap(e=>console.log("selected directory",e)).filter(e=>e.target.files.length>0).map(e=>{const t=e.target.files,r=[];for(let e=0;evoid 0!==e).tap(e=>console.log("window href processing",e)).map(e=>{const t=e;let r=fetchUriParams(e,"uri",void 0);if(!r){const t=new URL(e);if(0===t.hash.length)return;r=t.hash.slice(1)}const s=new URL(r),a=[r],{protocol:i,pathname:o}=s;return{sink:i.replace(":",""),urls:a,origin:t,path:o,proxy:!0}})]).filter(e=>void 0!==e).thru(holdUntil(a)).map(e=>({type:"read",id:"loadRemote",urls:e.urls,sink:e.sink,origin:e.origin,path:e.path,data:e.data,proxy:e.proxy})).multicast().skipRepeats(),o=most.mergeArray(Object.values(e).filter(e=>void 0!==e&&"source"in e)).filter(e=>!("loadRemote"!==e.id||"read"!==e.type||"error"in e||"sink"in e)).map(({data:e})=>({filesAndFolders:e})).thru(withLatestFrom(reducers.setDesignContent,e.state)).map(e=>({type:"setDesignContent",state:e,sink:"state"})).multicast(),n=most.mergeArray([e.state.filter(reducers.isDesignValid).map(({design:e})=>{return{id:"watchScript",path:e.mainPath,origin:e.origin,options:{enabled:e.autoReload}}}).skipRepeatsWith(jsonCompare)]).map(e=>Object.assign({},{type:"watch",sink:e.origin},e)).multicast(),l=most.mergeArray([e.state.filter(reducers.isDesignValid).filter(e=>void 0!==e.design.solids).map(e=>e.design.solids).skipRepeatsWith(jsonCompare)]).thru(withLatestFrom(reducers.requestWriteCachedGeometry,e.state)).map(e=>Object.assign({},{type:"write",id:"cachedGeometry",sink:e.origin},e)).multicast(),m=most.mergeArray([i.map(({sink:e})=>e)]).thru(withLatestFrom(reducers.resetDesign,e.state)).map(e=>({type:"resetDesign",state:e,sink:"state"})).multicast(),d=most.mergeArray([e.solidWorker.filter(e=>!("error"in e)&&e.data instanceof Object&&"solids"===e.data.type).map(e=>{const{lookupCounts:t,lookup:r,solids:s}=e.data;return{solids:s,lookup:r,lookupCounts:t}}).multicast(),e.fs.filter(e=>"read"===e.type&&"loadCachedGeometry"===e.id&&e.data).map(e=>{return{solids:void 0,lookupCounts:void 0,lookup:void e.data}}).multicast()]).thru(withLatestFrom(reducers.setDesignSolids,e.state)).map(e=>({type:"setDesignSolids",state:e,sink:"state"})).multicast(),p=e.state.skipRepeatsWith(reducers.isDesignTheSame).filter(reducers.isDesignValid).map(reducers.requestGeometryRecompute).map(e=>Object.assign({},e,{sink:"geometryWorker",cmd:"generate"})).multicast(),u=p.thru(delayFromObservable(e=>e.design.solidsTimeOut,e.state.filter(reducers.isDesignValid))).thru(withLatestFrom(reducers.timeoutGeometryRecompute,e.state)).map(e=>Object.assign({},{state:e},{sink:"state",type:"timeOutDesignGeneration"})).multicast(),c=u.filter(({state:e})=>void 0!==e.status.error).map(e=>Object.assign({},{sink:"geometryWorker",cmd:"cancel"})).multicast(),g=e.solidWorker.filter(e=>!("error"in e)&&e.data instanceof Object&&"params"===e.data.type).map(({data:e})=>({parameterDefaults:e.parameterDefaults,parameterDefinitions:e.parameterDefinitions,origin:"worker"})),h=most.mergeArray([g]).skipRepeatsWith(jsonCompare).thru(holdUntil(e.state.filter(reducers.isDesignValid))).thru(withLatestFrom(reducers.setDesignParameterDefinitions,e.state)).map(e=>({type:"setDesignParameterDefinitions",state:e,sink:"state"})).multicast(),y=()=>Array.from(document.getElementById("paramsTable").getElementsByTagName("input")).concat(Array.from(document.getElementById("paramsTable").getElementsByTagName("select"))).concat(Array.from(document.getElementById("paramsTable").getElementsByClassName("groupTitle"))),k=most.mergeArray([e.dom.select("#updateDesignFromParams").events("click").map(()=>{const e=y();return{parameterValues:getParameterValuesFromUIControls(e),origin:"uiManualUpdate"}}),e.paramChanges.filter(e=>(()=>document.getElementById("instantUpdate").checked)()).map(()=>{try{const e=y();return{parameterValues:getParameterValuesFromUIControls(e),origin:"uiInstantUpdate"}}catch(e){return{error:e,origin:"instantUpdate"}}})]).multicast().debounce(10),f=e.store.filter(e=>"design"===e.key&&"read"===e.type&&void 0!==e.data.parameterValues).map(({data:e})=>({parameterValues:e.parameterValues,origin:"store"})).multicast(),D=e.titleBar.map(e=>getAllUriParams(e)).filter(e=>Object.keys(e).length>0).map(e=>({parameterValues:e,origin:"titleBar"})).multicast(),F=e.state.filter(reducers.isDesignValid).multicast(),w=most.mergeArray([k,f,D,e.dom.select("#resetDesignToParameterDefaults").events("click").thru(withLatestFrom((e,t)=>({parameterValues:e.design.parameterDefaults,origin:"reset"}),e.state))]).skipRepeatsWith(jsonCompare).thru(holdUntil(e.state.filter(reducers.isDesignValid))).thru(holdUntil(F.filter(e=>{return e.design&&Object.keys(e.design.parameterDefinitions).length>0}))).thru(withLatestFrom(reducers.setDesignParameterValues,e.state)).map(e=>({type:"setDesignParameterValues",state:e,sink:"state"})).multicast().delay(10),U=e.solidWorker.filter(e=>e.data instanceof Object&&"errors"===e.data.type).map(({data:e})=>({error:e,origin:"worker"}));return{initialize$:t,requestLoadDesignContent$:i,requestWatchDesign$:n,requestWriteCachedGeometry$:l,resetDesign$:m,setDesignContent$:o,setDesignSolids$:d,setDesignParameterDefinitions$:h,setDesignParameterValues$:w,reportErrorsFromWorker$:most.mergeArray([U]).skipRepeatsWith(jsonCompare).tap(e=>console.log("errors",e)),requestGeometryRecompute$:p,timeoutGeometryRecompute$:u,cancelGeometryRecompute$:c,requestLoadSettings$:r,requestSaveSettings$:s,setDesignSettings$:a,toggleAutoReload$:most.mergeArray([e.dom.select("#toggleAutoReload").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleAutoReload,e.state)).map(e=>({type:"toggleAutoReload",state:e,sink:"state"})),toggleInstantUpdate$:most.mergeArray([e.dom.select("#instantUpdate").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleInstantUpdate,e.state)).map(e=>({type:"toggleInstantUpdate",state:e,sink:"state"})),toggleVTreeMode$:most.mergeArray([e.dom.select("#toggleVtreeMode").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleVtreeMode,e.state)).map(e=>({type:"toggleVtreeMode",state:e,sink:"state"})),setSolidsTimeout$:most.mergeArray([e.dom.select("#solidsTimeout").events("change").map(e=>e.target.value).map(e=>parseFloat(e))]).thru(withLatestFrom(reducers.setSolidsTimeout,e.state)).map(e=>({type:"setSolidsTimeout",state:e,sink:"state"}))}};module.exports=actions; -},{"../../most-utils":827,"../../utils/urlUtils":869,"./reducers":848,"@jscad/core":19,"most":772}],842:[function(require,module,exports){ +},{"../../most-utils":828,"../../utils/urlUtils":870,"./reducers":849,"@jscad/core":19,"most":773}],843:[function(require,module,exports){ const makeOutput=({sources:e,extras:t})=>e.state.filter(e=>e.design&&e.languages&&e.viewer).skipRepeatsWith((e,t)=>JSON.stringify(e)===JSON.stringify(t)).combine((e,a)=>require("../views/main")(e,a,t.paramsCallbacktoStream,t.editorCallbackToStream),e.i18n.filter(e=>"changeSettings"===e.type).map(e=>e.data));module.exports=makeOutput; -},{"../views/main":858}],843:[function(require,module,exports){ +},{"../views/main":859}],844:[function(require,module,exports){ const most=require("most"),{withLatestFrom:withLatestFrom}=require("../../most-utils"),reducers={setErrors:(r,t)=>{const{error:s}=t;return{status:Object.assign({},r.status,{error:s,busy:!1})}},clearErrors:(r,t)=>{return{status:Object.assign({},r.status,{error:void 0,busy:!1})}}},actions=({sources:r})=>{return{setErrors$:most.mergeArray(Object.values(r).filter(r=>void 0!==r&&"source"in r)).filter(r=>{try{return"error"in r}catch(r){return!1}}).thru(withLatestFrom(reducers.setErrors,r.state)).map(r=>Object.assign({},{type:"setErrors",sink:"state"},{state:r})),clearErrors$:most.never().thru(withLatestFrom(reducers.clearErrors,r.state)).map(r=>Object.assign({},{type:"clearErrors",sink:"state"},{state:r}))}};module.exports=actions; -},{"../../most-utils":827,"most":772}],844:[function(require,module,exports){ +},{"../../most-utils":828,"most":773}],845:[function(require,module,exports){ const most=require("most"),{solidsAsBlob:solidsAsBlob}=require("@jscad/io"),{withLatestFrom:withLatestFrom}=require("../../most-utils"),{exportFilePathFromFormatAndDesign:exportFilePathFromFormatAndDesign}=require("../../core/io/exportUtils"),reducers={initialize:t=>{return{io:{exportFormat:"",exportFilePath:"",availableExportFormats:[]}}},setExportFormat:(t,e)=>{return{io:Object.assign({},t.io,exportFilePathFromFormatAndDesign(t.design,e),{exportFormat:e})}},requestExport:t=>{const{exportFilePath:e,exportFormat:r}=t.io,{solids:s}=t.design,{saveAs:o}=require("file-saver");o(solidsAsBlob(s,{format:r}),e)}},actions=({sources:t})=>{const e=most.just({}).thru(withLatestFrom(reducers.initialize,t.state)).map(t=>Object.assign({},{type:"initializeExports",sink:"state"},{state:t})),r=t.dom.select("#exportFormats").events("change").map(t=>t.target.value).thru(withLatestFrom(reducers.setExportFormat,t.state)).map(t=>Object.assign({},{type:"changeExportFormat",sink:"state"},{state:t})).multicast();return{initializeExports$:e,requestExport$:t.dom.select("#exportBtn").events("click").thru(withLatestFrom(reducers.requestExport,t.state)).map(t=>({type:"exportRequested",data:t})),changeExportFormat$:r}};module.exports=actions; -},{"../../core/io/exportUtils":816,"../../most-utils":827,"@jscad/io":69,"file-saver":728,"most":772}],845:[function(require,module,exports){ +},{"../../core/io/exportUtils":817,"../../most-utils":828,"@jscad/io":70,"file-saver":729,"most":773}],846:[function(require,module,exports){ const most=require("most"),{flatten:flatten}=require("@jscad/array-utils"),{proxy:proxy}=require("most-proxy"),makeActions=e=>{const{attach:r,stream:s}=proxy();e.actions=s.skipRepeatsWith((e,r)=>JSON.stringify(e)===JSON.stringify(r)).multicast();const t=require("./tools")({sources:e}),i=require("./viewer")({sources:e}),o=require("./themes")({sources:e}),u=require("./languages")({sources:e}),a=require("./shortcuts")({sources:e}),c=require("./errors")({sources:e}),n=require("./exports")({sources:e}),m=[c,require("./design")({sources:e}),n,t,o,i,u,a],l=most.mergeArray(flatten(m.map(e=>Object.values(e)))).skipRepeatsWith((e,r)=>JSON.stringify(e)===JSON.stringify(r)).multicast().filter(e=>void 0!==e);return r(l),l};module.exports=makeActions; -},{"./design":841,"./errors":843,"./exports":844,"./languages":847,"./shortcuts":849,"./themes":850,"./tools":851,"./viewer":852,"@jscad/array-utils":527,"most":772,"most-proxy":733}],846:[function(require,module,exports){ +},{"./design":842,"./errors":844,"./exports":845,"./languages":848,"./shortcuts":850,"./themes":851,"./tools":852,"./viewer":853,"@jscad/array-utils":528,"most":773,"most-proxy":734}],847:[function(require,module,exports){ const makeReactions=i=>{const{sinks:s,outputs$:t}=i,{store:n,fs:e,http:k,https:r,i18n:o,dom:f,solidWorker:l,state:a,dat:d}=s;f(require("./dom")(i)),o(t.filter(i=>"sink"in i&&"i18n"===i.sink)),n(t.filter(i=>"sink"in i&&"store"===i.sink)),k(t.filter(i=>"sink"in i&&"http"===i.sink)),r(t.filter(i=>"sink"in i&&"https"===i.sink)),e(t.filter(i=>"sink"in i&&"fs"===i.sink)),l(t.filter(i=>"sink"in i&&"geometryWorker"===i.sink)),a(t.filter(i=>"sink"in i&&"state"===i.sink)),d(t.filter(i=>"sink"in i&&"dat"===i.sink))};module.exports=makeReactions; -},{"./dom":842}],847:[function(require,module,exports){ +},{"./dom":843}],848:[function(require,module,exports){ const most=require("most"),{holdUntil:holdUntil,withLatestFrom:withLatestFrom}=require("../../most-utils"),reducers={initialize:e=>{return{languages:{active:void 0,available:[]}}},setLanguage:(e,a)=>{return{languages:Object.assign({},e.languages,{active:a})}},setAvailableLanguages:(e,a)=>{return{languages:Object.assign({},e.languages,{available:a})}},requestSaveSettings:e=>({active:e.active})},actions=({sources:e})=>{const a=most.just({}).thru(withLatestFrom(reducers.initialize,e.state)).map(e=>Object.assign({},{type:"initializeLanguages",sink:"state"},{state:e})),t=a.map(e=>({type:"getAvailableLanguages",sink:"i18n"})),s=t.map(e=>({type:"getDefaultLocale",sink:"i18n"})),i=e.state.filter(e=>e.languages&&void 0!==e.languages.active).map(e=>e.languages.active).skipRepeatsWith((e,a)=>JSON.stringify(e)===JSON.stringify(a)).map(e=>({type:"changeSettings",data:e,sink:"i18n"})),g=most.mergeArray([e.i18n.filter(e=>"getAvailableLanguages"===e.type).map(e=>e.data)]).thru(withLatestFrom(reducers.setAvailableLanguages,e.state)).map(e=>Object.assign({},{type:"setAvailableLanguages",sink:"state"},{state:e})).multicast(),n=a.map(e=>({sink:"store",key:"languages",type:"read"})),l=e.i18n.thru(holdUntil(g)).filter(e=>"getDefaultLocale"===e.type).map(e=>e.data).multicast().delay(1),r=e.store.filter(e=>"languages"===e.key&&"read"===e.type).thru(holdUntil(l)).map(e=>e.data.active).filter(e=>void 0!==e);return{initialize$:a,requestGetAvailableLanguages$:t,requestGetDefaultLanguage$:s,requestGetLanguageData$:i,setLanguage$:most.mergeArray([l,e.dom.select("#languageSwitcher").events("change").map(e=>e.target.value),r]).thru(withLatestFrom(reducers.setLanguage,e.state)).map(e=>Object.assign({},{type:"setLanguage",sink:"state"},{state:e})),setAvailableLanguages$:g,requestLoadSettings$:n,requestSaveSettings$:e.state.filter(e=>e.languages).map(e=>e.languages).thru(holdUntil(e.store.filter(e=>"languages"===e.key&&"read"===e.type))).map(reducers.requestSaveSettings).map(e=>Object.assign({},{data:e},{sink:"store",key:"languages",type:"write"})).multicast()}};module.exports=actions; -},{"../../most-utils":827,"most":772}],848:[function(require,module,exports){ +},{"../../most-utils":828,"most":773}],849:[function(require,module,exports){ const path=require("path"),{applyParameterDefinitions:applyParameterDefinitions}=require("@jscad/core").parameters,{makeFakeFs:makeFakeFs}=require("@jscad/core").loading,{getDesignEntryPoint:getDesignEntryPoint,getDesignName:getDesignName}=require("@jscad/core").loading.requireDesignUtilsFs,{keep:keep}=require("../../utils/object"),packageMetadata=require("../../../package.json"),{availableExportFormatsFromSolids:availableExportFormatsFromSolids,exportFilePathFromFormatAndDesign:exportFilePathFromFormatAndDesign}=require("../../core/io/exportUtils"),designEqualityFields=["parameterDefinitions","parameterValues","mainPath","filesAndFolders","vtreeMode"],serializableFields=["name","mainPath","origin","parameterValues","vtreeMode","autoReload","instantUpdate","solidsTimeOut"],reducers={initialize:()=>{return{design:{name:"",path:"",mainPath:"",origin:void 0,filesAndFolders:[],instantUpdate:!1,autoReload:!1,parameterDefinitions:[],parameterValues:{},parameterDefaults:{},solidsTimeOut:8e4,solids:[],vtreeMode:!1,lookup:{},lookupCounts:{},debug:{startTime:0,endTime:0,totalTime:0}}}},resetDesign:(e,t)=>{const i=Object.assign({},e.design,keep(["name","path","mainPath","origin","filesAndFolders","parameterDefinitions","parameterValues","parameterDefaults","lookup","lookupCounts","debug","solids"],reducers.initialize().design));return i.origin=t,{design:i}},setDesignContent:(e,t)=>{const{filesAndFolders:i}=t,s=makeFakeFs(i),a=i[0].fullPath,n=getDesignEntryPoint(s,a),r=getDesignName(s,a),o=path.dirname(a);let d=e.design;const g=Object.assign({},e.design.debug,{startTime:new Date});return{design:d=Object.assign({},d,{name:r,path:o,mainPath:n,filesAndFolders:i,debug:g}),appTitle:`jscad v ${packageMetadata.version}: ${e.design.name}`,status:Object.assign({},e.status,{busy:!0,error:void 0})}},setDesignSolids:(e,{solids:t,lookup:i,lookupCounts:s})=>{t=t||[],i=i||{},s=s||{};const a=new Date,n=a-e.design.debug.startTime,r=Object.assign({},e.design.debug,{endTime:a,totalTime:n});console.warn("total time for design regeneration",n,(new Date).getSeconds());const o=Object.assign({},e.design,{solids:t,lookup:i,lookupCounts:s,debug:r}),{exportFormat:d,availableExportFormats:g}=availableExportFormatsFromSolids(t),l={exportFormat:d,exportFilePath:exportFilePathFromFormatAndDesign(o,d).exportFilePath,availableExportFormats:g};return{design:o,status:Object.assign({},e.status,{busy:!1}),io:l}},setDesignParameterDefinitions:(e,t)=>{const i=t.parameterDefaults||e.design.parameterDefaults,s=t.parameterDefinitions||e.design.parameterDefinitions;return{design:Object.assign({},e.design,{parameterDefaults:i,parameterDefinitions:s,parametersOrigin:t.origin})}},setDesignParameterValues:(e,t)=>{let i=t.parameterValues;"instantUpdate"!==t.origin||e.design.instantUpdate||(i=e.design.parameterValues),i=i?applyParameterDefinitions(i,e.design.parameterDefinitions):i,i=Object.assign({},e.design.parameterValues,i);let s=Object.assign({},e.design,{parameterValues:i,parametersOrigin:t.origin});const a=Object.assign({},e.design.debug,{startTime:new Date});return{design:s=Object.assign({},s,{debug:a}),status:Object.assign({},e.status,{busy:!0,error:void 0})}},setSettings:(e,{data:t})=>{const{vtreeMode:i,autoReload:s,instantUpdate:a,solidsTimeOut:n}=t;return void 0===i?{design:e.design}:{design:Object.assign({},e.design,{vtreeMode:i,autoReload:s,instantUpdate:a,solidsTimeOut:n})}},requestGeometryRecompute:({design:e},t)=>keep(["mainPath","parameterValues","filesAndFolders","vtreeMode","lookup","lookupCounts"],e),timeoutGeometryRecompute:({status:e},t)=>e.isBusy?Object.assign({},e,{busy:!1,error:new Error("Failed to generate design within an acceptable time, bailing out")}):{status:e},requestWriteCachedGeometry:({design:e},t)=>{const i={};return Object.keys(t).forEach(e=>{i[e]=t[e]}),{path:".solidsCache",options:{isRawData:!0},origin:e.origin}},requestSaveSettings:({design:e})=>keep(serializableFields,e),isDesignValid:e=>e.design&&e.design.name&&""!==e.design.path,isDesignTheSame:(e,t)=>{if(!e.design)return!1;const i=JSON.stringify(keep(designEqualityFields,t.design));return JSON.stringify(keep(designEqualityFields,e.design))===i},isDesignTheSameForSerialization:(e,t)=>{if(!e.design)return!1;const i=JSON.stringify(keep(serializableFields,t.design));return JSON.stringify(keep(serializableFields,e.design))===i},toggleAutoReload:(e,t)=>{return{design:Object.assign({},e.design,{autoReload:t})}},toggleInstantUpdate:(e,t)=>{return{design:Object.assign({},e.design,{instantUpdate:t})}},toggleVtreeMode:(e,t)=>{return{design:Object.assign({},e.design,{vtreeMode:t})}},setSolidsTimeout:(e,t)=>{return{design:Object.assign({},e.design,{solidsTimeOut:t})}}};module.exports=reducers; -},{"../../../package.json":815,"../../core/io/exportUtils":816,"../../utils/object":868,"@jscad/core":19,"path":713}],849:[function(require,module,exports){ +},{"../../../package.json":816,"../../core/io/exportUtils":817,"../../utils/object":869,"@jscad/core":19,"path":714}],850:[function(require,module,exports){ const most=require("most"),{head:head}=require("@jscad/array-utils"),{holdUntil:holdUntil,withLatestFrom:withLatestFrom}=require("../../most-utils"),{getKeyCombos:getKeyCombos,isKeyEventScopeValid:isKeyEventScopeValid,simpleKey:simpleKey}=require("../../utils/keys"),{merge:merge}=require("../../utils/utils"),reducers={initialize:e=>e,setShortcuts:(e,t)=>{return{shortcuts:merge([],e.shortcuts,t)}},setShortcut:(e,t)=>{const s=t=>e.shortcuts.filter(e=>e.key===t).length>0;return{shortcuts:e.shortcuts.map(e=>{if(e.command===t.command&&e.args===t.args){if("inProgress"in t){const{inProgress:r,tmpKey:o}=t;if(r){const t=s(o)?"shortcut already exists":void 0;return Object.assign({},e,{inProgress:r,tmpKey:o,error:t})}return Object.assign({},e,{inProgress:r,tmpKey:o})}if(t.done&&!s(t.key)){const{command:s,args:r}=e;return{key:t.key,command:s,args:r}}return e}return e})}},triggerShortcut:(e,{event:t,compositeKey:s})=>{const r=head(e.shortcuts.filter(e=>e.key.toLowerCase()===s));if(r){const{command:e,args:t}=r;return{type:e,data:t}}},requestSaveSettings:e=>e},actions=({sources:e})=>{const t=most.just({}).thru(withLatestFrom(reducers.initialize,e.state)).map(e=>Object.assign({},{type:"initializeShortcuts",sink:"state"},{state:e})),s=most.mergeArray([e.store.filter(e=>"shortcuts"===e.key&&"read"===e.type&&e.data&&e.data.shortcuts).map(e=>e.data.shortcuts)]).thru(withLatestFrom(reducers.setShortcuts,e.state)).map(e=>Object.assign({},{type:"setShortcuts",sink:"state"},{state:e})),r=e.dom.select(".shortcutCommand").events("keyup").multicast(),o=e.dom.select(".shortcutCommand").events("keydown").multicast(),a=getKeyCombos({dropRepeats:!0,endKeys:["enter","escape"]},r,o);r.forEach(e=>(e.preventDefault(),e.stopPropagation(),!1)),o.forEach(e=>(e.preventDefault(),e.stopPropagation(),!1));const i=most.mergeArray([a.map(({event:e,compositeKey:t})=>({event:e,compositeKey:t,inProgress:!0})).merge(e.dom.select(".shortcutCommand").events("focus").map(e=>({event:e,compositeKey:"",inProgress:!0}))).merge(e.dom.select(".shortcutCommand").events("blur").map(e=>({event:e,compositeKey:"",inProgress:!1}))).merge(r.filter(e=>"escape"===simpleKey(e)).map(e=>({event:e,compositeKey:"",inProgress:!1}))).merge(r.filter(e=>"enter"===simpleKey(e)).map(e=>({event:e,done:!0}))).scan((e,t)=>{const{event:s,compositeKey:r,inProgress:o,done:a}=t,i=s.target.dataset.command,n=s.target.dataset.args,m=Object.assign({},e,{command:i,args:n,inProgress:o,done:a});return void 0!==r&&""!==r&&(m.key=r,m.tmpKey=r),"done"in m&&m.done&&(delete m.inProgress,delete m.tmpKey),m},{}).filter(e=>void 0!==e)]).thru(withLatestFrom(reducers.setShortcut,e.state)).map(e=>({type:"setShortcut",state:e,sink:"state"})).multicast(),n=e.dom.element.getAttribute("key"),m=most.fromEvent("keyup",e.dom.element).filter(e=>isKeyEventScopeValid(n,e.target)).multicast(),c=most.fromEvent("keydown",e.dom.element).filter(e=>isKeyEventScopeValid(n,e.target)).multicast(),u=getKeyCombos({dropRepeats:!1},m,c).thru(withLatestFrom(reducers.triggerShortcut,e.state)).filter(e=>void 0!==e),d=t.map(e=>({sink:"store",key:"shortcuts",type:"read"}));return{initialize$:t,setShortcut$:i,setShortcuts$:s,triggerFromShortcut$:u,requestLoadSettings$:d,requestSaveSettings$:e.state.filter(e=>e.shortcuts).map(e=>e.shortcuts).thru(holdUntil(e.store.filter(e=>"shortcuts"===e.key&&"read"===e.type))).map(reducers.requestSaveSettings).map(e=>Object.assign({},{data:e},{sink:"store",key:"shortcuts",type:"write"})).multicast()}};module.exports=actions; -},{"../../most-utils":827,"../../utils/keys":866,"../../utils/utils":870,"@jscad/array-utils":527,"most":772}],850:[function(require,module,exports){ +},{"../../most-utils":828,"../../utils/keys":867,"../../utils/utils":871,"@jscad/array-utils":528,"most":773}],851:[function(require,module,exports){ const most=require("most"),{holdUntil:holdUntil,withLatestFrom:withLatestFrom}=require("../../most-utils"),{merge:merge}=require("../../utils/utils"),reducers={initialize:e=>{return{themes:{active:"light",themeSettings:{mainTextColor:"#FFF"}}}},setTheme:(e,t)=>{const s=require("../../../data/themes"),i=s[t]?s[t]:s.light;return{viewer:e.viewer?merge({},e.viewer,i.viewer):i.viewer,themes:Object.assign({},e.themes,{available:s,active:t,themeSettings:i})}},requestSaveSettings:e=>({active:e.active})},actions=({sources:e})=>{const t=most.just({}).thru(withLatestFrom(reducers.initialize,e.state)).map(e=>Object.assign({},{type:"initializeThemes",sink:"state"},{state:e})),s=most.mergeArray([e.dom.select("#themeSwitcher").events("change").map(e=>e.target.value),e.store.filter(e=>"themes"===e.key&&"read"===e.type&&e.data&&e.data.active).map(e=>e.data.active)]).startWith("light").thru(withLatestFrom(reducers.setTheme,e.state)).map(e=>Object.assign({},{type:"setTheme",sink:"state"},{state:e})),i=t.map(e=>({sink:"store",key:"themes",type:"read"}));return{initialize$:t,setTheme$:s,requestLoadSettings$:i,requestSaveSettings$:e.state.filter(e=>e.themes).map(e=>e.themes).thru(holdUntil(e.store.filter(e=>"themes"===e.key&&"read"===e.type))).map(reducers.requestSaveSettings).map(e=>Object.assign({},{data:e},{sink:"store",key:"themes",type:"write"})).multicast()}};module.exports=actions; -},{"../../../data/themes":677,"../../most-utils":827,"../../utils/utils":870,"most":772}],851:[function(require,module,exports){ +},{"../../../data/themes":678,"../../most-utils":828,"../../utils/utils":871,"most":773}],852:[function(require,module,exports){ const most=require("most"),{withLatestFrom:withLatestFrom}=require("../../most-utils"),actions=({sources:e})=>{return{setActiveTool$:most.mergeArray([e.dom.select("#toggleOptions").events("click").map(e=>"options"),e.dom.select("#toggleEditor").events("click").map(e=>"editor"),e.dom.select("#toggleHelp").events("click").map(e=>"help"),e.dom.select(".example").events("mouseup").map(e=>void 0)]).thru(withLatestFrom((e,t)=>{return{activeTool:e.activeTool===t?void 0:t}},e.state)).map(e=>Object.assign({},{type:"setActiveTool",sink:"state"},{state:e}))}};module.exports=actions; -},{"../../most-utils":827,"most":772}],852:[function(require,module,exports){ +},{"../../most-utils":828,"most":773}],853:[function(require,module,exports){ const most=require("most"),{withLatestFrom:withLatestFrom}=require("../../most-utils"),reducers={initialize:e=>{return{viewer:{rendering:{background:[1,1,1,1],meshColor:[0,.6,1,1],autoRotate:!1,autoZoom:!1},grid:{show:!1,color:[1,1,1,.1]},axes:{show:!0},camera:{position:""}}}},toggleAutoRotate:(e,t)=>{const r=Object.assign({},e.viewer.rendering,{autoRotate:t});return{viewer:Object.assign({},e.viewer,{rendering:r})}},toggleAutoZoom:(e,t)=>{const r=Object.assign({},e.viewer.rendering,{autoZoom:t});return{viewer:Object.assign({},e.viewer,{rendering:r})}},toggleGrid:(e,t)=>{const r=Object.assign({},e.viewer.grid,{show:t});return{viewer:Object.assign({},e.viewer,{grid:r})}},toggleAxes:(e,t)=>{const r=Object.assign({},e.viewer.axes,{show:t});return{viewer:Object.assign({},e.viewer,{axes:r})}},toPresetView:(e,t)=>{const r=Object.assign({},e.viewer.camera,{position:t});return{viewer:Object.assign({},e.viewer,{camera:r})}},setProjectionType:(e,t)=>{return{viewer:Object.assign({},e.viewer,{camera:{projectionType:t}})}}},actions=({sources:e})=>{const t=most.just({}).thru(withLatestFrom(reducers.initialize,e.state)).map(e=>Object.assign({},{type:"initializeViewer",sink:"state"},{state:e})),r=most.mergeArray([e.dom.select("#toggleGrid").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleGrid,e.state)).map(e=>({type:"toggleGrid",state:e,sink:"state"})),s=most.mergeArray([e.dom.select("#toggleAxes").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleAxes,e.state)).map(e=>({type:"toggleAxes",state:e,sink:"state"})),o=most.mergeArray([e.dom.select("#toggleAutoRotate").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleAutoRotate,e.state)).map(e=>({type:"toggleAutoRotate",state:e,sink:"state"})),i=most.mergeArray([e.dom.select("#toggleAutoZoom").events("click").map(e=>e.target.checked)]).thru(withLatestFrom(reducers.toggleAutoZoom,e.state)).map(e=>({type:"toggleAutoZoom",state:e,sink:"state"})),a=["toPresetView"];return{initializeViewer$:t,toggleGrid$:r,toggleAxes$:s,toggleAutoRotate$:o,toggleAutoZoom$:i,otherViewerActions$:e.actions.filter(e=>a.includes(e.type)).thru(withLatestFrom((e,t)=>reducers[t.type](e,t.data),e.state)).map(e=>({type:"otherActions",state:e,sink:"state"}))}};module.exports=actions; -},{"../../most-utils":827,"most":772}],853:[function(require,module,exports){ +},{"../../most-utils":828,"most":773}],854:[function(require,module,exports){ const html=require("nanohtml"),{createParamControls:createParamControls}=require("./parameterControls"),designParameters=(e,t,a)=>{const{parameterValues:s,parameterDefinitions:r,parameterDefaults:n}=e.design;try{const{controls:i}=createParamControls(Object.assign({},n,s),r,t.callback);return html`
@@ -3443,7 +3452,7 @@ const html=require("nanohtml"),{createParamControls:createParamControls}=require
`}catch(t){t.stack=void 0,e.status.error=t}};module.exports=designParameters; -},{"./parameterControls":860,"nanohtml":808}],854:[function(require,module,exports){ +},{"./parameterControls":861,"nanohtml":809}],855:[function(require,module,exports){ const html=require("nanohtml"),CodeMirror=require("codemirror");require("codemirror/mode/javascript/javascript"),require("codemirror/addon/hint/javascript-hint");const editorOptions={mode:"javascript",indentUnit:2,smartIndent:!1,indentWithTabs:!1,lineNumbers:!0,autofocus:!0};let editor,wrapper;const createFileTree=e=>{const r=e.getValue();return r&&r.length>0?[{ext:"js",fullPath:"/changes.js",mimetype:"javascript",name:"changes.js",source:r}]:null},createWrapper=(e,r)=>{if(!wrapper){(wrapper=html`