@ansh-ui/core 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/dist/behaviours.cjs +64 -0
  3. package/dist/behaviours.cjs.map +1 -0
  4. package/dist/behaviours.d.cts +3 -0
  5. package/dist/behaviours.d.ts +3 -0
  6. package/dist/behaviours.js +7 -0
  7. package/dist/behaviours.js.map +1 -0
  8. package/dist/chunk-23GSSIMK.cjs +439 -0
  9. package/dist/chunk-23GSSIMK.cjs.map +1 -0
  10. package/dist/chunk-56NNBIAO.js +2446 -0
  11. package/dist/chunk-56NNBIAO.js.map +1 -0
  12. package/dist/chunk-6PFYGJWD.cjs +136 -0
  13. package/dist/chunk-6PFYGJWD.cjs.map +1 -0
  14. package/dist/chunk-7MEIXWPH.js +313 -0
  15. package/dist/chunk-7MEIXWPH.js.map +1 -0
  16. package/dist/chunk-7MYTSAPR.js +83 -0
  17. package/dist/chunk-7MYTSAPR.js.map +1 -0
  18. package/dist/chunk-BOQQHICI.js +1036 -0
  19. package/dist/chunk-BOQQHICI.js.map +1 -0
  20. package/dist/chunk-C6XPQO2O.js +1170 -0
  21. package/dist/chunk-C6XPQO2O.js.map +1 -0
  22. package/dist/chunk-DXJ63QAR.cjs +723 -0
  23. package/dist/chunk-DXJ63QAR.cjs.map +1 -0
  24. package/dist/chunk-FAVIEION.js +705 -0
  25. package/dist/chunk-FAVIEION.js.map +1 -0
  26. package/dist/chunk-FNR35HTL.cjs +107 -0
  27. package/dist/chunk-FNR35HTL.cjs.map +1 -0
  28. package/dist/chunk-GHBRGMSO.cjs +91 -0
  29. package/dist/chunk-GHBRGMSO.cjs.map +1 -0
  30. package/dist/chunk-GJRIHN76.cjs +359 -0
  31. package/dist/chunk-GJRIHN76.cjs.map +1 -0
  32. package/dist/chunk-ILKUL7GD.cjs +115 -0
  33. package/dist/chunk-ILKUL7GD.cjs.map +1 -0
  34. package/dist/chunk-KTUBCQC3.js +409 -0
  35. package/dist/chunk-KTUBCQC3.js.map +1 -0
  36. package/dist/chunk-KU2C6GEA.js +90 -0
  37. package/dist/chunk-KU2C6GEA.js.map +1 -0
  38. package/dist/chunk-LGA3N3YJ.cjs +413 -0
  39. package/dist/chunk-LGA3N3YJ.cjs.map +1 -0
  40. package/dist/chunk-MMO7KO53.cjs +1060 -0
  41. package/dist/chunk-MMO7KO53.cjs.map +1 -0
  42. package/dist/chunk-NSXKCJJ7.js +109 -0
  43. package/dist/chunk-NSXKCJJ7.js.map +1 -0
  44. package/dist/chunk-QALZKHWH.js +387 -0
  45. package/dist/chunk-QALZKHWH.js.map +1 -0
  46. package/dist/chunk-R7UJ7MWP.cjs +2479 -0
  47. package/dist/chunk-R7UJ7MWP.cjs.map +1 -0
  48. package/dist/chunk-UJBXY6QC.cjs +1186 -0
  49. package/dist/chunk-UJBXY6QC.cjs.map +1 -0
  50. package/dist/chunk-YFQXRC5R.js +99 -0
  51. package/dist/chunk-YFQXRC5R.js.map +1 -0
  52. package/dist/color.cjs +257 -0
  53. package/dist/color.cjs.map +1 -0
  54. package/dist/color.d.cts +303 -0
  55. package/dist/color.d.ts +303 -0
  56. package/dist/color.js +8 -0
  57. package/dist/color.js.map +1 -0
  58. package/dist/easing.cjs +189 -0
  59. package/dist/easing.cjs.map +1 -0
  60. package/dist/easing.d.cts +134 -0
  61. package/dist/easing.d.ts +134 -0
  62. package/dist/easing.js +4 -0
  63. package/dist/easing.js.map +1 -0
  64. package/dist/effects.cjs +99 -0
  65. package/dist/effects.cjs.map +1 -0
  66. package/dist/effects.d.cts +5 -0
  67. package/dist/effects.d.ts +5 -0
  68. package/dist/effects.js +10 -0
  69. package/dist/effects.js.map +1 -0
  70. package/dist/index-CCdpefMp.d.ts +967 -0
  71. package/dist/index-CQEEPu-D.d.ts +435 -0
  72. package/dist/index-DHOfsEIn.d.cts +967 -0
  73. package/dist/index-Dl8GCsya.d.cts +435 -0
  74. package/dist/index.cjs +2206 -0
  75. package/dist/index.cjs.map +1 -0
  76. package/dist/index.d.cts +1122 -0
  77. package/dist/index.d.ts +1122 -0
  78. package/dist/index.js +1182 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/math.cjs +238 -0
  81. package/dist/math.cjs.map +1 -0
  82. package/dist/math.d.cts +120 -0
  83. package/dist/math.d.ts +120 -0
  84. package/dist/math.js +5 -0
  85. package/dist/math.js.map +1 -0
  86. package/dist/noise.cjs +78 -0
  87. package/dist/noise.cjs.map +1 -0
  88. package/dist/noise.d.cts +190 -0
  89. package/dist/noise.d.ts +190 -0
  90. package/dist/noise.js +5 -0
  91. package/dist/noise.js.map +1 -0
  92. package/dist/palette-6HkVltYU.d.cts +219 -0
  93. package/dist/palette-6HkVltYU.d.ts +219 -0
  94. package/dist/random--4mSc5Lp.d.cts +75 -0
  95. package/dist/random--4mSc5Lp.d.ts +75 -0
  96. package/dist/reduced-motion-D0LUgZle.d.cts +120 -0
  97. package/dist/reduced-motion-D0LUgZle.d.ts +120 -0
  98. package/dist/types-B1FLLf3-.d.cts +21 -0
  99. package/dist/types-B1FLLf3-.d.ts +21 -0
  100. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/noise/tables.ts","../src/noise/perlin.ts","../src/noise/simplex.ts","../src/noise/fractal.ts","../src/noise/index.ts"],"names":["createRng","clamp"],"mappings":";;;;;;AAcO,IAAM,KAAA,GAAQ,IAAI,YAAA,CAAa;AAAA,EACpC,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAChG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI;AACnB,CAAC;AAGM,IAAM,KAAA,GAAQ,IAAI,YAAA,CAAa;AAAA,EACpC,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAC7F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAC/F,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAC9F,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,EAAA;AAAA,EAAI,CAAA;AAAA,EAAG,CAAA;AAAA,EAAG,CAAA;AAAA,EAC/F,EAAA;AAAA,EAAI,CAAA;A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","file":"chunk-DXJ63QAR.cjs","sourcesContent":["import { createRng } from '../math/random'\n\n/**\n * Gradient tables and permutation setup shared by every noise variant.\n *\n * The permutation table is a shuffled `0..255` sequence duplicated to 512 entries. Doubling\n * it lets the noise functions index `perm[i + perm[j]]` without a modulo on every lookup,\n * which matters when these run millions of times per second.\n *\n * The table is derived from the effect's seed, so noise fields are reproducible — the same\n * seed always produces the same landscape.\n */\n\n/** 12 edge-midpoint gradients of a cube. Used by 2D and 3D noise. */\nexport const GRAD3 = new Float32Array([\n 1, 1, 0, -1, 1, 0, 1, -1, 0, -1, -1, 0, 1, 0, 1, -1, 0, 1, 1, 0, -1, -1, 0, -1, 0, 1, 1, 0, -1, 1,\n 0, 1, -1, 0, -1, -1,\n])\n\n/** 32 gradients for 4D noise — the edge midpoints of a hypercube. */\nexport const GRAD4 = new Float32Array([\n 0, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, -1, 1, 1, 0, -1, 1, -1, 0, -1, -1, 1, 0,\n -1, -1, -1, 1, 0, 1, 1, 1, 0, 1, -1, 1, 0, -1, 1, 1, 0, -1, -1, -1, 0, 1, 1, -1, 0, 1, -1, -1, 0,\n -1, 1, -1, 0, -1, -1, 1, 1, 0, 1, 1, 1, 0, -1, 1, -1, 0, 1, 1, -1, 0, -1, -1, 1, 0, 1, -1, 1, 0,\n -1, -1, -1, 0, 1, -1, -1, 0, -1, 1, 1, 1, 0, 1, 1, -1, 0, 1, -1, 1, 0, 1, -1, -1, 0, -1, 1, 1, 0,\n -1, 1, -1, 0, -1, -1, 1, 0, -1, -1, -1, 0,\n])\n\nexport interface NoiseTables {\n /** 512-entry doubled permutation table. */\n readonly perm: Uint8Array\n /** `perm[i] % 12`, precomputed — saves a modulo in the inner loop of 2D/3D noise. */\n readonly permMod12: Uint8Array\n /** `perm[i] % 32`, precomputed for 4D noise. */\n readonly permMod32: Uint8Array\n}\n\nconst tableCache = new Map<number, NoiseTables>()\nconst MAX_CACHED_TABLES = 32\n\n/**\n * Build (or reuse) permutation tables for a seed.\n *\n * Tables are 1.5 KB each and construction costs a shuffle, so we memoise them. The cache is\n * bounded because a page that animates its seed would otherwise grow it without limit; we\n * evict oldest-first, which suits the access pattern (a handful of stable seeds per page).\n */\nexport function createNoiseTables(seed = 0): NoiseTables {\n const key = seed >>> 0\n const cached = tableCache.get(key)\n if (cached) return cached\n\n const rng = createRng(key)\n const source = new Uint8Array(256)\n for (let i = 0; i < 256; i++) source[i] = i\n\n // Fisher–Yates over the base table.\n for (let i = 255; i > 0; i--) {\n const j = Math.floor(rng.next() * (i + 1))\n const tmp = source[i]\n source[i] = source[j]\n source[j] = tmp\n }\n\n const perm = new Uint8Array(512)\n const permMod12 = new Uint8Array(512)\n const permMod32 = new Uint8Array(512)\n for (let i = 0; i < 512; i++) {\n const value = source[i & 255]\n perm[i] = value\n permMod12[i] = value % 12\n permMod32[i] = value % 32\n }\n\n const tables: NoiseTables = { perm, permMod12, permMod32 }\n\n if (tableCache.size >= MAX_CACHED_TABLES) {\n const oldest = tableCache.keys().next()\n if (!oldest.done) tableCache.delete(oldest.value)\n }\n tableCache.set(key, tables)\n return tables\n}\n\n/** Clear the memoised permutation tables. Exposed for tests and long-lived workers. */\nexport function clearNoiseTableCache(): void {\n tableCache.clear()\n}\n","import { createNoiseTables } from './tables'\n\n/**\n * Classic Perlin gradient noise (1985 formulation with the 2002 quintic fade).\n *\n * Simplex noise is usually the better choice, but Perlin is kept for two reasons:\n * it is what most reference material and shader ports assume, and its axis-aligned\n * structure is occasionally *desirable* — woodgrain and brushed-metal looks depend on it.\n *\n * Returns values in approximately `[-1, 1]`.\n */\n\n/** Quintic fade: 6t⁵ − 15t⁴ + 10t³. Zero first and second derivative at both ends. */\nfunction fade(t: number): number {\n return t * t * t * (t * (t * 6 - 15) + 10)\n}\n\nfunction lerp(a: number, b: number, t: number): number {\n return a + t * (b - a)\n}\n\n/** Dot product of a hash-selected 2D gradient with the offset vector. */\nfunction grad2(hash: number, x: number, y: number): number {\n switch (hash & 7) {\n case 0:\n return x + y\n case 1:\n return -x + y\n case 2:\n return x - y\n case 3:\n return -x - y\n case 4:\n return x\n case 5:\n return -x\n case 6:\n return y\n default:\n return -y\n }\n}\n\nfunction grad3(hash: number, x: number, y: number, z: number): number {\n const h = hash & 15\n const u = h < 8 ? x : y\n const v = h < 4 ? y : h === 12 || h === 14 ? x : z\n return (h & 1 ? -u : u) + (h & 2 ? -v : v)\n}\n\nexport interface PerlinNoise {\n noise2D(x: number, y: number): number\n noise3D(x: number, y: number, z: number): number\n}\n\nexport function createPerlinNoise(seed = 0): PerlinNoise {\n const { perm } = createNoiseTables(seed)\n\n function noise2D(x: number, y: number): number {\n const xi = Math.floor(x) & 255\n const yi = Math.floor(y) & 255\n const xf = x - Math.floor(x)\n const yf = y - Math.floor(y)\n\n const u = fade(xf)\n const v = fade(yf)\n\n const aa = perm[perm[xi] + yi]\n const ab = perm[perm[xi] + yi + 1]\n const ba = perm[perm[xi + 1] + yi]\n const bb = perm[perm[xi + 1] + yi + 1]\n\n const x1 = lerp(grad2(aa, xf, yf), grad2(ba, xf - 1, yf), u)\n const x2 = lerp(grad2(ab, xf, yf - 1), grad2(bb, xf - 1, yf - 1), u)\n\n // Gradients reach ±√2 in 2D; normalise so the output sits in [-1, 1].\n return lerp(x1, x2, v) * 0.7071067811865475\n }\n\n function noise3D(x: number, y: number, z: number): number {\n const xi = Math.floor(x) & 255\n const yi = Math.floor(y) & 255\n const zi = Math.floor(z) & 255\n const xf = x - Math.floor(x)\n const yf = y - Math.floor(y)\n const zf = z - Math.floor(z)\n\n const u = fade(xf)\n const v = fade(yf)\n const w = fade(zf)\n\n const a = perm[xi] + yi\n const aa = perm[a] + zi\n const ab = perm[a + 1] + zi\n const b = perm[xi + 1] + yi\n const ba = perm[b] + zi\n const bb = perm[b + 1] + zi\n\n const x1 = lerp(grad3(perm[aa], xf, yf, zf), grad3(perm[ba], xf - 1, yf, zf), u)\n const x2 = lerp(grad3(perm[ab], xf, yf - 1, zf), grad3(perm[bb], xf - 1, yf - 1, zf), u)\n const y1 = lerp(x1, x2, v)\n\n const x3 = lerp(grad3(perm[aa + 1], xf, yf, zf - 1), grad3(perm[ba + 1], xf - 1, yf, zf - 1), u)\n const x4 = lerp(\n grad3(perm[ab + 1], xf, yf - 1, zf - 1),\n grad3(perm[bb + 1], xf - 1, yf - 1, zf - 1),\n u,\n )\n const y2 = lerp(x3, x4, v)\n\n return lerp(y1, y2, w)\n }\n\n return { noise2D, noise3D }\n}\n\n/**\n * Value noise: interpolates hashed *values* at lattice points rather than gradients.\n *\n * Cheaper than gradient noise and blockier in character. Good for film grain, dithering and\n * any place you want visible cell structure rather than smooth flow.\n */\nexport function createValueNoise(seed = 0) {\n const { perm } = createNoiseTables(seed)\n\n const valueAt = (x: number, y: number): number => (perm[perm[x & 255] + (y & 255)] / 255) * 2 - 1\n\n return {\n noise2D(x: number, y: number): number {\n const xi = Math.floor(x)\n const yi = Math.floor(y)\n const u = fade(x - xi)\n const v = fade(y - yi)\n const x1 = lerp(valueAt(xi, yi), valueAt(xi + 1, yi), u)\n const x2 = lerp(valueAt(xi, yi + 1), valueAt(xi + 1, yi + 1), u)\n return lerp(x1, x2, v)\n },\n }\n}\n","import { GRAD3, GRAD4, createNoiseTables } from './tables'\n\n/**\n * Simplex noise (Ken Perlin, 2001).\n *\n * Preferred over classic Perlin noise for anything with visible structure: it has no\n * directional artefacts along the axes, lower computational complexity in higher dimensions\n * (O(n²) rather than O(2ⁿ)), and a well-defined continuous gradient.\n *\n * All functions return values in approximately `[-1, 1]`. The scaling constants (70, 32, 27)\n * are the empirically derived normalisers for each dimensionality.\n */\n\n// Skew/unskew factors that map the square/cube/hypercube grid onto a simplex grid.\nconst F2 = 0.5 * (Math.sqrt(3) - 1)\nconst G2 = (3 - Math.sqrt(3)) / 6\nconst F3 = 1 / 3\nconst G3 = 1 / 6\nconst F4 = (Math.sqrt(5) - 1) / 4\nconst G4 = (5 - Math.sqrt(5)) / 20\n\nexport interface SimplexNoise {\n noise2D(x: number, y: number): number\n noise3D(x: number, y: number, z: number): number\n noise4D(x: number, y: number, z: number, w: number): number\n}\n\nexport function createSimplexNoise(seed = 0): SimplexNoise {\n const { perm, permMod12, permMod32 } = createNoiseTables(seed)\n\n function noise2D(x: number, y: number): number {\n // Skew the input space to determine which simplex cell we're in.\n const s = (x + y) * F2\n const i = Math.floor(x + s)\n const j = Math.floor(y + s)\n const t = (i + j) * G2\n\n // Unskew the cell origin back to (x, y) space and find the distance from it.\n const x0 = x - (i - t)\n const y0 = y - (j - t)\n\n // A 2D simplex is a triangle: determine which of the two we're in.\n const i1 = x0 > y0 ? 1 : 0\n const j1 = x0 > y0 ? 0 : 1\n\n const x1 = x0 - i1 + G2\n const y1 = y0 - j1 + G2\n const x2 = x0 - 1 + 2 * G2\n const y2 = y0 - 1 + 2 * G2\n\n const ii = i & 255\n const jj = j & 255\n\n let n0 = 0\n let n1 = 0\n let n2 = 0\n\n let t0 = 0.5 - x0 * x0 - y0 * y0\n if (t0 >= 0) {\n const gi0 = permMod12[ii + perm[jj]] * 3\n t0 *= t0\n n0 = t0 * t0 * (GRAD3[gi0] * x0 + GRAD3[gi0 + 1] * y0)\n }\n\n let t1 = 0.5 - x1 * x1 - y1 * y1\n if (t1 >= 0) {\n const gi1 = permMod12[ii + i1 + perm[jj + j1]] * 3\n t1 *= t1\n n1 = t1 * t1 * (GRAD3[gi1] * x1 + GRAD3[gi1 + 1] * y1)\n }\n\n let t2 = 0.5 - x2 * x2 - y2 * y2\n if (t2 >= 0) {\n const gi2 = permMod12[ii + 1 + perm[jj + 1]] * 3\n t2 *= t2\n n2 = t2 * t2 * (GRAD3[gi2] * x2 + GRAD3[gi2 + 1] * y2)\n }\n\n return 70 * (n0 + n1 + n2)\n }\n\n function noise3D(x: number, y: number, z: number): number {\n const s = (x + y + z) * F3\n const i = Math.floor(x + s)\n const j = Math.floor(y + s)\n const k = Math.floor(z + s)\n const t = (i + j + k) * G3\n\n const x0 = x - (i - t)\n const y0 = y - (j - t)\n const z0 = z - (k - t)\n\n // A 3D simplex is a tetrahedron; rank the coordinates to pick which of the six.\n let i1: number, j1: number, k1: number\n let i2: number, j2: number, k2: number\n\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1\n j1 = 0\n k1 = 0\n i2 = 1\n j2 = 1\n k2 = 0\n } else if (x0 >= z0) {\n i1 = 1\n j1 = 0\n k1 = 0\n i2 = 1\n j2 = 0\n k2 = 1\n } else {\n i1 = 0\n j1 = 0\n k1 = 1\n i2 = 1\n j2 = 0\n k2 = 1\n }\n } else {\n if (y0 < z0) {\n i1 = 0\n j1 = 0\n k1 = 1\n i2 = 0\n j2 = 1\n k2 = 1\n } else if (x0 < z0) {\n i1 = 0\n j1 = 1\n k1 = 0\n i2 = 0\n j2 = 1\n k2 = 1\n } else {\n i1 = 0\n j1 = 1\n k1 = 0\n i2 = 1\n j2 = 1\n k2 = 0\n }\n }\n\n const x1 = x0 - i1 + G3\n const y1 = y0 - j1 + G3\n const z1 = z0 - k1 + G3\n const x2 = x0 - i2 + 2 * G3\n const y2 = y0 - j2 + 2 * G3\n const z2 = z0 - k2 + 2 * G3\n const x3 = x0 - 1 + 3 * G3\n const y3 = y0 - 1 + 3 * G3\n const z3 = z0 - 1 + 3 * G3\n\n const ii = i & 255\n const jj = j & 255\n const kk = k & 255\n\n let n0 = 0\n let n1 = 0\n let n2 = 0\n let n3 = 0\n\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0\n if (t0 >= 0) {\n const gi0 = permMod12[ii + perm[jj + perm[kk]]] * 3\n t0 *= t0\n n0 = t0 * t0 * (GRAD3[gi0] * x0 + GRAD3[gi0 + 1] * y0 + GRAD3[gi0 + 2] * z0)\n }\n\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1\n if (t1 >= 0) {\n const gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]] * 3\n t1 *= t1\n n1 = t1 * t1 * (GRAD3[gi1] * x1 + GRAD3[gi1 + 1] * y1 + GRAD3[gi1 + 2] * z1)\n }\n\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2\n if (t2 >= 0) {\n const gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]] * 3\n t2 *= t2\n n2 = t2 * t2 * (GRAD3[gi2] * x2 + GRAD3[gi2 + 1] * y2 + GRAD3[gi2 + 2] * z2)\n }\n\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3\n if (t3 >= 0) {\n const gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]] * 3\n t3 *= t3\n n3 = t3 * t3 * (GRAD3[gi3] * x3 + GRAD3[gi3 + 1] * y3 + GRAD3[gi3 + 2] * z3)\n }\n\n return 32 * (n0 + n1 + n2 + n3)\n }\n\n function noise4D(x: number, y: number, z: number, w: number): number {\n const s = (x + y + z + w) * F4\n const i = Math.floor(x + s)\n const j = Math.floor(y + s)\n const k = Math.floor(z + s)\n const l = Math.floor(w + s)\n const t = (i + j + k + l) * G4\n\n const x0 = x - (i - t)\n const y0 = y - (j - t)\n const z0 = z - (k - t)\n const w0 = w - (l - t)\n\n // Rank the four coordinates by magnitude; the ranking directly gives the simplex corners.\n let rankx = 0\n let ranky = 0\n let rankz = 0\n let rankw = 0\n if (x0 > y0) rankx++\n else ranky++\n if (x0 > z0) rankx++\n else rankz++\n if (x0 > w0) rankx++\n else rankw++\n if (y0 > z0) ranky++\n else rankz++\n if (y0 > w0) ranky++\n else rankw++\n if (z0 > w0) rankz++\n else rankw++\n\n const i1 = rankx >= 3 ? 1 : 0\n const j1 = ranky >= 3 ? 1 : 0\n const k1 = rankz >= 3 ? 1 : 0\n const l1 = rankw >= 3 ? 1 : 0\n const i2 = rankx >= 2 ? 1 : 0\n const j2 = ranky >= 2 ? 1 : 0\n const k2 = rankz >= 2 ? 1 : 0\n const l2 = rankw >= 2 ? 1 : 0\n const i3 = rankx >= 1 ? 1 : 0\n const j3 = ranky >= 1 ? 1 : 0\n const k3 = rankz >= 1 ? 1 : 0\n const l3 = rankw >= 1 ? 1 : 0\n\n const x1 = x0 - i1 + G4\n const y1 = y0 - j1 + G4\n const z1 = z0 - k1 + G4\n const w1 = w0 - l1 + G4\n const x2 = x0 - i2 + 2 * G4\n const y2 = y0 - j2 + 2 * G4\n const z2 = z0 - k2 + 2 * G4\n const w2 = w0 - l2 + 2 * G4\n const x3 = x0 - i3 + 3 * G4\n const y3 = y0 - j3 + 3 * G4\n const z3 = z0 - k3 + 3 * G4\n const w3 = w0 - l3 + 3 * G4\n const x4 = x0 - 1 + 4 * G4\n const y4 = y0 - 1 + 4 * G4\n const z4 = z0 - 1 + 4 * G4\n const w4 = w0 - 1 + 4 * G4\n\n const ii = i & 255\n const jj = j & 255\n const kk = k & 255\n const ll = l & 255\n\n let n = 0\n\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0\n if (t0 >= 0) {\n const gi = permMod32[ii + perm[jj + perm[kk + perm[ll]]]] * 4\n t0 *= t0\n n += t0 * t0 * (GRAD4[gi] * x0 + GRAD4[gi + 1] * y0 + GRAD4[gi + 2] * z0 + GRAD4[gi + 3] * w0)\n }\n\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1\n if (t1 >= 0) {\n const gi = permMod32[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] * 4\n t1 *= t1\n n += t1 * t1 * (GRAD4[gi] * x1 + GRAD4[gi + 1] * y1 + GRAD4[gi + 2] * z1 + GRAD4[gi + 3] * w1)\n }\n\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2\n if (t2 >= 0) {\n const gi = permMod32[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] * 4\n t2 *= t2\n n += t2 * t2 * (GRAD4[gi] * x2 + GRAD4[gi + 1] * y2 + GRAD4[gi + 2] * z2 + GRAD4[gi + 3] * w2)\n }\n\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3\n if (t3 >= 0) {\n const gi = permMod32[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] * 4\n t3 *= t3\n n += t3 * t3 * (GRAD4[gi] * x3 + GRAD4[gi + 1] * y3 + GRAD4[gi + 2] * z3 + GRAD4[gi + 3] * w3)\n }\n\n let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4\n if (t4 >= 0) {\n const gi = permMod32[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] * 4\n t4 *= t4\n n += t4 * t4 * (GRAD4[gi] * x4 + GRAD4[gi + 1] * y4 + GRAD4[gi + 2] * z4 + GRAD4[gi + 3] * w4)\n }\n\n return 27 * n\n }\n\n return { noise2D, noise3D, noise4D }\n}\n","import { clamp } from '../math/scalar'\n\n/**\n * Fractal composition of a base noise function.\n *\n * A single octave of simplex noise is smooth and featureless. Real natural texture comes from\n * summing octaves at increasing frequency and decreasing amplitude — fractional Brownian\n * motion. This module provides the standard family of summations, all parameterised so that\n * no frequency, amplitude, or octave count is hardcoded inside an effect.\n */\n\nexport type Noise2DFn = (x: number, y: number) => number\nexport type Noise3DFn = (x: number, y: number, z: number) => number\n\nexport interface FractalOptions {\n /**\n * Number of summed layers. Each octave roughly doubles the cost, and beyond ~6 the added\n * detail is below a pixel for typical scales. Default `4`.\n */\n octaves?: number\n /** Frequency multiplier per octave. `2` is the classic choice. Default `2`. */\n lacunarity?: number\n /**\n * Amplitude multiplier per octave. Also called persistence. `0.5` gives the pink-noise\n * falloff that reads as natural. Default `0.5`.\n */\n gain?: number\n /** Frequency of the first octave. Default `1`. */\n frequency?: number\n /** Amplitude of the first octave. Default `1`. */\n amplitude?: number\n /**\n * Normalise the result back into `[-1, 1]` by dividing by the total amplitude.\n * Without this, more octaves means a quieter signal. Default `true`.\n */\n normalize?: boolean\n}\n\nexport const FRACTAL_DEFAULTS = {\n octaves: 4,\n lacunarity: 2,\n gain: 0.5,\n frequency: 1,\n amplitude: 1,\n normalize: true,\n} as const\n\nfunction resolve(options: FractalOptions | undefined) {\n return {\n octaves: Math.max(1, Math.floor(options?.octaves ?? FRACTAL_DEFAULTS.octaves)),\n lacunarity: options?.lacunarity ?? FRACTAL_DEFAULTS.lacunarity,\n gain: options?.gain ?? FRACTAL_DEFAULTS.gain,\n frequency: options?.frequency ?? FRACTAL_DEFAULTS.frequency,\n amplitude: options?.amplitude ?? FRACTAL_DEFAULTS.amplitude,\n normalize: options?.normalize ?? FRACTAL_DEFAULTS.normalize,\n }\n}\n\n/** Standard fBm over a 2D noise source. Output in `[-1, 1]` when normalised. */\nexport function fbm2D(noise: Noise2DFn, options?: FractalOptions): Noise2DFn {\n const { octaves, lacunarity, gain, frequency, amplitude, normalize } = resolve(options)\n return (x, y) => {\n let sum = 0\n let amp = amplitude\n let freq = frequency\n let total = 0\n for (let i = 0; i < octaves; i++) {\n sum += noise(x * freq, y * freq) * amp\n total += amp\n amp *= gain\n freq *= lacunarity\n }\n return normalize && total > 0 ? sum / total : sum\n }\n}\n\n/** Standard fBm over a 3D noise source — use the third axis as time for animated fields. */\nexport function fbm3D(noise: Noise3DFn, options?: FractalOptions): Noise3DFn {\n const { octaves, lacunarity, gain, frequency, amplitude, normalize } = resolve(options)\n return (x, y, z) => {\n let sum = 0\n let amp = amplitude\n let freq = frequency\n let total = 0\n for (let i = 0; i < octaves; i++) {\n sum += noise(x * freq, y * freq, z * freq) * amp\n total += amp\n amp *= gain\n freq *= lacunarity\n }\n return normalize && total > 0 ? sum / total : sum\n }\n}\n\n/**\n * Ridged multifractal. Inverts and sharpens each octave (`1 - |n|`, squared), producing crisp\n * ridge lines instead of rolling hills. This is what makes convincing mountain silhouettes,\n * lightning, and the filament structure in aurora curtains.\n *\n * Output is in `[0, 1]`.\n */\nexport function ridged2D(noise: Noise2DFn, options?: FractalOptions): Noise2DFn {\n const { octaves, lacunarity, gain, frequency, amplitude } = resolve(options)\n return (x, y) => {\n let sum = 0\n let amp = amplitude\n let freq = frequency\n let total = 0\n for (let i = 0; i < octaves; i++) {\n const n = 1 - Math.abs(noise(x * freq, y * freq))\n sum += n * n * amp\n total += amp\n amp *= gain\n freq *= lacunarity\n }\n return total > 0 ? clamp(sum / total, 0, 1) : 0\n }\n}\n\n/**\n * Turbulence: fBm over the absolute value of each octave. Produces the billowing,\n * smoke-like structure used for clouds and flame.\n *\n * Output is in `[0, 1]`.\n */\nexport function turbulence2D(noise: Noise2DFn, options?: FractalOptions): Noise2DFn {\n const { octaves, lacunarity, gain, frequency, amplitude } = resolve(options)\n return (x, y) => {\n let sum = 0\n let amp = amplitude\n let freq = frequency\n let total = 0\n for (let i = 0; i < octaves; i++) {\n sum += Math.abs(noise(x * freq, y * freq)) * amp\n total += amp\n amp *= gain\n freq *= lacunarity\n }\n return total > 0 ? clamp(sum / total, 0, 1) : 0\n }\n}\n\n/**\n * Domain warping — feed noise through itself.\n *\n * `warp(p) = noise(p + strength * noise(p))`. This single trick is responsible for most of\n * the \"organic liquid\" look in modern generative backgrounds: it turns the isotropic blobs of\n * plain fBm into flowing, marbled filaments.\n *\n * @param strength How far the domain is displaced, in noise-space units. `0.5`–`2` is useful.\n */\nexport function warp2D(noise: Noise2DFn, strength = 1, offset = 5.2): Noise2DFn {\n return (x, y) => {\n const qx = noise(x, y)\n const qy = noise(x + offset, y + offset * 0.7)\n return noise(x + strength * qx, y + strength * qy)\n }\n}\n\nexport interface CurlResult {\n x: number\n y: number\n}\n\n/**\n * Curl (divergence-free) noise for 2D flow fields.\n *\n * A particle advected by raw noise will pool in sinks and thin out in sources, because the\n * field has non-zero divergence. Taking the perpendicular gradient of a scalar potential —\n * `(∂N/∂y, −∂N/∂x)` — yields a field with zero divergence, so particle density is preserved\n * and the motion looks like real fluid.\n *\n * The derivative is a central difference; `epsilon` trades accuracy against smoothness.\n */\nexport function curl2D(noise: Noise2DFn, epsilon = 0.0001): (x: number, y: number) => CurlResult {\n const inv = 1 / (2 * epsilon)\n return (x, y) => {\n const dNdy = (noise(x, y + epsilon) - noise(x, y - epsilon)) * inv\n const dNdx = (noise(x + epsilon, y) - noise(x - epsilon, y)) * inv\n return { x: dNdy, y: -dNdx }\n }\n}\n\n/** The 3D-source variant of {@link curl2D}, letting you animate the field over time. */\nexport function curl2DAnimated(\n noise: Noise3DFn,\n epsilon = 0.0001,\n): (x: number, y: number, t: number) => CurlResult {\n const inv = 1 / (2 * epsilon)\n return (x, y, t) => {\n const dNdy = (noise(x, y + epsilon, t) - noise(x, y - epsilon, t)) * inv\n const dNdx = (noise(x + epsilon, y, t) - noise(x - epsilon, y, t)) * inv\n return { x: dNdy, y: -dNdx }\n }\n}\n\n/**\n * Make a 2D noise field seamlessly tileable over `[0, width) × [0, height)`.\n *\n * Works by sampling 4D noise on the surface of a torus: each axis becomes a circle, so the\n * field wraps exactly with no seam. This is the correct way to do it — blending mirrored\n * copies leaves visible symmetry artefacts.\n */\nexport function tileable2D(\n noise4D: (x: number, y: number, z: number, w: number) => number,\n width: number,\n height: number,\n): Noise2DFn {\n const TAU = Math.PI * 2\n const rx = width / TAU\n const ry = height / TAU\n return (x, y) => {\n const u = (x / Math.max(1e-6, width)) * TAU\n const v = (y / Math.max(1e-6, height)) * TAU\n return noise4D(Math.cos(u) * rx, Math.sin(u) * rx, Math.cos(v) * ry, Math.sin(v) * ry)\n }\n}\n","import { createPerlinNoise, createValueNoise } from './perlin'\nimport { createSimplexNoise } from './simplex'\nimport {\n type FractalOptions,\n curl2D,\n curl2DAnimated,\n fbm2D,\n fbm3D,\n ridged2D,\n tileable2D,\n turbulence2D,\n warp2D,\n} from './fractal'\n\nexport * from './tables'\nexport * from './simplex'\nexport * from './perlin'\nexport * from './fractal'\n\n/**\n * The one-stop noise factory.\n *\n * Effects generally want several related fields from a single seed — a base simplex, an fBm\n * for the large structure, and a curl field for advection. Creating them individually would\n * rebuild the permutation table each time (it is cached, but the wiring is still repetitive),\n * so `createNoise(seed)` hands back a coherent bundle.\n *\n * ```ts\n * const noise = createNoise('hero')\n * const height = noise.fbm2D({ octaves: 5, gain: 0.55 })\n * const flow = noise.curl({ octaves: 2 })\n * ```\n */\nexport function createNoise(seed: number | string = 0) {\n const numericSeed = typeof seed === 'string' ? hashSeed(seed) : seed\n const simplex = createSimplexNoise(numericSeed)\n const perlin = createPerlinNoise(numericSeed)\n const value = createValueNoise(numericSeed)\n\n return {\n seed: numericSeed,\n\n /** Raw single-octave sources. */\n simplex2D: simplex.noise2D,\n simplex3D: simplex.noise3D,\n simplex4D: simplex.noise4D,\n perlin2D: perlin.noise2D,\n perlin3D: perlin.noise3D,\n value2D: value.noise2D,\n\n /** Fractal compositions over simplex. */\n fbm2D: (options?: FractalOptions) => fbm2D(simplex.noise2D, options),\n fbm3D: (options?: FractalOptions) => fbm3D(simplex.noise3D, options),\n ridged2D: (options?: FractalOptions) => ridged2D(simplex.noise2D, options),\n turbulence2D: (options?: FractalOptions) => turbulence2D(simplex.noise2D, options),\n\n /** Domain-warped fBm — the organic, marbled look. */\n warped2D: (strength = 1, options?: FractalOptions) =>\n warp2D(fbm2D(simplex.noise2D, options), strength),\n\n /** Divergence-free flow field for particle advection. */\n curl: (options?: FractalOptions) => curl2D(fbm2D(simplex.noise2D, options)),\n curlAnimated: (options?: FractalOptions) => curl2DAnimated(fbm3D(simplex.noise3D, options)),\n\n /** Seamlessly tiling field over the given extent. */\n tileable: (width: number, height: number) => tileable2D(simplex.noise4D, width, height),\n }\n}\n\nexport type Noise = ReturnType<typeof createNoise>\n\nfunction hashSeed(input: string): number {\n let hash = 0x811c9dc5\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i)\n hash = Math.imul(hash, 0x01000193)\n }\n return hash >>> 0\n}\n"]}