ixfx
Version:
Bundle of ixfx libraries
1 lines • 114 kB
JavaScript
import{n as e}from"./chunk-BKBlUVio.js";import{Ct as n}from"./src-DlHqXvlb.js";import{C as r,E as i,M as a,R as o,v as s,w as c}from"./src-CrVWx2VD.js";import{M as l,N as u,j as d,u as f}from"./src-BGZztchK.js";import{c as p}from"./src-ZyALqz2x.js";import{A as m,E as h,L as ee,_t as g,b as _,f as v,ft as y,it as te,k as b,rt as x,vt as S}from"./src-CWZAMrn_.js";import{n as ne,r as re}from"./src-Cn0v-PM5.js";import{D as ie}from"./src-BeF32bo4.js";function ae(e){return T(e)&&e.z!==null?!1:e.x===null&&e.y===null}function oe(e){return T(e)&&!Number.isNaN(e.z)?!1:Number.isNaN(e.x)||Number.isNaN(e.y)}function se(e,n=`Point`,r=``){if(e===void 0)return i(`'${n}' is undefined. Expected {x,y} got ${JSON.stringify(e)}`,r);if(e===null)return i(`'${n}' is null. Expected {x,y} got ${JSON.stringify(e)}`,r);if(typeof e!=`object`)return i(`'${n}' is type '${typeof e}'. Expected object.`,r);if(e.x===void 0)return i(`'${n}.x' is undefined. Expected {x,y} got ${JSON.stringify(e)}`,r);if(e.y===void 0)return i(`'${n}.y' is undefined. Expected {x,y} got ${JSON.stringify(e)}`,r);if(typeof e.x!=`number`)return i(`'${n}.x' must be a number. Got ${typeof e.x}`,r);if(typeof e.y!=`number`)return i(`'${n}.y' must be a number. Got ${typeof e.y}`,r);if(e.z!==void 0){if(typeof e.z!=`number`)return i(`${n}.z must be a number. Got: ${typeof e.z}`,r);if(Number.isNaN(e.z))return i(`'${n}.z' is NaN. Got: ${JSON.stringify(e)}`,r)}return e.x===null?i(`'${n}.x' is null`,r):e.y===null?i(`'${n}.y' is null`,r):Number.isNaN(e.x)?i(`'${n}.x' is NaN`,r):Number.isNaN(e.y)?i(`'${n}.y' is NaN`,r):{success:!0,value:e}}function C(e,n=`Point`,r){a(se(e,n,r))}function ce(e,n=`pt`){return C(e,n),a(r(e.x,`nonZero`,`${n}.x`),r(e.y,`nonZero`,`${n}.y`),()=>{if(e.z!==void 0)return r(e.z,`nonZero`,`${n}.z`)}),!0}function w(e){return!(e==null||e.x===void 0||e.y===void 0)}function T(e){return!(e==null||e.x===void 0||e.y===void 0||e.z===void 0)}function le(e){return T(e)&&e.z!==0?!1:e.x===0&&e.y===0}function ue(e){return T(e)&&!Number.isNaN(e.z)?!1:Number.isNaN(e.x)&&Number.isNaN(e.y)}const de=(e,n=`Dimension`)=>{if(e===void 0)throw Error(`${n} is undefined`);if(Number.isNaN(e))throw Error(`${n} is NaN`);if(e<0)throw Error(`${n} cannot be negative`)},E=(e,n=`rect`)=>{if(e===void 0)throw Error(`{$name} undefined`);D(e)&&C(e,n),de(e.width,n+`.width`),de(e.height,n+`.height`)},fe=(e,n)=>{if(E(e),D(e)&&n===void 0)return e;if(n===void 0)throw Error(`Unpositioned rect needs origin parameter`);return Object.freeze({...e,...n})},pe=(e,n=`rect`)=>{if(!D(e))throw Error(`Expected ${n} to have x,y`);E(e,n)},me=e=>e.width===0&&e.height===0,he=e=>Number.isNaN(e.width)&&Number.isNaN(e.height),D=e=>e.x!==void 0&&e.y!==void 0,O=e=>!(e===void 0||e.width===void 0||e.height===void 0),k=e=>O(e)&&D(e);function ge(e,n,r){let i=typeof n==`number`?n:n.width,a=typeof n==`number`?r:n.height;if(i===void 0)throw Error(`Param 'width' undefined`);if(a===void 0)throw Error(`Param 'height' undefined`);if(i=e(i,`width`),a=e(a,`height`),typeof n==`object`)if(D(n)){let r=e(n.x,`x`),o=e(n.y,`y`);return{...n,width:i,height:a,x:r,y:o}}else return{...n,width:i,height:a};return{width:i,height:a}}function _e(e,n,r,i){if(E(n,`a`),O(r))return k(n)?Object.freeze({...n,x:e(n.x,r.width),y:e(n.y,r.height),width:e(n.width,r.width),height:e(n.height,r.height)}):Object.freeze({...n,width:e(n.width,r.width),height:e(n.height,r.height)});if(typeof r!=`number`)throw TypeError(`Expected second parameter of type Rect or number. Got ${JSON.stringify(r)}`);if(typeof i!=`number`)throw Error(`Expected third param as height. Got ${JSON.stringify(i)}`);return k(n)?Object.freeze({...n,x:e(n.x,r),y:e(n.y,i),width:e(n.width,r),height:e(n.height,i)}):Object.freeze({...n,width:e(n.width,r),height:e(n.height,i)})}function ve(e,n,r){return D(n)?Object.freeze({...n,x:e(n.x,r),y:e(n.y,r),width:e(n.width,r),height:e(n.height,r)}):Object.freeze({...n,width:e(n.width,r),height:e(n.height,r)})}function ye(e,n,r){return Object.freeze({...n,width:e(n.width,r),height:e(n.height,r)})}const be=e=>(E(e),e.height*e.width),xe=(e,n)=>{let{x:r,y:i,width:a,height:o}=e;switch(n){case`nw`:return Object.freeze({x:r,y:i});case`n`:return Object.freeze({x:r+a/2,y:i});case`ne`:return Object.freeze({x:r+a,y:i});case`sw`:return Object.freeze({x:r,y:i+o});case`s`:return Object.freeze({x:r+a/2,y:i+o});case`se`:return Object.freeze({x:r+a,y:i+o});case`w`:return Object.freeze({x:r,y:i+o/2});case`e`:return Object.freeze({x:r+a,y:i+o/2});case`center`:return Object.freeze({x:r+a/2,y:i+o/2});default:throw Error(`Unknown direction: ${n}`)}},Se=(e,n)=>(E(e),n===void 0&&w(e)?n=e:n===void 0&&(n={x:0,y:0}),fe(e,n),Object.freeze({x:n.x+e.width/2,y:n.y+e.height/2})),Ce=e=>{let n=Se(e),r=e.width/2,i=e.height/2;return{relativeToAbsolute:e=>({...e,x:e.x*r+n.x,y:e.y*i+n.y}),absoluteToRelative:n=>({...n,x:(n.x-e.x)/r-1,y:(n.y-e.y)/i-1})}},we=(e,n)=>{let r=fe(e,n);return[{x:r.x,y:r.y},{x:r.x+r.width,y:r.y},{x:r.x+r.width,y:r.y+r.height},{x:r.x,y:r.y+r.height}]};function Te(e,n,r,i,a,o){if(T(e)&&T(n)||w(e)&&w(n))return[e,n];if(T(e)){let a={x:n,y:r,z:i};if(!T(a))throw Error(`Expected x, y & z parameters`);return[e,a]}if(w(e)){let i={x:n,y:r};if(!w(i))throw Error(`Expected x & y parameters`);return[e,i]}if(a!==void 0&&i!==void 0){let s={x:e,y:n,z:r},c={x:i,y:a,z:o};if(!T(s))throw Error(`Expected x,y,z for first point`);if(!T(c))throw Error(`Expected x,y,z for second point`);return[s,c]}let s={x:e,y:n},c={x:r,y:i};if(!w(s))throw Error(`Expected x,y for first point`);if(!w(c))throw Error(`Expected x,y for second point`);return[s,c]}function A(e,n,r){if(e===void 0)return{x:0,y:0};if(Array.isArray(e)){if(e.length===0)return Object.freeze({x:0,y:0});if(e.length===1)return Object.freeze({x:e[0],y:0});if(e.length===2)return Object.freeze({x:e[0],y:e[1]});if(e.length===3)return Object.freeze({x:e[0],y:e[1],z:e[2]});throw Error(`Expected array to be 1-3 elements in length. Got ${e.length}.`)}if(w(e))return e;if(typeof e!=`number`||typeof n!=`number`)throw TypeError(`Expected point or x,y as parameters. Got: a: ${JSON.stringify(e)} b: ${JSON.stringify(n)}`);return typeof r==`number`?Object.freeze({x:e,y:n,z:r}):Object.freeze({x:e,y:n})}function j(e,n,r,i){let a=A(n,r,i);return C(a,`b`),C(e,`a`),T(a)&&T(e)?Math.hypot(a.x-e.x,a.y-e.y,a.z-e.z):Math.hypot(a.x-e.x,a.y-e.y)}function Ee(e,n,r){let i=A(n,r);return C(i,`b`),C(e,`a`),Math.hypot(i.x-e.x,i.y-e.y)}const De=(e,n=`circle`)=>{if(M(e)&&C(e,`circle`),Number.isNaN(e.radius))throw Error(`${n}.radius is NaN`);if(e.radius<=0)throw Error(`${n}.radius must be greater than zero`)},Oe=(e,n=`circle`)=>{if(!M(e))throw Error(`Expected a positioned circle with x,y`);De(e,n)},ke=e=>!!(Number.isNaN(e.radius)||M(e)&&(Number.isNaN(e.x)||Number.isNaN(e.y))),Ae=e=>e.x!==void 0&&e.y!==void 0,je=e=>e.radius!==void 0,M=e=>je(e)&&Ae(e),Me=(e,n)=>e.radius===n.radius?M(e)&&M(n)?!(e.x!==n.x||e.y!==n.y||e.z!==n.z):!M(e)&&!M(n):!1;function N(e,n,r,i,a,o){let[s,c]=Te(e,n,r,i,a,o);C(s,`a`),C(c,`b`);let l={x:s.x+c.x,y:s.y+c.y};return(T(s)||T(c))&&(l.z=(s.z??0)+(c.z??0)),Object.freeze(l)}function P(e,n,r,i,a,o){let[s,c]=Te(e,n,r,i,a,o);C(s,`a`),C(c,`b`);let l={x:s.x-c.x,y:s.y-c.y};return(T(s)||T(c))&&(l.z=(s.z??0)-(c.z??0)),Object.freeze(l)}const Ne=(e,n)=>{let r={x:n.b.x-n.a.x,y:n.b.y-n.a.y},i={x:n.a.x-e.x,y:n.a.y-e.y},a=(r.x*i.x+r.y*i.y)*-2,o=2*(r.x*r.x+r.y*r.y),s=Math.sqrt(a*a-2*o*(i.x*i.x+i.y*i.y-e.radius*e.radius));if(Number.isNaN(s))return[];let c=(a-s)/o,l=(a+s)/o,u=[];return c<=1&&c>=0&&u.push({x:n.a.x+r.x*c,y:n.a.y+r.y*c}),l<=1&&l>=0&&u.push({x:n.a.x+r.x*l,y:n.a.y+r.y*l}),u},Pe=(e,n)=>{let r=P(n,e),i=Math.hypot(r.y,r.x);if(i>e.radius+n.radius||i<Math.abs(e.radius-n.radius)||Me(e,n))return[];let a=(e.radius*e.radius-n.radius*n.radius+i*i)/(2*i),o={x:e.x+r.x*a/i,y:e.y+r.y*a/i},s=Math.sqrt(e.radius*e.radius-a*a),c={x:-r.y*(s/i),y:r.x*(s/i)};return[N(o,c),P(o,c)]},Fe=(e,n)=>{let r=e.x-Math.max(n.x,Math.min(e.x,n.x+n.width)),i=e.y-Math.max(n.y,Math.min(e.y,n.y+n.height));return r*r+i*i<e.radius*e.radius},Ie=(e,n)=>Pe(e,n).length===2;function Le(e,n,r){E(e,`rect`);let i=0,a=0;if(typeof n==`number`){if(r===void 0)throw Error(`x and y coordinate needed`);i=n,a=r}else i=n.x,a=n.y;if(D(e)){if(i-e.x>e.width||i<e.x||a-e.y>e.height||a<e.y)return!1}else if(i>e.width||i<0||a>e.height||a<0)return!1;return!0}const Re=(e,n)=>{if(!k(e))throw Error(`a parameter should be RectPositioned`);if(M(n))return Fe(n,e);if(w(n))return Le(e,n);throw Error(`Unknown shape for b: ${JSON.stringify(n)}`)};function ze(e,n){if(pe(e,`rect`),C(n,`pt`),Le(e,n))return 0;let r=Math.max(e.x-n.x,0,n.x-e.x+e.width),i=Math.max(e.y-n.y,0,n.y-e.y+e.height);return Math.hypot(r,i)}function Be(e,n){return j(Se(e),n)}const Ve=(e,n)=>e/n;function He(e,n,r){return _e(Ve,e,n,r)}function Ue(e,n){return ve(Ve,e,n)}function We(e,n){return ye(Ve,e,n)}const Ge=(e,n=Math.round)=>(C(e,`pt`),Object.freeze({x:n(e.x),y:n(e.y)})),Ke=e=>{C(e,`pt`);let n={...e};return delete n.z,Object.freeze(n)},qe=(e,n=0)=>(C(e,`pt`),Object.freeze({...e,z:n}));function Je(e,n){if(e===void 0)return`(undefined)`;if(e===null)return`(null)`;C(e,`pt`);let r=n?e.x.toFixed(n):e.x,i=n?e.y.toFixed(n):e.y;return e.z===void 0?`(${r},${i})`:`(${r},${i},${n?e.z.toFixed(n):e.z})`}const Ye=(e,n)=>(C(e,`a`),C(n,`b`),e=Object.freeze({...e}),n=Object.freeze({...n}),Object.freeze({a:e,b:n})),Xe=(...e)=>{let n=[],r=e[0];for(let i=1;i<e.length;i++)n.push(Ye(r,e[i])),r=e[i];return n},Ze=(e,n=!1)=>{if(n){let n=[],r=new Set;for(let i of e){let e=Je(i.a),a=Je(i.b);r.has(e)||(r.add(e),n.push(i.a)),r.has(a)&&(r.add(a),n.push(i.b))}return n}else{let n=[];for(let r of e)n.push(r.a,r.b);return n}},Qe=(e,n)=>{let r=we(e,n);return Xe(...r,r[0])},$e=(e,n)=>{switch(E(e),n){case`top`:return w(e)?e.x:0;case`bottom`:return w(e)?e.x:0;case`left`:return w(e)?e.y:0;case`right`:return w(e)?e.x+e.width:e.width}},et=(e,n)=>{switch(E(e),n){case`top`:return w(e)?e.y:0;case`bottom`:return w(e)?e.y+e.height:e.height;case`left`:return w(e)?e.y:0;case`right`:return w(e)?e.y:0}},tt=(e,...n)=>{let r=n.map(e=>e.x),i=n.map(e=>e.y),a=Math.min(...r,e.x),o=Math.min(...i,e.y),s=Math.max(...r,e.x+e.width),c=Math.max(...i,e.y+e.height),l=Math.max(e.width,s-a),u=Math.max(e.height,c-o);return Object.freeze({...e,x:a,y:o,width:l,height:u})},nt=(e,n,r)=>{C(e,`origin`),de(n,`width`),de(r,`height`);let i=n/2,a=r/2;return{x:e.x-i,y:e.y-a,width:n,height:r}},rt=e=>({width:e.clientWidth,height:e.clientHeight});function it(e,n,r,i){if(r===void 0||i===void 0){if(typeof e!=`number`)throw Error(`width is not an number`);if(typeof n!=`number`)throw TypeError(`height is not an number`);return Object.freeze({width:e,height:n})}if(typeof e!=`number`)throw Error(`x is not an number`);if(typeof n!=`number`)throw Error(`y is not an number`);if(typeof r!=`number`)throw Error(`width is not an number`);if(typeof i!=`number`)throw Error(`height is not an number`);return Object.freeze({x:e,y:n,width:r,height:i})}function at(e,n,r){return de(n,`width`),de(r,`height`),C(e,`origin`),{x:e.x,y:e.y,width:n,height:r}}function ot(e,n,r,i){if(typeof e==`number`)if(typeof n==`number`){if(typeof r==`number`&&typeof i==`number`)return{x:e,y:n,width:r,height:i};if(O(r))return{x:e,y:n,width:r.width,height:r.height};throw TypeError(`If params 'a' & 'b' are numbers, expect following parameters to be x,y or Rect`)}else throw TypeError(`If parameter 'a' is a number, expect following parameters to be: y,w,h`);else if(k(e))return e;else if(O(e)){if(typeof n==`number`&&typeof r==`number`)return{width:e.width,height:e.height,x:n,y:r};if(w(n))return{width:e.width,height:e.height,x:n.x,y:n.y};throw TypeError(`If param 'a' is a Rect, expects following parameters to be x,y`)}else if(w(e)){if(typeof n==`number`&&typeof r==`number`)return{x:e.x,y:e.y,width:n,height:r};if(O(n))return{x:e.x,y:e.y,width:n.width,height:n.height};throw TypeError(`If parameter 'a' is a Point, expect following params to be: Rect or width,height`)}throw TypeError(`Expect a first parameter to be x,RectPositioned,Rect or Point`)}const st=Object.freeze({width:0,height:0}),ct=Object.freeze({x:0,y:0,width:0,height:0}),lt=Object.freeze({width:NaN,height:NaN}),ut=Object.freeze({x:NaN,y:NaN,width:NaN,height:NaN}),F=(...e)=>{if(e===void 0)throw Error(`parameter 'p' is undefined`);if(e.length<2)return!0;for(let n=1;n<e.length;n++)if(e[n].x!==e[0].x||e[n].y!==e[0].y)return!1;return!0},dt=(e,n)=>{if(e===void 0)throw Error(`a undefined`);if(n===void 0)throw Error(`b undefined`);return e.width===n.width&&e.height===n.height},ft=(e,n)=>D(e)&&D(n)?F(e,n)?e.width===n.width&&e.height===n.height:!1:!D(e)&&!D(n)?e.width===n.width&&e.height===n.height:!1;function I(e){return!(e===void 0||e.a===void 0||e.b===void 0||!w(e.a)||!w(e.b))}function pt(e){return Array.isArray(e)?!e.some(e=>!I(e)):!1}function mt(e,n=`line`){return e===void 0?{success:!1,error:`${n} undefined`}:e.a===void 0?{success:!1,error:`${n}.a undefined. Expected {a:Point, b:Point}. Got: ${JSON.stringify(e)}`}:e.b===void 0?{success:!1,error:`${n}.b undefined. Expected {a:Point, b:Point} Got: ${JSON.stringify(e)}`}:{success:!0,value:!0}}const ht=(e,n)=>{let r;if(I(e))n=e.b,r=e.a;else if(r=e,n===void 0)throw Error(`Since first parameter is not a line, two points are expected. Got a: ${JSON.stringify(r)} b: ${JSON.stringify(n)}`);return C(r,`a`),C(r,`b`),[r,n]};function L(e,n,r){if(pt(e)){let r=typeof n==`boolean`?n:!1;return e.reduce((e,n)=>L(n,r)+e,0)}if(e===void 0)throw TypeError(`Parameter 'aOrLine' is undefined`);let[i,a]=typeof n==`object`?ht(e,n):ht(e),o=a.x-i.x,s=a.y-i.y;if(!(typeof n==`boolean`?n:typeof r==`boolean`&&r)&&i.z!==void 0&&a.z!==void 0){let e=a.z-i.z;return Math.hypot(o,s,e)}else return Math.hypot(o,s)}const gt=e=>(pe(e,`rect`),Qe(e).map(e=>L(e))),_t=(e,n,r,i)=>{if(e.y>r.y)throw Error(`topLeft.y greater than bottomRight.y`);if(e.y>i.y)throw Error(`topLeft.y greater than bottomLeft.y`);let a=n.x-e.x,o=r.x-i.x,s=Math.abs(i.y-e.y),c=Math.abs(r.y-n.y);return{x:Math.min(e.x,i.x),y:Math.min(n.y,e.y),width:Math.max(a,o),height:Math.max(s,c)}},vt=(e,n)=>e*n;function yt(e,n,r){return _e(vt,e,n,r)}function bt(e,n){return ve(vt,e,n)}function xt(e,n){return ye(vt,e,n)}const St=(e,n)=>{let{x:r,y:i}=n;return r<e.x?r=e.x:r>e.x+e.width&&(r=e.x+e.width),i<e.y?i=e.y:i>e.y+e.height&&(i=e.y+e.height),Object.freeze({...n,x:r,y:i})},Ct=e=>{let n=Math.max(e.width,e.height);return e=>{if(typeof e==`number`)return e/n;if(T(e))return Object.freeze({...e,x:e.x/n,y:e.y/n,z:e.x/n});if(w(e))return Object.freeze({...e,x:e.x/n,y:e.y/n});throw Error(`Param 'value' is neither number nor Point`)}},wt=e=>(E(e),e.height+e.height+e.width+e.width),Tt=e=>(e??=Math.random,Object.freeze({x:e(),y:e(),width:e(),height:e()})),Et=(e,n={})=>{let r=n.randomSource??Math.random,i=n.margin??{x:0,y:0},a=r()*(e.width-i.x-i.x),o=r()*(e.height-i.y-i.y),s={x:a+i.x,y:o+i.y};return D(e)?N(s,e):Object.freeze(s)},Dt=(e,n)=>e-n;function Ot(e,n,r){return _e(Dt,e,n,r)}function kt(e,n,r){let i=typeof n==`number`?n:n.width,a=typeof n==`number`?r:n.height;if(a===void 0)throw Error(`Expected height as third parameter`);return{...e,width:e.width-i,height:e.height-a}}function At(e,n){let r=0,i=0;D(e)&&(r=e.x,i=e.y);let a=0,o=0;return D(n)&&(a=n.x,o=n.y),Object.freeze({...e,x:r-a,y:i-o,width:e.width-n.width,height:e.height-n.height})}const jt=(e,n)=>e+n;function Mt(e,n,r){return _e(jt,e,n,r)}function Nt(e,n){let r=0,i=0;D(e)&&(r=e.x,i=e.y);let a=0,o=0;return D(n)&&(a=n.x,o=n.y),Object.freeze({...e,x:r+a,y:i+o,width:e.width+n.width,height:e.height+n.height})}function Pt(e){if(D(e))return[e.x,e.y,e.width,e.height];if(O(e))return[e.width,e.height];throw Error(`Param 'rect' is not a rectangle. Got: ${JSON.stringify(e)}`)}var Ft=e({Empty:()=>st,EmptyPositioned:()=>ct,Placeholder:()=>lt,PlaceholderPositioned:()=>ut,applyDim:()=>ye,applyFields:()=>ge,applyMerge:()=>_e,applyScalar:()=>ve,area:()=>be,cardinal:()=>xe,center:()=>Se,centerOrigin:()=>Ce,corners:()=>we,distanceFromCenter:()=>Be,distanceFromExterior:()=>ze,divide:()=>He,divideDim:()=>We,divideScalar:()=>Ue,dividerByLargestDimension:()=>Ct,edges:()=>Qe,encompass:()=>tt,fromCenter:()=>nt,fromElement:()=>rt,fromNumbers:()=>it,fromTopLeft:()=>at,getEdgeX:()=>$e,getEdgeY:()=>et,getRectPositioned:()=>fe,getRectPositionedParameter:()=>ot,guard:()=>E,guardDim:()=>de,guardPositioned:()=>pe,intersectsPoint:()=>Le,isEmpty:()=>me,isEqual:()=>ft,isEqualSize:()=>dt,isIntersecting:()=>Re,isPlaceholder:()=>he,isPositioned:()=>D,isRect:()=>O,isRectPositioned:()=>k,lengths:()=>gt,maxFromCorners:()=>_t,multiply:()=>yt,multiplyDim:()=>xt,multiplyScalar:()=>bt,nearestInternal:()=>St,perimeter:()=>wt,random:()=>Tt,randomPoint:()=>Et,subtract:()=>Ot,subtractOffset:()=>At,subtractSize:()=>kt,sum:()=>Mt,sumOffset:()=>Nt,toArray:()=>Pt});function It(e){if(T(e))return Object.freeze({...e,x:Math.abs(e.x),y:Math.abs(e.y),z:Math.abs(e.z)});if(w(e))return Object.freeze({...e,x:Math.abs(e.x),y:Math.abs(e.y)});throw TypeError(`Param 'pt' is not a point`)}const R=Math.PI*2,z=(e,n,r)=>(C(e,`a`),n===void 0?Math.atan2(e.y,e.x):(C(n,`b`),r===void 0?Math.atan2(n.y-e.y,n.x-e.x):(C(r,`c`),Math.atan2(n.y-e.y,n.x-e.x)-Math.atan2(r.y-e.y,r.x-e.x)))),Lt=(e,n,r)=>{let i=z(e,n,r);return i<0?i+R:i},Rt=(e,n,r)=>{let i=Math.sqrt((n.x-e.x)**2+(n.y-e.y)**2),a=Math.sqrt((n.x-r.x)**2+(n.y-r.y)**2),o=Math.sqrt((r.x-e.x)**2+(r.y-e.y)**2);return Math.acos((a*a+i*i-o*o)/(2*a*i))};function zt(e,n){return C(e,`pt`),T(e)?Object.freeze({...e,x:n(e.x,`x`),y:n(e.y,`y`),z:n(e.z,`z`)}):Object.freeze({...e,x:n(e.x,`x`),y:n(e.y,`y`)})}const Bt=(e,n=`mean`)=>{let r=0,i=0,a=NaN,o=0;if(n!==`mean`)throw Error(`Unknown averaging kind: '${n}' expected: 'mean'`);for(let n of e){if(r+=n.x,i+=n.y,`z`in n&&n.z!==void 0)a+=n.z;else if(Number.isNaN(a))throw Error(`List of points should all have Z property, or none`);o++}return r/=o,i/=o,Number.isNaN(a)?{x:r,y:i}:{x:r,y:i,z:a/o}};function Vt(e,n={}){let r,i,a;switch(e){case`moving-average-light`:{let e=n.scaling??3;r=h(e),i=h(e),a=h(e);break}default:throw Error(`Unknown averaging kind '${e}'. Expected: 'moving-average-light'`)}return e=>{let n=r(e.x),o=i(e.y);if(T(e)){let r=a(e.z);return Object.freeze({x:n,y:o,z:r})}else return Object.freeze({x:n,y:o})}}function B(e,...n){if(n.length===0)throw Error(`No points provided`);let r=n[0];for(let i of n)r=(T(r)&&T(i),e(r,i));return r}const Ht=(...e)=>{let n=B((e,n)=>e.x<n.x?e:n,...e),r=B((e,n)=>e.x>n.x?e:n,...e),i=B((e,n)=>e.y<n.y?e:n,...e),a=B((e,n)=>e.y>n.y?e:n,...e);return _t({x:n.x,y:i.y},{x:r.x,y:i.y},{x:r.x,y:a.y},{x:n.x,y:a.y})},Ut=(...e)=>{let n=Ht(...e),r=B((e,n)=>e.z<n.z?e:n,...e),i=B((e,n)=>e.z>n.z?e:n,...e);return{...n,z:r.z,depth:i.z-r.z}},Wt=(...e)=>{if(!Array.isArray(e))throw Error(`Expected list of points`);let n=e.reduce((e,n)=>{if(n===void 0)return e;if(Array.isArray(n))throw TypeError(`'points' list contains an array. Did you mean: centroid(...myPoints)?`);if(!w(n))throw Error(`'points' contains something which is not a point: ${JSON.stringify(n)}`);return{x:e.x+n.x,y:e.y+n.y}},{x:0,y:0});return Object.freeze({x:n.x/e.length,y:n.y/e.length})};function Gt(e,n=0,r=1){return T(e)?Object.freeze({x:x(e.x,n,r),y:x(e.y,n,r),z:x(e.z,n,r)}):Object.freeze({x:x(e.x,n,r),y:x(e.y,n,r)})}function Kt(e,n){return e.x<n.x&&e.y<n.y?-2:e.x>n.x&&e.y>n.y?2:e.x<n.x||e.y<n.y?-1:e.x>n.x||e.y>n.y?1:e.x===n.x&&e.x===n.y?0:NaN}function qt(e,n){return e.y<n.y?-1:e.y>n.y?1:e.x<n.x?-1:e.x>n.x?1:0}function Jt(e,n){let r=qt(e,n)<=0?e:n;return{topLeft:r,bottomRight:r===e?n:e}}function Yt(e,n){return e.x===n.x?0:e.x<n.x?-1:1}function Xt(e,n){return e.y===n.y?0:e.y<n.y?-1:1}function Zt(e,n){return e.z===n.z?0:e.z<n.z?-1:1}const Qt=(...e)=>{let n=[...e].sort(Yt);if(n.length===1)return n;let r=e=>{let n=[];for(let r of e){for(;n.length>=2;){let e=n.at(-1),i=n.at(-2);if((e.x-i.x)*(r.y-i.y)>=(e.y-i.y)*(r.x-i.x))n.pop();else break}n.push(r)}return n.pop(),n},i=r(n),a=r(n.reverse());return i.length===1&&a.length===1&&F(a[0],i[0])?i:[...i,...a]},$t=(e,n)=>(Oe(e,`a`),M(n)&&Oe(n,`b`),j(e,n)),en=(e,n)=>{if(Oe(e,`a`),M(n))return Math.max(0,$t(e,n)-e.radius-n.radius);if(w(n)){let r=j(e,n);return r<e.radius?0:r}else throw Error(`Second parameter invalid type`)},tn=(e,n)=>{if(k(n))return ze(n,e);if(M(n))return en(n,e);if(w(n))return j(e,n);throw Error(`Unknown shape`)},nn=(e,n)=>{if(k(n))return ze(n,e);if(M(n))return en(n,e);if(w(n))return j(e,n);throw Error(`Unknown shape`)};function rn(e,n,r,i,a,o){let[s,c]=Te(e,n,r,i,a,o);if(C(s,`a`),C(c,`b`),c.x===0)throw TypeError(`Cannot divide by zero (b.x is 0)`);if(c.y===0)throw TypeError(`Cannot divide by zero (b.y is 0)`);let l={x:s.x/c.x,y:s.y/c.y};if(T(s)||T(c)){if(c.z===0)throw TypeError(`Cannot divide by zero (b.z is 0)`);l.z=(s.z??0)/(c.z??0)}return Object.freeze(l)}function an(e,n,r){let i=A(e,n,r);return ce(i,`divisor`),(e,n,r)=>{let a=A(e,n,r);return a.z===void 0?Object.freeze({x:a.x/i.x,y:a.y/i.y}):Object.freeze({x:a.x/i.x,y:a.y/i.y,z:a.z/(i.z??1)})}}const on=e=>[e.x,e.y],sn=(...e)=>y(e.map(e=>on(e)));function cn(e,n){return e.x*n.y-e.y*n.x}function ln(e,n,r,i){return e*i-n*r}const un={x:0,y:0},dn={x:1,y:1},fn={x:0,y:0,z:0},pn={x:1,y:1,z:1};function mn(e,n,r){if(Array.isArray(e)){if(e.length===3)return Object.freeze({x:e[0],y:e[1],z:e[2]});if(e.length===2)return Object.freeze({x:e[0],y:e[1]});throw Error(`Expected array of length two or three, got ${e.length}`)}else{if(e===void 0)throw Error(`Requires an array of [x,y] or x,y parameters at least`);if(Number.isNaN(e))throw Error(`x is NaN`);if(n===void 0)throw Error(`Param 'y' is missing`);if(Number.isNaN(n))throw Error(`y is NaN`);return r===void 0?Object.freeze({x:e,y:n}):Object.freeze({x:e,y:n,z:r})}}const hn=e=>{if(typeof e!=`string`)throw TypeError(`Param 'str' ought to be a string. Got: ${typeof e}`);let n=e.indexOf(`,`),r=Number.parseFloat(e.substring(0,n)),i=e.indexOf(`,`,n+1);return i>0?{x:r,y:Number.parseFloat(e.substring(n+1,i-n+2)),z:Number.parseFloat(e.substring(i+1))}:{x:r,y:Number.parseFloat(e.substring(n+1))}},gn=(...e)=>{let n=[];if(Array.isArray(e[0]))for(let r of e){if(r.length%2!=0)throw Error(`coords array should be even-numbered`);n.push(Object.freeze({x:r[0],y:r[1]}))}else{if(e.length%2!=0)throw Error(`Expected even number of elements: [x,y,x,y...]`);for(let r=0;r<e.length;r+=2)n.push(Object.freeze({x:e[r],y:e[r+1]}))}return n};function _n(e){return a(mt(e,`line`)),{a:e.b,b:e.a}}function V(e,n,i,o){typeof i==`boolean`&&(o=i,i=void 0),a(o?r(e,``,`amount`):c(e,`amount`));let[s,l]=ht(n,i);return vn({a:s,b:l},o)(e)}function vn(e,n=!1){a(mt(e));let i=L(e),{a:o,b:s}=e;return e=>{a(n?r(e,``,`amount`):c(e,`amount`));let l=i*(1-e);if(i===0&&l===0)return Object.freeze({...s});let u=s.x-l*(s.x-o.x)/i,d=s.y-l*(s.y-o.y)/i;return Object.freeze({...s,x:u,y:d})}}function yn(e,n,r=!0){r||(e=_n(e));let i=e.b.x-e.a.x,a=e.b.y-e.a.y,o=Math.atan2(a,i),s=n*Math.cos(o),c=n*Math.sin(o);return{x:s+e.a.x,y:c+e.a.y}}function bn(e,n,r,i=!1){return V(e,n,r,i)}const xn=(e,n,r=!1)=>vn({a:e,b:n},r),Sn=(e,n=`both`)=>{switch(n){case`both`:return T(e)?Object.freeze({...e,x:e.x*-1,y:e.y*-1,z:e.z*-1}):Object.freeze({...e,x:e.x*-1,y:e.y*-1});case`x`:return Object.freeze({...e,x:e.x*-1});case`y`:return Object.freeze({...e,y:e.y*-1});case`z`:if(T(e))return Object.freeze({...e,z:e.z*-1});throw Error(`pt parameter is missing z`);default:throw Error(`Unknown what parameter. Expecting 'both', 'x' or 'y'`)}};function Cn(e,n,r,i,a,o){let[s,c]=Te(e,n,r,i,a,o);C(s,`a`),C(c,`b`);let l={x:s.x*c.x,y:s.y*c.y};return(T(s)||T(c))&&(l.z=(s.z??0)*(c.z??0)),Object.freeze(l)}const wn=(e,n)=>T(e)?Object.freeze({...e,x:e.x*n,y:e.y*n,z:e.z*n}):Object.freeze({...e,x:e.x*n,y:e.y*n}),Tn=(e,n=1,r=0)=>{let i=j(e),a=1;return i>n?a=n/i:i<r&&(a=r/i),a===1?e:Cn(e,a,a)},En=(...e)=>B((e,n)=>e.x<=n.x?e:n,...e),Dn=(...e)=>B((e,n)=>e.x>=n.x?e:n,...e),On=(e,n)=>{if(w(e)&&(n=e.y,e=e.x),n===void 0)throw Error(`Expected y`);return Math.hypot(e,n)},kn=(e,n)=>{let r=A(e,n),i=On(r);return i===0?un:Object.freeze({...r,x:r.x/i,y:r.y/i})};function An(e,n,i,o){if(w(e)){if(typeof n==`number`&&i!==void 0)a(r(n,`positive`,`width`),r(i,`positive`,`height`));else{if(!O(n))throw Error(`Expected second parameter to be a rect`);i=n.height,n=n.width}return Object.freeze({x:e.x/n,y:e.y/i})}else{if(a(r(e,`positive`,`x`)),typeof n!=`number`)throw TypeError(`Expecting second parameter to be a number (width)`);if(typeof i!=`number`)throw TypeError(`Expecting third parameter to be a number (height)`);if(a(r(n,`positive`,`y`)),a(r(i,`positive`,`width`)),o===void 0)throw Error(`Expected height parameter`);return a(r(o,`positive`,`height`)),Object.freeze({x:e/i,y:n/o})}}const jn=(e,...n)=>Mn(...n)(e),Mn=(...e)=>n=>e.reduce((e,n)=>n(e),n),Nn=e=>!(e.distance===void 0||e.angleRadian===void 0),H=(e,n=`Point`)=>{if(e===void 0)throw Error(`'${n}' is undefined. Expected {distance, angleRadian} got ${JSON.stringify(e)}`);if(e===null)throw Error(`'${n}' is null. Expected {distance, angleRadian} got ${JSON.stringify(e)}`);if(e.angleRadian===void 0)throw Error(`'${n}.angleRadian' is undefined. Expected {distance, angleRadian} got ${JSON.stringify(e)}`);if(e.distance===void 0)throw Error(`'${n}.distance' is undefined. Expected {distance, angleRadian} got ${JSON.stringify(e)}`);if(typeof e.angleRadian!=`number`)throw TypeError(`'${n}.angleRadian' must be a number. Got ${e.angleRadian}`);if(typeof e.distance!=`number`)throw TypeError(`'${n}.distance' must be a number. Got ${e.distance}`);if(e.angleRadian===null)throw Error(`'${n}.angleRadian' is null`);if(e.distance===null)throw Error(`'${n}.distance' is null`);if(Number.isNaN(e.angleRadian))throw TypeError(`'${n}.angleRadian' is NaN`);if(Number.isNaN(e.distance))throw Error(`'${n}.distance' is NaN`)};function U(e){return Array.isArray(e)?e.map(e=>e*(Math.PI/180)):e*(Math.PI/180)}function Pn(e){return(e+Math.PI)%(2*Math.PI)}function Fn(e){return e*1.111111}function In(e,n=!0){return n?e*.9%360:e*.9}function Ln(e){return e*63.6619772368}function Rn(e){return e*.0157079633}function zn(e){return Array.isArray(e)?e.map(e=>e*180/Math.PI):e*180/Math.PI}const Bn=e=>Math.atan2(e.x,e.y);function Vn(e,n,r=!0){if(r){let r=e+n;return r>=R&&(r%=R),r}else{let r=e-n;return r<0?R+r:r}}const Hn=(e,n,r=!0)=>zn(Vn(U(e),U(n),r));function Un(e,n,r=`short`){let i=((e,n)=>(e%n+n)%n)(n-e,R),a=i===0?0:i-R;switch(r){case`ccw`:return n>e&&i===0?R:i;case`cw`:return n<e&&i===0?-R:a;case`short`:return i===0?0:Math.abs(i)<=Math.abs(a)?i:a;case`long`:return i===0?e===n?0:R:Math.abs(i)>=Math.abs(a)?i:a}}function Wn(e,n,r=`short`){return zn(Un(U(e),U(n),r))}function Gn(e){if(Kn(e))return e;if(typeof e==`number`)return{value:e,unit:`deg`};e=e.toLowerCase();let n=`deg`,r=NaN;if(e.endsWith(`grad`)?(r=Number.parseFloat(e.substring(0,e.length-4)),n=`grad`):e.endsWith(`rad`)?(r=Number.parseFloat(e.substring(0,e.length-3)),n=`rad`):e.endsWith(`turn`)?(r=Number.parseFloat(e.substring(0,e.length-4)),n=`turn`):e.endsWith(`deg`)?(r=Number.parseFloat(e.substring(0,e.length-3)),n=`deg`):r=Number.parseFloat(e),Number.isNaN(r)){if(e===`n`)return{value:90,unit:`deg`};if(e===`e`)return{value:0,unit:`deg`};if(e===`s`)return{value:270,unit:`deg`};if(e===`w`)return{value:180,unit:`deg`};if(e===`ne`)return{value:45,unit:`deg`};if(e===`se`)return{value:315,unit:`deg`};if(e===`sw`)return{value:225,unit:`deg`};if(e===`nw`)return{value:135,unit:`deg`};throw Error(`Invalid angle (bad value?): '${e}'. If using cardinals, use: 'n', 'se', etc.`)}if(n.length===0)throw Error(`Invalid angle (no unit)`);return{value:r,unit:n}}function Kn(e){return typeof e==`object`&&`unit`in e&&`value`in e?!(typeof e.unit!=`string`||typeof e.value!=`number`):!1}function qn(e){return e===void 0?!1:typeof e==`number`||typeof e==`string`?!0:typeof e==`object`&&`unit`in e&&`value`in e?!(typeof e.unit!=`string`||typeof e.value!=`number`):!1}function Jn(e){return typeof e==`number`?e:Yn(e,`rad`).value}function Yn(e,n){let r=typeof e==`object`?e:Gn(e);switch(n){case`deg`:if(r.unit===`deg`)return r;if(r.unit===`rad`)return{value:zn(r.value),unit:`deg`};if(r.unit===`grad`)return{value:In(r.value),unit:`deg`};if(r.unit===`turn`)return{value:Qn(r.value),unit:`deg`};throw Error(`Unknown unit: ${r.unit}`);case`grad`:if(r.unit===`deg`)return{value:Fn(r.value),unit:`grad`};if(r.unit===`rad`)return{value:Ln(r.value),unit:`grad`};if(r.unit===`grad`)return r;if(r.unit===`turn`)return{value:Ln(rr(r.value)),unit:`grad`};throw Error(`Unknown unit: ${r.unit}`);case`rad`:if(r.unit===`deg`)return{value:U(r.value),unit:`rad`};if(r.unit===`rad`)return r;if(r.unit===`grad`)return{value:Rn(r.value),unit:`rad`};if(r.unit===`turn`)return{value:rr(r.value),unit:`rad`};throw Error(`Unknown unit: ${r.unit}`);case`turn`:if(r.unit===`deg`)return{value:ir(r.value),unit:`turn`};if(r.unit===`rad`)return{value:ar(r.value),unit:`turn`};if(r.unit===`grad`)return{value:ar(Rn(r.value)),unit:`turn`};if(r.unit===`turn`)return r;throw Error(`Unknown unit: ${r.unit}`);default:throw Error(`Destination unit unknown ('${n}). Expects: deg, grad, rad or turn`)}}function Xn(e){let n=Jn(e);return{x:Math.cos(n),y:Math.sin(n)}}function Zn(e,n=`rad`){let r=Math.atan2(e.x,e.y);return n===`rad`?{unit:`rad`,value:r}:Yn(r,n)}function Qn(e,n=!0){return n?e*360%360:e*360}function $n(e,n=`mean`){let r=e.map(e=>Gn(e));return Zn(Bt(r.map(e=>Xn(e)),n),r[0].unit)}function er(e){return e%=R,e<0?e+R:e}function tr(e,n,r){if(n<0||n>R)throw TypeError(`Param 'start' out of range. Expecting 0..2PI. Got: ${n}`);if(r<0||r>R)throw TypeError(`Param 'end' out of range. Expecting 0..2PI. Got: ${r}`);return n>Math.PI&&r<=Math.PI?e>Math.PI?e>=n:e<=r:e>=n&&e<=r}function nr(e,n){if(e<0||e>R)throw TypeError(`Param 'a' out of range. Expecting 0..2PI. Got: ${e}`);if(n<0||n>R)throw TypeError(`Param 'b' out of range. Expecting 0..2PI. Got: ${n}`);let r=Math.min(e,n),i=Math.max(e,n);if(r<Math.PI&&i>Math.PI){let e=R-i+r,n=i-r;if(e<n)return{min:{start:i,end:r,sweep:e},max:{start:r,end:i,sweep:n}}}return{min:{start:r,end:i,sweep:i-r},max:{start:i,end:r,sweep:R-(i-r)}}}function rr(e){return e*R}function ir(e){return e/360}function ar(e){return e/R}const or=(e,n)=>Object.freeze({...e,angleRadian:e.angleRadian+n}),sr=e=>(H(e,`c`),Object.freeze({...e,angleRadian:e.angleRadian-Math.PI})),cr=(e,n)=>(H(e,`a`),H(n,`b`),e.distance===n.distance?e.angleRadian===-n.angleRadian:!1),lr=(e,n)=>(H(e,`a`),H(n,`b`),e.angleRadian===n.angleRadian),ur=(e,n)=>(H(e,`a`),H(n,`b`),e.angleRadian===-n.angleRadian),dr=(e,n)=>Object.freeze({...e,angleRadian:e.angleRadian+U(n)}),fr=(e,n)=>({a:n,b:W(e,n)}),W=(e,n,r)=>{if(Nn(e)){if(n===void 0&&(n=un),w(n))return mr(e.distance,e.angleRadian,n);throw Error(`Expecting (Coord, Point). Second parameter is not a point`)}else if(typeof e==`object`)throw TypeError(`First param is an object, but not a Coord: ${JSON.stringify(e)}`);else if(typeof e==`number`&&typeof n==`number`){if(r===void 0&&(r=un),!w(r))throw Error(`Expecting (number, number, Point). Point param wrong type`);return mr(e,n,r)}else throw TypeError(`Expecting parameters of (number, number). Got: (${typeof e}, ${typeof n}, ${typeof r}). a: ${JSON.stringify(e)}`)},pr=(e,n,r={})=>{if(typeof e!=`object`)throw TypeError(`Param 'point' wrong. Expecting a Point, got: ${typeof e}`);let i=r.fullCircle??!0;typeof n==`object`&&(e=P(e,n));let a=Math.atan2(e.y,e.x);i&&(a=er(a));let o=Math.hypot(e.x,e.y);typeof r.digits==`number`&&(a=parseFloat(a.toFixed(r.digits)),o=parseFloat(o.toFixed(r.digits)));let s={...e,angleRadian:a,distance:o};return delete s.x,delete s.y,Object.freeze(s)},mr=(e,n,r=un)=>(C(r),Object.freeze({x:r.x+e*Math.cos(n),y:r.y+e*Math.sin(n)})),hr=(e,n)=>{if(e===void 0)return`(undefined)`;if(e===null)return`(null)`;let r=zn(e.angleRadian);return`(${n?e.distance.toFixed(n):e.distance},${n?r.toFixed(n):r})`},gr=(e,n=un)=>(H(e,`v`),Object.freeze({x:n.x+e.distance*Math.cos(e.angleRadian),y:n.y+e.distance*Math.sin(e.angleRadian)}));function _r(e,n,r={}){let i=Array.isArray(e)?e:[e];if(i.length===0)return[];let a=r.orderBy??`none`,o=i.map(e=>{let i=pr(e.a,n,r),o=pr(e.b,n,r),s=nr(i.angleRadian,o.angleRadian);return(a===`angle-min`&&s.min.start!==i.angleRadian||a===`angle-max`&&s.max.start<i.angleRadian||a===`distance`&&o.distance<i.distance)&&([i,o]=[o,i]),Object.freeze({a:i,b:o,origin:n})});return Array.isArray(e)?o:o[0]}function vr(e,n=2){return`angle: ${e.a.angleRadian.toFixed(n)}-${e.b.angleRadian.toFixed(n)} dist: ${e.a.distance.toFixed(n)}-${e.b.distance.toFixed(n)}`}function yr(e,n){let r=Array.isArray(e)?e:[e];if(r.length===0)return[];let i=r.map(e=>Object.freeze({a:W(e.a,n),b:W(e.b,n)}));return Array.isArray(e)?i:i[0]}const br=e=>{if(e.distance===0)throw Error(`Cannot normalise vector of length 0`);return Object.freeze({...e,distance:1})},xr=(e,n=1,r=0)=>{let i=e.distance;return i>n&&(i=n),i<r&&(i=r),Object.freeze({...e,distance:i})},Sr=(e,n)=>(H(e,`a`),H(n,`b`),e.distance*n.distance*Math.cos(n.angleRadian-e.angleRadian)),Cr=(e,n)=>(H(e),a(r(n,``,`amt`)),Object.freeze({...e,distance:e.distance*n})),wr=(e,n)=>(H(e),a(r(n,``,`amt`)),Object.freeze({...e,distance:e.distance/n})),Tr=(e,n,r)=>tr(e.angleRadian,n.angleRadian,r.angleRadian);var Er=e({fromLine:()=>jr,isParallel:()=>Or,toCartesian:()=>Dr,toString:()=>Ar});function Dr(e,n){let r=Array.isArray(e)?e:[e];if(r.length===0)return[];let i=r.map(e=>{let r=kr(e,n);return{a:W(e.offset??0,e.angleRadian,r),b:W((e.offset??0)+e.length,e.angleRadian,r)}});return Array.isArray(e)?i:i[0]}const Or=(e,n)=>e.angleRadian===n.angleRadian,kr=(e,n)=>n===void 0?e.origin===void 0?{x:0,y:0}:e.origin:n,Ar=e=>{let n=`PolarRay(angle: ${e.angleRadian} offset: ${e.offset} len: ${e.length}`;return e.origin&&(n+=` origin: ${Je(e.origin)}`),n+=`)`,n};function jr(e,n){let r=Array.isArray(e)?e:[e];if(r.length===0)return[];let i=r.map(e=>n?{angleRadian:z(e.a,n),offset:j(e.a,n),length:j(e.b,e.a),origin:n}:{angleRadian:z(e.a,e.b),length:j(e.b,e.a),origin:e.a});return Array.isArray(e)?i:i[0]}function*Mr(e,n){let r=0;for(;;){let i=e*r++;yield{distance:n*i,angleRadian:i,step:r}}}const Nr=(e,n,r)=>{let i=n*e;return Object.freeze({distance:r*i,angleRadian:i})},Pr=(...e)=>{let n=e=>{let n=Math.min(e.a.angleRadian,e.b.angleRadian),r=Math.max(e.a.angleRadian,e.b.angleRadian);return{...e,sinBA:Math.sin(e.b.angleRadian-e.a.angleRadian),angleMin:n,angleMax:r,wraps:Math.abs(e.b.angleRadian-e.a.angleRadian)>Math.PI}},r=e.map(e=>n(e)),i=(n=1e-6)=>{let i=[];e.forEach(e=>{i.push(e.a.angleRadian,e.b.angleRadian,e.a.angleRadian-n,e.a.angleRadian+n,e.b.angleRadian-n,e.b.angleRadian+n)}),i.sort((e,n)=>e-n);let o=[];for(let e of i){let n=1/0;for(let i of r){let r=a(e,i);r<n&&(n=r)}n<1/0&&o.push({angleRadian:e,distance:n})}return o},a=(e,n)=>{if(!(n.wraps?e>=n.angleMax||e<=n.angleMin:e>=n.angleMin&&e<=n.angleMax))return NaN;let r=Math.sin(n.b.angleRadian-e),i=Math.sin(e-n.a.angleRadian),a=n.b.distance*r+n.a.distance*i;return a<=0?NaN:n.a.distance*n.b.distance*n.sinBA/a};function*o(n){for(let i=0;i<r.length;i++){let o=a(n,r[i]);Number.isNaN(o)||(yield{distance:o,line:e[i]})}}return{compute:o,visibilityPolygon:i}},Fr=(e,n)=>{let r=er(e),i=er(n.a.angleRadian),a=er(n.b.angleRadian);if(!tr(r,i,a))return 1/0;let o=n.a.distance,s=n.b.distance,c=Math.sin(a-i),l=Math.sin(a-r),u=Math.sin(r-i),d=s*l+o*u;if(Math.abs(d)<1e-10)return 1/0;let f=o*s*c/d;return f<0?1/0:f};var Ir=e({Ray:()=>Er,between:()=>Tr,clampMagnitude:()=>xr,divide:()=>wr,dotProduct:()=>Sr,fromCartesian:()=>pr,guard:()=>H,intersectionDistance:()=>Fr,intersectionDistanceCompute:()=>Pr,invert:()=>sr,isAntiParallel:()=>ur,isOpposite:()=>cr,isParallel:()=>lr,isPolarCoord:()=>Nn,lineToCartesian:()=>yr,multiply:()=>Cr,normalise:()=>br,polarLineToString:()=>vr,rotate:()=>or,rotateDegrees:()=>dr,spiral:()=>Mr,spiralRaw:()=>Nr,toCartesian:()=>W,toLine:()=>fr,toPoint:()=>gr,toPolarLine:()=>_r,toString:()=>hr}),Lr=e({clampMagnitude:()=>$r,divide:()=>ri,dotProduct:()=>Qr,fromLineCartesian:()=>Wr,fromLinePolar:()=>Gr,fromPointPolar:()=>Ur,fromRadians:()=>Vr,multiply:()=>ni,normalise:()=>qr,quadrantOffsetAngle:()=>Jr,subtract:()=>ti,sum:()=>ei,toCartesian:()=>Xr,toPolar:()=>Yr,toRadians:()=>Hr,toString:()=>Zr});const Rr=Object.freeze({x:0,y:0}),zr=Math.PI*2,Br=Math.PI;function Vr(e){return Object.freeze({x:Math.cos(e),y:Math.sin(e)})}function Hr(e){return Math.atan2(e.y,e.x)}function Ur(e,n=``,r=Rr){e=P(e,r);let i=Math.atan2(e.y,e.x);return n===`unipolar`&&i<0?i+=zr:n===`bipolar`&&(i>Br?i-=zr:i<=-Br&&(i+=zr)),Object.freeze({distance:j(e),angleRadian:i})}function Wr(e){return P(e.b,e.a)}function Gr(e){return a(mt(e,`line`)),Ur(P(e.b,e.a))}function G(e){return!!Nn(e)}function Kr(e){return!!w(e)}function qr(e){if(G(e))return br(e);if(Kr(e))return kn(e);throw Error(`Expected polar/cartesian vector. Got: ${e}`)}function Jr(e){return e.x>=0&&e.y>=0?0:e.x<0&&e.y>=0||e.x<0&&e.y<0?Br:zr}function Yr(e,n=un){if(G(e))return e;if(Kr(e))return pr(e,n);throw Error(`Expected polar/cartesian vector. Got: ${e}`)}function Xr(e){if(G(e))return gr(e);if(Kr(e))return e;throw Error(`Expected polar/cartesian vector. Got: ${e}`)}function Zr(e,n){if(G(e))return hr(e,n);if(Kr(e))return Je(e,n);throw Error(`Expected polar/cartesian vector. Got: ${e}`)}function Qr(e,n){if(G(e)&&G(n))return Sr(e,n);if(Kr(e)&&Kr(n))return sn(e,n);throw Error(`Expected two polar/Cartesian vectors.`)}function $r(e,n=1,r=0){if(G(e))return xr(e,n,r);if(Kr(e))return Tn(e,n,r);throw Error(`Expected either polar or Cartesian vector`)}function ei(e,n){let r=G(e);e=Xr(e),n=Xr(n);let i=N(e,n);return r?Yr(i):i}function ti(e,n){let r=G(e);e=Xr(e),n=Xr(n);let i=P(e,n);return r?Yr(i):i}function ni(e,n){let r=G(e);e=Xr(e),n=Xr(n);let i=Cn(e,n);return r?Yr(i):i}function ri(e,n){let r=G(e);e=Xr(e),n=Xr(n);let i=rn(e,n);return r?Yr(i):i}const ii=(e,n)=>{let r=e=>{let{a:r,b:i}=e,a={x:i.x-r.x,y:i.y-r.y},o={x:n.x-r.x,y:n.y-r.y},s=a.x*a.x+a.y*a.y,c=o.x*a.x+o.y*a.y,l=Math.min(1,Math.max(0,c/s));return c=(i.x-r.x)*(n.y-r.y)-(i.y-r.y)*(n.x-r.x),{x:r.x+a.x*l,y:r.y+a.y*l}};if(Array.isArray(e)){let i=e.map(e=>r(e)),a=i.map(e=>j(e,n));return Object.freeze(i[S(a)])}else return Object.freeze(r(e))};function ai(e,n){return a(mt(e,`line`),se(n,`point`)),L(e)===0?L(e.a,n):L(ii(e,n),n)}const oi=e=>({x:e.b.x-e.a.x,y:e.b.y-e.a.y}),si=e=>{let n=L(e),r=oi(e);return{x:r.x/n,y:r.y/n}},ci=(e,n)=>{let r=oi(e),i=si(e),a={x:e.a.x-i.y*n,y:e.a.y+i.x*n};return{a,b:{x:a.x+r.x,y:a.y+r.y}}},li=(e,n,r=0)=>{let i=V(r,e),a=si(e);return{x:i.x-a.y*n,y:i.y+a.x*n}},ui=e=>Ht(e.a,e.b),di=(e,n)=>Object.freeze({...e,a:rn(e.a,n),b:rn(e.b,n)}),fi=(e,n,r,i)=>{if(Number.isNaN(e))throw Error(`x1 is NaN`);if(Number.isNaN(r))throw Error(`x2 is NaN`);if(Number.isNaN(n))throw Error(`y1 is NaN`);if(Number.isNaN(i))throw Error(`y2 is NaN`);return Ye({x:e,y:n},{x:r,y:i})},pi=e=>{if(!Array.isArray(e))throw Error(`arr parameter is not an array`);if(e.length!==4)throw Error(`array is expected to have length four`);return fi(e[0],e[1],e[2],e[3])},mi=(e={x:.5,y:.5},n=1,r=0,i=.5)=>{let a=n*i,o=n*(1-i),s=W(a,Pn(r),e),c=W(o,r,e);return Object.freeze({a:s,b:c})},hi=(e,n)=>{let[r,i]=ht(e,n);return V(.5,r,i)},gi=(e,n)=>j(e.a,n)/L(e),_i=(e,n)=>Object.freeze({...e,a:N(e.a,n),b:N(e.b,n)}),vi=(e,n,r)=>n===void 0||n===0?e:(r===void 0&&(r=.5),typeof r==`number`&&(r=V(r,e.a,e.b)),Object.freeze({...e,a:K(e.a,n,r),b:K(e.b,n,r)})),yi=(e,n)=>F(e.a,n.a)&&F(e.b,n.b),bi=(e,n)=>Object.freeze({...e,a:Cn(e.a,n),b:Cn(e.b,n)}),xi=(e,n)=>Object.freeze({...e,a:P(e.a,n),b:P(e.b,n)});function Si(e,n){if(I(e))a(mt(e,`line`)),n=e.b,e=e.a;else if(n===void 0)throw Error(`Expect second point if first is a point`);return`${Je(e)}-${Je(n)}`}const Ci=e=>{let{a:n,b:r}=e;return Object.freeze({...e,length:()=>L(n,r),interpolate:e=>V(e,n,r),relativePosition:n=>gi(e,n),bbox:()=>ui(e),toString:()=>Si(n,r),toFlatArray:()=>Bi(n,r),toSvgString:()=>Hi(n,r),toPoints:()=>[n,r],rotate:(n,r)=>Ci(vi(e,n,r)),nearest:n=>ii(e,n),sum:n=>Ci(_i(e,n)),divide:n=>Ci(di(e,n)),multiply:n=>Ci(bi(e,n)),subtract:n=>Ci(xi(e,n)),midpoint:()=>hi(n,r),distanceToPoint:n=>ai(e,n),parallel:n=>ci(e,n),perpendicularPoint:(n,r)=>li(e,n,r),slope:()=>Pi(e),withinRange:(n,r)=>Ni(e,n,r),isEqual:n=>yi(e,n),apply:n=>Ci(Ai(e,n)),kind:`line`})},wi=(e,n)=>Ci(Ye(e,n));var Ti=e({Empty:()=>Ei,Placeholder:()=>Di,angleRadian:()=>ji,apply:()=>Ai,asPoints:()=>Vi,bbox:()=>ui,distance:()=>zi,distanceSingleLine:()=>ai,divide:()=>di,extendFromA:()=>Li,fromFlatArray:()=>pi,fromNumbers:()=>fi,fromPivot:()=>mi,fromPoints:()=>Ye,fromPointsToPath:()=>wi,getPointParameter:()=>ht,interpolate:()=>V,interpolator:()=>vn,isEmpty:()=>Oi,isEqual:()=>yi,isLine:()=>I,isPlaceholder:()=>ki,isPolyLine:()=>pt,joinPointsToLines:()=>Xe,length:()=>L,lineTest:()=>mt,midpoint:()=>hi,multiply:()=>bi,nearest:()=>ii,normaliseByRect:()=>Mi,parallel:()=>ci,perpendicularPoint:()=>li,pointAtDistance:()=>yn,pointAtX:()=>Ii,pointsOf:()=>Ri,polyLineToPoints:()=>Ze,relativePosition:()=>gi,reverse:()=>_n,rotate:()=>vi,scaleFromMidpoint:()=>Fi,slope:()=>Pi,subtract:()=>xi,sum:()=>_i,toFlatArray:()=>Bi,toPath:()=>Ci,toString:()=>Si,toSvgString:()=>Hi,withinRange:()=>Ni});const Ei=Object.freeze({a:Object.freeze({x:0,y:0}),b:Object.freeze({x:0,y:0})}),Di=Object.freeze({a:Object.freeze({x:NaN,y:NaN}),b:Object.freeze({x:NaN,y:NaN})}),Oi=e=>le(e.a)&&le(e.b),ki=e=>ue(e.a)&&ue(e.b),Ai=(e,n)=>Object.freeze({...e,a:n(e.a),b:n(e.b)}),ji=(e,n)=>{let r;if(I(e))r=e.a,n=e.b;else if(r=e,n===void 0)throw Error(`b point must be provided`);return Math.atan2(n.y-r.y,n.x-r.x)},Mi=(e,n,r)=>Object.freeze({...e,a:An(e.a,n,r),b:An(e.b,n,r)}),Ni=(e,n,r)=>zi(e,n)<=r,Pi=(e,n)=>{let r;if(I(e))r=e.a,n=e.b;else if(r=e,n===void 0)throw Error(`b parameter required`);if(n===void 0)throw TypeError(`Second point missing`);return(n.y-r.y)/(n.x-r.x)},Fi=(e,n)=>({a:V(n/2,e),b:V(.5+n/2,e)}),Ii=(e,n)=>{let r=e.a.y+(n-e.a.x)*Pi(e);return Object.freeze({x:n,y:r})},Li=(e,n)=>{let r=L(e);return Object.freeze({...e,a:e.a,b:Object.freeze({x:e.b.x+(e.b.x-e.a.x)/r*n,y:e.b.y+(e.b.y-e.a.y)/r*n})})};function*Ri(e){let{a:n,b:r}=e,i=Math.floor(n.x),a=Math.floor(n.y),o=Math.floor(r.x),s=Math.floor(r.y),c=Math.abs(o-i),l=-Math.abs(s-a),u=i<o?1:-1,d=a<s?1:-1,f=c+l;for(;yield{x:i,y:a},!(i===o&&a===s);){let e=2*f;e>=l&&(f+=l,i+=u),e<=c&&(f+=c,a+=d)}}const zi=(e,n)=>Array.isArray(e)?g(e.map(e=>ai(e,n))):ai(e,n),Bi=(e,n)=>{if(I(e))return[e.a.x,e.a.y,e.b.x,e.b.y];if(w(e)&&w(n))return[e.x,e.y,n.x,n.y];throw Error(`Expected single line parameter, or a and b points`)};function*Vi(e){for(let n of e)yield n.a,yield n.b}const Hi=(e,n)=>[`M${e.x} ${e.y} L ${n.x} ${n.y}`],Ui=(e,n)=>{let r=A(e,n),i=0,a=0,o=0,s=performance.now(),c=r;return(e,n)=>{let l=A(e,n);i+=l.x,a+=l.y,o++;let u=j(l,r),d=j(l,c),f=performance.now(),p=d/(f-s);return s=f,c=l,Object.freeze({angle:z(l,r),distanceFromStart:u,distanceFromLast:d,speed:p,centroid:Wt(l,r),average:{x:i/o,y:a/o}})}},Wi=Object.freeze({x:NaN,y:NaN}),Gi=Object.freeze({x:NaN,y:NaN,z:NaN});var Ki=class extends re{initialRelation;markRelation;lastResult;constructor(e={}){super(e)}onTrimmed(e){this.initialRelation=void 0}onReset(){super.onReset(),this.lastResult=void 0,this.initialRelation=void 0,this.markRelation=void 0}mark(){this.markRelation=Ui(this.last)}computeResults(e){let n=this.last,r=this.values.at(-2);if(this.initialRelation===void 0&&this.initial)this.initialRelation=Ui(this.initial);else if(this.initialRelation===void 0)throw Error(`Bug: No initialRelation, and this.inital is undefined?`);let i=Ui(r===void 0?n:r),a=this.initialRelation(n),o=this.markRelation===void 0?void 0:this.markRelation(n),s=r===void 0?0:L(r,n,!0)/(n.at-r.at),c={fromInitial:a,fromLast:{...i(n),speed:s},fromMark:o,values:[...this.values]};return this.lastResult=c,c}get line(){return this.values.length===1?[]:Xe(...this.values)}get vectorPolar(){return Gr(this.lineStartEnd)}get vectorCartesian(){return Wr(this.lineStartEnd)}get lineStartEnd(){let e=this.initial;return this.values.length<2||!e?Ei:{a:e,b:this.last}}distanceFromStart(e=!1){let n=this.initial;return this.values.length>=2&&n!==void 0?e?Ee(n,this.last):j(n,this.last):0}speedFromStart(e=!1){let n=this.lengthTotal(e),r=this.timespan;return Number.isNaN(r)||n===0?0:Math.abs(n)/r}speedFromLast(e=!1){let n=this.lastResult;return n?n.fromLast.speed:0}difference(){let e=this.initial;return this.values.length>=2&&e!==void 0?P(this.last,e):Wi}angleFromStart(){let e=this.initial;if(e!==void 0&&this.values.length>2)return z(e,this.last)}lengthTotal(e=!1){if(this.values.length===1)return 0;let n=this.line;return L(n,e)}lengthAverage(e=!1){return this.lengthTotal(e)/this.values.length}get x(){return this.last.x}get y(){return this.last.y}get z(){return this.last.z}},qi=class extends ne{constructor(e={}){super((n,r)=>{if(r===void 0)throw Error(`Requires start point`);let i=new Ki({...e,id:n});return i.seen(r),i})}get(e){return super.get(e)}},Ji=class extends Ki{seenEvent(e){if(`getCoalescedEvents`in e){let n=e.getCoalescedEvents().map(e=>({x:e.clientX,y:e.clientY}));return this.seen(...n)}else return this.seen({x:e.clientX,y:e.clientY})}},Yi=class extends ne{constructor(e={}){super((n,r)=>{if(r===void 0)throw Error(`Requires start point`);let i=new Ji({...e,id:n});return i.seen(r),i})}get(e){return super.get(e)}seenEvent(e){if(`getCoalescedEvents`in e){let n=e.getCoalescedEvents().map(e=>super.seen(e.pointerId.toString(),e));return Promise.all(n)}else return Promise.all([super.seen(e.pointerId.toString(),e)])}};const Xi=(e,n,r)=>{let i=P(e,n),a=P(r,n);return T(i)&&T(a)?(i.x*a.x+i.y*a.y+i.z*a.z)/(a.x*a.x+a.y*a.y+a.z*a.z):(i.x*a.x+i.y*a.y)/(a.x*a.x+a.y*a.y)},Zi=(e,n,r)=>({x:Math.cos(r)*n+e.x,y:Math.sin(r)*n+e.y});function Qi(e,n,r=!0){if(C(e,`pt`),C(n,`snap`),T(e)){if(!T(n))throw TypeError(`Param 'snap' is missing 'z' field`);return Object.freeze({x:_(e.x,n.x,r),y:_(e.y,n.y,r),z:_(e.z,n.z,r)})}return Object.freeze({x:_(e.x,n.x,r),y:_(e.y,n.y,r)})}const $i=e=>(e===void 0&&(e=Math.random),Object.freeze({x:e(),y:e()})),ea=e=>(e===void 0&&(e=Math.random),Object.freeze({x:e(),y:e(),z:e()})),ta=(e,n,r)=>{r===void 0&&(r={x:0,y:0});let i=r;for(let r of e)i=n(r,i);return i};function K(e,n,i){i===void 0&&(i={x:0,y:0}),C(i,`origin`),a(r(n,``,`amountRadian`));let o=Array.isArray(e);if(n===0)return e;o||(e=[e]);let s=e;for(let[e,n]of s.entries())C(n,`pt[${e}]`);let c=s.map(e=>pr(e,i)).map(e=>or(e,n)).map(e=>W(e,i));return o?c:c[0]}const na=(e,n)=>{let r=[[Math.cos(n),-Math.sin(n)],[Math.sin(n),Math.cos(n)]],i=[];for(let[n,a]of e.entries())i[n]=[r[0][0]*a[0]+r[0][1]*a[1],r[1][0]*a[0]+r[1][1]*a[1]];return i},ra=(e,n,r)=>{let i=A(e,n);return r??=n,r??=2,Object.freeze({...i,x:m(r,i.x),y:m(r,i.y)})},ia=(e,n,i)=>{C(e,`a`),C(n,`b`),typeof i==`number`?(a(r(i,`positive`,`maxRange`)),i={x:i,y:i}):C(i,`maxRange`);let o=Math.abs(n.x-e.x),s=Math.abs(n.y-e.y);return o<=i.x&&s<=i.y},aa=(e,n,r)=>(n===void 0&&(n={x:1,y:1}),r===void 0&&(r={x:0,y:0}),C(e,`pt`),C(n,`ptMax`),C(r,`ptMin`),Object.freeze({x:ee(e.x,r.x,n.x),y:ee(e.y,r.y,n.y)}));var oa=e({Empty:()=>un,Empty3d:()=>fn,Placeholder:()=>Wi,Placeholder3d:()=>Gi,PointTracker:()=>Ki,PointsTracker:()=>qi,Unit:()=>dn,Unit3d:()=>pn,UserPointerTracker:()=>Ji,UserPointersTracker:()=>Yi,abs:()=>It,angleRadian:()=>z,angleRadianCircle:()=>Lt,angleRadianThreePoint:()=>Rt,apply:()=>zt,average:()=>Bt,averager:()=>Vt,bbox:()=>Ht,bbox3d:()=>Ut,centroid:()=>Wt,clamp:()=>Gt,clampMagnitude:()=>Tn,compare:()=>Kt,compareByX:()=>Yt,compareByY:()=>Xt,compareByZ:()=>Zt,compareRowwise:()=>qt,convexHull:()=>Qt,cross:()=>cn,crossProductRaw:()=>ln,distance:()=>j,distance2d:()=>Ee,distanceToCenter:()=>tn,distanceToExterior:()=>nn,divide:()=>rn,divider:()=>an,dotProduct:()=>sn,findMinimum:()=>B,from:()=>mn,fromNumbers:()=>gn,fromString:()=>hn,getAsBounds:()=>Jt,getPointParameter:()=>A,getTwoPointParameters:()=>Te,guard:()=>C,guardNonZeroPoint:()=>ce,interpolate:()=>bn,interpolator:()=>xn,invert:()=>Sn,isEmpty:()=>le,isEqual:()=>F,isNaN:()=>oe,isNull:()=>ae,isPlaceholder:()=>ue,isPoint:()=>w,isPoint3d:()=>T,leftmost:()=>En,multiply:()=>Cn,multiplyScalar:()=>wn,normalise:()=>kn,normaliseByRect:()=>An,pipeline:()=>Mn,pipelineApply:()=>jn,pointTest:()=>se,progressBetween:()=>Xi,project:()=>Zi,quantiseEvery:()=>Qi,random:()=>$i,random3d:()=>ea,reduce:()=>ta,relation:()=>Ui,rightmost:()=>Dn,rotate:()=>K,rotatePointArray:()=>na,round:()=>ra,subtract:()=>P,sum:()=>N,to2d:()=>Ke,to3d:()=>qe,toArray:()=>on,toIntegerValues:()=>Ge,toString:()=>Je,withinRange:()=>ia,wrap:()=>aa}),sa=e({angularSize:()=>ga,bbox:()=>xa,distanceCenter:()=>wa,fromCircle:()=>va,fromCircleAmount:()=>ya,fromDegrees:()=>ua,getStartEnd:()=>fa,guard:()=>ma,interpolate:()=>ha,isArc:()=>ca,isEqual:()=>Ta,isPositioned:()=>la,length:()=>ba,point:()=>pa,toLine:()=>da,toPath:()=>_a,toSvg:()=>Sa});const ca=e=>e.startRadian!==void 0&&e.endRadian!==void 0&&e.clockwise!==void 0,la=e=>e.x!==void 0&&e.y!==void 0;function ua(e,n,r,i,a){let o={radius:e,startRadian:U(n),endRadian:U(r),clockwise:i};if(w(a)){C(a);let e={...o,x:a.x,y:a.y};return Object.freeze(e)}else return Object.freeze(o)}function da(e){return Ye(pa(e,e.startRadian),pa(e,e.endRadian))}function fa(e,n){return ma(e),[pa(e,e.startRadian,n),pa(e,e.endRadian,n)]}function pa(e,n,r){return r===void 0&&(r=la(e)?e:{x:0,y:0}),{x:Math.cos(n)*e.radius+r.x,y:Math.sin(n)*e.radius+r.y}}function ma(e){if(e===void 0)throw TypeError(`Arc is undefined`);if(la(e)&&C(e,`arc`),e.radius===void 0)throw TypeError(`Arc radius is undefined (${JSON.stringify(e)})`);if(typeof e.radius!=`number`)throw TypeError(`Radius must be a number`);if(Number.isNaN(e.radius))throw TypeError(`Radius is NaN`);if(e.radius<=0)throw TypeError(`Radius must be greater than zero`);if(e.startRadian===void 0||e.endRadian===void 0)throw TypeError(`Arc is missing 'startRadian' field`);if(Number.isNaN(e.endRadian)||Number.isNaN(e.startRadian))throw TypeError(`Arc endRadian is NaN`);if(e.clockwise===void 0)throw TypeError(`Arc is missing 'clockwise field`);if(e.startRadian>=e.endRadian)throw TypeError(`startRadian is expected to be les than endRadian`)}const ha=(e,n,r,i)=>{if(ma(n),!(r??!1)){if(e<0)throw Error(`Param 'amount' is under zero, and overflow is not allowed`);if(e>1)throw Error(`Param 'amount' is above 1 and overflow is not allowed`)}let a=ga(n)*e;return pa(n,Vn(n.startRadian,a,n