@fluixi/utils 1.0.0-alpha.82 → 1.0.0-alpha.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/index.cjs +2858 -1
  2. package/dist/index.mjs +2838 -1
  3. package/dist/lib/array/advanced.cjs +2227 -1
  4. package/dist/lib/array/advanced.mjs +2204 -1
  5. package/dist/lib/array/array.cjs +57 -1
  6. package/dist/lib/array/array.mjs +36 -1
  7. package/dist/lib/array/index.cjs +2344 -1
  8. package/dist/lib/array/index.mjs +2322 -1
  9. package/dist/lib/array/utils.cjs +103 -1
  10. package/dist/lib/array/utils.mjs +82 -1
  11. package/dist/lib/color/color.cjs +2190 -1
  12. package/dist/lib/color/color.mjs +2167 -1
  13. package/dist/lib/color/constants.cjs +380 -1
  14. package/dist/lib/color/constants.mjs +359 -1
  15. package/dist/lib/color/conversions.cjs +629 -1
  16. package/dist/lib/color/conversions.mjs +608 -1
  17. package/dist/lib/color/helpers.cjs +2534 -1
  18. package/dist/lib/color/helpers.mjs +2511 -1
  19. package/dist/lib/color/index.cjs +2641 -1
  20. package/dist/lib/color/index.mjs +2619 -1
  21. package/dist/lib/color/types.cjs +18 -1
  22. package/dist/lib/color/utils.cjs +962 -1
  23. package/dist/lib/color/utils.mjs +939 -1
  24. package/dist/lib/compare/comparators.cjs +171 -1
  25. package/dist/lib/compare/comparators.mjs +150 -1
  26. package/dist/lib/compare/index.cjs +172 -1
  27. package/dist/lib/compare/index.mjs +152 -1
  28. package/dist/lib/crypto/hash.cjs +83 -1
  29. package/dist/lib/crypto/hash.mjs +62 -1
  30. package/dist/lib/crypto/index.cjs +85 -1
  31. package/dist/lib/crypto/index.mjs +62 -1
  32. package/dist/lib/dom/events.cjs +40 -1
  33. package/dist/lib/dom/events.mjs +19 -1
  34. package/dist/lib/dom/index.cjs +78 -1
  35. package/dist/lib/dom/index.mjs +56 -1
  36. package/dist/lib/dom/utils.cjs +57 -1
  37. package/dist/lib/dom/utils.mjs +36 -1
  38. package/dist/lib/functions/functions.cjs +366 -1
  39. package/dist/lib/functions/functions.mjs +345 -1
  40. package/dist/lib/functions/index.cjs +369 -1
  41. package/dist/lib/functions/index.mjs +347 -1
  42. package/dist/lib/functions/types.cjs +18 -1
  43. package/dist/lib/helpers.cjs +78 -1
  44. package/dist/lib/helpers.mjs +59 -1
  45. package/dist/lib/index.cjs +2857 -1
  46. package/dist/lib/index.mjs +2836 -1
  47. package/dist/lib/maths/constants.cjs +70 -1
  48. package/dist/lib/maths/constants.mjs +50 -1
  49. package/dist/lib/maths/fn/advanced.cjs +231 -1
  50. package/dist/lib/maths/fn/advanced.mjs +208 -1
  51. package/dist/lib/maths/fn/basic.cjs +212 -1
  52. package/dist/lib/maths/fn/basic.mjs +191 -1
  53. package/dist/lib/maths/fn/complex.cjs +268 -1
  54. package/dist/lib/maths/fn/complex.mjs +247 -1
  55. package/dist/lib/maths/fn/index.cjs +877 -1
  56. package/dist/lib/maths/fn/index.mjs +855 -1
  57. package/dist/lib/maths/fn/trigo.cjs +179 -1
  58. package/dist/lib/maths/fn/trigo.mjs +156 -1
  59. package/dist/lib/maths/fn/vector.cjs +728 -1
  60. package/dist/lib/maths/fn/vector.mjs +707 -1
  61. package/dist/lib/maths/formatter.cjs +61 -1
  62. package/dist/lib/maths/formatter.mjs +40 -1
  63. package/dist/lib/maths/guards.cjs +164 -1
  64. package/dist/lib/maths/guards.mjs +144 -1
  65. package/dist/lib/maths/index.cjs +1152 -1
  66. package/dist/lib/maths/index.mjs +1130 -1
  67. package/dist/lib/maths/parser.cjs +75 -1
  68. package/dist/lib/maths/parser.mjs +54 -1
  69. package/dist/lib/maths/random.cjs +49 -1
  70. package/dist/lib/maths/random.mjs +28 -1
  71. package/dist/lib/maths/types/advanced.cjs +18 -1
  72. package/dist/lib/maths/types/basic.cjs +18 -1
  73. package/dist/lib/maths/types/index.cjs +19 -1
  74. package/dist/lib/maths/types/index.mjs +1 -0
  75. package/dist/lib/maths/types/negative.cjs +18 -1
  76. package/dist/lib/maths/types/operations.cjs +18 -1
  77. package/dist/lib/object/clone.cjs +88 -1
  78. package/dist/lib/object/clone.mjs +65 -1
  79. package/dist/lib/object/diff.cjs +573 -1
  80. package/dist/lib/object/diff.mjs +550 -1
  81. package/dist/lib/object/getter-setter.cjs +2351 -1
  82. package/dist/lib/object/getter-setter.mjs +2330 -1
  83. package/dist/lib/object/index.cjs +3956 -6
  84. package/dist/lib/object/index.mjs +3936 -6
  85. package/dist/lib/object/merge.cjs +1029 -1
  86. package/dist/lib/object/merge.mjs +1006 -1
  87. package/dist/lib/object/object.cjs +280 -1
  88. package/dist/lib/object/object.mjs +257 -1
  89. package/dist/lib/object/omit.cjs +2022 -1
  90. package/dist/lib/object/omit.mjs +1999 -1
  91. package/dist/lib/object/reconcile.cjs +126 -1
  92. package/dist/lib/object/reconcile.mjs +105 -1
  93. package/dist/lib/object/selector.cjs +303 -1
  94. package/dist/lib/object/selector.mjs +282 -1
  95. package/dist/lib/object/sort.cjs +209 -1
  96. package/dist/lib/object/sort.mjs +186 -1
  97. package/dist/lib/object/transform.cjs +2211 -1
  98. package/dist/lib/object/transform.mjs +2190 -1
  99. package/dist/lib/object/types.cjs +18 -1
  100. package/dist/lib/object/utils.cjs +326 -6
  101. package/dist/lib/object/utils.mjs +305 -6
  102. package/dist/lib/primitive/boolean/boolean.cjs +407 -1
  103. package/dist/lib/primitive/boolean/boolean.mjs +386 -1
  104. package/dist/lib/primitive/boolean/index.cjs +382 -1
  105. package/dist/lib/primitive/boolean/index.mjs +359 -1
  106. package/dist/lib/primitive/boolean/types.cjs +18 -1
  107. package/dist/lib/primitive/date/date.cjs +1126 -1
  108. package/dist/lib/primitive/date/date.mjs +1105 -1
  109. package/dist/lib/primitive/date/index.cjs +1128 -1
  110. package/dist/lib/primitive/date/index.mjs +1105 -1
  111. package/dist/lib/primitive/date/types.cjs +18 -1
  112. package/dist/lib/primitive/index.cjs +2338 -5
  113. package/dist/lib/primitive/index.mjs +2316 -5
  114. package/dist/lib/primitive/string/index.cjs +875 -5
  115. package/dist/lib/primitive/string/index.mjs +852 -5
  116. package/dist/lib/primitive/string/parser-2.cjs +543 -8
  117. package/dist/lib/primitive/string/parser-2.mjs +522 -8
  118. package/dist/lib/primitive/string/parser.cjs +236 -3
  119. package/dist/lib/primitive/string/parser.mjs +215 -3
  120. package/dist/lib/primitive/string/string.cjs +926 -5
  121. package/dist/lib/primitive/string/string.mjs +903 -5
  122. package/dist/lib/primitive/string/types.cjs +18 -1
  123. package/dist/lib/primitive/types.cjs +18 -1
  124. package/dist/lib/url/index.cjs +327 -1
  125. package/dist/lib/url/index.mjs +304 -1
  126. package/dist/lib/url/parser.cjs +325 -1
  127. package/dist/lib/url/parser.mjs +304 -1
  128. package/dist/lib/url/types.cjs +18 -1
  129. package/package.json +5 -5
@@ -1 +1,877 @@
1
- "use strict";var S=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var xe=Object.prototype.hasOwnProperty;var pe=(r,e)=>{for(var n in e)S(r,n,{get:e[n],enumerable:!0})},le=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of se(e))!xe.call(r,o)&&o!==n&&S(r,o,{get:()=>e[o],enumerable:!(t=ae(e,o))||t.enumerable});return r};var fe=r=>le(S({},"__esModule",{value:!0}),r);var Fe={};pe(Fe,{abs:()=>O,acos:()=>Jr,acosh:()=>oe,add:()=>_,addComplex:()=>Pr,addFractions:()=>xr,addVectors2D:()=>Cr,angleBetween2D:()=>Sr,argumentComplex:()=>w,asin:()=>Wr,asinh:()=>te,atan:()=>Kr,atan2:()=>vr,atanh:()=>ue,average:()=>K,cbrt:()=>cr,ceil:()=>k,clamp:()=>M,conjugateComplex:()=>Lr,cos:()=>Hr,cosh:()=>ee,cot:()=>me,crossProduct3D:()=>Mr,csc:()=>ce,degToGrad:()=>kr,degToRad:()=>Br,distance2D:()=>Rr,distance3D:()=>Fr,divide:()=>$,divideComplex:()=>_r,dotProduct2D:()=>T,dotProduct3D:()=>zr,evaluatePolynomial:()=>sr,exp:()=>ir,factorial:()=>Y,floor:()=>Q,fromPolarComplex:()=>g,gcd:()=>h,gradToDeg:()=>Qr,invLerp:()=>F,lcm:()=>H,lerp:()=>R,lerp2D:()=>Ir,ln:()=>nr,lnComplex:()=>Gr,log:()=>ur,log10:()=>tr,log2:()=>or,magnitude2D:()=>y,magnitude3D:()=>I,magnitude4D:()=>gr,magnitudeComplex:()=>V,mapRange:()=>U,max:()=>J,median:()=>rr,min:()=>W,modulo:()=>j,multiplyComplex:()=>P,multiplyFractions:()=>pr,normalize:()=>hr,normalize2D:()=>Vr,normalize3D:()=>wr,normalizeDegrees:()=>Xr,normalizeRadians:()=>Zr,nthRoot:()=>mr,percentage:()=>lr,power:()=>G,powerComplex:()=>jr,product:()=>er,radToDeg:()=>Or,range:()=>br,rotate2D:()=>Tr,round:()=>b,scaleVector2D:()=>Nr,sec:()=>ie,sign:()=>X,simplifyFraction:()=>C,sin:()=>Yr,sinh:()=>re,solveQuadratic:()=>ar,sqrt:()=>B,sqrtComplex:()=>$r,subtract:()=>L,subtractComplex:()=>qr,subtractVectors2D:()=>Er,sum:()=>v,tan:()=>Ur,tanh:()=>ne,toBase:()=>fr,toOrdinal:()=>Dr,toPolarComplex:()=>q,trunc:()=>Z,truncateDecimals:()=>dr,wrap:()=>yr});module.exports=fe(Fe);function _(r,e){return r+e}function L(r,e){return r-e}var $=(r,e,n)=>e===0?n!==void 0?n:NaN:r/e;function j(r,e){return r%e}function G(r,e){return Math.pow(r,e)}function B(r){if(r<0)throw new Error("Cannot calculate square root of negative number");return Math.sqrt(r)}function O(r){return Math.abs(r)}var b=(r,e=0,n="round")=>{if(n==="david")return De(r,e,n);if(!Number.isFinite(r))return r;if(e===0)return Math[n](r);if(e<0){let z=10**-e;return Math[n](r/z)*z}let t=10**e,o=Math.pow(2,-52),u=r*t,s=Math.sign(u)*o*Math.abs(u),l;switch(n){case"round":l=Math.round(u+s);break;case"ceil":l=Math.ceil(u-o);break;case"floor":l=Math.floor(u+o);break;case"trunc":l=u<0?Math.ceil(u):Math.floor(u);break;default:l=Math.round(u+s)}return l/t},De=(r,e=0,n="round")=>{let t=Math.abs(r),o=r<0?-1:1;if(e===0)return Math.round(t)*o;if(!Number.isFinite(t))return t*o;let u=10**e,s=t*u,l=Math.pow(2,-53),z=Math.sign(s)*l*Math.abs(s);return s+=z,Math.round(s)/u*o},k=(r,e=0)=>b(r,e,"ceil"),Q=(r,e=0)=>b(r,e,"floor"),Z=(r,e=0)=>b(r,e,"trunc"),M=(r,e,n)=>(e>n&&([e,n]=[n,e]),r<e?e:r>n?n:r);function X(r){return r>0?1:r<0?-1:0}function Y(r){if(!Number.isInteger(r)||r<0)throw new Error("Factorial is only defined for non-negative integers");if(r===0||r===1)return 1;let e=1;for(let n=2;n<=r;n++)e*=n;return e}function h(r,e){for(r=Math.abs(r),e=Math.abs(e);e!==0;){let n=e;e=r%e,r=n}return r}function H(r,e){return Math.abs(r*e)/h(r,e)}function R(r,e,n){return r+(e-r)*M(n,0,1)}var F=(r,e,n)=>M((n-r)/(e-r),0,1),U=(r,e,n,t,o)=>{let u=F(e,n,r);return R(t,o,u)};function W(...r){return Math.min(...r)}function J(...r){return Math.max(...r)}var K=(...r)=>{if(!Array.isArray(r)||r.length===0)return 0;let e=0,n=0;for(let t of r)Number.isFinite(t)&&(e+=t,n++);return n===0?0:e/n},v=(...r)=>Array.isArray(r)?r.reduce((e,n)=>e+(Number.isFinite(n)?n:0),0):0,rr=(...r)=>{if(!Array.isArray(r)||r.length===0)return 0;let e=r.filter(Number.isFinite);if(e.length===0)return 0;e.sort((t,o)=>t-o);let n=Math.floor(e.length/2);return e.length%2===0?(e[n-1]+e[n])/2:e[n]};function er(...r){return r.reduce((e,n)=>e*n,1)}function nr(r){if(r<=0)throw new Error("Natural logarithm is only defined for positive numbers");return Math.log(r)}function tr(r){if(r<=0)throw new Error("Logarithm is only defined for positive numbers");return Math.log10(r)}function or(r){if(r<=0)throw new Error("Logarithm is only defined for positive numbers");return Math.log2(r)}function ur(r,e){if(r<=0||e<=0)throw new Error("Logarithm is only defined for positive numbers and bases");return Math.log(r)/Math.log(e)}function ir(r){return Math.exp(r)}function cr(r){return Math.cbrt(r)}function mr(r,e){if(e===0)throw new Error("Cannot calculate 0th root");if(r<0&&e%2===0)throw new Error("Cannot calculate even root of negative number");let n=1/e;return Math.sign(r)*Math.pow(Math.abs(r),n)}function ar(r,e,n){if(r===0)return e===0?[]:[-n/e];let t=e*e-4*r*n;if(t<0)return[];if(t===0)return[-e/(2*r)];{let o=Math.sqrt(t);return[(-e-o)/(2*r),(-e+o)/(2*r)]}}function sr(r,e){let n=0;for(let t=0;t<r.length;t++)n=n*e+r[t];return n}function C(r){let e=h(r.numerator,r.denominator);return{numerator:r.numerator/e,denominator:r.denominator/e}}function xr(r,e){let n=r.numerator*e.denominator+e.numerator*r.denominator,t=r.denominator*e.denominator;return C({numerator:n,denominator:t})}function pr(r,e){let n=r.numerator*e.numerator,t=r.denominator*e.denominator;return C({numerator:n,denominator:t})}var lr=(r,e,n=2)=>{if(e===0)return 0;let t=r/e*100;return b(t,n)},fr=(r,e,n=1)=>{if(e<2||e>36)throw new Error("Base must be between 2 and 36");return r.toString(e).padStart(n,"0")},Dr=r=>{let e=["th","st","nd","rd"],n=r%100;return r+(e[(n-20)%10]||e[n]||e[0])},br=(r,e,n=1)=>{let t=[];if(n===0)return t;if(n>0)for(let o=r;o<e;o+=n)t.push(o);else for(let o=r;o>e;o+=n)t.push(o);return t},dr=(r,e)=>{if(!Number.isFinite(r))return r;let n=10**e;return Math.trunc(r*n)/n},hr=(r,e,n)=>e===n?0:(r-e)/(n-e),yr=(r,e,n)=>{let t=n-e;return((r-e)%t+t)%t+e};function m(r,e){if(typeof r!="number"||!Number.isFinite(r))throw new Error(`${e} must be a finite number, got ${r}`)}function p(r){return Math.abs(r)<1e-9}function i(r,e="Vector2D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);m(r.x,`${e}.x`),m(r.y,`${e}.y`)}function f(r,e="Vector3D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);m(r.x,`${e}.x`),m(r.y,`${e}.y`),m(r.z,`${e}.z`)}function be(r,e="Vector4D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);m(r.x,`${e}.x`),m(r.y,`${e}.y`),m(r.z,`${e}.z`),m(r.w,`${e}.w`)}function y(r){i(r);let e=Math.sqrt(r.x*r.x+r.y*r.y);return p(e)?0:e}function I(r){f(r);let e=Math.sqrt(r.x*r.x+r.y*r.y+r.z*r.z);return p(e)?0:e}function gr(r){be(r);let e=Math.sqrt(r.x*r.x+r.y*r.y+r.z*r.z+r.w*r.w);return p(e)?0:e}function Vr(r){i(r);let e=y(r);if(p(e))throw new Error("Cannot normalize zero or near-zero vector");return{x:r.x/e,y:r.y/e}}function wr(r){f(r);let e=I(r);if(p(e))throw new Error("Cannot normalize zero or near-zero vector");return{x:r.x/e,y:r.y/e,z:r.z/e}}function T(r,e){return i(r,"First vector"),i(e,"Second vector"),r.x*e.x+r.y*e.y}function zr(r,e){return f(r,"First vector"),f(e,"Second vector"),r.x*e.x+r.y*e.y+r.z*e.z}function Mr(r,e){return f(r,"First vector"),f(e,"Second vector"),{x:r.y*e.z-r.z*e.y,y:r.z*e.x-r.x*e.z,z:r.x*e.y-r.y*e.x}}function Cr(r,e){return i(r,"First vector"),i(e,"Second vector"),{x:r.x+e.x,y:r.y+e.y}}function Er(r,e){return i(r,"First vector"),i(e,"Second vector"),{x:r.x-e.x,y:r.y-e.y}}function Nr(r,e){return i(r),m(e,"scalar"),{x:r.x*e,y:r.y*e}}function Sr(r,e){i(r,"First vector"),i(e,"Second vector");let n=T(r,e),t=y(r),o=y(e);if(p(t)||p(o))throw new Error("Cannot calculate angle with zero or near-zero vector");let u=Math.max(-1,Math.min(1,n/(t*o)));return Math.acos(u)}function Rr(r,e){i(r,"First point"),i(e,"Second point");let n=e.x-r.x,t=e.y-r.y,o=Math.sqrt(n*n+t*t);return p(o)?0:o}function Fr(r,e){f(r,"First point"),f(e,"Second point");let n=e.x-r.x,t=e.y-r.y,o=e.z-r.z,u=Math.sqrt(n*n+t*t+o*o);return p(u)?0:u}function Ir(r,e,n){return i(r,"Start vector"),i(e,"End vector"),m(n,"t"),{x:r.x+(e.x-r.x)*n,y:r.y+(e.y-r.y)*n}}function Tr(r,e){i(r),m(e,"angle");let n=Math.cos(e),t=Math.sin(e);return{x:r.x*n-r.y*t,y:r.x*t+r.y*n}}var A=2*Math.PI;function a(r){return Math.abs(r)<1e-10}function Ar(r,e){return Math.abs(r-e)<1e-10}function D(r){return{real:a(r.real)?0:r.real,imag:a(r.imag)?0:r.imag}}function d(r,e){if(typeof r!="number"||!Number.isFinite(r))throw new Error(`${e} must be a finite number, got ${r}`)}function c(r,e="Complex number"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);d(r.real,`${e}.real`),d(r.imag,`${e}.imag`)}function E(r,e=0){return d(r,"real"),d(e,"imag"),D({real:r,imag:e})}function Pr(r,e){return c(r,"First complex number"),c(e,"Second complex number"),D({real:r.real+e.real,imag:r.imag+e.imag})}function qr(r,e){return c(r,"First complex number"),c(e,"Second complex number"),D({real:r.real-e.real,imag:r.imag-e.imag})}function P(r,e){return c(r,"First complex number"),c(e,"Second complex number"),D({real:r.real*e.real-r.imag*e.imag,imag:r.real*e.imag+r.imag*e.real})}function _r(r,e){c(r,"Numerator complex number"),c(e,"Denominator complex number");let n=e.real*e.real+e.imag*e.imag;if(a(n))throw new Error("Cannot divide by zero or near-zero complex number");return D({real:(r.real*e.real+r.imag*e.imag)/n,imag:(r.imag*e.real-r.real*e.imag)/n})}function V(r){c(r);let e=Math.sqrt(r.real*r.real+r.imag*r.imag);return a(e)?0:e}function Lr(r){return c(r),D({real:r.real,imag:-r.imag})}function w(r){return c(r),a(r.real)&&a(r.imag)?0:Math.atan2(r.imag,r.real)}function q(r){return c(r),{magnitude:V(r),angle:w(r)}}function g(r,e){if(d(r,"magnitude"),d(e,"angle"),r<-1e-10)throw new Error("Magnitude must be non-negative");let n=e%A;n>Math.PI&&(n-=A),n<=-Math.PI&&(n+=A);let t=Math.max(0,r);return D({real:t*Math.cos(n),imag:t*Math.sin(n)})}function $r(r){if(c(r),a(r.real)&&a(r.imag)){let s=E(0,0);return[s,s]}let e=V(r),n=w(r),t=Math.sqrt(e),o=n/2,u=o+Math.PI;return[g(t,o),g(t,u)]}function jr(r,e){if(c(r),d(e,"exponent"),a(e))return E(1,0);if(Ar(e,1))return E(r.real,r.imag);if(Ar(e,2))return P(r,r);if(a(r.real)&&a(r.imag)){if(e>0)return E(0,0);if(e<0)throw new Error("Cannot raise zero to a negative power")}let n=q(r),t=Math.pow(n.magnitude,e),o=t<-1e-10?Math.abs(t):Math.max(0,t),u=n.angle*e;return g(o,u)}function Gr(r){c(r);let e=V(r);if(a(e))throw new Error("Cannot take logarithm of zero or near-zero complex number");let n=w(r);return D({real:Math.log(e),imag:n})}var N=3.141592653589793,de=2.718281828459045,he=1.618033988749894,ye=1.4142135623730951,ge=.7071067811865476,Ve=.6931471805599453,we=2.302585092994046,ze=1.4426950408889634,Me=.4342944819032518,Ce=360,Ee=2*N,Ne=400,Se=180/N,Re=N/180,x={PI:N,E:de,PHI:he,SQRT2:ye,SQRT1_2:ge,LN2:Ve,LN10:we,LOG2E:ze,LOG10E:Me,DEGREES_IN_CIRCLE:Ce,RADIANS_IN_CIRCLE:Ee,GRADIANS_IN_CIRCLE:Ne,DEGREES_PER_RADIAN:Se,RADIANS_PER_DEGREE:Re};function Br(r){return r*x.RADIANS_PER_DEGREE}function Or(r){return r*x.DEGREES_PER_RADIAN}function kr(r){return r*(x.GRADIANS_IN_CIRCLE/x.DEGREES_IN_CIRCLE)}function Qr(r){return r*(x.DEGREES_IN_CIRCLE/x.GRADIANS_IN_CIRCLE)}function Zr(r){let e=x.RADIANS_IN_CIRCLE,n=r%e;return n<0&&(n+=e),n}function Xr(r){let e=r%x.DEGREES_IN_CIRCLE;return e<0&&(e+=x.DEGREES_IN_CIRCLE),e}function Yr(r){return Math.sin(r)}function Hr(r){return Math.cos(r)}function Ur(r){let e=Math.cos(r);if(Math.abs(e)<1e-10)throw new Error("Tangent undefined for this angle (cosine is zero)");return Math.tan(r)}function Wr(r){if(r<-1||r>1)throw new Error("Arcsine is only defined for values between -1 and 1");return Math.asin(r)}function Jr(r){if(r<-1||r>1)throw new Error("Arccosine is only defined for values between -1 and 1");return Math.acos(r)}function Kr(r){return Math.atan(r)}function vr(r,e){return Math.atan2(r,e)}function re(r){return Math.sinh(r)}function ee(r){return Math.cosh(r)}function ne(r){return Math.tanh(r)}function te(r){return Math.asinh(r)}function oe(r){if(r<1)throw new Error("Inverse hyperbolic cosine is only defined for x >= 1");return Math.acosh(r)}function ue(r){if(Math.abs(r)>=1)throw new Error("Inverse hyperbolic tangent is only defined for |x| < 1");return Math.atanh(r)}function ie(r){let e=Math.cos(r);if(Math.abs(e)<1e-10)throw new Error("Secant undefined for this angle (cosine is zero)");return 1/e}function ce(r){let e=Math.sin(r);if(Math.abs(e)<1e-10)throw new Error("Cosecant undefined for this angle (sine is zero)");return 1/e}function me(r){let e=Math.tan(r);if(Math.abs(e)<1e-10)throw new Error("Cotangent undefined for this angle (tangent is zero)");return 1/e}
1
+ /*! @fluixi/utils v1.0.0-alpha.84 | (c) 2026 Ibrahima Touré and Fluixi contributors | MIT */
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/lib/maths/fn/index.ts
22
+ var index_exports = {};
23
+ __export(index_exports, {
24
+ abs: () => abs,
25
+ acos: () => acos,
26
+ acosh: () => acosh,
27
+ add: () => add,
28
+ addComplex: () => addComplex,
29
+ addFractions: () => addFractions,
30
+ addVectors2D: () => addVectors2D,
31
+ angleBetween2D: () => angleBetween2D,
32
+ argumentComplex: () => argumentComplex,
33
+ asin: () => asin,
34
+ asinh: () => asinh,
35
+ atan: () => atan,
36
+ atan2: () => atan2,
37
+ atanh: () => atanh,
38
+ average: () => average,
39
+ cbrt: () => cbrt,
40
+ ceil: () => ceil,
41
+ clamp: () => clamp,
42
+ conjugateComplex: () => conjugateComplex,
43
+ cos: () => cos,
44
+ cosh: () => cosh,
45
+ cot: () => cot,
46
+ crossProduct3D: () => crossProduct3D,
47
+ csc: () => csc,
48
+ degToGrad: () => degToGrad,
49
+ degToRad: () => degToRad,
50
+ distance2D: () => distance2D,
51
+ distance3D: () => distance3D,
52
+ divide: () => divide,
53
+ divideComplex: () => divideComplex,
54
+ dotProduct2D: () => dotProduct2D,
55
+ dotProduct3D: () => dotProduct3D,
56
+ evaluatePolynomial: () => evaluatePolynomial,
57
+ exp: () => exp,
58
+ factorial: () => factorial,
59
+ floor: () => floor,
60
+ fromPolarComplex: () => fromPolarComplex,
61
+ gcd: () => gcd,
62
+ gradToDeg: () => gradToDeg,
63
+ invLerp: () => invLerp,
64
+ lcm: () => lcm,
65
+ lerp: () => lerp,
66
+ lerp2D: () => lerp2D,
67
+ ln: () => ln,
68
+ lnComplex: () => lnComplex,
69
+ log: () => log,
70
+ log10: () => log10,
71
+ log2: () => log2,
72
+ magnitude2D: () => magnitude2D,
73
+ magnitude3D: () => magnitude3D,
74
+ magnitude4D: () => magnitude4D,
75
+ magnitudeComplex: () => magnitudeComplex,
76
+ mapRange: () => mapRange,
77
+ max: () => max,
78
+ median: () => median,
79
+ min: () => min,
80
+ modulo: () => modulo,
81
+ multiplyComplex: () => multiplyComplex,
82
+ multiplyFractions: () => multiplyFractions,
83
+ normalize: () => normalize,
84
+ normalize2D: () => normalize2D,
85
+ normalize3D: () => normalize3D,
86
+ normalizeDegrees: () => normalizeDegrees,
87
+ normalizeRadians: () => normalizeRadians,
88
+ nthRoot: () => nthRoot,
89
+ percentage: () => percentage,
90
+ power: () => power,
91
+ powerComplex: () => powerComplex,
92
+ product: () => product,
93
+ radToDeg: () => radToDeg,
94
+ range: () => range,
95
+ rotate2D: () => rotate2D,
96
+ round: () => round,
97
+ scaleVector2D: () => scaleVector2D,
98
+ sec: () => sec,
99
+ sign: () => sign,
100
+ simplifyFraction: () => simplifyFraction,
101
+ sin: () => sin,
102
+ sinh: () => sinh,
103
+ solveQuadratic: () => solveQuadratic,
104
+ sqrt: () => sqrt,
105
+ sqrtComplex: () => sqrtComplex,
106
+ subtract: () => subtract,
107
+ subtractComplex: () => subtractComplex,
108
+ subtractVectors2D: () => subtractVectors2D,
109
+ sum: () => sum,
110
+ tan: () => tan,
111
+ tanh: () => tanh,
112
+ toBase: () => toBase,
113
+ toOrdinal: () => toOrdinal,
114
+ toPolarComplex: () => toPolarComplex,
115
+ trunc: () => trunc,
116
+ truncateDecimals: () => truncateDecimals,
117
+ wrap: () => wrap
118
+ });
119
+ module.exports = __toCommonJS(index_exports);
120
+
121
+ // src/lib/maths/fn/basic.ts
122
+ function add(a, b) {
123
+ return a + b;
124
+ }
125
+ function subtract(a, b) {
126
+ return a - b;
127
+ }
128
+ var divide = (dividend, divisor, fallback) => {
129
+ if (divisor === 0) {
130
+ return fallback !== void 0 ? fallback : NaN;
131
+ }
132
+ return dividend / divisor;
133
+ };
134
+ function modulo(a, b) {
135
+ return a % b;
136
+ }
137
+ function power(base, exponent) {
138
+ return Math.pow(base, exponent);
139
+ }
140
+ function sqrt(value) {
141
+ if (value < 0) {
142
+ throw new Error("Cannot calculate square root of negative number");
143
+ }
144
+ return Math.sqrt(value);
145
+ }
146
+ function abs(value) {
147
+ return Math.abs(value);
148
+ }
149
+ var round = (value, precision = 0, mode = "round") => {
150
+ if (mode === "david") return roundUsingDavidGay(value, precision, mode);
151
+ if (!Number.isFinite(value)) return value;
152
+ if (precision === 0) return Math[mode](value);
153
+ if (precision < 0) {
154
+ const factor2 = 10 ** -precision;
155
+ return Math[mode](value / factor2) * factor2;
156
+ }
157
+ const factor = 10 ** precision;
158
+ const epsilon = Math.pow(2, -52);
159
+ const adjusted = value * factor;
160
+ const correction = Math.sign(adjusted) * epsilon * Math.abs(adjusted);
161
+ let rounded;
162
+ switch (mode) {
163
+ case "round":
164
+ rounded = Math.round(adjusted + correction);
165
+ break;
166
+ case "ceil":
167
+ rounded = Math.ceil(adjusted - epsilon);
168
+ break;
169
+ case "floor":
170
+ rounded = Math.floor(adjusted + epsilon);
171
+ break;
172
+ case "trunc":
173
+ rounded = adjusted < 0 ? Math.ceil(adjusted) : Math.floor(adjusted);
174
+ break;
175
+ default:
176
+ rounded = Math.round(adjusted + correction);
177
+ }
178
+ return rounded / factor;
179
+ };
180
+ var roundUsingDavidGay = (_value, precision = 0, mode = "round") => {
181
+ let value = Math.abs(_value);
182
+ const multiplicator = _value < 0 ? -1 : 1;
183
+ if (precision === 0) {
184
+ return Math.round(value) * multiplicator;
185
+ }
186
+ if (!Number.isFinite(value)) {
187
+ return value * multiplicator;
188
+ }
189
+ const factor = 10 ** precision;
190
+ let shifted = value * factor;
191
+ const epsilon = Math.pow(2, -53);
192
+ const correction = Math.sign(shifted) * epsilon * Math.abs(shifted);
193
+ shifted += correction;
194
+ const rounded = Math.round(shifted);
195
+ return rounded / factor * multiplicator;
196
+ };
197
+ var ceil = (value, precision = 0) => {
198
+ return round(value, precision, "ceil");
199
+ };
200
+ var floor = (value, precision = 0) => {
201
+ return round(value, precision, "floor");
202
+ };
203
+ var trunc = (value, precision = 0) => {
204
+ return round(value, precision, "trunc");
205
+ };
206
+ var clamp = (value, min2, max2) => {
207
+ if (min2 > max2) [min2, max2] = [max2, min2];
208
+ return value < min2 ? min2 : value > max2 ? max2 : value;
209
+ };
210
+ function sign(value) {
211
+ if (value > 0) return 1;
212
+ if (value < 0) return -1;
213
+ return 0;
214
+ }
215
+ function factorial(n) {
216
+ if (!Number.isInteger(n) || n < 0) {
217
+ throw new Error("Factorial is only defined for non-negative integers");
218
+ }
219
+ if (n === 0 || n === 1) return 1;
220
+ let result = 1;
221
+ for (let i = 2; i <= n; i++) {
222
+ result *= i;
223
+ }
224
+ return result;
225
+ }
226
+ function gcd(a, b) {
227
+ a = Math.abs(a);
228
+ b = Math.abs(b);
229
+ while (b !== 0) {
230
+ const temp = b;
231
+ b = a % b;
232
+ a = temp;
233
+ }
234
+ return a;
235
+ }
236
+ function lcm(a, b) {
237
+ return Math.abs(a * b) / gcd(a, b);
238
+ }
239
+ function lerp(start, end, t) {
240
+ return start + (end - start) * clamp(t, 0, 1);
241
+ }
242
+ var invLerp = (start, end, value) => {
243
+ return clamp((value - start) / (end - start), 0, 1);
244
+ };
245
+ var mapRange = (value, inMin, inMax, outMin, outMax) => {
246
+ const t = invLerp(inMin, inMax, value);
247
+ return lerp(outMin, outMax, t);
248
+ };
249
+ function min(...values) {
250
+ return Math.min(...values);
251
+ }
252
+ function max(...values) {
253
+ return Math.max(...values);
254
+ }
255
+ var average = (...numbers) => {
256
+ if (!Array.isArray(numbers) || numbers.length === 0) return 0;
257
+ let total = 0;
258
+ let count = 0;
259
+ for (const num of numbers) {
260
+ if (Number.isFinite(num)) {
261
+ total += num;
262
+ count++;
263
+ }
264
+ }
265
+ return count === 0 ? 0 : total / count;
266
+ };
267
+ var sum = (...numbers) => {
268
+ if (!Array.isArray(numbers)) return 0;
269
+ return numbers.reduce(
270
+ (acc, val) => acc + (Number.isFinite(val) ? val : 0),
271
+ 0
272
+ );
273
+ };
274
+ var median = (...numbers) => {
275
+ if (!Array.isArray(numbers) || numbers.length === 0) return 0;
276
+ const validNumbers = numbers.filter(Number.isFinite);
277
+ if (validNumbers.length === 0) return 0;
278
+ validNumbers.sort((a, b) => a - b);
279
+ const mid = Math.floor(validNumbers.length / 2);
280
+ return validNumbers.length % 2 === 0 ? (validNumbers[mid - 1] + validNumbers[mid]) / 2 : validNumbers[mid];
281
+ };
282
+ function product(...values) {
283
+ return values.reduce((prod, val) => prod * val, 1);
284
+ }
285
+
286
+ // src/lib/maths/fn/advanced.ts
287
+ function ln(value) {
288
+ if (value <= 0) {
289
+ throw new Error("Natural logarithm is only defined for positive numbers");
290
+ }
291
+ return Math.log(value);
292
+ }
293
+ function log10(value) {
294
+ if (value <= 0) {
295
+ throw new Error("Logarithm is only defined for positive numbers");
296
+ }
297
+ return Math.log10(value);
298
+ }
299
+ function log2(value) {
300
+ if (value <= 0) {
301
+ throw new Error("Logarithm is only defined for positive numbers");
302
+ }
303
+ return Math.log2(value);
304
+ }
305
+ function log(value, base) {
306
+ if (value <= 0 || base <= 0) {
307
+ throw new Error("Logarithm is only defined for positive numbers and bases");
308
+ }
309
+ return Math.log(value) / Math.log(base);
310
+ }
311
+ function exp(x) {
312
+ return Math.exp(x);
313
+ }
314
+ function cbrt(value) {
315
+ return Math.cbrt(value);
316
+ }
317
+ function nthRoot(value, n) {
318
+ if (n === 0) {
319
+ throw new Error("Cannot calculate 0th root");
320
+ }
321
+ if (value < 0 && n % 2 === 0) {
322
+ throw new Error("Cannot calculate even root of negative number");
323
+ }
324
+ const exponent = 1 / n;
325
+ return Math.sign(value) * Math.pow(Math.abs(value), exponent);
326
+ }
327
+ function solveQuadratic(a, b, c) {
328
+ if (a === 0) {
329
+ if (b === 0) return [];
330
+ return [-c / b];
331
+ }
332
+ const discriminant = b * b - 4 * a * c;
333
+ if (discriminant < 0) {
334
+ return [];
335
+ } else if (discriminant === 0) {
336
+ return [-b / (2 * a)];
337
+ } else {
338
+ const sqrtDiscriminant = Math.sqrt(discriminant);
339
+ return [
340
+ (-b - sqrtDiscriminant) / (2 * a),
341
+ (-b + sqrtDiscriminant) / (2 * a)
342
+ ];
343
+ }
344
+ }
345
+ function evaluatePolynomial(coefficients, x) {
346
+ let result = 0;
347
+ for (let i = 0; i < coefficients.length; i++) {
348
+ result = result * x + coefficients[i];
349
+ }
350
+ return result;
351
+ }
352
+ function simplifyFraction(fraction) {
353
+ const divisor = gcd(fraction.numerator, fraction.denominator);
354
+ return {
355
+ numerator: fraction.numerator / divisor,
356
+ denominator: fraction.denominator / divisor
357
+ };
358
+ }
359
+ function addFractions(a, b) {
360
+ const numerator = a.numerator * b.denominator + b.numerator * a.denominator;
361
+ const denominator = a.denominator * b.denominator;
362
+ return simplifyFraction({ numerator, denominator });
363
+ }
364
+ function multiplyFractions(a, b) {
365
+ const numerator = a.numerator * b.numerator;
366
+ const denominator = a.denominator * b.denominator;
367
+ return simplifyFraction({ numerator, denominator });
368
+ }
369
+ var percentage = (value, total, precision = 2) => {
370
+ if (total === 0) return 0;
371
+ const percent = value / total * 100;
372
+ return round(percent, precision);
373
+ };
374
+ var toBase = (number, base, minLength = 1) => {
375
+ if (base < 2 || base > 36) {
376
+ throw new Error("Base must be between 2 and 36");
377
+ }
378
+ const result = number.toString(base);
379
+ return result.padStart(minLength, "0");
380
+ };
381
+ var toOrdinal = (n) => {
382
+ const suffix = ["th", "st", "nd", "rd"];
383
+ const v = n % 100;
384
+ return n + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
385
+ };
386
+ var range = (start, end, step = 1) => {
387
+ const result = [];
388
+ if (step === 0) return result;
389
+ if (step > 0) {
390
+ for (let i = start; i < end; i += step) {
391
+ result.push(i);
392
+ }
393
+ } else {
394
+ for (let i = start; i > end; i += step) {
395
+ result.push(i);
396
+ }
397
+ }
398
+ return result;
399
+ };
400
+ var truncateDecimals = (value, decimalPlaces) => {
401
+ if (!Number.isFinite(value)) return value;
402
+ const factor = 10 ** decimalPlaces;
403
+ return Math.trunc(value * factor) / factor;
404
+ };
405
+ var normalize = (value, min2, max2) => {
406
+ if (min2 === max2) return 0;
407
+ return (value - min2) / (max2 - min2);
408
+ };
409
+ var wrap = (value, min2, max2) => {
410
+ const range2 = max2 - min2;
411
+ return ((value - min2) % range2 + range2) % range2 + min2;
412
+ };
413
+
414
+ // src/lib/maths/fn/vector.ts
415
+ function validateNumber(value, name) {
416
+ if (typeof value !== "number" || !Number.isFinite(value)) {
417
+ throw new Error(`${name} must be a finite number, got ${value}`);
418
+ }
419
+ }
420
+ function isApproximatelyZero(value) {
421
+ return Math.abs(value) < 1e-9;
422
+ }
423
+ function validateVector2D(vector, name = "Vector2D") {
424
+ if (!vector || typeof vector !== "object") {
425
+ throw new Error(`${name} must be an object`);
426
+ }
427
+ validateNumber(vector.x, `${name}.x`);
428
+ validateNumber(vector.y, `${name}.y`);
429
+ }
430
+ function validateVector3D(vector, name = "Vector3D") {
431
+ if (!vector || typeof vector !== "object") {
432
+ throw new Error(`${name} must be an object`);
433
+ }
434
+ validateNumber(vector.x, `${name}.x`);
435
+ validateNumber(vector.y, `${name}.y`);
436
+ validateNumber(vector.z, `${name}.z`);
437
+ }
438
+ function validateVector4D(vector, name = "Vector4D") {
439
+ if (!vector || typeof vector !== "object") {
440
+ throw new Error(`${name} must be an object`);
441
+ }
442
+ validateNumber(vector.x, `${name}.x`);
443
+ validateNumber(vector.y, `${name}.y`);
444
+ validateNumber(vector.z, `${name}.z`);
445
+ validateNumber(vector.w, `${name}.w`);
446
+ }
447
+ function magnitude2D(vector) {
448
+ validateVector2D(vector);
449
+ const magnitude = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
450
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
451
+ }
452
+ function magnitude3D(vector) {
453
+ validateVector3D(vector);
454
+ const magnitude = Math.sqrt(
455
+ vector.x * vector.x + vector.y * vector.y + vector.z * vector.z
456
+ );
457
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
458
+ }
459
+ function magnitude4D(vector) {
460
+ validateVector4D(vector);
461
+ const magnitude = Math.sqrt(
462
+ vector.x * vector.x + vector.y * vector.y + vector.z * vector.z + vector.w * vector.w
463
+ );
464
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
465
+ }
466
+ function normalize2D(vector) {
467
+ validateVector2D(vector);
468
+ const mag = magnitude2D(vector);
469
+ if (isApproximatelyZero(mag)) {
470
+ throw new Error("Cannot normalize zero or near-zero vector");
471
+ }
472
+ return {
473
+ x: vector.x / mag,
474
+ y: vector.y / mag
475
+ };
476
+ }
477
+ function normalize3D(vector) {
478
+ validateVector3D(vector);
479
+ const mag = magnitude3D(vector);
480
+ if (isApproximatelyZero(mag)) {
481
+ throw new Error("Cannot normalize zero or near-zero vector");
482
+ }
483
+ return {
484
+ x: vector.x / mag,
485
+ y: vector.y / mag,
486
+ z: vector.z / mag
487
+ };
488
+ }
489
+ function dotProduct2D(a, b) {
490
+ validateVector2D(a, "First vector");
491
+ validateVector2D(b, "Second vector");
492
+ return a.x * b.x + a.y * b.y;
493
+ }
494
+ function dotProduct3D(a, b) {
495
+ validateVector3D(a, "First vector");
496
+ validateVector3D(b, "Second vector");
497
+ return a.x * b.x + a.y * b.y + a.z * b.z;
498
+ }
499
+ function crossProduct3D(a, b) {
500
+ validateVector3D(a, "First vector");
501
+ validateVector3D(b, "Second vector");
502
+ return {
503
+ x: a.y * b.z - a.z * b.y,
504
+ y: a.z * b.x - a.x * b.z,
505
+ z: a.x * b.y - a.y * b.x
506
+ };
507
+ }
508
+ function addVectors2D(a, b) {
509
+ validateVector2D(a, "First vector");
510
+ validateVector2D(b, "Second vector");
511
+ return {
512
+ x: a.x + b.x,
513
+ y: a.y + b.y
514
+ };
515
+ }
516
+ function subtractVectors2D(a, b) {
517
+ validateVector2D(a, "First vector");
518
+ validateVector2D(b, "Second vector");
519
+ return {
520
+ x: a.x - b.x,
521
+ y: a.y - b.y
522
+ };
523
+ }
524
+ function scaleVector2D(vector, scalar) {
525
+ validateVector2D(vector);
526
+ validateNumber(scalar, "scalar");
527
+ return {
528
+ x: vector.x * scalar,
529
+ y: vector.y * scalar
530
+ };
531
+ }
532
+ function angleBetween2D(a, b) {
533
+ validateVector2D(a, "First vector");
534
+ validateVector2D(b, "Second vector");
535
+ const dot = dotProduct2D(a, b);
536
+ const magA = magnitude2D(a);
537
+ const magB = magnitude2D(b);
538
+ if (isApproximatelyZero(magA) || isApproximatelyZero(magB)) {
539
+ throw new Error("Cannot calculate angle with zero or near-zero vector");
540
+ }
541
+ const cosTheta = Math.max(-1, Math.min(1, dot / (magA * magB)));
542
+ return Math.acos(cosTheta);
543
+ }
544
+ function distance2D(a, b) {
545
+ validateVector2D(a, "First point");
546
+ validateVector2D(b, "Second point");
547
+ const dx = b.x - a.x;
548
+ const dy = b.y - a.y;
549
+ const distance = Math.sqrt(dx * dx + dy * dy);
550
+ return isApproximatelyZero(distance) ? 0 : distance;
551
+ }
552
+ function distance3D(a, b) {
553
+ validateVector3D(a, "First point");
554
+ validateVector3D(b, "Second point");
555
+ const dx = b.x - a.x;
556
+ const dy = b.y - a.y;
557
+ const dz = b.z - a.z;
558
+ const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
559
+ return isApproximatelyZero(distance) ? 0 : distance;
560
+ }
561
+ function lerp2D(start, end, t) {
562
+ validateVector2D(start, "Start vector");
563
+ validateVector2D(end, "End vector");
564
+ validateNumber(t, "t");
565
+ return {
566
+ x: start.x + (end.x - start.x) * t,
567
+ y: start.y + (end.y - start.y) * t
568
+ };
569
+ }
570
+ function rotate2D(vector, angle) {
571
+ validateVector2D(vector);
572
+ validateNumber(angle, "angle");
573
+ const cos2 = Math.cos(angle);
574
+ const sin2 = Math.sin(angle);
575
+ return {
576
+ x: vector.x * cos2 - vector.y * sin2,
577
+ y: vector.x * sin2 + vector.y * cos2
578
+ };
579
+ }
580
+
581
+ // src/lib/maths/fn/complex.ts
582
+ var EPSILON = 1e-10;
583
+ var TWO_PI = 2 * Math.PI;
584
+ function isApproximatelyZero2(value) {
585
+ return Math.abs(value) < EPSILON;
586
+ }
587
+ function approximatelyEqual(a, b) {
588
+ return Math.abs(a - b) < EPSILON;
589
+ }
590
+ function normalizeComplex(c) {
591
+ return {
592
+ real: isApproximatelyZero2(c.real) ? 0 : c.real,
593
+ imag: isApproximatelyZero2(c.imag) ? 0 : c.imag
594
+ };
595
+ }
596
+ function validateNumber2(value, name) {
597
+ if (typeof value !== "number" || !Number.isFinite(value)) {
598
+ throw new Error(`${name} must be a finite number, got ${value}`);
599
+ }
600
+ }
601
+ function validateComplexNumber(c, name = "Complex number") {
602
+ if (!c || typeof c !== "object") {
603
+ throw new Error(`${name} must be an object`);
604
+ }
605
+ validateNumber2(c.real, `${name}.real`);
606
+ validateNumber2(c.imag, `${name}.imag`);
607
+ }
608
+ function createComplex(real, imag = 0) {
609
+ validateNumber2(real, "real");
610
+ validateNumber2(imag, "imag");
611
+ return normalizeComplex({ real, imag });
612
+ }
613
+ function addComplex(a, b) {
614
+ validateComplexNumber(a, "First complex number");
615
+ validateComplexNumber(b, "Second complex number");
616
+ return normalizeComplex({
617
+ real: a.real + b.real,
618
+ imag: a.imag + b.imag
619
+ });
620
+ }
621
+ function subtractComplex(a, b) {
622
+ validateComplexNumber(a, "First complex number");
623
+ validateComplexNumber(b, "Second complex number");
624
+ return normalizeComplex({
625
+ real: a.real - b.real,
626
+ imag: a.imag - b.imag
627
+ });
628
+ }
629
+ function multiplyComplex(a, b) {
630
+ validateComplexNumber(a, "First complex number");
631
+ validateComplexNumber(b, "Second complex number");
632
+ return normalizeComplex({
633
+ real: a.real * b.real - a.imag * b.imag,
634
+ imag: a.real * b.imag + a.imag * b.real
635
+ });
636
+ }
637
+ function divideComplex(a, b) {
638
+ validateComplexNumber(a, "Numerator complex number");
639
+ validateComplexNumber(b, "Denominator complex number");
640
+ const denominator = b.real * b.real + b.imag * b.imag;
641
+ if (isApproximatelyZero2(denominator)) {
642
+ throw new Error("Cannot divide by zero or near-zero complex number");
643
+ }
644
+ return normalizeComplex({
645
+ real: (a.real * b.real + a.imag * b.imag) / denominator,
646
+ imag: (a.imag * b.real - a.real * b.imag) / denominator
647
+ });
648
+ }
649
+ function magnitudeComplex(c) {
650
+ validateComplexNumber(c);
651
+ const magnitude = Math.sqrt(c.real * c.real + c.imag * c.imag);
652
+ return isApproximatelyZero2(magnitude) ? 0 : magnitude;
653
+ }
654
+ function conjugateComplex(c) {
655
+ validateComplexNumber(c);
656
+ return normalizeComplex({
657
+ real: c.real,
658
+ imag: -c.imag
659
+ });
660
+ }
661
+ function argumentComplex(c) {
662
+ validateComplexNumber(c);
663
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
664
+ return 0;
665
+ }
666
+ return Math.atan2(c.imag, c.real);
667
+ }
668
+ function toPolarComplex(c) {
669
+ validateComplexNumber(c);
670
+ return {
671
+ magnitude: magnitudeComplex(c),
672
+ angle: argumentComplex(c)
673
+ };
674
+ }
675
+ function fromPolarComplex(magnitude, angle) {
676
+ validateNumber2(magnitude, "magnitude");
677
+ validateNumber2(angle, "angle");
678
+ if (magnitude < -EPSILON) {
679
+ throw new Error("Magnitude must be non-negative");
680
+ }
681
+ let normalizedAngle = angle % TWO_PI;
682
+ if (normalizedAngle > Math.PI) normalizedAngle -= TWO_PI;
683
+ if (normalizedAngle <= -Math.PI) normalizedAngle += TWO_PI;
684
+ const mag = Math.max(0, magnitude);
685
+ return normalizeComplex({
686
+ real: mag * Math.cos(normalizedAngle),
687
+ imag: mag * Math.sin(normalizedAngle)
688
+ });
689
+ }
690
+ function sqrtComplex(c) {
691
+ validateComplexNumber(c);
692
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
693
+ const zero = createComplex(0, 0);
694
+ return [zero, zero];
695
+ }
696
+ const magnitude = magnitudeComplex(c);
697
+ const angle = argumentComplex(c);
698
+ const rootMagnitude = Math.sqrt(magnitude);
699
+ const rootAngle1 = angle / 2;
700
+ const rootAngle2 = rootAngle1 + Math.PI;
701
+ return [
702
+ fromPolarComplex(rootMagnitude, rootAngle1),
703
+ fromPolarComplex(rootMagnitude, rootAngle2)
704
+ ];
705
+ }
706
+ function powerComplex(c, exponent) {
707
+ validateComplexNumber(c);
708
+ validateNumber2(exponent, "exponent");
709
+ if (isApproximatelyZero2(exponent)) {
710
+ return createComplex(1, 0);
711
+ }
712
+ if (approximatelyEqual(exponent, 1)) {
713
+ return createComplex(c.real, c.imag);
714
+ }
715
+ if (approximatelyEqual(exponent, 2)) {
716
+ return multiplyComplex(c, c);
717
+ }
718
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
719
+ if (exponent > 0) {
720
+ return createComplex(0, 0);
721
+ } else if (exponent < 0) {
722
+ throw new Error("Cannot raise zero to a negative power");
723
+ }
724
+ }
725
+ const polar = toPolarComplex(c);
726
+ const magnitude = Math.pow(polar.magnitude, exponent);
727
+ const safeMagnitude = magnitude < -EPSILON ? Math.abs(magnitude) : Math.max(0, magnitude);
728
+ const angle = polar.angle * exponent;
729
+ return fromPolarComplex(safeMagnitude, angle);
730
+ }
731
+ function lnComplex(c) {
732
+ validateComplexNumber(c);
733
+ const magnitude = magnitudeComplex(c);
734
+ if (isApproximatelyZero2(magnitude)) {
735
+ throw new Error(
736
+ "Cannot take logarithm of zero or near-zero complex number"
737
+ );
738
+ }
739
+ const angle = argumentComplex(c);
740
+ return normalizeComplex({
741
+ real: Math.log(magnitude),
742
+ imag: angle
743
+ });
744
+ }
745
+
746
+ // src/lib/maths/constants.ts
747
+ var PI = 3.141592653589793;
748
+ var E = 2.718281828459045;
749
+ var PHI = 1.618033988749894;
750
+ var SQRT2 = 1.4142135623730951;
751
+ var SQRT1_2 = 0.7071067811865476;
752
+ var LN2 = 0.6931471805599453;
753
+ var LN10 = 2.302585092994046;
754
+ var LOG2E = 1.4426950408889634;
755
+ var LOG10E = 0.4342944819032518;
756
+ var DEGREES_IN_CIRCLE = 360;
757
+ var RADIANS_IN_CIRCLE = 2 * PI;
758
+ var GRADIANS_IN_CIRCLE = 400;
759
+ var DEGREES_PER_RADIAN = 180 / PI;
760
+ var RADIANS_PER_DEGREE = PI / 180;
761
+ var Constants = {
762
+ PI,
763
+ E,
764
+ PHI,
765
+ SQRT2,
766
+ SQRT1_2,
767
+ LN2,
768
+ LN10,
769
+ LOG2E,
770
+ LOG10E,
771
+ DEGREES_IN_CIRCLE,
772
+ RADIANS_IN_CIRCLE,
773
+ GRADIANS_IN_CIRCLE,
774
+ DEGREES_PER_RADIAN,
775
+ RADIANS_PER_DEGREE
776
+ };
777
+
778
+ // src/lib/maths/fn/trigo.ts
779
+ function degToRad(degrees) {
780
+ return degrees * Constants.RADIANS_PER_DEGREE;
781
+ }
782
+ function radToDeg(radians) {
783
+ return radians * Constants.DEGREES_PER_RADIAN;
784
+ }
785
+ function degToGrad(degrees) {
786
+ return degrees * (Constants.GRADIANS_IN_CIRCLE / Constants.DEGREES_IN_CIRCLE);
787
+ }
788
+ function gradToDeg(gradians) {
789
+ return gradians * (Constants.DEGREES_IN_CIRCLE / Constants.GRADIANS_IN_CIRCLE);
790
+ }
791
+ function normalizeRadians(radians) {
792
+ const twoPi = Constants.RADIANS_IN_CIRCLE;
793
+ let normalized = radians % twoPi;
794
+ if (normalized < 0) normalized += twoPi;
795
+ return normalized;
796
+ }
797
+ function normalizeDegrees(degrees) {
798
+ let normalized = degrees % Constants.DEGREES_IN_CIRCLE;
799
+ if (normalized < 0) normalized += Constants.DEGREES_IN_CIRCLE;
800
+ return normalized;
801
+ }
802
+ function sin(radians) {
803
+ return Math.sin(radians);
804
+ }
805
+ function cos(radians) {
806
+ return Math.cos(radians);
807
+ }
808
+ function tan(radians) {
809
+ const cosine = Math.cos(radians);
810
+ if (Math.abs(cosine) < 1e-10) {
811
+ throw new Error("Tangent undefined for this angle (cosine is zero)");
812
+ }
813
+ return Math.tan(radians);
814
+ }
815
+ function asin(value) {
816
+ if (value < -1 || value > 1) {
817
+ throw new Error("Arcsine is only defined for values between -1 and 1");
818
+ }
819
+ return Math.asin(value);
820
+ }
821
+ function acos(value) {
822
+ if (value < -1 || value > 1) {
823
+ throw new Error("Arccosine is only defined for values between -1 and 1");
824
+ }
825
+ return Math.acos(value);
826
+ }
827
+ function atan(value) {
828
+ return Math.atan(value);
829
+ }
830
+ function atan2(y, x) {
831
+ return Math.atan2(y, x);
832
+ }
833
+ function sinh(x) {
834
+ return Math.sinh(x);
835
+ }
836
+ function cosh(x) {
837
+ return Math.cosh(x);
838
+ }
839
+ function tanh(x) {
840
+ return Math.tanh(x);
841
+ }
842
+ function asinh(x) {
843
+ return Math.asinh(x);
844
+ }
845
+ function acosh(x) {
846
+ if (x < 1) {
847
+ throw new Error("Inverse hyperbolic cosine is only defined for x >= 1");
848
+ }
849
+ return Math.acosh(x);
850
+ }
851
+ function atanh(x) {
852
+ if (Math.abs(x) >= 1) {
853
+ throw new Error("Inverse hyperbolic tangent is only defined for |x| < 1");
854
+ }
855
+ return Math.atanh(x);
856
+ }
857
+ function sec(radians) {
858
+ const cosine = Math.cos(radians);
859
+ if (Math.abs(cosine) < 1e-10) {
860
+ throw new Error("Secant undefined for this angle (cosine is zero)");
861
+ }
862
+ return 1 / cosine;
863
+ }
864
+ function csc(radians) {
865
+ const sine = Math.sin(radians);
866
+ if (Math.abs(sine) < 1e-10) {
867
+ throw new Error("Cosecant undefined for this angle (sine is zero)");
868
+ }
869
+ return 1 / sine;
870
+ }
871
+ function cot(radians) {
872
+ const tangent = Math.tan(radians);
873
+ if (Math.abs(tangent) < 1e-10) {
874
+ throw new Error("Cotangent undefined for this angle (tangent is zero)");
875
+ }
876
+ return 1 / tangent;
877
+ }