@fluixi/utils 1.0.0-alpha.83 → 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,1152 @@
1
- "use strict";var S=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var ze=Object.getOwnPropertyNames;var Ce=Object.prototype.hasOwnProperty;var Ee=(r,e)=>{for(var n in e)S(r,n,{get:e[n],enumerable:!0})},Fe=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ze(e))!Ce.call(r,o)&&o!==n&&S(r,o,{get:()=>e[o],enumerable:!(t=Me(e,o))||t.enumerable});return r};var Se=r=>Fe(S({},"__esModule",{value:!0}),r);var xn={};Ee(xn,{Constants:()=>p,DEGREES_IN_CIRCLE:()=>Q,DEGREES_PER_RADIAN:()=>k,E:()=>$,GRADIANS_IN_CIRCLE:()=>Y,LN10:()=>O,LN2:()=>G,LOG10E:()=>Z,LOG2E:()=>U,PHI:()=>j,PI:()=>g,RADIANS_IN_CIRCLE:()=>X,RADIANS_PER_DEGREE:()=>H,SQRT1_2:()=>B,SQRT2:()=>L,abs:()=>tr,acos:()=>pe,acosh:()=>ge,add:()=>W,addComplex:()=>Hr,addFractions:()=>Cr,addVectors2D:()=>Br,angleBetween2D:()=>Ur,approxEqual:()=>We,argumentComplex:()=>M,asin:()=>xe,asinh:()=>ye,atan:()=>fe,atan2:()=>be,atanh:()=>he,average:()=>fr,cbrt:()=>Nr,ceil:()=>or,clamp:()=>z,conjugateComplex:()=>Jr,cos:()=>se,cosh:()=>de,cot:()=>we,crossProduct3D:()=>Lr,csc:()=>Ne,degToGrad:()=>oe,degToRad:()=>ne,distance2D:()=>Zr,distance3D:()=>Qr,divide:()=>v,divideComplex:()=>Wr,dotProduct2D:()=>T,dotProduct3D:()=>jr,evaluatePolynomial:()=>zr,exp:()=>Vr,factorial:()=>cr,floor:()=>ur,formatBytes:()=>tn,formatCurrency:()=>nn,formatNumber:()=>en,formatPercent:()=>on,fromPolarComplex:()=>N,gcd:()=>h,gradToDeg:()=>ue,invLerp:()=>I,isComplexNumber:()=>Le,isEven:()=>ke,isFiniteNumber:()=>_e,isFloat:()=>Pe,isFraction:()=>Be,isInRange:()=>Ye,isInt:()=>Ie,isInteger:()=>qe,isMatrix:()=>Ge,isNegative:()=>Ue,isNonNegative:()=>Ze,isNonPositive:()=>Qe,isNumber:()=>Ae,isNumeric:()=>Re,isNumericString:()=>K,isOdd:()=>He,isPositive:()=>Oe,isPowerOfTwo:()=>Je,isPrime:()=>Ke,isSafeInteger:()=>Te,isVector2D:()=>$e,isVector3D:()=>je,isZero:()=>Xe,lcm:()=>sr,lerp:()=>R,lerp2D:()=>Xr,ln:()=>Dr,lnComplex:()=>ee,log:()=>hr,log10:()=>yr,log2:()=>gr,magnitude2D:()=>V,magnitude3D:()=>A,magnitude4D:()=>qr,magnitudeComplex:()=>w,mapRange:()=>ar,max:()=>pr,median:()=>lr,min:()=>xr,modulo:()=>rr,multiplyComplex:()=>q,multiplyFractions:()=>Er,normalize:()=>Tr,normalize2D:()=>_r,normalize3D:()=>$r,normalizeDegrees:()=>me,normalizeRadians:()=>ie,nthRoot:()=>wr,parseIntSafe:()=>an,percentage:()=>Fr,power:()=>er,powerComplex:()=>re,product:()=>dr,radToDeg:()=>te,randomBool:()=>cn,randomFloat:()=>mn,randomInt:()=>un,range:()=>Ir,rotate2D:()=>Yr,round:()=>d,scaleVector2D:()=>Or,sec:()=>Ve,sign:()=>mr,simplifyFraction:()=>C,sin:()=>ce,sinh:()=>le,solveQuadratic:()=>Mr,sqrt:()=>nr,sqrtComplex:()=>vr,subtract:()=>J,subtractComplex:()=>Kr,subtractVectors2D:()=>Gr,sum:()=>br,tan:()=>ae,tanh:()=>De,toBase:()=>Sr,toNumber:()=>sn,toOrdinal:()=>Rr,toPolarComplex:()=>_,trunc:()=>ir,truncateDecimals:()=>Ar,wrap:()=>Pr});module.exports=Se(xn);var g=3.141592653589793,$=2.718281828459045,j=1.618033988749894,L=1.4142135623730951,B=.7071067811865476,G=.6931471805599453,O=2.302585092994046,U=1.4426950408889634,Z=.4342944819032518,Q=360,X=2*g,Y=400,k=180/g,H=g/180,p={PI:g,E:$,PHI:j,SQRT2:L,SQRT1_2:B,LN2:G,LN10:O,LOG2E:U,LOG10E:Z,DEGREES_IN_CIRCLE:Q,RADIANS_IN_CIRCLE:X,GRADIANS_IN_CIRCLE:Y,DEGREES_PER_RADIAN:k,RADIANS_PER_DEGREE:H};var K=r=>{let e=r.trim();if(e===""||!/^[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$/.test(e))return!1;let n=Number(e);return Number.isFinite(n)},Re=r=>typeof r=="number"?Number.isFinite(r):typeof r=="string"?K(r):!1,Ie=r=>{if(typeof r=="number")return Number.isInteger(r);if(typeof r=="string"){let n=r.trim();if(!n||!/^[-+]?\d+$/.test(n))return!1;let t=Number(n);return Number.isInteger(t)&&Number.isFinite(t)}if(typeof r=="boolean"||r==null||Array.isArray(r))return!1;let e=Number(r);return!Number.isNaN(e)&&Number.isInteger(e)&&Number.isFinite(e)},Ae=r=>typeof r=="number"&&Number.isFinite(r),Te=r=>typeof r=="number"&&Number.isSafeInteger(r),Pe=r=>typeof r!="number"||!Number.isFinite(r)?!1:!Number.isInteger(r);function qe(r){return Number.isInteger(r)}function _e(r){return Number.isFinite(r)}function $e(r){return typeof r=="object"&&r!==null&&"x"in r&&"y"in r&&typeof r.x=="number"&&typeof r.y=="number"}function je(r){return typeof r=="object"&&r!==null&&"x"in r&&"y"in r&&"z"in r&&typeof r.x=="number"&&typeof r.y=="number"&&typeof r.z=="number"}function Le(r){return typeof r=="object"&&r!==null&&"real"in r&&"imag"in r&&typeof r.real=="number"&&typeof r.imag=="number"}function Be(r){return typeof r=="object"&&r!==null&&"numerator"in r&&"denominator"in r&&typeof r.numerator=="number"&&typeof r.denominator=="number"&&r.denominator!==0}function Ge(r){return typeof r=="object"&&r!==null&&"rows"in r&&"columns"in r&&"data"in r&&typeof r.rows=="number"&&typeof r.columns=="number"&&Array.isArray(r.data)&&r.data.every(e=>Array.isArray(e))}var Oe=r=>Number.isFinite(r)&&r>0,Ue=r=>Number.isFinite(r)&&r<0;function Ze(r){return Number.isFinite(r)&&r>=0}function Qe(r){return Number.isFinite(r)&&r<=0}var Xe=(r,e=1e-10)=>Number.isFinite(r)&&Math.abs(r)<e;function Ye(r,e,n,t=!0){return t?r>=e&&r<=n:r>e&&r<n}function ke(r){return(r&1)===0}function He(r){return(r&1)===1}var Ke=r=>{if(!Number.isInteger(r)||r<=1)return!1;if(r<=3)return!0;if(r%2===0||r%3===0)return!1;for(let e=5;e*e<=r;e+=6)if(r%e===0||r%(e+2)===0)return!1;return!0},We=(r,e,n=Math.E)=>{if(r===e)return!0;if(!Number.isFinite(r)||!Number.isFinite(e))return r===e;let t=Math.abs(r),o=Math.abs(e),u=Math.abs(r-e);return r===0||e===0||u<n?u<n:u>n?!1:u/Math.min(t+o,Number.MAX_SAFE_INTEGER)<n},Je=r=>r>0&&(r&r-1)===0;function W(r,e){return r+e}function J(r,e){return r-e}var v=(r,e,n)=>e===0?n!==void 0?n:NaN:r/e;function rr(r,e){return r%e}function er(r,e){return Math.pow(r,e)}function nr(r){if(r<0)throw new Error("Cannot calculate square root of negative number");return Math.sqrt(r)}function tr(r){return Math.abs(r)}var d=(r,e=0,n="round")=>{if(n==="david")return ve(r,e,n);if(!Number.isFinite(r))return r;if(e===0)return Math[n](r);if(e<0){let y=10**-e;return Math[n](r/y)*y}let t=10**e,o=Math.pow(2,-52),u=r*t,i=Math.sign(u)*o*Math.abs(u),s;switch(n){case"round":s=Math.round(u+i);break;case"ceil":s=Math.ceil(u-o);break;case"floor":s=Math.floor(u+o);break;case"trunc":s=u<0?Math.ceil(u):Math.floor(u);break;default:s=Math.round(u+i)}return s/t},ve=(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,i=t*u,s=Math.pow(2,-53),y=Math.sign(i)*s*Math.abs(i);return i+=y,Math.round(i)/u*o},or=(r,e=0)=>d(r,e,"ceil"),ur=(r,e=0)=>d(r,e,"floor"),ir=(r,e=0)=>d(r,e,"trunc"),z=(r,e,n)=>(e>n&&([e,n]=[n,e]),r<e?e:r>n?n:r);function mr(r){return r>0?1:r<0?-1:0}function cr(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 sr(r,e){return Math.abs(r*e)/h(r,e)}function R(r,e,n){return r+(e-r)*z(n,0,1)}var I=(r,e,n)=>z((n-r)/(e-r),0,1),ar=(r,e,n,t,o)=>{let u=I(e,n,r);return R(t,o,u)};function xr(...r){return Math.min(...r)}function pr(...r){return Math.max(...r)}var fr=(...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},br=(...r)=>Array.isArray(r)?r.reduce((e,n)=>e+(Number.isFinite(n)?n:0),0):0,lr=(...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 dr(...r){return r.reduce((e,n)=>e*n,1)}function Dr(r){if(r<=0)throw new Error("Natural logarithm is only defined for positive numbers");return Math.log(r)}function yr(r){if(r<=0)throw new Error("Logarithm is only defined for positive numbers");return Math.log10(r)}function gr(r){if(r<=0)throw new Error("Logarithm is only defined for positive numbers");return Math.log2(r)}function hr(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 Vr(r){return Math.exp(r)}function Nr(r){return Math.cbrt(r)}function wr(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 Mr(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 zr(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 Cr(r,e){let n=r.numerator*e.denominator+e.numerator*r.denominator,t=r.denominator*e.denominator;return C({numerator:n,denominator:t})}function Er(r,e){let n=r.numerator*e.numerator,t=r.denominator*e.denominator;return C({numerator:n,denominator:t})}var Fr=(r,e,n=2)=>{if(e===0)return 0;let t=r/e*100;return d(t,n)},Sr=(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")},Rr=r=>{let e=["th","st","nd","rd"],n=r%100;return r+(e[(n-20)%10]||e[n]||e[0])},Ir=(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},Ar=(r,e)=>{if(!Number.isFinite(r))return r;let n=10**e;return Math.trunc(r*n)/n},Tr=(r,e,n)=>e===n?0:(r-e)/(n-e),Pr=(r,e,n)=>{let t=n-e;return((r-e)%t+t)%t+e};function a(r,e){if(typeof r!="number"||!Number.isFinite(r))throw new Error(`${e} must be a finite number, got ${r}`)}function f(r){return Math.abs(r)<1e-9}function m(r,e="Vector2D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);a(r.x,`${e}.x`),a(r.y,`${e}.y`)}function b(r,e="Vector3D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);a(r.x,`${e}.x`),a(r.y,`${e}.y`),a(r.z,`${e}.z`)}function rn(r,e="Vector4D"){if(!r||typeof r!="object")throw new Error(`${e} must be an object`);a(r.x,`${e}.x`),a(r.y,`${e}.y`),a(r.z,`${e}.z`),a(r.w,`${e}.w`)}function V(r){m(r);let e=Math.sqrt(r.x*r.x+r.y*r.y);return f(e)?0:e}function A(r){b(r);let e=Math.sqrt(r.x*r.x+r.y*r.y+r.z*r.z);return f(e)?0:e}function qr(r){rn(r);let e=Math.sqrt(r.x*r.x+r.y*r.y+r.z*r.z+r.w*r.w);return f(e)?0:e}function _r(r){m(r);let e=V(r);if(f(e))throw new Error("Cannot normalize zero or near-zero vector");return{x:r.x/e,y:r.y/e}}function $r(r){b(r);let e=A(r);if(f(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 m(r,"First vector"),m(e,"Second vector"),r.x*e.x+r.y*e.y}function jr(r,e){return b(r,"First vector"),b(e,"Second vector"),r.x*e.x+r.y*e.y+r.z*e.z}function Lr(r,e){return b(r,"First vector"),b(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 Br(r,e){return m(r,"First vector"),m(e,"Second vector"),{x:r.x+e.x,y:r.y+e.y}}function Gr(r,e){return m(r,"First vector"),m(e,"Second vector"),{x:r.x-e.x,y:r.y-e.y}}function Or(r,e){return m(r),a(e,"scalar"),{x:r.x*e,y:r.y*e}}function Ur(r,e){m(r,"First vector"),m(e,"Second vector");let n=T(r,e),t=V(r),o=V(e);if(f(t)||f(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 Zr(r,e){m(r,"First point"),m(e,"Second point");let n=e.x-r.x,t=e.y-r.y,o=Math.sqrt(n*n+t*t);return f(o)?0:o}function Qr(r,e){b(r,"First point"),b(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 f(u)?0:u}function Xr(r,e,n){return m(r,"Start vector"),m(e,"End vector"),a(n,"t"),{x:r.x+(e.x-r.x)*n,y:r.y+(e.y-r.y)*n}}function Yr(r,e){m(r),a(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 P=2*Math.PI;function x(r){return Math.abs(r)<1e-10}function kr(r,e){return Math.abs(r-e)<1e-10}function l(r){return{real:x(r.real)?0:r.real,imag:x(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"),l({real:r,imag:e})}function Hr(r,e){return c(r,"First complex number"),c(e,"Second complex number"),l({real:r.real+e.real,imag:r.imag+e.imag})}function Kr(r,e){return c(r,"First complex number"),c(e,"Second complex number"),l({real:r.real-e.real,imag:r.imag-e.imag})}function q(r,e){return c(r,"First complex number"),c(e,"Second complex number"),l({real:r.real*e.real-r.imag*e.imag,imag:r.real*e.imag+r.imag*e.real})}function Wr(r,e){c(r,"Numerator complex number"),c(e,"Denominator complex number");let n=e.real*e.real+e.imag*e.imag;if(x(n))throw new Error("Cannot divide by zero or near-zero complex number");return l({real:(r.real*e.real+r.imag*e.imag)/n,imag:(r.imag*e.real-r.real*e.imag)/n})}function w(r){c(r);let e=Math.sqrt(r.real*r.real+r.imag*r.imag);return x(e)?0:e}function Jr(r){return c(r),l({real:r.real,imag:-r.imag})}function M(r){return c(r),x(r.real)&&x(r.imag)?0:Math.atan2(r.imag,r.real)}function _(r){return c(r),{magnitude:w(r),angle:M(r)}}function N(r,e){if(D(r,"magnitude"),D(e,"angle"),r<-1e-10)throw new Error("Magnitude must be non-negative");let n=e%P;n>Math.PI&&(n-=P),n<=-Math.PI&&(n+=P);let t=Math.max(0,r);return l({real:t*Math.cos(n),imag:t*Math.sin(n)})}function vr(r){if(c(r),x(r.real)&&x(r.imag)){let i=E(0,0);return[i,i]}let e=w(r),n=M(r),t=Math.sqrt(e),o=n/2,u=o+Math.PI;return[N(t,o),N(t,u)]}function re(r,e){if(c(r),D(e,"exponent"),x(e))return E(1,0);if(kr(e,1))return E(r.real,r.imag);if(kr(e,2))return q(r,r);if(x(r.real)&&x(r.imag)){if(e>0)return E(0,0);if(e<0)throw new Error("Cannot raise zero to a negative power")}let n=_(r),t=Math.pow(n.magnitude,e),o=t<-1e-10?Math.abs(t):Math.max(0,t),u=n.angle*e;return N(o,u)}function ee(r){c(r);let e=w(r);if(x(e))throw new Error("Cannot take logarithm of zero or near-zero complex number");let n=M(r);return l({real:Math.log(e),imag:n})}function ne(r){return r*p.RADIANS_PER_DEGREE}function te(r){return r*p.DEGREES_PER_RADIAN}function oe(r){return r*(p.GRADIANS_IN_CIRCLE/p.DEGREES_IN_CIRCLE)}function ue(r){return r*(p.DEGREES_IN_CIRCLE/p.GRADIANS_IN_CIRCLE)}function ie(r){let e=p.RADIANS_IN_CIRCLE,n=r%e;return n<0&&(n+=e),n}function me(r){let e=r%p.DEGREES_IN_CIRCLE;return e<0&&(e+=p.DEGREES_IN_CIRCLE),e}function ce(r){return Math.sin(r)}function se(r){return Math.cos(r)}function ae(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 xe(r){if(r<-1||r>1)throw new Error("Arcsine is only defined for values between -1 and 1");return Math.asin(r)}function pe(r){if(r<-1||r>1)throw new Error("Arccosine is only defined for values between -1 and 1");return Math.acos(r)}function fe(r){return Math.atan(r)}function be(r,e){return Math.atan2(r,e)}function le(r){return Math.sinh(r)}function de(r){return Math.cosh(r)}function De(r){return Math.tanh(r)}function ye(r){return Math.asinh(r)}function ge(r){if(r<1)throw new Error("Inverse hyperbolic cosine is only defined for x >= 1");return Math.acosh(r)}function he(r){if(Math.abs(r)>=1)throw new Error("Inverse hyperbolic tangent is only defined for |x| < 1");return Math.atanh(r)}function Ve(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 Ne(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 we(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}var en=(r,e={})=>{let{locale:n="en-US",minimumFractionDigits:t=0,maximumFractionDigits:o=20}=e;return new Intl.NumberFormat(n,{minimumFractionDigits:t,maximumFractionDigits:o}).format(r)},nn=(r,e="USD",n="en-US")=>new Intl.NumberFormat(n,{style:"currency",currency:e}).format(r),tn=(r,e=2)=>{if(r===0)return"0 Bytes";let n=1024,t=e<0?0:e,o=["Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"],u=Math.floor(Math.log(r)/Math.log(n));return`${parseFloat((r/Math.pow(n,u)).toFixed(t))} ${o[u]}`},on=(r,e=2,n="en-US")=>{let t=r*100;return new Intl.NumberFormat(n,{style:"percent",minimumFractionDigits:0,maximumFractionDigits:Math.max(0,e)}).format(t/100)};var un=(r,e)=>{let[n,t]=r<=e?[r,e]:[e,r];if(typeof crypto<"u"&&crypto.getRandomValues){let o=t-n+1,u=4294967295,i=new Uint32Array(1),s;do crypto.getRandomValues(i),s=i[0]/(u+1);while(s>=1-1%o/1);return Math.floor(s*o)+n}return Math.floor(Math.random()*(t-n+1))+n},mn=(r,e)=>{let[n,t]=r<=e?[r,e]:[e,r];return Math.random()*(t-n)+n},cn=(r=.5)=>Math.random()<r;var sn=(r,e)=>{if(typeof r=="number")return Number.isFinite(r)?r:e!==void 0?e:NaN;if(r==null)return e!==void 0?e:NaN;if(typeof r=="boolean")return r?1:0;if(typeof r=="string"){let t=r.trim();if(t==="")return e!==void 0?e:NaN;let o=Number(t);return Number.isFinite(o)?o:e!==void 0?e:NaN}let n=Number(r);return Number.isFinite(n)?n:e!==void 0?e:NaN},an=(r,e=10,n)=>{let t=r.trim();if(t==="")return n!==void 0?n:NaN;if(e===16){let u=/^(-?)0?x?([0-9a-fA-F]+)$/,i=t.match(u);if(i){let s=i[1]?-1:1,y=i[2],F=parseInt(y,16);return isNaN(F)?n!==void 0?n:NaN:s*F}}let o=parseInt(t,e);if(isNaN(o))return n!==void 0?n:NaN;if(e!==16&&e!==10){let u="0123456789abcdefghijklmnopqrstuvwxyz".slice(0,e);if(!new RegExp(`^[-+]?[${u}]+$`,"i").test(t))return n!==void 0?n:NaN}return o};
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/index.ts
22
+ var index_exports = {};
23
+ __export(index_exports, {
24
+ Constants: () => Constants,
25
+ DEGREES_IN_CIRCLE: () => DEGREES_IN_CIRCLE,
26
+ DEGREES_PER_RADIAN: () => DEGREES_PER_RADIAN,
27
+ E: () => E,
28
+ GRADIANS_IN_CIRCLE: () => GRADIANS_IN_CIRCLE,
29
+ LN10: () => LN10,
30
+ LN2: () => LN2,
31
+ LOG10E: () => LOG10E,
32
+ LOG2E: () => LOG2E,
33
+ PHI: () => PHI,
34
+ PI: () => PI,
35
+ RADIANS_IN_CIRCLE: () => RADIANS_IN_CIRCLE,
36
+ RADIANS_PER_DEGREE: () => RADIANS_PER_DEGREE,
37
+ SQRT1_2: () => SQRT1_2,
38
+ SQRT2: () => SQRT2,
39
+ abs: () => abs,
40
+ acos: () => acos,
41
+ acosh: () => acosh,
42
+ add: () => add,
43
+ addComplex: () => addComplex,
44
+ addFractions: () => addFractions,
45
+ addVectors2D: () => addVectors2D,
46
+ angleBetween2D: () => angleBetween2D,
47
+ approxEqual: () => approxEqual,
48
+ argumentComplex: () => argumentComplex,
49
+ asin: () => asin,
50
+ asinh: () => asinh,
51
+ atan: () => atan,
52
+ atan2: () => atan2,
53
+ atanh: () => atanh,
54
+ average: () => average,
55
+ cbrt: () => cbrt,
56
+ ceil: () => ceil,
57
+ clamp: () => clamp,
58
+ conjugateComplex: () => conjugateComplex,
59
+ cos: () => cos,
60
+ cosh: () => cosh,
61
+ cot: () => cot,
62
+ crossProduct3D: () => crossProduct3D,
63
+ csc: () => csc,
64
+ degToGrad: () => degToGrad,
65
+ degToRad: () => degToRad,
66
+ distance2D: () => distance2D,
67
+ distance3D: () => distance3D,
68
+ divide: () => divide,
69
+ divideComplex: () => divideComplex,
70
+ dotProduct2D: () => dotProduct2D,
71
+ dotProduct3D: () => dotProduct3D,
72
+ evaluatePolynomial: () => evaluatePolynomial,
73
+ exp: () => exp,
74
+ factorial: () => factorial,
75
+ floor: () => floor,
76
+ formatBytes: () => formatBytes,
77
+ formatCurrency: () => formatCurrency,
78
+ formatNumber: () => formatNumber,
79
+ formatPercent: () => formatPercent,
80
+ fromPolarComplex: () => fromPolarComplex,
81
+ gcd: () => gcd,
82
+ gradToDeg: () => gradToDeg,
83
+ invLerp: () => invLerp,
84
+ isComplexNumber: () => isComplexNumber,
85
+ isEven: () => isEven,
86
+ isFiniteNumber: () => isFiniteNumber,
87
+ isFloat: () => isFloat,
88
+ isFraction: () => isFraction,
89
+ isInRange: () => isInRange,
90
+ isInt: () => isInt,
91
+ isInteger: () => isInteger,
92
+ isMatrix: () => isMatrix,
93
+ isNegative: () => isNegative,
94
+ isNonNegative: () => isNonNegative,
95
+ isNonPositive: () => isNonPositive,
96
+ isNumber: () => isNumber,
97
+ isNumeric: () => isNumeric,
98
+ isNumericString: () => isNumericString,
99
+ isOdd: () => isOdd,
100
+ isPositive: () => isPositive,
101
+ isPowerOfTwo: () => isPowerOfTwo,
102
+ isPrime: () => isPrime,
103
+ isSafeInteger: () => isSafeInteger,
104
+ isVector2D: () => isVector2D,
105
+ isVector3D: () => isVector3D,
106
+ isZero: () => isZero,
107
+ lcm: () => lcm,
108
+ lerp: () => lerp,
109
+ lerp2D: () => lerp2D,
110
+ ln: () => ln,
111
+ lnComplex: () => lnComplex,
112
+ log: () => log,
113
+ log10: () => log10,
114
+ log2: () => log2,
115
+ magnitude2D: () => magnitude2D,
116
+ magnitude3D: () => magnitude3D,
117
+ magnitude4D: () => magnitude4D,
118
+ magnitudeComplex: () => magnitudeComplex,
119
+ mapRange: () => mapRange,
120
+ max: () => max,
121
+ median: () => median,
122
+ min: () => min,
123
+ modulo: () => modulo,
124
+ multiplyComplex: () => multiplyComplex,
125
+ multiplyFractions: () => multiplyFractions,
126
+ normalize: () => normalize,
127
+ normalize2D: () => normalize2D,
128
+ normalize3D: () => normalize3D,
129
+ normalizeDegrees: () => normalizeDegrees,
130
+ normalizeRadians: () => normalizeRadians,
131
+ nthRoot: () => nthRoot,
132
+ parseIntSafe: () => parseIntSafe,
133
+ percentage: () => percentage,
134
+ power: () => power,
135
+ powerComplex: () => powerComplex,
136
+ product: () => product,
137
+ radToDeg: () => radToDeg,
138
+ randomBool: () => randomBool,
139
+ randomFloat: () => randomFloat,
140
+ randomInt: () => randomInt,
141
+ range: () => range,
142
+ rotate2D: () => rotate2D,
143
+ round: () => round,
144
+ scaleVector2D: () => scaleVector2D,
145
+ sec: () => sec,
146
+ sign: () => sign,
147
+ simplifyFraction: () => simplifyFraction,
148
+ sin: () => sin,
149
+ sinh: () => sinh,
150
+ solveQuadratic: () => solveQuadratic,
151
+ sqrt: () => sqrt,
152
+ sqrtComplex: () => sqrtComplex,
153
+ subtract: () => subtract,
154
+ subtractComplex: () => subtractComplex,
155
+ subtractVectors2D: () => subtractVectors2D,
156
+ sum: () => sum,
157
+ tan: () => tan,
158
+ tanh: () => tanh,
159
+ toBase: () => toBase,
160
+ toNumber: () => toNumber,
161
+ toOrdinal: () => toOrdinal,
162
+ toPolarComplex: () => toPolarComplex,
163
+ trunc: () => trunc,
164
+ truncateDecimals: () => truncateDecimals,
165
+ wrap: () => wrap
166
+ });
167
+ module.exports = __toCommonJS(index_exports);
168
+
169
+ // src/lib/maths/constants.ts
170
+ var PI = 3.141592653589793;
171
+ var E = 2.718281828459045;
172
+ var PHI = 1.618033988749894;
173
+ var SQRT2 = 1.4142135623730951;
174
+ var SQRT1_2 = 0.7071067811865476;
175
+ var LN2 = 0.6931471805599453;
176
+ var LN10 = 2.302585092994046;
177
+ var LOG2E = 1.4426950408889634;
178
+ var LOG10E = 0.4342944819032518;
179
+ var DEGREES_IN_CIRCLE = 360;
180
+ var RADIANS_IN_CIRCLE = 2 * PI;
181
+ var GRADIANS_IN_CIRCLE = 400;
182
+ var DEGREES_PER_RADIAN = 180 / PI;
183
+ var RADIANS_PER_DEGREE = PI / 180;
184
+ var Constants = {
185
+ PI,
186
+ E,
187
+ PHI,
188
+ SQRT2,
189
+ SQRT1_2,
190
+ LN2,
191
+ LN10,
192
+ LOG2E,
193
+ LOG10E,
194
+ DEGREES_IN_CIRCLE,
195
+ RADIANS_IN_CIRCLE,
196
+ GRADIANS_IN_CIRCLE,
197
+ DEGREES_PER_RADIAN,
198
+ RADIANS_PER_DEGREE
199
+ };
200
+
201
+ // src/lib/maths/guards.ts
202
+ var isNumericString = (value) => {
203
+ const trimmed = value.trim();
204
+ if (trimmed === "") return false;
205
+ if (!/^[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$/.test(trimmed)) return false;
206
+ const num = Number(trimmed);
207
+ return Number.isFinite(num);
208
+ };
209
+ var isNumeric = (value) => {
210
+ if (typeof value === "number") return Number.isFinite(value);
211
+ if (typeof value === "string") return isNumericString(value);
212
+ return false;
213
+ };
214
+ var isInt = (value) => {
215
+ if (typeof value === "number") {
216
+ return Number.isInteger(value);
217
+ }
218
+ if (typeof value === "string") {
219
+ const trimmed = value.trim();
220
+ if (!trimmed) return false;
221
+ if (!/^[-+]?\d+$/.test(trimmed)) return false;
222
+ const num2 = Number(trimmed);
223
+ return Number.isInteger(num2) && Number.isFinite(num2);
224
+ }
225
+ if (typeof value === "boolean" || value == null) {
226
+ return false;
227
+ }
228
+ if (Array.isArray(value)) return false;
229
+ const num = Number(value);
230
+ return !Number.isNaN(num) && Number.isInteger(num) && Number.isFinite(num);
231
+ };
232
+ var isNumber = (value) => {
233
+ return typeof value === "number" && Number.isFinite(value);
234
+ };
235
+ var isSafeInteger = (value) => {
236
+ return typeof value === "number" && Number.isSafeInteger(value);
237
+ };
238
+ var isFloat = (value) => {
239
+ if (typeof value !== "number" || !Number.isFinite(value)) return false;
240
+ return !Number.isInteger(value);
241
+ };
242
+ function isInteger(value) {
243
+ return Number.isInteger(value);
244
+ }
245
+ function isFiniteNumber(value) {
246
+ return Number.isFinite(value);
247
+ }
248
+ function isVector2D(value) {
249
+ return typeof value === "object" && value !== null && "x" in value && "y" in value && typeof value.x === "number" && typeof value.y === "number";
250
+ }
251
+ function isVector3D(value) {
252
+ return typeof value === "object" && value !== null && "x" in value && "y" in value && "z" in value && typeof value.x === "number" && typeof value.y === "number" && typeof value.z === "number";
253
+ }
254
+ function isComplexNumber(value) {
255
+ return typeof value === "object" && value !== null && "real" in value && "imag" in value && typeof value.real === "number" && typeof value.imag === "number";
256
+ }
257
+ function isFraction(value) {
258
+ return typeof value === "object" && value !== null && "numerator" in value && "denominator" in value && typeof value.numerator === "number" && typeof value.denominator === "number" && value.denominator !== 0;
259
+ }
260
+ function isMatrix(value) {
261
+ return typeof value === "object" && value !== null && "rows" in value && "columns" in value && "data" in value && typeof value.rows === "number" && typeof value.columns === "number" && Array.isArray(value.data) && value.data.every((row) => Array.isArray(row));
262
+ }
263
+ var isPositive = (value) => {
264
+ return Number.isFinite(value) && value > 0;
265
+ };
266
+ var isNegative = (value) => {
267
+ return Number.isFinite(value) && value < 0;
268
+ };
269
+ function isNonNegative(value) {
270
+ return Number.isFinite(value) && value >= 0;
271
+ }
272
+ function isNonPositive(value) {
273
+ return Number.isFinite(value) && value <= 0;
274
+ }
275
+ var isZero = (value, epsilon = 1e-10) => {
276
+ return Number.isFinite(value) && Math.abs(value) < epsilon;
277
+ };
278
+ function isInRange(value, min2, max2, inclusive = true) {
279
+ return inclusive ? value >= min2 && value <= max2 : value > min2 && value < max2;
280
+ }
281
+ function isEven(value) {
282
+ return (value & 1) === 0;
283
+ }
284
+ function isOdd(value) {
285
+ return (value & 1) === 1;
286
+ }
287
+ var isPrime = (n) => {
288
+ if (!Number.isInteger(n)) {
289
+ return false;
290
+ }
291
+ if (n <= 1) return false;
292
+ if (n <= 3) return true;
293
+ if (n % 2 === 0 || n % 3 === 0) return false;
294
+ for (let i = 5; i * i <= n; i += 6) {
295
+ if (n % i === 0 || n % (i + 2) === 0) return false;
296
+ }
297
+ return true;
298
+ };
299
+ var approxEqual = (a, b, epsilon = Math.E) => {
300
+ if (a === b) return true;
301
+ if (!Number.isFinite(a) || !Number.isFinite(b)) {
302
+ return a === b;
303
+ }
304
+ const absA = Math.abs(a);
305
+ const absB = Math.abs(b);
306
+ const diff = Math.abs(a - b);
307
+ if (a === 0 || b === 0 || diff < epsilon) {
308
+ return diff < epsilon;
309
+ }
310
+ if (diff > epsilon) return false;
311
+ const relativeError = diff / Math.min(absA + absB, Number.MAX_SAFE_INTEGER);
312
+ return relativeError < epsilon;
313
+ };
314
+ var isPowerOfTwo = (n) => {
315
+ return n > 0 && (n & n - 1) === 0;
316
+ };
317
+
318
+ // src/lib/maths/fn/basic.ts
319
+ function add(a, b) {
320
+ return a + b;
321
+ }
322
+ function subtract(a, b) {
323
+ return a - b;
324
+ }
325
+ var divide = (dividend, divisor, fallback) => {
326
+ if (divisor === 0) {
327
+ return fallback !== void 0 ? fallback : NaN;
328
+ }
329
+ return dividend / divisor;
330
+ };
331
+ function modulo(a, b) {
332
+ return a % b;
333
+ }
334
+ function power(base, exponent) {
335
+ return Math.pow(base, exponent);
336
+ }
337
+ function sqrt(value) {
338
+ if (value < 0) {
339
+ throw new Error("Cannot calculate square root of negative number");
340
+ }
341
+ return Math.sqrt(value);
342
+ }
343
+ function abs(value) {
344
+ return Math.abs(value);
345
+ }
346
+ var round = (value, precision = 0, mode = "round") => {
347
+ if (mode === "david") return roundUsingDavidGay(value, precision, mode);
348
+ if (!Number.isFinite(value)) return value;
349
+ if (precision === 0) return Math[mode](value);
350
+ if (precision < 0) {
351
+ const factor2 = 10 ** -precision;
352
+ return Math[mode](value / factor2) * factor2;
353
+ }
354
+ const factor = 10 ** precision;
355
+ const epsilon = Math.pow(2, -52);
356
+ const adjusted = value * factor;
357
+ const correction = Math.sign(adjusted) * epsilon * Math.abs(adjusted);
358
+ let rounded;
359
+ switch (mode) {
360
+ case "round":
361
+ rounded = Math.round(adjusted + correction);
362
+ break;
363
+ case "ceil":
364
+ rounded = Math.ceil(adjusted - epsilon);
365
+ break;
366
+ case "floor":
367
+ rounded = Math.floor(adjusted + epsilon);
368
+ break;
369
+ case "trunc":
370
+ rounded = adjusted < 0 ? Math.ceil(adjusted) : Math.floor(adjusted);
371
+ break;
372
+ default:
373
+ rounded = Math.round(adjusted + correction);
374
+ }
375
+ return rounded / factor;
376
+ };
377
+ var roundUsingDavidGay = (_value, precision = 0, mode = "round") => {
378
+ let value = Math.abs(_value);
379
+ const multiplicator = _value < 0 ? -1 : 1;
380
+ if (precision === 0) {
381
+ return Math.round(value) * multiplicator;
382
+ }
383
+ if (!Number.isFinite(value)) {
384
+ return value * multiplicator;
385
+ }
386
+ const factor = 10 ** precision;
387
+ let shifted = value * factor;
388
+ const epsilon = Math.pow(2, -53);
389
+ const correction = Math.sign(shifted) * epsilon * Math.abs(shifted);
390
+ shifted += correction;
391
+ const rounded = Math.round(shifted);
392
+ return rounded / factor * multiplicator;
393
+ };
394
+ var ceil = (value, precision = 0) => {
395
+ return round(value, precision, "ceil");
396
+ };
397
+ var floor = (value, precision = 0) => {
398
+ return round(value, precision, "floor");
399
+ };
400
+ var trunc = (value, precision = 0) => {
401
+ return round(value, precision, "trunc");
402
+ };
403
+ var clamp = (value, min2, max2) => {
404
+ if (min2 > max2) [min2, max2] = [max2, min2];
405
+ return value < min2 ? min2 : value > max2 ? max2 : value;
406
+ };
407
+ function sign(value) {
408
+ if (value > 0) return 1;
409
+ if (value < 0) return -1;
410
+ return 0;
411
+ }
412
+ function factorial(n) {
413
+ if (!Number.isInteger(n) || n < 0) {
414
+ throw new Error("Factorial is only defined for non-negative integers");
415
+ }
416
+ if (n === 0 || n === 1) return 1;
417
+ let result = 1;
418
+ for (let i = 2; i <= n; i++) {
419
+ result *= i;
420
+ }
421
+ return result;
422
+ }
423
+ function gcd(a, b) {
424
+ a = Math.abs(a);
425
+ b = Math.abs(b);
426
+ while (b !== 0) {
427
+ const temp = b;
428
+ b = a % b;
429
+ a = temp;
430
+ }
431
+ return a;
432
+ }
433
+ function lcm(a, b) {
434
+ return Math.abs(a * b) / gcd(a, b);
435
+ }
436
+ function lerp(start, end, t) {
437
+ return start + (end - start) * clamp(t, 0, 1);
438
+ }
439
+ var invLerp = (start, end, value) => {
440
+ return clamp((value - start) / (end - start), 0, 1);
441
+ };
442
+ var mapRange = (value, inMin, inMax, outMin, outMax) => {
443
+ const t = invLerp(inMin, inMax, value);
444
+ return lerp(outMin, outMax, t);
445
+ };
446
+ function min(...values) {
447
+ return Math.min(...values);
448
+ }
449
+ function max(...values) {
450
+ return Math.max(...values);
451
+ }
452
+ var average = (...numbers) => {
453
+ if (!Array.isArray(numbers) || numbers.length === 0) return 0;
454
+ let total = 0;
455
+ let count = 0;
456
+ for (const num of numbers) {
457
+ if (Number.isFinite(num)) {
458
+ total += num;
459
+ count++;
460
+ }
461
+ }
462
+ return count === 0 ? 0 : total / count;
463
+ };
464
+ var sum = (...numbers) => {
465
+ if (!Array.isArray(numbers)) return 0;
466
+ return numbers.reduce(
467
+ (acc, val) => acc + (Number.isFinite(val) ? val : 0),
468
+ 0
469
+ );
470
+ };
471
+ var median = (...numbers) => {
472
+ if (!Array.isArray(numbers) || numbers.length === 0) return 0;
473
+ const validNumbers = numbers.filter(Number.isFinite);
474
+ if (validNumbers.length === 0) return 0;
475
+ validNumbers.sort((a, b) => a - b);
476
+ const mid = Math.floor(validNumbers.length / 2);
477
+ return validNumbers.length % 2 === 0 ? (validNumbers[mid - 1] + validNumbers[mid]) / 2 : validNumbers[mid];
478
+ };
479
+ function product(...values) {
480
+ return values.reduce((prod, val) => prod * val, 1);
481
+ }
482
+
483
+ // src/lib/maths/fn/advanced.ts
484
+ function ln(value) {
485
+ if (value <= 0) {
486
+ throw new Error("Natural logarithm is only defined for positive numbers");
487
+ }
488
+ return Math.log(value);
489
+ }
490
+ function log10(value) {
491
+ if (value <= 0) {
492
+ throw new Error("Logarithm is only defined for positive numbers");
493
+ }
494
+ return Math.log10(value);
495
+ }
496
+ function log2(value) {
497
+ if (value <= 0) {
498
+ throw new Error("Logarithm is only defined for positive numbers");
499
+ }
500
+ return Math.log2(value);
501
+ }
502
+ function log(value, base) {
503
+ if (value <= 0 || base <= 0) {
504
+ throw new Error("Logarithm is only defined for positive numbers and bases");
505
+ }
506
+ return Math.log(value) / Math.log(base);
507
+ }
508
+ function exp(x) {
509
+ return Math.exp(x);
510
+ }
511
+ function cbrt(value) {
512
+ return Math.cbrt(value);
513
+ }
514
+ function nthRoot(value, n) {
515
+ if (n === 0) {
516
+ throw new Error("Cannot calculate 0th root");
517
+ }
518
+ if (value < 0 && n % 2 === 0) {
519
+ throw new Error("Cannot calculate even root of negative number");
520
+ }
521
+ const exponent = 1 / n;
522
+ return Math.sign(value) * Math.pow(Math.abs(value), exponent);
523
+ }
524
+ function solveQuadratic(a, b, c) {
525
+ if (a === 0) {
526
+ if (b === 0) return [];
527
+ return [-c / b];
528
+ }
529
+ const discriminant = b * b - 4 * a * c;
530
+ if (discriminant < 0) {
531
+ return [];
532
+ } else if (discriminant === 0) {
533
+ return [-b / (2 * a)];
534
+ } else {
535
+ const sqrtDiscriminant = Math.sqrt(discriminant);
536
+ return [
537
+ (-b - sqrtDiscriminant) / (2 * a),
538
+ (-b + sqrtDiscriminant) / (2 * a)
539
+ ];
540
+ }
541
+ }
542
+ function evaluatePolynomial(coefficients, x) {
543
+ let result = 0;
544
+ for (let i = 0; i < coefficients.length; i++) {
545
+ result = result * x + coefficients[i];
546
+ }
547
+ return result;
548
+ }
549
+ function simplifyFraction(fraction) {
550
+ const divisor = gcd(fraction.numerator, fraction.denominator);
551
+ return {
552
+ numerator: fraction.numerator / divisor,
553
+ denominator: fraction.denominator / divisor
554
+ };
555
+ }
556
+ function addFractions(a, b) {
557
+ const numerator = a.numerator * b.denominator + b.numerator * a.denominator;
558
+ const denominator = a.denominator * b.denominator;
559
+ return simplifyFraction({ numerator, denominator });
560
+ }
561
+ function multiplyFractions(a, b) {
562
+ const numerator = a.numerator * b.numerator;
563
+ const denominator = a.denominator * b.denominator;
564
+ return simplifyFraction({ numerator, denominator });
565
+ }
566
+ var percentage = (value, total, precision = 2) => {
567
+ if (total === 0) return 0;
568
+ const percent = value / total * 100;
569
+ return round(percent, precision);
570
+ };
571
+ var toBase = (number, base, minLength = 1) => {
572
+ if (base < 2 || base > 36) {
573
+ throw new Error("Base must be between 2 and 36");
574
+ }
575
+ const result = number.toString(base);
576
+ return result.padStart(minLength, "0");
577
+ };
578
+ var toOrdinal = (n) => {
579
+ const suffix = ["th", "st", "nd", "rd"];
580
+ const v = n % 100;
581
+ return n + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
582
+ };
583
+ var range = (start, end, step = 1) => {
584
+ const result = [];
585
+ if (step === 0) return result;
586
+ if (step > 0) {
587
+ for (let i = start; i < end; i += step) {
588
+ result.push(i);
589
+ }
590
+ } else {
591
+ for (let i = start; i > end; i += step) {
592
+ result.push(i);
593
+ }
594
+ }
595
+ return result;
596
+ };
597
+ var truncateDecimals = (value, decimalPlaces) => {
598
+ if (!Number.isFinite(value)) return value;
599
+ const factor = 10 ** decimalPlaces;
600
+ return Math.trunc(value * factor) / factor;
601
+ };
602
+ var normalize = (value, min2, max2) => {
603
+ if (min2 === max2) return 0;
604
+ return (value - min2) / (max2 - min2);
605
+ };
606
+ var wrap = (value, min2, max2) => {
607
+ const range2 = max2 - min2;
608
+ return ((value - min2) % range2 + range2) % range2 + min2;
609
+ };
610
+
611
+ // src/lib/maths/fn/vector.ts
612
+ function validateNumber(value, name) {
613
+ if (typeof value !== "number" || !Number.isFinite(value)) {
614
+ throw new Error(`${name} must be a finite number, got ${value}`);
615
+ }
616
+ }
617
+ function isApproximatelyZero(value) {
618
+ return Math.abs(value) < 1e-9;
619
+ }
620
+ function validateVector2D(vector, name = "Vector2D") {
621
+ if (!vector || typeof vector !== "object") {
622
+ throw new Error(`${name} must be an object`);
623
+ }
624
+ validateNumber(vector.x, `${name}.x`);
625
+ validateNumber(vector.y, `${name}.y`);
626
+ }
627
+ function validateVector3D(vector, name = "Vector3D") {
628
+ if (!vector || typeof vector !== "object") {
629
+ throw new Error(`${name} must be an object`);
630
+ }
631
+ validateNumber(vector.x, `${name}.x`);
632
+ validateNumber(vector.y, `${name}.y`);
633
+ validateNumber(vector.z, `${name}.z`);
634
+ }
635
+ function validateVector4D(vector, name = "Vector4D") {
636
+ if (!vector || typeof vector !== "object") {
637
+ throw new Error(`${name} must be an object`);
638
+ }
639
+ validateNumber(vector.x, `${name}.x`);
640
+ validateNumber(vector.y, `${name}.y`);
641
+ validateNumber(vector.z, `${name}.z`);
642
+ validateNumber(vector.w, `${name}.w`);
643
+ }
644
+ function magnitude2D(vector) {
645
+ validateVector2D(vector);
646
+ const magnitude = Math.sqrt(vector.x * vector.x + vector.y * vector.y);
647
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
648
+ }
649
+ function magnitude3D(vector) {
650
+ validateVector3D(vector);
651
+ const magnitude = Math.sqrt(
652
+ vector.x * vector.x + vector.y * vector.y + vector.z * vector.z
653
+ );
654
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
655
+ }
656
+ function magnitude4D(vector) {
657
+ validateVector4D(vector);
658
+ const magnitude = Math.sqrt(
659
+ vector.x * vector.x + vector.y * vector.y + vector.z * vector.z + vector.w * vector.w
660
+ );
661
+ return isApproximatelyZero(magnitude) ? 0 : magnitude;
662
+ }
663
+ function normalize2D(vector) {
664
+ validateVector2D(vector);
665
+ const mag = magnitude2D(vector);
666
+ if (isApproximatelyZero(mag)) {
667
+ throw new Error("Cannot normalize zero or near-zero vector");
668
+ }
669
+ return {
670
+ x: vector.x / mag,
671
+ y: vector.y / mag
672
+ };
673
+ }
674
+ function normalize3D(vector) {
675
+ validateVector3D(vector);
676
+ const mag = magnitude3D(vector);
677
+ if (isApproximatelyZero(mag)) {
678
+ throw new Error("Cannot normalize zero or near-zero vector");
679
+ }
680
+ return {
681
+ x: vector.x / mag,
682
+ y: vector.y / mag,
683
+ z: vector.z / mag
684
+ };
685
+ }
686
+ function dotProduct2D(a, b) {
687
+ validateVector2D(a, "First vector");
688
+ validateVector2D(b, "Second vector");
689
+ return a.x * b.x + a.y * b.y;
690
+ }
691
+ function dotProduct3D(a, b) {
692
+ validateVector3D(a, "First vector");
693
+ validateVector3D(b, "Second vector");
694
+ return a.x * b.x + a.y * b.y + a.z * b.z;
695
+ }
696
+ function crossProduct3D(a, b) {
697
+ validateVector3D(a, "First vector");
698
+ validateVector3D(b, "Second vector");
699
+ return {
700
+ x: a.y * b.z - a.z * b.y,
701
+ y: a.z * b.x - a.x * b.z,
702
+ z: a.x * b.y - a.y * b.x
703
+ };
704
+ }
705
+ function addVectors2D(a, b) {
706
+ validateVector2D(a, "First vector");
707
+ validateVector2D(b, "Second vector");
708
+ return {
709
+ x: a.x + b.x,
710
+ y: a.y + b.y
711
+ };
712
+ }
713
+ function subtractVectors2D(a, b) {
714
+ validateVector2D(a, "First vector");
715
+ validateVector2D(b, "Second vector");
716
+ return {
717
+ x: a.x - b.x,
718
+ y: a.y - b.y
719
+ };
720
+ }
721
+ function scaleVector2D(vector, scalar) {
722
+ validateVector2D(vector);
723
+ validateNumber(scalar, "scalar");
724
+ return {
725
+ x: vector.x * scalar,
726
+ y: vector.y * scalar
727
+ };
728
+ }
729
+ function angleBetween2D(a, b) {
730
+ validateVector2D(a, "First vector");
731
+ validateVector2D(b, "Second vector");
732
+ const dot = dotProduct2D(a, b);
733
+ const magA = magnitude2D(a);
734
+ const magB = magnitude2D(b);
735
+ if (isApproximatelyZero(magA) || isApproximatelyZero(magB)) {
736
+ throw new Error("Cannot calculate angle with zero or near-zero vector");
737
+ }
738
+ const cosTheta = Math.max(-1, Math.min(1, dot / (magA * magB)));
739
+ return Math.acos(cosTheta);
740
+ }
741
+ function distance2D(a, b) {
742
+ validateVector2D(a, "First point");
743
+ validateVector2D(b, "Second point");
744
+ const dx = b.x - a.x;
745
+ const dy = b.y - a.y;
746
+ const distance = Math.sqrt(dx * dx + dy * dy);
747
+ return isApproximatelyZero(distance) ? 0 : distance;
748
+ }
749
+ function distance3D(a, b) {
750
+ validateVector3D(a, "First point");
751
+ validateVector3D(b, "Second point");
752
+ const dx = b.x - a.x;
753
+ const dy = b.y - a.y;
754
+ const dz = b.z - a.z;
755
+ const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
756
+ return isApproximatelyZero(distance) ? 0 : distance;
757
+ }
758
+ function lerp2D(start, end, t) {
759
+ validateVector2D(start, "Start vector");
760
+ validateVector2D(end, "End vector");
761
+ validateNumber(t, "t");
762
+ return {
763
+ x: start.x + (end.x - start.x) * t,
764
+ y: start.y + (end.y - start.y) * t
765
+ };
766
+ }
767
+ function rotate2D(vector, angle) {
768
+ validateVector2D(vector);
769
+ validateNumber(angle, "angle");
770
+ const cos2 = Math.cos(angle);
771
+ const sin2 = Math.sin(angle);
772
+ return {
773
+ x: vector.x * cos2 - vector.y * sin2,
774
+ y: vector.x * sin2 + vector.y * cos2
775
+ };
776
+ }
777
+
778
+ // src/lib/maths/fn/complex.ts
779
+ var EPSILON = 1e-10;
780
+ var TWO_PI = 2 * Math.PI;
781
+ function isApproximatelyZero2(value) {
782
+ return Math.abs(value) < EPSILON;
783
+ }
784
+ function approximatelyEqual(a, b) {
785
+ return Math.abs(a - b) < EPSILON;
786
+ }
787
+ function normalizeComplex(c) {
788
+ return {
789
+ real: isApproximatelyZero2(c.real) ? 0 : c.real,
790
+ imag: isApproximatelyZero2(c.imag) ? 0 : c.imag
791
+ };
792
+ }
793
+ function validateNumber2(value, name) {
794
+ if (typeof value !== "number" || !Number.isFinite(value)) {
795
+ throw new Error(`${name} must be a finite number, got ${value}`);
796
+ }
797
+ }
798
+ function validateComplexNumber(c, name = "Complex number") {
799
+ if (!c || typeof c !== "object") {
800
+ throw new Error(`${name} must be an object`);
801
+ }
802
+ validateNumber2(c.real, `${name}.real`);
803
+ validateNumber2(c.imag, `${name}.imag`);
804
+ }
805
+ function createComplex(real, imag = 0) {
806
+ validateNumber2(real, "real");
807
+ validateNumber2(imag, "imag");
808
+ return normalizeComplex({ real, imag });
809
+ }
810
+ function addComplex(a, b) {
811
+ validateComplexNumber(a, "First complex number");
812
+ validateComplexNumber(b, "Second complex number");
813
+ return normalizeComplex({
814
+ real: a.real + b.real,
815
+ imag: a.imag + b.imag
816
+ });
817
+ }
818
+ function subtractComplex(a, b) {
819
+ validateComplexNumber(a, "First complex number");
820
+ validateComplexNumber(b, "Second complex number");
821
+ return normalizeComplex({
822
+ real: a.real - b.real,
823
+ imag: a.imag - b.imag
824
+ });
825
+ }
826
+ function multiplyComplex(a, b) {
827
+ validateComplexNumber(a, "First complex number");
828
+ validateComplexNumber(b, "Second complex number");
829
+ return normalizeComplex({
830
+ real: a.real * b.real - a.imag * b.imag,
831
+ imag: a.real * b.imag + a.imag * b.real
832
+ });
833
+ }
834
+ function divideComplex(a, b) {
835
+ validateComplexNumber(a, "Numerator complex number");
836
+ validateComplexNumber(b, "Denominator complex number");
837
+ const denominator = b.real * b.real + b.imag * b.imag;
838
+ if (isApproximatelyZero2(denominator)) {
839
+ throw new Error("Cannot divide by zero or near-zero complex number");
840
+ }
841
+ return normalizeComplex({
842
+ real: (a.real * b.real + a.imag * b.imag) / denominator,
843
+ imag: (a.imag * b.real - a.real * b.imag) / denominator
844
+ });
845
+ }
846
+ function magnitudeComplex(c) {
847
+ validateComplexNumber(c);
848
+ const magnitude = Math.sqrt(c.real * c.real + c.imag * c.imag);
849
+ return isApproximatelyZero2(magnitude) ? 0 : magnitude;
850
+ }
851
+ function conjugateComplex(c) {
852
+ validateComplexNumber(c);
853
+ return normalizeComplex({
854
+ real: c.real,
855
+ imag: -c.imag
856
+ });
857
+ }
858
+ function argumentComplex(c) {
859
+ validateComplexNumber(c);
860
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
861
+ return 0;
862
+ }
863
+ return Math.atan2(c.imag, c.real);
864
+ }
865
+ function toPolarComplex(c) {
866
+ validateComplexNumber(c);
867
+ return {
868
+ magnitude: magnitudeComplex(c),
869
+ angle: argumentComplex(c)
870
+ };
871
+ }
872
+ function fromPolarComplex(magnitude, angle) {
873
+ validateNumber2(magnitude, "magnitude");
874
+ validateNumber2(angle, "angle");
875
+ if (magnitude < -EPSILON) {
876
+ throw new Error("Magnitude must be non-negative");
877
+ }
878
+ let normalizedAngle = angle % TWO_PI;
879
+ if (normalizedAngle > Math.PI) normalizedAngle -= TWO_PI;
880
+ if (normalizedAngle <= -Math.PI) normalizedAngle += TWO_PI;
881
+ const mag = Math.max(0, magnitude);
882
+ return normalizeComplex({
883
+ real: mag * Math.cos(normalizedAngle),
884
+ imag: mag * Math.sin(normalizedAngle)
885
+ });
886
+ }
887
+ function sqrtComplex(c) {
888
+ validateComplexNumber(c);
889
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
890
+ const zero = createComplex(0, 0);
891
+ return [zero, zero];
892
+ }
893
+ const magnitude = magnitudeComplex(c);
894
+ const angle = argumentComplex(c);
895
+ const rootMagnitude = Math.sqrt(magnitude);
896
+ const rootAngle1 = angle / 2;
897
+ const rootAngle2 = rootAngle1 + Math.PI;
898
+ return [
899
+ fromPolarComplex(rootMagnitude, rootAngle1),
900
+ fromPolarComplex(rootMagnitude, rootAngle2)
901
+ ];
902
+ }
903
+ function powerComplex(c, exponent) {
904
+ validateComplexNumber(c);
905
+ validateNumber2(exponent, "exponent");
906
+ if (isApproximatelyZero2(exponent)) {
907
+ return createComplex(1, 0);
908
+ }
909
+ if (approximatelyEqual(exponent, 1)) {
910
+ return createComplex(c.real, c.imag);
911
+ }
912
+ if (approximatelyEqual(exponent, 2)) {
913
+ return multiplyComplex(c, c);
914
+ }
915
+ if (isApproximatelyZero2(c.real) && isApproximatelyZero2(c.imag)) {
916
+ if (exponent > 0) {
917
+ return createComplex(0, 0);
918
+ } else if (exponent < 0) {
919
+ throw new Error("Cannot raise zero to a negative power");
920
+ }
921
+ }
922
+ const polar = toPolarComplex(c);
923
+ const magnitude = Math.pow(polar.magnitude, exponent);
924
+ const safeMagnitude = magnitude < -EPSILON ? Math.abs(magnitude) : Math.max(0, magnitude);
925
+ const angle = polar.angle * exponent;
926
+ return fromPolarComplex(safeMagnitude, angle);
927
+ }
928
+ function lnComplex(c) {
929
+ validateComplexNumber(c);
930
+ const magnitude = magnitudeComplex(c);
931
+ if (isApproximatelyZero2(magnitude)) {
932
+ throw new Error(
933
+ "Cannot take logarithm of zero or near-zero complex number"
934
+ );
935
+ }
936
+ const angle = argumentComplex(c);
937
+ return normalizeComplex({
938
+ real: Math.log(magnitude),
939
+ imag: angle
940
+ });
941
+ }
942
+
943
+ // src/lib/maths/fn/trigo.ts
944
+ function degToRad(degrees) {
945
+ return degrees * Constants.RADIANS_PER_DEGREE;
946
+ }
947
+ function radToDeg(radians) {
948
+ return radians * Constants.DEGREES_PER_RADIAN;
949
+ }
950
+ function degToGrad(degrees) {
951
+ return degrees * (Constants.GRADIANS_IN_CIRCLE / Constants.DEGREES_IN_CIRCLE);
952
+ }
953
+ function gradToDeg(gradians) {
954
+ return gradians * (Constants.DEGREES_IN_CIRCLE / Constants.GRADIANS_IN_CIRCLE);
955
+ }
956
+ function normalizeRadians(radians) {
957
+ const twoPi = Constants.RADIANS_IN_CIRCLE;
958
+ let normalized = radians % twoPi;
959
+ if (normalized < 0) normalized += twoPi;
960
+ return normalized;
961
+ }
962
+ function normalizeDegrees(degrees) {
963
+ let normalized = degrees % Constants.DEGREES_IN_CIRCLE;
964
+ if (normalized < 0) normalized += Constants.DEGREES_IN_CIRCLE;
965
+ return normalized;
966
+ }
967
+ function sin(radians) {
968
+ return Math.sin(radians);
969
+ }
970
+ function cos(radians) {
971
+ return Math.cos(radians);
972
+ }
973
+ function tan(radians) {
974
+ const cosine = Math.cos(radians);
975
+ if (Math.abs(cosine) < 1e-10) {
976
+ throw new Error("Tangent undefined for this angle (cosine is zero)");
977
+ }
978
+ return Math.tan(radians);
979
+ }
980
+ function asin(value) {
981
+ if (value < -1 || value > 1) {
982
+ throw new Error("Arcsine is only defined for values between -1 and 1");
983
+ }
984
+ return Math.asin(value);
985
+ }
986
+ function acos(value) {
987
+ if (value < -1 || value > 1) {
988
+ throw new Error("Arccosine is only defined for values between -1 and 1");
989
+ }
990
+ return Math.acos(value);
991
+ }
992
+ function atan(value) {
993
+ return Math.atan(value);
994
+ }
995
+ function atan2(y, x) {
996
+ return Math.atan2(y, x);
997
+ }
998
+ function sinh(x) {
999
+ return Math.sinh(x);
1000
+ }
1001
+ function cosh(x) {
1002
+ return Math.cosh(x);
1003
+ }
1004
+ function tanh(x) {
1005
+ return Math.tanh(x);
1006
+ }
1007
+ function asinh(x) {
1008
+ return Math.asinh(x);
1009
+ }
1010
+ function acosh(x) {
1011
+ if (x < 1) {
1012
+ throw new Error("Inverse hyperbolic cosine is only defined for x >= 1");
1013
+ }
1014
+ return Math.acosh(x);
1015
+ }
1016
+ function atanh(x) {
1017
+ if (Math.abs(x) >= 1) {
1018
+ throw new Error("Inverse hyperbolic tangent is only defined for |x| < 1");
1019
+ }
1020
+ return Math.atanh(x);
1021
+ }
1022
+ function sec(radians) {
1023
+ const cosine = Math.cos(radians);
1024
+ if (Math.abs(cosine) < 1e-10) {
1025
+ throw new Error("Secant undefined for this angle (cosine is zero)");
1026
+ }
1027
+ return 1 / cosine;
1028
+ }
1029
+ function csc(radians) {
1030
+ const sine = Math.sin(radians);
1031
+ if (Math.abs(sine) < 1e-10) {
1032
+ throw new Error("Cosecant undefined for this angle (sine is zero)");
1033
+ }
1034
+ return 1 / sine;
1035
+ }
1036
+ function cot(radians) {
1037
+ const tangent = Math.tan(radians);
1038
+ if (Math.abs(tangent) < 1e-10) {
1039
+ throw new Error("Cotangent undefined for this angle (tangent is zero)");
1040
+ }
1041
+ return 1 / tangent;
1042
+ }
1043
+
1044
+ // src/lib/maths/formatter.ts
1045
+ var formatNumber = (value, options = {}) => {
1046
+ const {
1047
+ locale = "en-US",
1048
+ minimumFractionDigits = 0,
1049
+ maximumFractionDigits = 20
1050
+ } = options;
1051
+ return new Intl.NumberFormat(locale, {
1052
+ minimumFractionDigits,
1053
+ maximumFractionDigits
1054
+ }).format(value);
1055
+ };
1056
+ var formatCurrency = (value, currency = "USD", locale = "en-US") => {
1057
+ return new Intl.NumberFormat(locale, {
1058
+ style: "currency",
1059
+ currency
1060
+ }).format(value);
1061
+ };
1062
+ var formatBytes = (bytes, decimals = 2) => {
1063
+ if (bytes === 0) return "0 Bytes";
1064
+ const k = 1024;
1065
+ const dm = decimals < 0 ? 0 : decimals;
1066
+ const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
1067
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
1068
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
1069
+ };
1070
+ var formatPercent = (value, decimals = 2, locale = "en-US") => {
1071
+ const percent = value * 100;
1072
+ return new Intl.NumberFormat(locale, {
1073
+ style: "percent",
1074
+ minimumFractionDigits: 0,
1075
+ maximumFractionDigits: Math.max(0, decimals)
1076
+ }).format(percent / 100);
1077
+ };
1078
+
1079
+ // src/lib/maths/random.ts
1080
+ var randomInt = (min2, max2) => {
1081
+ const [realMin, realMax] = min2 <= max2 ? [min2, max2] : [max2, min2];
1082
+ if (typeof crypto !== "undefined" && crypto.getRandomValues) {
1083
+ const range2 = realMax - realMin + 1;
1084
+ const maxSafe = 4294967295;
1085
+ const byteArray = new Uint32Array(1);
1086
+ let randomValue;
1087
+ do {
1088
+ crypto.getRandomValues(byteArray);
1089
+ randomValue = byteArray[0] / (maxSafe + 1);
1090
+ } while (randomValue >= 1 - 1 % range2 / 1);
1091
+ return Math.floor(randomValue * range2) + realMin;
1092
+ }
1093
+ return Math.floor(Math.random() * (realMax - realMin + 1)) + realMin;
1094
+ };
1095
+ var randomFloat = (min2, max2) => {
1096
+ const [realMin, realMax] = min2 <= max2 ? [min2, max2] : [max2, min2];
1097
+ return Math.random() * (realMax - realMin) + realMin;
1098
+ };
1099
+ var randomBool = (probability = 0.5) => {
1100
+ return Math.random() < probability;
1101
+ };
1102
+
1103
+ // src/lib/maths/parser.ts
1104
+ var toNumber = (value, fallback) => {
1105
+ if (typeof value === "number") {
1106
+ return Number.isFinite(value) ? value : fallback !== void 0 ? fallback : NaN;
1107
+ }
1108
+ if (value == null) {
1109
+ return fallback !== void 0 ? fallback : NaN;
1110
+ }
1111
+ if (typeof value === "boolean") {
1112
+ return value ? 1 : 0;
1113
+ }
1114
+ if (typeof value === "string") {
1115
+ const trimmed = value.trim();
1116
+ if (trimmed === "") {
1117
+ return fallback !== void 0 ? fallback : NaN;
1118
+ }
1119
+ const num2 = Number(trimmed);
1120
+ return Number.isFinite(num2) ? num2 : fallback !== void 0 ? fallback : NaN;
1121
+ }
1122
+ const num = Number(value);
1123
+ return Number.isFinite(num) ? num : fallback !== void 0 ? fallback : NaN;
1124
+ };
1125
+ var parseIntSafe = (value, radix = 10, fallback) => {
1126
+ const trimmed = value.trim();
1127
+ if (trimmed === "") {
1128
+ return fallback !== void 0 ? fallback : NaN;
1129
+ }
1130
+ if (radix === 16) {
1131
+ const hexRegex = /^(-?)0?x?([0-9a-fA-F]+)$/;
1132
+ const match = trimmed.match(hexRegex);
1133
+ if (match) {
1134
+ const sign2 = match[1] ? -1 : 1;
1135
+ const hexStr = match[2];
1136
+ const parsed2 = parseInt(hexStr, 16);
1137
+ return !isNaN(parsed2) ? sign2 * parsed2 : fallback !== void 0 ? fallback : NaN;
1138
+ }
1139
+ }
1140
+ const parsed = parseInt(trimmed, radix);
1141
+ if (isNaN(parsed)) {
1142
+ return fallback !== void 0 ? fallback : NaN;
1143
+ }
1144
+ if (radix !== 16 && radix !== 10) {
1145
+ const validDigits = "0123456789abcdefghijklmnopqrstuvwxyz".slice(0, radix);
1146
+ const pattern = new RegExp(`^[-+]?[${validDigits}]+$`, "i");
1147
+ if (!pattern.test(trimmed)) {
1148
+ return fallback !== void 0 ? fallback : NaN;
1149
+ }
1150
+ }
1151
+ return parsed;
1152
+ };