@chartts/gl 0.1.3 → 0.1.5

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 (66) hide show
  1. package/README.md +55 -0
  2. package/dist/bar3d.cjs +4 -4
  3. package/dist/bar3d.d.cts +2 -2
  4. package/dist/bar3d.d.ts +2 -2
  5. package/dist/bar3d.js +1 -1
  6. package/dist/{chunk-M24XMYGG.js → chunk-AGG2KSBO.js} +418 -83
  7. package/dist/chunk-AGG2KSBO.js.map +1 -0
  8. package/dist/{chunk-Q4JAQOV3.cjs → chunk-OTQKQDB6.cjs} +419 -82
  9. package/dist/chunk-OTQKQDB6.cjs.map +1 -0
  10. package/dist/{factory-Cp9Kr7aa.d.cts → factory-jQSzXhK4.d.cts} +4 -1
  11. package/dist/{factory-Cp9Kr7aa.d.ts → factory-jQSzXhK4.d.ts} +4 -1
  12. package/dist/flow-gl.cjs +4 -4
  13. package/dist/flow-gl.d.cts +2 -2
  14. package/dist/flow-gl.d.ts +2 -2
  15. package/dist/flow-gl.js +1 -1
  16. package/dist/globe3d.cjs +4 -4
  17. package/dist/globe3d.d.cts +4 -3
  18. package/dist/globe3d.d.ts +4 -3
  19. package/dist/globe3d.js +1 -1
  20. package/dist/graph-gl.cjs +4 -4
  21. package/dist/graph-gl.d.cts +2 -2
  22. package/dist/graph-gl.d.ts +2 -2
  23. package/dist/graph-gl.js +1 -1
  24. package/dist/index.cjs +60 -52
  25. package/dist/index.d.cts +3 -2
  26. package/dist/index.d.ts +3 -2
  27. package/dist/index.js +1 -1
  28. package/dist/line3d.cjs +4 -4
  29. package/dist/line3d.d.cts +2 -2
  30. package/dist/line3d.d.ts +2 -2
  31. package/dist/line3d.js +1 -1
  32. package/dist/lines-gl.cjs +4 -4
  33. package/dist/lines-gl.d.cts +2 -2
  34. package/dist/lines-gl.d.ts +2 -2
  35. package/dist/lines-gl.js +1 -1
  36. package/dist/lines3d.cjs +4 -4
  37. package/dist/lines3d.d.cts +2 -2
  38. package/dist/lines3d.d.ts +2 -2
  39. package/dist/lines3d.js +1 -1
  40. package/dist/map3d.cjs +4 -4
  41. package/dist/map3d.d.cts +2 -2
  42. package/dist/map3d.d.ts +2 -2
  43. package/dist/map3d.js +1 -1
  44. package/dist/scatter-gl.cjs +4 -4
  45. package/dist/scatter-gl.d.cts +2 -2
  46. package/dist/scatter-gl.d.ts +2 -2
  47. package/dist/scatter-gl.js +1 -1
  48. package/dist/scatter3d.cjs +4 -4
  49. package/dist/scatter3d.d.cts +2 -2
  50. package/dist/scatter3d.d.ts +2 -2
  51. package/dist/scatter3d.js +1 -1
  52. package/dist/surface3d.cjs +4 -4
  53. package/dist/surface3d.d.cts +2 -2
  54. package/dist/surface3d.d.ts +2 -2
  55. package/dist/surface3d.js +1 -1
  56. package/dist/torus3d-NpDo5Nb5.d.ts +15 -0
  57. package/dist/torus3d-fgZpxxQZ.d.cts +15 -0
  58. package/dist/torus3d.cjs +20 -0
  59. package/dist/torus3d.cjs.map +1 -0
  60. package/dist/torus3d.d.cts +2 -0
  61. package/dist/torus3d.d.ts +2 -0
  62. package/dist/torus3d.js +3 -0
  63. package/dist/torus3d.js.map +1 -0
  64. package/package.json +10 -4
  65. package/dist/chunk-M24XMYGG.js.map +0 -1
  66. package/dist/chunk-Q4JAQOV3.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/math.ts","../src/engine/camera.ts","../src/engine/orbit-controls.ts","../src/engine/shader.ts","../src/engine/renderer.ts","../src/engine/lighting.ts","../src/engine/picking.ts","../src/engine/buffer.ts","../src/engine/grid3d.ts","../src/types.ts","../src/api/create-gl.ts","../src/shaders/common.glsl.ts","../src/shaders/point.vert.ts","../src/shaders/point.frag.ts","../src/charts/scatter3d/scatter3d-type.ts","../src/shaders/mesh.vert.ts","../src/shaders/mesh.frag.ts","../src/charts/bar3d/bar3d-type.ts","../src/charts/surface3d/surface3d-type.ts","../src/charts/globe3d/globe3d-type.ts","../src/charts/map3d/map3d-type.ts","../src/shaders/line.vert.ts","../src/shaders/line.frag.ts","../src/charts/lines3d/lines3d-type.ts","../src/charts/line3d/line3d-type.ts","../src/shaders/flat.vert.ts","../src/charts/scatter-gl/scatter-gl-type.ts","../src/charts/lines-gl/lines-gl-type.ts","../src/shaders/particle.vert.ts","../src/shaders/particle.frag.ts","../src/charts/flow-gl/flow-gl-type.ts","../src/charts/graph-gl/graph-gl-type.ts","../src/charts/torus3d/torus3d-type.ts","../src/api/factory.ts"],"names":["s"],"mappings":"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","file":"chunk-OTQKQDB6.cjs","sourcesContent":["/**\n * Linear algebra primitives for WebGL 3D rendering.\n *\n * All types backed by Float32Array for direct GPU upload.\n * Column-major matrices (OpenGL convention).\n * Zero allocations on hot path — all ops write to `out` param.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type Vec2 = Float32Array // length 2\nexport type Vec3 = Float32Array // length 3\nexport type Vec4 = Float32Array // length 4\nexport type Mat4 = Float32Array // length 16, column-major\n\n// ---------------------------------------------------------------------------\n// Constructors\n// ---------------------------------------------------------------------------\n\nexport function vec2(x = 0, y = 0): Vec2 {\n return new Float32Array([x, y])\n}\n\nexport function vec3(x = 0, y = 0, z = 0): Vec3 {\n return new Float32Array([x, y, z])\n}\n\nexport function vec4(x = 0, y = 0, z = 0, w = 1): Vec4 {\n return new Float32Array([x, y, z, w])\n}\n\nexport function mat4(): Mat4 {\n const m = new Float32Array(16)\n m[0] = 1; m[5] = 1; m[10] = 1; m[15] = 1\n return m\n}\n\n// ---------------------------------------------------------------------------\n// Vec3 operations\n// ---------------------------------------------------------------------------\n\nexport function vec3Set(out: Vec3, x: number, y: number, z: number): Vec3 {\n out[0] = x; out[1] = y; out[2] = z\n return out\n}\n\nexport function vec3Copy(out: Vec3, a: Vec3): Vec3 {\n out[0] = a[0]!; out[1] = a[1]!; out[2] = a[2]!\n return out\n}\n\nexport function vec3Add(out: Vec3, a: Vec3, b: Vec3): Vec3 {\n out[0] = a[0]! + b[0]!; out[1] = a[1]! + b[1]!; out[2] = a[2]! + b[2]!\n return out\n}\n\nexport function vec3Sub(out: Vec3, a: Vec3, b: Vec3): Vec3 {\n out[0] = a[0]! - b[0]!; out[1] = a[1]! - b[1]!; out[2] = a[2]! - b[2]!\n return out\n}\n\nexport function vec3Scale(out: Vec3, a: Vec3, s: number): Vec3 {\n out[0] = a[0]! * s; out[1] = a[1]! * s; out[2] = a[2]! * s\n return out\n}\n\nexport function vec3Length(a: Vec3): number {\n return Math.sqrt(a[0]! * a[0]! + a[1]! * a[1]! + a[2]! * a[2]!)\n}\n\nexport function vec3Normalize(out: Vec3, a: Vec3): Vec3 {\n const len = vec3Length(a)\n if (len > 0) {\n const inv = 1 / len\n out[0] = a[0]! * inv; out[1] = a[1]! * inv; out[2] = a[2]! * inv\n }\n return out\n}\n\nexport function vec3Dot(a: Vec3, b: Vec3): number {\n return a[0]! * b[0]! + a[1]! * b[1]! + a[2]! * b[2]!\n}\n\nexport function vec3Cross(out: Vec3, a: Vec3, b: Vec3): Vec3 {\n const ax = a[0]!, ay = a[1]!, az = a[2]!\n const bx = b[0]!, by = b[1]!, bz = b[2]!\n out[0] = ay * bz - az * by\n out[1] = az * bx - ax * bz\n out[2] = ax * by - ay * bx\n return out\n}\n\nexport function vec3Lerp(out: Vec3, a: Vec3, b: Vec3, t: number): Vec3 {\n out[0] = a[0]! + t * (b[0]! - a[0]!)\n out[1] = a[1]! + t * (b[1]! - a[1]!)\n out[2] = a[2]! + t * (b[2]! - a[2]!)\n return out\n}\n\nexport function vec3TransformMat4(out: Vec3, a: Vec3, m: Mat4): Vec3 {\n const x = a[0]!, y = a[1]!, z = a[2]!\n const w = m[3]! * x + m[7]! * y + m[11]! * z + m[15]! || 1\n out[0] = (m[0]! * x + m[4]! * y + m[8]! * z + m[12]!) / w\n out[1] = (m[1]! * x + m[5]! * y + m[9]! * z + m[13]!) / w\n out[2] = (m[2]! * x + m[6]! * y + m[10]! * z + m[14]!) / w\n return out\n}\n\nexport function vec3Distance(a: Vec3, b: Vec3): number {\n const dx = a[0]! - b[0]!, dy = a[1]! - b[1]!, dz = a[2]! - b[2]!\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n}\n\n// ---------------------------------------------------------------------------\n// Mat4 operations (column-major)\n// ---------------------------------------------------------------------------\n\nexport function mat4Identity(out: Mat4): Mat4 {\n out.fill(0)\n out[0] = 1; out[5] = 1; out[10] = 1; out[15] = 1\n return out\n}\n\nexport function mat4Copy(out: Mat4, a: Mat4): Mat4 {\n out.set(a)\n return out\n}\n\nexport function mat4Multiply(out: Mat4, a: Mat4, b: Mat4): Mat4 {\n const a00 = a[0]!, a01 = a[1]!, a02 = a[2]!, a03 = a[3]!\n const a10 = a[4]!, a11 = a[5]!, a12 = a[6]!, a13 = a[7]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!, a23 = a[11]!\n const a30 = a[12]!, a31 = a[13]!, a32 = a[14]!, a33 = a[15]!\n\n let b0 = b[0]!, b1 = b[1]!, b2 = b[2]!, b3 = b[3]!\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[4]!; b1 = b[5]!; b2 = b[6]!; b3 = b[7]!\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[8]!; b1 = b[9]!; b2 = b[10]!; b3 = b[11]!\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[12]!; b1 = b[13]!; b2 = b[14]!; b3 = b[15]!\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n return out\n}\n\nexport function mat4Perspective(out: Mat4, fovY: number, aspect: number, near: number, far: number): Mat4 {\n const f = 1 / Math.tan(fovY / 2)\n out.fill(0)\n out[0] = f / aspect\n out[5] = f\n out[10] = (far + near) / (near - far)\n out[11] = -1\n out[14] = (2 * far * near) / (near - far)\n return out\n}\n\nexport function mat4Ortho(out: Mat4, left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4 {\n const lr = 1 / (left - right)\n const bt = 1 / (bottom - top)\n const nf = 1 / (near - far)\n out.fill(0)\n out[0] = -2 * lr\n out[5] = -2 * bt\n out[10] = 2 * nf\n out[12] = (left + right) * lr\n out[13] = (top + bottom) * bt\n out[14] = (far + near) * nf\n out[15] = 1\n return out\n}\n\nexport function mat4LookAt(out: Mat4, eye: Vec3, center: Vec3, up: Vec3): Mat4 {\n const zx = eye[0]! - center[0]!\n const zy = eye[1]! - center[1]!\n const zz = eye[2]! - center[2]!\n let len = 1 / Math.sqrt(zx * zx + zy * zy + zz * zz)\n const z0 = zx * len, z1 = zy * len, z2 = zz * len\n\n const xx = up[1]! * z2 - up[2]! * z1\n const xy = up[2]! * z0 - up[0]! * z2\n const xz = up[0]! * z1 - up[1]! * z0\n len = Math.sqrt(xx * xx + xy * xy + xz * xz)\n const x0 = len ? xx / len : 0, x1 = len ? xy / len : 0, x2 = len ? xz / len : 0\n\n const y0 = z1 * x2 - z2 * x1\n const y1 = z2 * x0 - z0 * x2\n const y2 = z0 * x1 - z1 * x0\n\n out[0] = x0; out[1] = y0; out[2] = z0; out[3] = 0\n out[4] = x1; out[5] = y1; out[6] = z1; out[7] = 0\n out[8] = x2; out[9] = y2; out[10] = z2; out[11] = 0\n out[12] = -(x0 * eye[0]! + x1 * eye[1]! + x2 * eye[2]!)\n out[13] = -(y0 * eye[0]! + y1 * eye[1]! + y2 * eye[2]!)\n out[14] = -(z0 * eye[0]! + z1 * eye[1]! + z2 * eye[2]!)\n out[15] = 1\n return out\n}\n\nexport function mat4Invert(out: Mat4, a: Mat4): Mat4 | null {\n const a00 = a[0]!, a01 = a[1]!, a02 = a[2]!, a03 = a[3]!\n const a10 = a[4]!, a11 = a[5]!, a12 = a[6]!, a13 = a[7]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!, a23 = a[11]!\n const a30 = a[12]!, a31 = a[13]!, a32 = a[14]!, a33 = a[15]!\n\n const b00 = a00 * a11 - a01 * a10\n const b01 = a00 * a12 - a02 * a10\n const b02 = a00 * a13 - a03 * a10\n const b03 = a01 * a12 - a02 * a11\n const b04 = a01 * a13 - a03 * a11\n const b05 = a02 * a13 - a03 * a12\n const b06 = a20 * a31 - a21 * a30\n const b07 = a20 * a32 - a22 * a30\n const b08 = a20 * a33 - a23 * a30\n const b09 = a21 * a32 - a22 * a31\n const b10 = a21 * a33 - a23 * a31\n const b11 = a22 * a33 - a23 * a32\n\n let det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06\n if (!det) return null\n det = 1 / det\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det\n return out\n}\n\nexport function mat4Translate(out: Mat4, a: Mat4, v: Vec3): Mat4 {\n const x = v[0]!, y = v[1]!, z = v[2]!\n if (a === out) {\n out[12] = a[0]! * x + a[4]! * y + a[8]! * z + a[12]!\n out[13] = a[1]! * x + a[5]! * y + a[9]! * z + a[13]!\n out[14] = a[2]! * x + a[6]! * y + a[10]! * z + a[14]!\n out[15] = a[3]! * x + a[7]! * y + a[11]! * z + a[15]!\n } else {\n const a00 = a[0]!, a01 = a[1]!, a02 = a[2]!, a03 = a[3]!\n const a10 = a[4]!, a11 = a[5]!, a12 = a[6]!, a13 = a[7]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!, a23 = a[11]!\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23\n out[12] = a00 * x + a10 * y + a20 * z + a[12]!\n out[13] = a01 * x + a11 * y + a21 * z + a[13]!\n out[14] = a02 * x + a12 * y + a22 * z + a[14]!\n out[15] = a03 * x + a13 * y + a23 * z + a[15]!\n }\n return out\n}\n\nexport function mat4Scale(out: Mat4, a: Mat4, v: Vec3): Mat4 {\n const x = v[0]!, y = v[1]!, z = v[2]!\n out[0] = a[0]! * x; out[1] = a[1]! * x; out[2] = a[2]! * x; out[3] = a[3]! * x\n out[4] = a[4]! * y; out[5] = a[5]! * y; out[6] = a[6]! * y; out[7] = a[7]! * y\n out[8] = a[8]! * z; out[9] = a[9]! * z; out[10] = a[10]! * z; out[11] = a[11]! * z\n out[12] = a[12]!; out[13] = a[13]!; out[14] = a[14]!; out[15] = a[15]!\n return out\n}\n\nexport function mat4RotateY(out: Mat4, a: Mat4, rad: number): Mat4 {\n const s = Math.sin(rad), c = Math.cos(rad)\n const a00 = a[0]!, a01 = a[1]!, a02 = a[2]!, a03 = a[3]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!, a23 = a[11]!\n out[0] = a00 * c - a20 * s; out[1] = a01 * c - a21 * s\n out[2] = a02 * c - a22 * s; out[3] = a03 * c - a23 * s\n out[4] = a[4]!; out[5] = a[5]!; out[6] = a[6]!; out[7] = a[7]!\n out[8] = a00 * s + a20 * c; out[9] = a01 * s + a21 * c\n out[10] = a02 * s + a22 * c; out[11] = a03 * s + a23 * c\n out[12] = a[12]!; out[13] = a[13]!; out[14] = a[14]!; out[15] = a[15]!\n return out\n}\n\nexport function mat4RotateX(out: Mat4, a: Mat4, rad: number): Mat4 {\n const s = Math.sin(rad), c = Math.cos(rad)\n const a10 = a[4]!, a11 = a[5]!, a12 = a[6]!, a13 = a[7]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!, a23 = a[11]!\n out[0] = a[0]!; out[1] = a[1]!; out[2] = a[2]!; out[3] = a[3]!\n out[4] = a10 * c + a20 * s; out[5] = a11 * c + a21 * s\n out[6] = a12 * c + a22 * s; out[7] = a13 * c + a23 * s\n out[8] = a20 * c - a10 * s; out[9] = a21 * c - a11 * s\n out[10] = a22 * c - a12 * s; out[11] = a23 * c - a13 * s\n out[12] = a[12]!; out[13] = a[13]!; out[14] = a[14]!; out[15] = a[15]!\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Normal matrix (transpose of inverse of upper-left 3x3)\n// ---------------------------------------------------------------------------\n\nexport function mat3NormalFromMat4(out: Float32Array, a: Mat4): Float32Array {\n const a00 = a[0]!, a01 = a[1]!, a02 = a[2]!\n const a10 = a[4]!, a11 = a[5]!, a12 = a[6]!\n const a20 = a[8]!, a21 = a[9]!, a22 = a[10]!\n\n const b01 = a22 * a11 - a12 * a21\n const b11 = -a22 * a10 + a12 * a20\n const b21 = a21 * a10 - a11 * a20\n\n let det = a00 * b01 + a01 * b11 + a02 * b21\n if (!det) return out\n det = 1 / det\n\n out[0] = b01 * det\n out[1] = (-a22 * a01 + a02 * a21) * det\n out[2] = (a12 * a01 - a02 * a11) * det\n out[3] = b11 * det\n out[4] = (a22 * a00 - a02 * a20) * det\n out[5] = (-a12 * a00 + a02 * a10) * det\n out[6] = b21 * det\n out[7] = (-a21 * a00 + a01 * a20) * det\n out[8] = (a11 * a00 - a01 * a10) * det\n return out\n}\n\n// ---------------------------------------------------------------------------\n// Raycasting\n// ---------------------------------------------------------------------------\n\nexport function unproject(\n out: Vec3,\n winX: number, winY: number, winZ: number,\n invProjView: Mat4,\n viewport: Vec4,\n): Vec3 {\n const x = (winX - viewport[0]!) / viewport[2]! * 2 - 1\n const y = (winY - viewport[1]!) / viewport[3]! * 2 - 1\n const z = winZ * 2 - 1\n\n const m = invProjView\n const w = m[3]! * x + m[7]! * y + m[11]! * z + m[15]!\n if (Math.abs(w) < 1e-10) return out\n\n out[0] = (m[0]! * x + m[4]! * y + m[8]! * z + m[12]!) / w\n out[1] = (m[1]! * x + m[5]! * y + m[9]! * z + m[13]!) / w\n out[2] = (m[2]! * x + m[6]! * y + m[10]! * z + m[14]!) / w\n return out\n}\n\nexport function raySphereIntersect(\n origin: Vec3, dir: Vec3,\n center: Vec3, radius: number,\n): number {\n const ox = origin[0]! - center[0]!\n const oy = origin[1]! - center[1]!\n const oz = origin[2]! - center[2]!\n const a = dir[0]! * dir[0]! + dir[1]! * dir[1]! + dir[2]! * dir[2]!\n const b = 2 * (ox * dir[0]! + oy * dir[1]! + oz * dir[2]!)\n const c = ox * ox + oy * oy + oz * oz - radius * radius\n const disc = b * b - 4 * a * c\n if (disc < 0) return -1\n return (-b - Math.sqrt(disc)) / (2 * a)\n}\n\nexport function rayPlaneIntersect(\n origin: Vec3, dir: Vec3,\n normal: Vec3, dist: number,\n): number {\n const denom = vec3Dot(normal, dir)\n if (Math.abs(denom) < 1e-6) return -1\n return -(vec3Dot(normal, origin) + dist) / denom\n}\n\n/** Convert degrees to radians */\nexport function toRad(deg: number): number {\n return deg * Math.PI / 180\n}\n","/**\n * Camera system for 3D rendering.\n */\n\nimport {\n type Vec3, type Mat4,\n vec3, mat4, mat4Perspective, mat4Ortho, mat4LookAt, mat4Multiply, mat4Invert, toRad,\n} from './math'\n\nexport interface CameraState {\n position: Vec3\n target: Vec3\n up: Vec3\n fov: number // radians\n near: number\n far: number\n aspect: number\n ortho: boolean\n projectionMatrix: Mat4\n viewMatrix: Mat4\n projViewMatrix: Mat4\n invProjViewMatrix: Mat4\n}\n\nexport interface CameraOptions {\n position?: [number, number, number]\n target?: [number, number, number]\n up?: [number, number, number]\n fov?: number // degrees, default 45\n near?: number\n far?: number\n ortho?: boolean\n}\n\nexport function createCamera(width: number, height: number, opts: CameraOptions = {}): CameraState {\n const state: CameraState = {\n position: vec3(...(opts.position ?? [5, 5, 5])),\n target: vec3(...(opts.target ?? [0, 0, 0])),\n up: vec3(...(opts.up ?? [0, 1, 0])),\n fov: toRad(opts.fov ?? 45),\n near: opts.near ?? 0.1,\n far: opts.far ?? 1000,\n aspect: width / height,\n ortho: opts.ortho ?? false,\n projectionMatrix: mat4(),\n viewMatrix: mat4(),\n projViewMatrix: mat4(),\n invProjViewMatrix: mat4(),\n }\n updateCamera(state, width, height)\n return state\n}\n\nexport function updateCamera(state: CameraState, width: number, height: number): void {\n state.aspect = width / height\n\n if (state.ortho) {\n const halfH = 5\n const halfW = halfH * state.aspect\n mat4Ortho(state.projectionMatrix, -halfW, halfW, -halfH, halfH, state.near, state.far)\n } else {\n mat4Perspective(state.projectionMatrix, state.fov, state.aspect, state.near, state.far)\n }\n\n mat4LookAt(state.viewMatrix, state.position, state.target, state.up)\n mat4Multiply(state.projViewMatrix, state.projectionMatrix, state.viewMatrix)\n mat4Invert(state.invProjViewMatrix, state.projViewMatrix)\n}\n\nexport function setCameraPosition(state: CameraState, pos: Vec3): void {\n state.position[0] = pos[0]!; state.position[1] = pos[1]!; state.position[2] = pos[2]!\n}\n\nexport function setCameraTarget(state: CameraState, target: Vec3): void {\n state.target[0] = target[0]!; state.target[1] = target[1]!; state.target[2] = target[2]!\n}\n\n/** Project a 3D world point to 2D screen coordinates */\nexport function projectToScreen(\n worldPos: Vec3,\n projView: Mat4,\n width: number,\n height: number,\n): { x: number; y: number; z: number } | null {\n const m = projView\n const x = worldPos[0]!, y = worldPos[1]!, z = worldPos[2]!\n const w = m[3]! * x + m[7]! * y + m[11]! * z + m[15]!\n if (Math.abs(w) < 1e-10) return null\n const ndcX = (m[0]! * x + m[4]! * y + m[8]! * z + m[12]!) / w\n const ndcY = (m[1]! * x + m[5]! * y + m[9]! * z + m[13]!) / w\n const ndcZ = (m[2]! * x + m[6]! * y + m[10]! * z + m[14]!) / w\n return {\n x: (ndcX * 0.5 + 0.5) * width,\n y: (1 - (ndcY * 0.5 + 0.5)) * height,\n z: ndcZ,\n }\n}\n","/**\n * Orbit controls — mouse/touch orbit, zoom, pan with inertia damping.\n */\n\nimport { type Vec3, vec3, vec3Add, vec3Scale, vec3Cross, vec3Normalize } from './math'\nimport { type CameraState, updateCamera, setCameraPosition, setCameraTarget } from './camera'\n\nexport interface OrbitConfig {\n enableRotate?: boolean\n enableZoom?: boolean\n enablePan?: boolean\n damping?: number\n autoRotate?: boolean\n autoRotateSpeed?: number\n minDistance?: number\n maxDistance?: number\n minPolarAngle?: number\n maxPolarAngle?: number\n}\n\nexport interface OrbitState {\n theta: number\n phi: number\n radius: number\n target: Vec3\n dragging: boolean\n panning: boolean\n lastX: number\n lastY: number\n velocityTheta: number\n velocityPhi: number\n config: Required<OrbitConfig>\n dispose: () => void\n}\n\nfunction cartesianToSpherical(pos: Vec3, target: Vec3): { theta: number; phi: number; radius: number } {\n const dx = pos[0]! - target[0]!\n const dy = pos[1]! - target[1]!\n const dz = pos[2]! - target[2]!\n const radius = Math.sqrt(dx * dx + dy * dy + dz * dz)\n const theta = Math.atan2(dx, dz)\n const phi = Math.acos(Math.max(-1, Math.min(1, dy / (radius || 1))))\n return { theta, phi, radius }\n}\n\nfunction sphericalToCartesian(theta: number, phi: number, radius: number, target: Vec3, out: Vec3): void {\n out[0] = target[0]! + radius * Math.sin(phi) * Math.sin(theta)\n out[1] = target[1]! + radius * Math.cos(phi)\n out[2] = target[2]! + radius * Math.sin(phi) * Math.cos(theta)\n}\n\nexport function createOrbitControls(\n canvas: HTMLCanvasElement,\n camera: CameraState,\n _width: number,\n _height: number,\n config: OrbitConfig = {},\n): OrbitState {\n const cfg: Required<OrbitConfig> = {\n enableRotate: config.enableRotate ?? true,\n enableZoom: config.enableZoom ?? true,\n enablePan: config.enablePan ?? true,\n damping: config.damping ?? 0.1,\n autoRotate: config.autoRotate ?? false,\n autoRotateSpeed: config.autoRotateSpeed ?? 1.0,\n minDistance: config.minDistance ?? 0.5,\n maxDistance: config.maxDistance ?? 500,\n minPolarAngle: config.minPolarAngle ?? 0.01,\n maxPolarAngle: config.maxPolarAngle ?? Math.PI - 0.01,\n }\n\n const { theta, phi, radius } = cartesianToSpherical(camera.position, camera.target)\n\n const state: OrbitState = {\n theta,\n phi,\n radius,\n target: vec3(camera.target[0]!, camera.target[1]!, camera.target[2]!),\n dragging: false,\n panning: false,\n lastX: 0,\n lastY: 0,\n velocityTheta: 0,\n velocityPhi: 0,\n config: cfg,\n dispose: () => {},\n }\n\n const onMouseDown = (e: MouseEvent) => {\n if (e.button === 0 && cfg.enableRotate) {\n state.dragging = true\n state.lastX = e.clientX\n state.lastY = e.clientY\n state.velocityTheta = 0\n state.velocityPhi = 0\n } else if (e.button === 2 && cfg.enablePan) {\n state.panning = true\n state.lastX = e.clientX\n state.lastY = e.clientY\n e.preventDefault()\n }\n }\n\n const onMouseMove = (e: MouseEvent) => {\n if (state.dragging) {\n const dx = e.clientX - state.lastX\n const dy = e.clientY - state.lastY\n state.velocityTheta = -dx * 0.005\n state.velocityPhi = -dy * 0.005\n state.theta += state.velocityTheta\n state.phi = Math.max(cfg.minPolarAngle, Math.min(cfg.maxPolarAngle, state.phi + state.velocityPhi))\n state.lastX = e.clientX\n state.lastY = e.clientY\n } else if (state.panning) {\n const dx = e.clientX - state.lastX\n const dy = e.clientY - state.lastY\n const panSpeed = state.radius * 0.002\n // Get right and up vectors from camera\n const forward = vec3(\n camera.target[0]! - camera.position[0]!,\n camera.target[1]! - camera.position[1]!,\n camera.target[2]! - camera.position[2]!,\n )\n const right = vec3(0, 0, 0)\n vec3Cross(right, forward, camera.up)\n vec3Normalize(right, right)\n const up = vec3(0, 0, 0)\n vec3Cross(up, right, forward)\n vec3Normalize(up, up)\n\n const panX = vec3Scale(vec3(0, 0, 0), right, -dx * panSpeed)\n const panY = vec3Scale(vec3(0, 0, 0), up, dy * panSpeed)\n vec3Add(state.target, state.target, panX)\n vec3Add(state.target, state.target, panY)\n\n state.lastX = e.clientX\n state.lastY = e.clientY\n }\n }\n\n const onMouseUp = () => {\n state.dragging = false\n state.panning = false\n }\n\n const onWheel = (e: WheelEvent) => {\n if (!cfg.enableZoom) return\n e.preventDefault()\n const factor = e.deltaY > 0 ? 1.1 : 0.9\n state.radius = Math.max(cfg.minDistance, Math.min(cfg.maxDistance, state.radius * factor))\n }\n\n const onContextMenu = (e: Event) => e.preventDefault()\n\n // Touch support\n let touchStartDist = 0\n let touchStartRadius = 0\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length === 1 && cfg.enableRotate) {\n state.dragging = true\n state.lastX = e.touches[0]!.clientX\n state.lastY = e.touches[0]!.clientY\n state.velocityTheta = 0\n state.velocityPhi = 0\n } else if (e.touches.length === 2 && cfg.enableZoom) {\n const dx = e.touches[0]!.clientX - e.touches[1]!.clientX\n const dy = e.touches[0]!.clientY - e.touches[1]!.clientY\n touchStartDist = Math.sqrt(dx * dx + dy * dy)\n touchStartRadius = state.radius\n }\n }\n\n const onTouchMove = (e: TouchEvent) => {\n e.preventDefault()\n if (e.touches.length === 1 && state.dragging) {\n const dx = e.touches[0]!.clientX - state.lastX\n const dy = e.touches[0]!.clientY - state.lastY\n state.velocityTheta = -dx * 0.005\n state.velocityPhi = -dy * 0.005\n state.theta += state.velocityTheta\n state.phi = Math.max(cfg.minPolarAngle, Math.min(cfg.maxPolarAngle, state.phi + state.velocityPhi))\n state.lastX = e.touches[0]!.clientX\n state.lastY = e.touches[0]!.clientY\n } else if (e.touches.length === 2 && cfg.enableZoom) {\n const dx = e.touches[0]!.clientX - e.touches[1]!.clientX\n const dy = e.touches[0]!.clientY - e.touches[1]!.clientY\n const dist = Math.sqrt(dx * dx + dy * dy)\n state.radius = Math.max(cfg.minDistance, Math.min(cfg.maxDistance, touchStartRadius * (touchStartDist / dist)))\n }\n }\n\n const onTouchEnd = () => {\n state.dragging = false\n }\n\n canvas.addEventListener('mousedown', onMouseDown)\n canvas.addEventListener('mousemove', onMouseMove)\n canvas.addEventListener('mouseup', onMouseUp)\n canvas.addEventListener('mouseleave', onMouseUp)\n canvas.addEventListener('wheel', onWheel, { passive: false })\n canvas.addEventListener('contextmenu', onContextMenu)\n canvas.addEventListener('touchstart', onTouchStart, { passive: true })\n canvas.addEventListener('touchmove', onTouchMove, { passive: false })\n canvas.addEventListener('touchend', onTouchEnd)\n\n state.dispose = () => {\n canvas.removeEventListener('mousedown', onMouseDown)\n canvas.removeEventListener('mousemove', onMouseMove)\n canvas.removeEventListener('mouseup', onMouseUp)\n canvas.removeEventListener('mouseleave', onMouseUp)\n canvas.removeEventListener('wheel', onWheel)\n canvas.removeEventListener('contextmenu', onContextMenu)\n canvas.removeEventListener('touchstart', onTouchStart)\n canvas.removeEventListener('touchmove', onTouchMove)\n canvas.removeEventListener('touchend', onTouchEnd)\n }\n\n return state\n}\n\nexport function updateOrbitControls(\n orbit: OrbitState,\n camera: CameraState,\n width: number,\n height: number,\n): boolean {\n let changed = false\n const cfg = orbit.config\n\n // Auto-rotate\n if (cfg.autoRotate && !orbit.dragging) {\n orbit.theta += cfg.autoRotateSpeed * 0.001\n changed = true\n }\n\n // Apply damping to velocity\n if (!orbit.dragging) {\n if (Math.abs(orbit.velocityTheta) > 0.0001 || Math.abs(orbit.velocityPhi) > 0.0001) {\n orbit.theta += orbit.velocityTheta * cfg.damping\n orbit.phi += orbit.velocityPhi * cfg.damping\n orbit.phi = Math.max(cfg.minPolarAngle, Math.min(cfg.maxPolarAngle, orbit.phi))\n orbit.velocityTheta *= (1 - cfg.damping)\n orbit.velocityPhi *= (1 - cfg.damping)\n changed = true\n } else {\n orbit.velocityTheta = 0\n orbit.velocityPhi = 0\n }\n } else {\n changed = true\n }\n\n if (orbit.panning) changed = true\n\n // Update camera position from spherical coordinates\n const newPos = vec3(0, 0, 0)\n sphericalToCartesian(orbit.theta, orbit.phi, orbit.radius, orbit.target, newPos)\n setCameraPosition(camera, newPos)\n setCameraTarget(camera, orbit.target)\n updateCamera(camera, width, height)\n\n return changed\n}\n","/**\n * WebGL shader compilation and program management.\n */\n\nexport interface ShaderProgram {\n program: WebGLProgram\n uniforms: Record<string, WebGLUniformLocation>\n attributes: Record<string, number>\n use(): void\n setMat4(name: string, value: Float32Array): void\n setMat3(name: string, value: Float32Array): void\n setVec2(name: string, x: number, y: number): void\n setVec3(name: string, x: number, y: number, z: number): void\n setVec4(name: string, x: number, y: number, z: number, w: number): void\n setFloat(name: string, value: number): void\n setInt(name: string, value: number): void\n destroy(): void\n}\n\nexport function compileShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader {\n const shader = gl.createShader(type)!\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const info = gl.getShaderInfoLog(shader)\n gl.deleteShader(shader)\n throw new Error(`[chartts/gl] Shader compile error: ${info}`)\n }\n return shader\n}\n\nexport function createShaderProgram(\n gl: WebGLRenderingContext,\n vertSrc: string,\n fragSrc: string,\n uniformNames: string[],\n attributeNames: string[],\n): ShaderProgram {\n const vert = compileShader(gl, gl.VERTEX_SHADER, vertSrc)\n const frag = compileShader(gl, gl.FRAGMENT_SHADER, fragSrc)\n\n const program = gl.createProgram()!\n gl.attachShader(program, vert)\n gl.attachShader(program, frag)\n gl.linkProgram(program)\n\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n const info = gl.getProgramInfoLog(program)\n gl.deleteProgram(program)\n throw new Error(`[chartts/gl] Program link error: ${info}`)\n }\n\n // Cache locations\n const uniforms: Record<string, WebGLUniformLocation> = {}\n for (const name of uniformNames) {\n const loc = gl.getUniformLocation(program, name)\n if (loc) uniforms[name] = loc\n }\n\n const attributes: Record<string, number> = {}\n for (const name of attributeNames) {\n attributes[name] = gl.getAttribLocation(program, name)\n }\n\n return {\n program,\n uniforms,\n attributes,\n use() { gl.useProgram(program) },\n setMat4(name, value) { const loc = uniforms[name]; if (loc) gl.uniformMatrix4fv(loc, false, value) },\n setMat3(name, value) { const loc = uniforms[name]; if (loc) gl.uniformMatrix3fv(loc, false, value) },\n setVec2(name, x, y) { const loc = uniforms[name]; if (loc) gl.uniform2f(loc, x, y) },\n setVec3(name, x, y, z) { const loc = uniforms[name]; if (loc) gl.uniform3f(loc, x, y, z) },\n setVec4(name, x, y, z, w) { const loc = uniforms[name]; if (loc) gl.uniform4f(loc, x, y, z, w) },\n setFloat(name, value) { const loc = uniforms[name]; if (loc) gl.uniform1f(loc, value) },\n setInt(name, value) { const loc = uniforms[name]; if (loc) gl.uniform1i(loc, value) },\n destroy() {\n gl.deleteShader(vert)\n gl.deleteShader(frag)\n gl.deleteProgram(program)\n },\n }\n}\n","/**\n * GLRenderer — dual canvas (WebGL + 2D overlay) rendering system.\n */\n\nimport type { ShaderProgram } from './shader'\nimport { createShaderProgram } from './shader'\n\nexport interface GLRenderer {\n gl: WebGLRenderingContext\n ctx2d: CanvasRenderingContext2D\n glCanvas: HTMLCanvasElement\n overlayCanvas: HTMLCanvasElement\n width: number\n height: number\n pixelRatio: number\n programs: Map<string, ShaderProgram>\n registerProgram(name: string, vert: string, frag: string, uniforms: string[], attributes: string[]): ShaderProgram\n getProgram(name: string): ShaderProgram | undefined\n resize(width: number, height: number): void\n beginFrame(): void\n endFrame(): void\n clear(r: number, g: number, b: number, a: number): void\n destroy(): void\n}\n\nexport function createGLRenderer(container: HTMLElement): GLRenderer {\n const pixelRatio = typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1\n\n // Create WebGL canvas\n const glCanvas = document.createElement('canvas')\n glCanvas.style.position = 'absolute'\n glCanvas.style.top = '0'\n glCanvas.style.left = '0'\n glCanvas.style.width = '100%'\n glCanvas.style.height = '100%'\n\n // Create 2D overlay canvas\n const overlayCanvas = document.createElement('canvas')\n overlayCanvas.style.position = 'absolute'\n overlayCanvas.style.top = '0'\n overlayCanvas.style.left = '0'\n overlayCanvas.style.width = '100%'\n overlayCanvas.style.height = '100%'\n overlayCanvas.style.pointerEvents = 'none'\n\n // Ensure container is positioned\n const containerPos = getComputedStyle(container).position\n if (containerPos === 'static') container.style.position = 'relative'\n\n container.appendChild(glCanvas)\n container.appendChild(overlayCanvas)\n\n const gl = glCanvas.getContext('webgl', {\n antialias: true,\n alpha: false,\n premultipliedAlpha: false,\n preserveDrawingBuffer: false,\n depth: true,\n stencil: false,\n })\n\n if (!gl) throw new Error('[chartts/gl] WebGL not supported')\n\n const ctx2d = overlayCanvas.getContext('2d')!\n\n // Enable depth test and back-face culling\n gl.enable(gl.DEPTH_TEST)\n gl.depthFunc(gl.LEQUAL)\n gl.enable(gl.CULL_FACE)\n gl.cullFace(gl.BACK)\n gl.enable(gl.BLEND)\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)\n\n const width = container.clientWidth\n const height = container.clientHeight\n\n const renderer: GLRenderer = {\n gl,\n ctx2d,\n glCanvas,\n overlayCanvas,\n width,\n height,\n pixelRatio,\n programs: new Map(),\n\n registerProgram(name, vert, frag, uniforms, attributes) {\n const existing = this.programs.get(name)\n if (existing) return existing\n const prog = createShaderProgram(gl, vert, frag, uniforms, attributes)\n this.programs.set(name, prog)\n return prog\n },\n\n getProgram(name) {\n return this.programs.get(name)\n },\n\n resize(w, h) {\n this.width = w\n this.height = h\n const pw = Math.round(w * pixelRatio)\n const ph = Math.round(h * pixelRatio)\n glCanvas.width = pw\n glCanvas.height = ph\n overlayCanvas.width = pw\n overlayCanvas.height = ph\n gl.viewport(0, 0, pw, ph)\n ctx2d.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0)\n },\n\n beginFrame() {\n // Clear 2D overlay\n ctx2d.clearRect(0, 0, this.width, this.height)\n },\n\n endFrame() {\n gl.flush()\n },\n\n clear(r, g, b, a) {\n gl.clearColor(r, g, b, a)\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)\n },\n\n destroy() {\n for (const prog of this.programs.values()) {\n prog.destroy()\n }\n this.programs.clear()\n glCanvas.remove()\n overlayCanvas.remove()\n },\n }\n\n renderer.resize(width, height)\n return renderer\n}\n","/**\n * Phong lighting model — directional light with ambient, diffuse, specular.\n */\n\nimport type { ShaderProgram } from './shader'\nimport type { Vec3 } from './math'\n\nexport interface LightConfig {\n ambient: [number, number, number]\n diffuseDirection: [number, number, number]\n diffuseColor: [number, number, number]\n specularColor: [number, number, number]\n shininess: number\n}\n\nexport function defaultLightConfig(): LightConfig {\n return {\n ambient: [0.35, 0.33, 0.4],\n diffuseDirection: [0.6, 0.9, 0.4],\n diffuseColor: [1.0, 0.97, 0.95],\n specularColor: [1.0, 0.98, 0.96],\n shininess: 48,\n }\n}\n\nexport function setLightUniforms(program: ShaderProgram, light: LightConfig, cameraPos: Vec3): void {\n program.setVec3('u_ambientColor', light.ambient[0], light.ambient[1], light.ambient[2])\n // Normalize direction\n const [dx, dy, dz] = light.diffuseDirection\n const len = Math.sqrt(dx * dx + dy * dy + dz * dz) || 1\n program.setVec3('u_lightDir', dx / len, dy / len, dz / len)\n program.setVec3('u_diffuseColor', light.diffuseColor[0], light.diffuseColor[1], light.diffuseColor[2])\n program.setVec3('u_specularColor', light.specularColor[0], light.specularColor[1], light.specularColor[2])\n program.setFloat('u_shininess', light.shininess)\n program.setVec3('u_cameraPos', cameraPos[0]!, cameraPos[1]!, cameraPos[2]!)\n}\n\n/** Uniform names needed for Phong lighting */\nexport const LIGHT_UNIFORMS = [\n 'u_ambientColor', 'u_lightDir', 'u_diffuseColor',\n 'u_specularColor', 'u_shininess', 'u_cameraPos',\n]\n","/**\n * GPU color-based picking via offscreen FBO.\n * Each object rendered with unique RGB color → readPixels → O(1) hit test.\n */\n\nexport interface PickingSystem {\n begin(): void\n end(): void\n pick(x: number, y: number): number\n idToColor(id: number): [number, number, number]\n resize(width: number, height: number): void\n destroy(): void\n}\n\nexport function createPickingSystem(gl: WebGLRenderingContext, width: number, height: number, pixelRatio: number): PickingSystem {\n const pw = Math.round(width * pixelRatio)\n const ph = Math.round(height * pixelRatio)\n\n const framebuffer = gl.createFramebuffer()!\n const texture = gl.createTexture()!\n const depthBuffer = gl.createRenderbuffer()!\n\n function setupFBO(w: number, h: number) {\n gl.bindTexture(gl.TEXTURE_2D, texture)\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, w, h, 0, gl.RGBA, gl.UNSIGNED_BYTE, null)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer)\n gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, w, h)\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, depthBuffer)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n }\n\n setupFBO(pw, ph)\n\n let currentWidth = pw\n let currentHeight = ph\n\n const pixel = new Uint8Array(4)\n\n return {\n begin() {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)\n gl.viewport(0, 0, currentWidth, currentHeight)\n gl.clearColor(0, 0, 0, 0)\n gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)\n // Disable blending for pick pass — we need exact IDs\n gl.disable(gl.BLEND)\n },\n\n end() {\n gl.enable(gl.BLEND)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n gl.viewport(0, 0, currentWidth, currentHeight)\n },\n\n pick(x: number, y: number): number {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer)\n const px = Math.round(x * pixelRatio)\n const py = currentHeight - Math.round(y * pixelRatio)\n gl.readPixels(px, py, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel)\n gl.bindFramebuffer(gl.FRAMEBUFFER, null)\n\n if (pixel[3] === 0) return -1 // no hit\n return pixel[0]! + pixel[1]! * 256 + pixel[2]! * 65536\n },\n\n idToColor(id: number): [number, number, number] {\n return [\n (id & 0xFF) / 255,\n ((id >> 8) & 0xFF) / 255,\n ((id >> 16) & 0xFF) / 255,\n ]\n },\n\n resize(w: number, h: number) {\n currentWidth = Math.round(w * pixelRatio)\n currentHeight = Math.round(h * pixelRatio)\n setupFBO(currentWidth, currentHeight)\n },\n\n destroy() {\n gl.deleteFramebuffer(framebuffer)\n gl.deleteTexture(texture)\n gl.deleteRenderbuffer(depthBuffer)\n },\n }\n}\n","/**\n * WebGL buffer helpers — VBO, IBO, and vertex layout management.\n */\n\nexport interface GLBuffer {\n buffer: WebGLBuffer\n count: number\n bind(): void\n update(data: Float32Array | Uint16Array | Uint32Array, usage?: number): void\n destroy(): void\n}\n\nexport function createVertexBuffer(\n gl: WebGLRenderingContext,\n data: Float32Array,\n usage: number = gl.STATIC_DRAW,\n): GLBuffer {\n const buffer = gl.createBuffer()!\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer)\n gl.bufferData(gl.ARRAY_BUFFER, data, usage)\n return {\n buffer,\n count: data.length,\n bind() { gl.bindBuffer(gl.ARRAY_BUFFER, buffer) },\n update(newData, u = usage) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer)\n gl.bufferData(gl.ARRAY_BUFFER, newData, u)\n this.count = newData.length\n },\n destroy() { gl.deleteBuffer(buffer) },\n }\n}\n\nexport function createIndexBuffer(\n gl: WebGLRenderingContext,\n data: Uint16Array | Uint32Array,\n usage: number = gl.STATIC_DRAW,\n): GLBuffer {\n const buffer = gl.createBuffer()!\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, data, usage)\n return {\n buffer,\n count: data.length,\n bind() { gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer) },\n update(newData, u = usage) {\n gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, buffer)\n gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, newData, u)\n this.count = newData.length\n },\n destroy() { gl.deleteBuffer(buffer) },\n }\n}\n\nexport interface VertexAttribute {\n location: number\n size: number\n offset: number\n}\n\nexport interface VertexLayout {\n stride: number\n attributes: VertexAttribute[]\n}\n\nexport function createVertexLayout(\n attribs: Array<{ location: number; size: number }>,\n): VertexLayout {\n let offset = 0\n const attributes: VertexAttribute[] = []\n for (const a of attribs) {\n attributes.push({ location: a.location, size: a.size, offset: offset * 4 })\n offset += a.size\n }\n return { stride: offset * 4, attributes }\n}\n\nexport function applyVertexLayout(gl: WebGLRenderingContext, layout: VertexLayout): void {\n for (const attr of layout.attributes) {\n gl.enableVertexAttribArray(attr.location)\n gl.vertexAttribPointer(attr.location, attr.size, gl.FLOAT, false, layout.stride, attr.offset)\n }\n}\n\nexport function disableVertexLayout(gl: WebGLRenderingContext, layout: VertexLayout): void {\n for (const attr of layout.attributes) {\n gl.disableVertexAttribArray(attr.location)\n }\n}\n","/**\n * 3D ground grid — wireframe grid plane for spatial reference in 3D charts.\n */\n\nimport { createVertexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from './buffer'\nimport type { GLRenderer } from './renderer'\nimport type { CameraState } from './camera'\n\nconst GRID_VERT = /* glsl */ `\nprecision highp float;\nattribute vec3 a_position;\nattribute vec3 a_color;\nuniform mat4 u_projView;\nvarying vec3 v_color;\nvoid main() {\n gl_Position = u_projView * vec4(a_position, 1.0);\n v_color = a_color;\n}\n`\n\nconst GRID_FRAG = /* glsl */ `\nprecision highp float;\nuniform float u_opacity;\nvarying vec3 v_color;\nvoid main() {\n gl_FragColor = vec4(v_color, u_opacity);\n}\n`\n\nexport interface Grid3D {\n update(bounds: GridBounds): void\n render(camera: CameraState, opacity: number): void\n destroy(): void\n}\n\nexport interface GridBounds {\n minX: number; maxX: number\n minZ: number; maxZ: number\n y: number // height of grid plane\n}\n\nexport function createGrid3D(renderer: GLRenderer): Grid3D {\n const gl = renderer.gl\n\n renderer.registerProgram('grid3d', GRID_VERT, GRID_FRAG,\n ['u_projView', 'u_opacity'], ['a_position', 'a_color'])\n\n let vbo: GLBuffer | null = null\n let lineCount = 0\n\n return {\n update(bounds: GridBounds) {\n const { minX, maxX, minZ, maxZ, y } = bounds\n const rangeX = maxX - minX || 1\n const rangeZ = maxZ - minZ || 1\n const maxRange = Math.max(rangeX, rangeZ)\n\n // Determine grid step size (aim for ~10 lines per axis)\n const rawStep = maxRange / 10\n const magnitude = Math.pow(10, Math.floor(Math.log10(rawStep)))\n const normalized = rawStep / magnitude\n const step = normalized < 2 ? magnitude : normalized < 5 ? 2 * magnitude : 5 * magnitude\n\n const gridColor: [number, number, number] = [0.18, 0.2, 0.28]\n const axisColor: [number, number, number] = [0.3, 0.35, 0.5]\n const verts: number[] = []\n\n // Extend grid slightly beyond data bounds\n const pad = step\n const gMinX = Math.floor((minX - pad) / step) * step\n const gMaxX = Math.ceil((maxX + pad) / step) * step\n const gMinZ = Math.floor((minZ - pad) / step) * step\n const gMaxZ = Math.ceil((maxZ + pad) / step) * step\n\n // Lines parallel to Z axis\n for (let x = gMinX; x <= gMaxX + step * 0.01; x += step) {\n const isAxis = Math.abs(x) < step * 0.01\n const c = isAxis ? axisColor : gridColor\n verts.push(x, y, gMinZ, c[0], c[1], c[2])\n verts.push(x, y, gMaxZ, c[0], c[1], c[2])\n }\n\n // Lines parallel to X axis\n for (let z = gMinZ; z <= gMaxZ + step * 0.01; z += step) {\n const isAxis = Math.abs(z) < step * 0.01\n const c = isAxis ? axisColor : gridColor\n verts.push(gMinX, y, z, c[0], c[1], c[2])\n verts.push(gMaxX, y, z, c[0], c[1], c[2])\n }\n\n const data = new Float32Array(verts)\n if (vbo) vbo.update(data); else vbo = createVertexBuffer(gl, data, gl.DYNAMIC_DRAW)\n lineCount = verts.length / 6 / 2\n },\n\n render(camera: CameraState, opacity: number) {\n if (!vbo || lineCount === 0) return\n const prog = renderer.getProgram('grid3d')!\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setFloat('u_opacity', opacity * 0.4)\n\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n gl.disable(gl.DEPTH_TEST)\n gl.drawArrays(gl.LINES, 0, lineCount * 2)\n gl.enable(gl.DEPTH_TEST)\n disableVertexLayout(gl, layout)\n },\n\n destroy() {\n vbo?.destroy()\n vbo = null\n },\n }\n}\n","/**\n * Type definitions for @chartts/gl.\n */\n\nimport type { GLRenderer } from './engine/renderer'\nimport type { CameraState, CameraOptions } from './engine/camera'\nimport type { OrbitState, OrbitConfig } from './engine/orbit-controls'\nimport type { LightConfig } from './engine/lighting'\nimport type { PickingSystem } from './engine/picking'\n\n// ─── Data Types ──────────────────────────────────────────────────────\n\nexport interface GLSeries3D {\n name: string\n values: number[]\n x?: number[]\n y?: number[]\n z?: number[]\n color?: string\n size?: number\n opacity?: number\n}\n\nexport interface GLSeries2D {\n name: string\n x: number[]\n y: number[]\n color?: string\n size?: number\n opacity?: number\n}\n\nexport interface GLChartData {\n series: GLSeries3D[] | GLSeries2D[]\n categories?: string[]\n grid?: number[][]\n}\n\n// ─── Data Point (for hit testing) ────────────────────────────────────\n\nexport interface GLDataPoint {\n seriesIndex: number\n dataIndex: number\n value: number\n x?: number\n y?: number\n z?: number\n seriesName: string\n}\n\n// ─── Render Context ──────────────────────────────────────────────────\n\nexport interface GLRenderContext {\n renderer: GLRenderer\n camera: CameraState\n orbit: OrbitState | null\n picking: PickingSystem\n width: number\n height: number\n data: GLChartData\n options: GLChartOptions\n theme: GLTheme\n animationProgress: number\n}\n\n// ─── Theme ───────────────────────────────────────────────────────────\n\nexport interface GLTheme {\n background: [number, number, number]\n colors: string[]\n textColor: string\n gridColor: string\n fontFamily: string\n fontSize: number\n}\n\nexport const DEFAULT_GL_THEME: GLTheme = {\n background: [0.06, 0.065, 0.1],\n colors: [\n '#6c9eff', '#5eead4', '#fbbf24', '#f472b6',\n '#a78bfa', '#34d399', '#fb923c', '#38bdf8',\n ],\n textColor: '#b8c4d0',\n gridColor: '#1e2536',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 12,\n}\n\nexport const LIGHT_GL_THEME: GLTheme = {\n background: [0.95, 0.96, 0.98],\n colors: [\n '#4f7df5', '#10b981', '#f59e0b', '#ec4899',\n '#8b5cf6', '#14b8a6', '#f97316', '#0ea5e9',\n ],\n textColor: '#374151',\n gridColor: '#d1d9e6',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: 12,\n}\n\n// ─── Options ─────────────────────────────────────────────────────────\n\nexport interface GLChartOptions {\n camera?: CameraOptions\n orbit?: boolean | OrbitConfig\n light?: Partial<LightConfig>\n theme?: 'dark' | 'light' | GLTheme\n animate?: boolean\n animationDuration?: number\n tooltip?: boolean\n wireframe?: boolean\n opacity?: number\n pointSize?: number\n lineWidth?: number\n // Chart-specific options\n [key: string]: unknown\n}\n\n// ─── Plugin Interface ────────────────────────────────────────────────\n\nexport interface GLChartTypePlugin {\n readonly type: string\n prepare(ctx: GLRenderContext): void\n render(ctx: GLRenderContext): void\n renderPick?(ctx: GLRenderContext): void\n renderOverlay?(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D): void\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null\n dispose(gl: WebGLRenderingContext): void\n needsLoop?(ctx: GLRenderContext): boolean\n}\n\n// ─── Chart Instance ──────────────────────────────────────────────────\n\nexport interface GLChartInstance {\n update(data: GLChartData): void\n setOption(opts: Partial<GLChartOptions>): void\n setCameraPosition(pos: [number, number, number]): void\n setCameraTarget(target: [number, number, number]): void\n resize(): void\n destroy(): void\n getDataAtPoint(x: number, y: number): GLDataPoint | null\n}\n\n// ─── Color Utilities ─────────────────────────────────────────────────\n\nexport function hexToRGB(hex: string): [number, number, number] {\n const h = hex.replace('#', '')\n return [\n parseInt(h.substring(0, 2), 16) / 255,\n parseInt(h.substring(2, 4), 16) / 255,\n parseInt(h.substring(4, 6), 16) / 255,\n ]\n}\n\nexport function resolveTheme(theme?: 'dark' | 'light' | GLTheme): GLTheme {\n if (!theme || theme === 'dark') return DEFAULT_GL_THEME\n if (theme === 'light') return LIGHT_GL_THEME\n return theme\n}\n","/**\n * createGLChart — factory that wires up renderer, camera, orbit, picking, and chart plugin.\n */\n\nimport { createGLRenderer } from '../engine/renderer'\nimport { createCamera, updateCamera } from '../engine/camera'\nimport { createOrbitControls, updateOrbitControls, type OrbitState } from '../engine/orbit-controls'\nimport { defaultLightConfig, setLightUniforms, type LightConfig } from '../engine/lighting'\nimport { createPickingSystem } from '../engine/picking'\nimport { createGrid3D, type Grid3D } from '../engine/grid3d'\nimport type {\n GLChartTypePlugin, GLChartData, GLChartOptions, GLChartInstance,\n GLRenderContext, GLSeries3D,\n} from '../types'\nimport { resolveTheme } from '../types'\n\n/** Compute data bounds for auto-camera fitting */\nfunction computeDataBounds(data: GLChartData): {\n center: [number, number, number]; maxExtent: number;\n minX: number; maxX: number; minY: number; maxY: number; minZ: number; maxZ: number\n} {\n let minX = Infinity, maxX = -Infinity\n let minY = Infinity, maxY = -Infinity\n let minZ = Infinity, maxZ = -Infinity\n\n // Check 3D grid data\n if (data.grid && data.grid.length > 0) {\n const rows = data.grid.length, cols = data.grid[0]!.length\n for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) {\n const y = data.grid[r]![c]!\n const x = c / (cols - 1 || 1) * 10 - 5\n const z = r / (rows - 1 || 1) * 10 - 5\n if (x < minX) minX = x; if (x > maxX) maxX = x\n if (y < minY) minY = y; if (y > maxY) maxY = y\n if (z < minZ) minZ = z; if (z > maxZ) maxZ = z\n }\n }\n\n // Check series data\n for (const s of data.series) {\n const s3d = s as GLSeries3D\n if (s3d.x) for (const v of s3d.x) { if (v < minX) minX = v; if (v > maxX) maxX = v }\n if (s3d.y) for (const v of s3d.y) { if (v < minY) minY = v; if (v > maxY) maxY = v }\n if (s3d.z) for (const v of s3d.z) { if (v < minZ) minZ = v; if (v > maxZ) maxZ = v }\n if (s3d.values) for (const v of s3d.values) { if (v < minY) minY = v; if (v > maxY) maxY = v }\n }\n\n // Handle no-data or 2D fallback\n if (minX === Infinity) { minX = -5; maxX = 5 }\n if (minY === Infinity) { minY = 0; maxY = 5 }\n if (minZ === Infinity) { minZ = -5; maxZ = 5 }\n\n const cx = (minX + maxX) / 2\n const cy = (minY + maxY) / 2\n const cz = (minZ + maxZ) / 2\n const extentX = maxX - minX || 1\n const extentY = maxY - minY || 1\n const extentZ = maxZ - minZ || 1\n const maxExtent = Math.max(extentX, extentY, extentZ)\n\n return { center: [cx, cy, cz], maxExtent, minX, maxX, minY, maxY, minZ, maxZ }\n}\n\nexport function createGLChart(\n container: HTMLElement | string,\n plugin: GLChartTypePlugin,\n data: GLChartData,\n options: GLChartOptions = {},\n): GLChartInstance {\n const el = typeof container === 'string'\n ? document.querySelector<HTMLElement>(container)!\n : container\n\n if (!el) throw new Error(`[chartts/gl] Container not found: ${container}`)\n\n const renderer = createGLRenderer(el)\n const { width, height } = renderer\n const theme = resolveTheme(options.theme)\n\n // Auto-fit camera if no explicit position given\n const is2D = plugin.type.endsWith('-gl') // scatter-gl, lines-gl, flow-gl, graph-gl\n let cameraOpts = options.camera\n if (!is2D && !cameraOpts?.position) {\n const bounds = computeDataBounds(data)\n const [cx, cy, cz] = bounds.center\n const dist = Math.max(bounds.maxExtent * 1.6, 5)\n cameraOpts = {\n ...cameraOpts,\n position: [cx + dist * 0.7, cy + dist * 0.5, cz + dist * 0.7],\n target: [cx, cy, cz],\n }\n }\n\n // Camera\n const camera = createCamera(width, height, cameraOpts)\n\n // Orbit controls\n let orbit: OrbitState | null = null\n if (options.orbit !== false) {\n const orbitConfig = typeof options.orbit === 'object' ? options.orbit : {}\n orbit = createOrbitControls(renderer.glCanvas, camera, width, height, orbitConfig)\n }\n\n // Lighting\n const lightConfig: LightConfig = {\n ...defaultLightConfig(),\n ...(options.light || {}),\n }\n\n // Picking\n const picking = createPickingSystem(renderer.gl, width, height, renderer.pixelRatio)\n\n // Build context\n const ctx: GLRenderContext = {\n renderer,\n camera,\n orbit,\n picking,\n width,\n height,\n data,\n options,\n theme,\n animationProgress: options.animate !== false ? 0 : 1,\n }\n\n // Prepare chart\n plugin.prepare(ctx)\n\n // 3D ground grid (only for 3D charts)\n let grid: Grid3D | null = null\n if (!is2D && options['grid'] !== false) {\n grid = createGrid3D(renderer)\n const bounds = computeDataBounds(data)\n grid.update({\n minX: bounds.minX, maxX: bounds.maxX,\n minZ: bounds.minZ, maxZ: bounds.maxZ,\n y: bounds.minY,\n })\n }\n\n // Animation state\n let animating = options.animate !== false\n const animDuration = options.animationDuration ?? 800\n let animStart = 0\n let rafId = 0\n let disposed = false\n let loopRunning = false\n let dirty = true // force first frame\n\n // Tooltip element\n let tooltipEl: HTMLDivElement | null = null\n if (options.tooltip !== false) {\n tooltipEl = document.createElement('div')\n tooltipEl.style.cssText = `\n position: absolute; pointer-events: none; display: none;\n background: rgba(0,0,0,0.85); color: #fff; padding: 6px 10px;\n border-radius: 4px; font-size: 12px; font-family: ${theme.fontFamily};\n z-index: 10; white-space: nowrap;\n `\n el.appendChild(tooltipEl)\n }\n\n function drawFrame() {\n const bg = theme.background\n renderer.beginFrame()\n renderer.clear(bg[0], bg[1], bg[2], 1)\n\n // Set light uniforms on any mesh program\n const meshProg = renderer.getProgram('mesh')\n if (meshProg) {\n meshProg.use()\n setLightUniforms(meshProg, lightConfig, camera.position)\n }\n\n // Render ground grid (before chart so it appears underneath)\n if (grid) grid.render(camera, ctx.animationProgress)\n\n // Render chart\n plugin.render(ctx)\n\n // Render 2D overlay\n if (plugin.renderOverlay) {\n plugin.renderOverlay(ctx, renderer.ctx2d)\n }\n\n renderer.endFrame()\n }\n\n function renderFrame(time: number) {\n if (disposed) { loopRunning = false; return }\n\n if (animating) {\n if (animStart === 0) animStart = time\n const elapsed = time - animStart\n ctx.animationProgress = Math.min(1, elapsed / animDuration)\n if (ctx.animationProgress >= 1) animating = false\n dirty = true\n }\n\n // Update orbit\n if (orbit) {\n const orbitChanged = updateOrbitControls(orbit, camera, ctx.width, ctx.height)\n if (orbitChanged) dirty = true\n }\n\n const needsLoop = plugin.needsLoop?.(ctx) ?? false\n if (needsLoop) dirty = true\n\n // Always draw when dirty\n if (dirty) {\n drawFrame()\n dirty = false\n }\n\n // Decide whether to keep looping\n const keepLooping = animating || needsLoop || (orbit != null && (\n orbit.dragging || orbit.panning ||\n Math.abs(orbit.velocityTheta) > 0.0001 || Math.abs(orbit.velocityPhi) > 0.0001 ||\n orbit.config.autoRotate\n ))\n\n if (keepLooping) {\n rafId = requestAnimationFrame(renderFrame)\n } else {\n loopRunning = false\n }\n }\n\n /** Ensure the rAF loop is running */\n function ensureLoop() {\n if (disposed) return\n dirty = true\n if (!loopRunning) {\n loopRunning = true\n rafId = requestAnimationFrame(renderFrame)\n }\n }\n\n // Input events restart the render loop\n const onInteraction = () => ensureLoop()\n\n renderer.glCanvas.addEventListener('mousedown', onInteraction)\n renderer.glCanvas.addEventListener('mousemove', onInteraction)\n renderer.glCanvas.addEventListener('wheel', onInteraction, { passive: true })\n renderer.glCanvas.addEventListener('touchstart', onInteraction, { passive: true })\n renderer.glCanvas.addEventListener('touchmove', onInteraction, { passive: true })\n\n // Mouse move for tooltip + picking\n const onMouseMove = (e: MouseEvent) => {\n const rect = renderer.glCanvas.getBoundingClientRect()\n const x = e.clientX - rect.left\n const y = e.clientY - rect.top\n\n const hit = plugin.hitTest(ctx, x, y)\n if (tooltipEl) {\n if (hit) {\n tooltipEl.style.display = 'block'\n tooltipEl.style.left = `${x + 12}px`\n tooltipEl.style.top = `${y - 12}px`\n tooltipEl.textContent = `${hit.seriesName}: ${hit.value.toFixed(2)}`\n } else {\n tooltipEl.style.display = 'none'\n }\n }\n }\n\n renderer.glCanvas.addEventListener('mousemove', onMouseMove)\n\n // Start the loop\n loopRunning = true\n rafId = requestAnimationFrame(renderFrame)\n\n // Resize observer\n const resizeObserver = new ResizeObserver(() => {\n if (disposed) return\n const w = el.clientWidth\n const h = el.clientHeight\n if (w === 0 || h === 0) return\n renderer.resize(w, h)\n ctx.width = w\n ctx.height = h\n updateCamera(camera, w, h)\n picking.resize(w, h)\n ensureLoop()\n })\n resizeObserver.observe(el)\n\n return {\n update(newData) {\n ctx.data = newData\n plugin.prepare(ctx)\n if (grid) {\n const bounds = computeDataBounds(newData)\n grid.update({ minX: bounds.minX, maxX: bounds.maxX, minZ: bounds.minZ, maxZ: bounds.maxZ, y: bounds.minY })\n }\n if (options.animate !== false) {\n animating = true\n animStart = 0\n ctx.animationProgress = 0\n }\n ensureLoop()\n },\n\n setOption(opts) {\n Object.assign(ctx.options, opts)\n if (opts.theme) {\n const newTheme = resolveTheme(opts.theme)\n Object.assign(ctx.theme, newTheme)\n }\n plugin.prepare(ctx)\n ensureLoop()\n },\n\n setCameraPosition(pos) {\n camera.position[0] = pos[0]\n camera.position[1] = pos[1]\n camera.position[2] = pos[2]\n updateCamera(camera, ctx.width, ctx.height)\n ensureLoop()\n },\n\n setCameraTarget(target) {\n camera.target[0] = target[0]\n camera.target[1] = target[1]\n camera.target[2] = target[2]\n if (orbit) {\n orbit.target[0] = target[0]\n orbit.target[1] = target[1]\n orbit.target[2] = target[2]\n }\n updateCamera(camera, ctx.width, ctx.height)\n ensureLoop()\n },\n\n resize() {\n const w = el.clientWidth\n const h = el.clientHeight\n renderer.resize(w, h)\n ctx.width = w\n ctx.height = h\n updateCamera(camera, w, h)\n picking.resize(w, h)\n ensureLoop()\n },\n\n getDataAtPoint(x, y) {\n return plugin.hitTest(ctx, x, y)\n },\n\n destroy() {\n disposed = true\n loopRunning = false\n cancelAnimationFrame(rafId)\n resizeObserver.disconnect()\n renderer.glCanvas.removeEventListener('mousedown', onInteraction)\n renderer.glCanvas.removeEventListener('mousemove', onInteraction)\n renderer.glCanvas.removeEventListener('wheel', onInteraction)\n renderer.glCanvas.removeEventListener('touchstart', onInteraction)\n renderer.glCanvas.removeEventListener('touchmove', onInteraction)\n renderer.glCanvas.removeEventListener('mousemove', onMouseMove)\n if (tooltipEl) tooltipEl.remove()\n grid?.destroy()\n orbit?.dispose()\n plugin.dispose(renderer.gl)\n picking.destroy()\n renderer.destroy()\n },\n }\n}\n","/**\n * Shared GLSL snippets — projection uniforms, Phong lighting function, fog.\n */\n\nexport const PROJECTION_UNIFORMS = /* glsl */ `\nuniform mat4 u_projView;\nuniform mat4 u_model;\n`\n\nexport const NORMAL_UNIFORMS = /* glsl */ `\nuniform mat3 u_normalMatrix;\n`\n\nexport const PHONG_UNIFORMS = /* glsl */ `\nuniform vec3 u_ambientColor;\nuniform vec3 u_lightDir;\nuniform vec3 u_diffuseColor;\nuniform vec3 u_specularColor;\nuniform float u_shininess;\nuniform vec3 u_cameraPos;\n`\n\nexport const PHONG_FUNCTION = /* glsl */ `\nvec3 phongLighting(vec3 normal, vec3 fragPos, vec3 baseColor) {\n vec3 N = normalize(normal);\n vec3 L = normalize(u_lightDir);\n vec3 V = normalize(u_cameraPos - fragPos);\n vec3 H = normalize(L + V);\n\n // Hemisphere ambient - warm sky, cool ground\n float hemi = dot(N, vec3(0.0, 1.0, 0.0)) * 0.5 + 0.5;\n vec3 skyAmbient = u_ambientColor * vec3(1.1, 1.05, 1.2);\n vec3 groundAmbient = u_ambientColor * vec3(0.6, 0.55, 0.7);\n vec3 ambient = mix(groundAmbient, skyAmbient, hemi) * baseColor;\n\n // Smooth wrapped diffuse for softer light falloff\n float NdotL = dot(N, L);\n float diff = max(NdotL * 0.5 + 0.5, 0.0);\n diff = diff * diff;\n vec3 diffuse = u_diffuseColor * diff * baseColor;\n\n // Fill light from below-side for depth\n vec3 fillDir = normalize(vec3(-0.4, -0.3, -0.6));\n float fillDiff = max(dot(N, fillDir) * 0.5 + 0.5, 0.0);\n vec3 fill = baseColor * fillDiff * 0.15;\n\n // Blinn-Phong specular with smooth falloff\n float spec = pow(max(dot(N, H), 0.0), u_shininess);\n vec3 specular = u_specularColor * spec * 0.7;\n\n // Rim/fresnel glow - bright edges like subsurface scatter\n float rim = 1.0 - max(dot(V, N), 0.0);\n rim = pow(rim, 3.0);\n vec3 rimColor = mix(baseColor, vec3(1.0), 0.5);\n vec3 rimLight = rimColor * rim * 0.35;\n\n vec3 result = ambient + diffuse + fill + specular + rimLight;\n\n // Slight saturation boost\n float lum = dot(result, vec3(0.299, 0.587, 0.114));\n result = mix(vec3(lum), result, 1.12);\n\n return clamp(result, 0.0, 1.0);\n}\n`\n\nexport const FOG_UNIFORMS = /* glsl */ `\nuniform float u_fogNear;\nuniform float u_fogFar;\nuniform vec3 u_fogColor;\n`\n\nexport const FOG_FUNCTION = /* glsl */ `\nvec3 applyFog(vec3 color, float dist) {\n float fogFactor = clamp((u_fogFar - dist) / (u_fogFar - u_fogNear), 0.0, 1.0);\n return mix(u_fogColor, color, fogFactor);\n}\n`\n","/**\n * GL_POINTS vertex shader with size attenuation for 3D scatter.\n */\n\nimport { PROJECTION_UNIFORMS } from './common.glsl'\n\nexport const POINT_VERT = /* glsl */ `\nprecision highp float;\n\n${PROJECTION_UNIFORMS}\n\nattribute vec3 a_position;\nattribute vec3 a_color;\nattribute float a_size;\n\nuniform float u_pixelRatio;\nuniform float u_sizeAttenuation;\n\nvarying vec3 v_color;\n\nvoid main() {\n vec4 worldPos = u_model * vec4(a_position, 1.0);\n vec4 mvPos = u_projView * worldPos;\n gl_Position = mvPos;\n\n float attenuation = u_sizeAttenuation > 0.0\n ? u_sizeAttenuation / max(mvPos.z, 0.1)\n : 1.0;\n gl_PointSize = a_size * u_pixelRatio * attenuation;\n v_color = a_color;\n}\n`\n\nexport const POINT_VERT_UNIFORMS = [\n 'u_projView', 'u_model', 'u_pixelRatio', 'u_sizeAttenuation',\n]\n\nexport const POINT_VERT_ATTRIBUTES = [\n 'a_position', 'a_color', 'a_size',\n]\n","/**\n * SDF circle fragment shader with anti-aliased edge for GL_POINTS.\n */\n\nexport const POINT_FRAG = /* glsl */ `\nprecision highp float;\n\nuniform float u_opacity;\n\nvarying vec3 v_color;\n\nvoid main() {\n vec2 coord = gl_PointCoord - vec2(0.5);\n float dist = length(coord);\n if (dist > 0.5) discard;\n\n // Solid core with soft edge\n float coreAlpha = 1.0 - smoothstep(0.3, 0.42, dist);\n // Outer glow halo\n float glowAlpha = (1.0 - smoothstep(0.2, 0.5, dist)) * 0.4;\n float alpha = max(coreAlpha, glowAlpha);\n\n // Brighten center for a glossy look\n vec3 color = v_color + vec3(0.15) * (1.0 - smoothstep(0.0, 0.2, dist));\n\n gl_FragColor = vec4(color, alpha * u_opacity);\n}\n`\n\nexport const POINT_FRAG_UNIFORMS = ['u_opacity']\n","/**\n * Scatter3D — GL_POINTS in 3D space with SDF circles.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { POINT_VERT, POINT_VERT_UNIFORMS, POINT_VERT_ATTRIBUTES } from '../../shaders/point.vert'\nimport { POINT_FRAG, POINT_FRAG_UNIFORMS } from '../../shaders/point.frag'\nimport { mat4, mat4Identity } from '../../engine/math'\nimport { projectToScreen } from '../../engine/camera'\n\ninterface PointData { seriesIndex: number; dataIndex: number; x: number; y: number; z: number; value: number; name: string }\n\nexport function createScatter3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let pointCount = 0\n let seriesData: PointData[] = []\n const modelMatrix = mat4()\n\n return {\n type: 'scatter3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('point3d',\n POINT_VERT, POINT_FRAG,\n [...POINT_VERT_UNIFORMS, ...POINT_FRAG_UNIFORMS],\n POINT_VERT_ATTRIBUTES,\n )\n\n const floatsPerVertex = 7\n seriesData = []\n let totalPoints = 0\n for (const s of series) totalPoints += s.values.length\n\n const vertices = new Float32Array(totalPoints * floatsPerVertex)\n let offset = 0\n const defaultSize = options.pointSize ?? 8\n\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n const color = hexToRGB(s.color ?? theme.colors[si % theme.colors.length]!)\n const size = s.size ?? defaultSize\n\n for (let di = 0; di < s.values.length; di++) {\n const x = s.x?.[di] ?? di\n const y = s.values[di]!\n const z = s.z?.[di] ?? 0\n\n vertices[offset++] = x\n vertices[offset++] = y\n vertices[offset++] = z\n vertices[offset++] = color[0]\n vertices[offset++] = color[1]\n vertices[offset++] = color[2]\n vertices[offset++] = size\n\n seriesData.push({ seriesIndex: si, dataIndex: di, x, y, z, value: y, name: s.name })\n }\n }\n\n if (vbo) vbo.update(vertices)\n else vbo = createVertexBuffer(gl, vertices, gl.DYNAMIC_DRAW)\n\n pointCount = totalPoints\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('point3d')!\n\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n prog.setFloat('u_pixelRatio', renderer.pixelRatio)\n prog.setFloat('u_sizeAttenuation', 50.0)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || pointCount === 0) return\n vbo.bind()\n\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n { location: prog.attributes['a_size']!, size: 1 },\n ])\n applyVertexLayout(gl, layout)\n gl.drawArrays(gl.POINTS, 0, pointCount)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 20\n\n for (const d of seriesData) {\n const screen = projectToScreen(\n new Float32Array([d.x, d.y, d.z]),\n camera.projViewMatrix, width, height,\n )\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dx = screen.x - x\n const dy = screen.y - y\n const dist = Math.sqrt(dx * dx + dy * dy)\n if (dist < closestDist) {\n closestDist = dist\n closest = { seriesIndex: d.seriesIndex, dataIndex: d.dataIndex, value: d.value, x: d.x, y: d.y, z: d.z, seriesName: d.name }\n }\n }\n return closest\n },\n\n dispose() {\n vbo?.destroy(); vbo = null\n seriesData = []\n },\n }\n}\n","/**\n * 3D mesh vertex shader — position + normal + color → lit fragment.\n */\n\nimport { PROJECTION_UNIFORMS, NORMAL_UNIFORMS } from './common.glsl'\n\nexport const MESH_VERT = /* glsl */ `\nprecision highp float;\n\n${PROJECTION_UNIFORMS}\n${NORMAL_UNIFORMS}\n\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec3 a_color;\n\nvarying vec3 v_normal;\nvarying vec3 v_fragPos;\nvarying vec3 v_color;\n\nvoid main() {\n vec4 worldPos = u_model * vec4(a_position, 1.0);\n v_fragPos = worldPos.xyz;\n v_normal = u_normalMatrix * a_normal;\n v_color = a_color;\n gl_Position = u_projView * worldPos;\n}\n`\n\nexport const MESH_VERT_UNIFORMS = [\n 'u_projView', 'u_model', 'u_normalMatrix',\n]\n\nexport const MESH_VERT_ATTRIBUTES = [\n 'a_position', 'a_normal', 'a_color',\n]\n","/**\n * Phong fragment shader for 3D meshes.\n */\n\nimport { PHONG_UNIFORMS, PHONG_FUNCTION } from './common.glsl'\n\nexport const MESH_FRAG = /* glsl */ `\nprecision highp float;\n\n${PHONG_UNIFORMS}\n\nuniform float u_opacity;\n\nvarying vec3 v_normal;\nvarying vec3 v_fragPos;\nvarying vec3 v_color;\n\n${PHONG_FUNCTION}\n\nvoid main() {\n vec3 lit = phongLighting(v_normal, v_fragPos, v_color);\n gl_FragColor = vec4(lit, u_opacity);\n}\n`\n\nexport const MESH_FRAG_UNIFORMS = [\n 'u_ambientColor', 'u_lightDir', 'u_diffuseColor',\n 'u_specularColor', 'u_shininess', 'u_cameraPos', 'u_opacity',\n]\n","/**\n * Bar3D — cuboid mesh per bar, Phong lit.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4 } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nfunction buildCuboid(\n cx: number, cy: number, cz: number,\n sx: number, sy: number, sz: number,\n r: number, g: number, b: number,\n verts: number[], indices: number[], baseVertex: number,\n) {\n const hx = sx * 0.5, hy = sy * 0.5, hz = sz * 0.5\n const faces = [\n { p: [[1,1,1],[1,-1,1],[1,-1,-1],[1,1,-1]], n: [1,0,0] },\n { p: [[-1,1,-1],[-1,-1,-1],[-1,-1,1],[-1,1,1]], n: [-1,0,0] },\n { p: [[-1,1,-1],[-1,1,1],[1,1,1],[1,1,-1]], n: [0,1,0] },\n { p: [[-1,-1,1],[-1,-1,-1],[1,-1,-1],[1,-1,1]], n: [0,-1,0] },\n { p: [[-1,1,1],[-1,-1,1],[1,-1,1],[1,1,1]], n: [0,0,1] },\n { p: [[1,1,-1],[1,-1,-1],[-1,-1,-1],[-1,1,-1]], n: [0,0,-1] },\n ]\n let vi = baseVertex\n for (const face of faces) {\n for (const p of face.p) {\n verts.push(cx + p[0]! * hx, cy + p[1]! * hy, cz + p[2]! * hz, face.n[0]!, face.n[1]!, face.n[2]!, r, g, b)\n }\n indices.push(vi, vi + 1, vi + 2, vi, vi + 2, vi + 3)\n vi += 4\n }\n}\n\ninterface BarInfo { si: number; di: number; cx: number; cy: number; cz: number; height: number; name: string; value: number }\n\nexport function createBar3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n const modelMatrix = mat4()\n const normalMatrix = new Float32Array(9)\n let barData: BarInfo[] = []\n\n return {\n type: 'bar3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n const verts: number[] = []\n const indices: number[] = []\n barData = []\n let baseVertex = 0\n const barWidth = (options['barWidth'] as number | undefined) ?? 0.6\n const barDepth = (options['barDepth'] as number | undefined) ?? 0.6\n\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n const color = hexToRGB(s.color ?? theme.colors[si % theme.colors.length]!)\n for (let di = 0; di < s.values.length; di++) {\n const x = s.x?.[di] ?? di\n const z = s.z?.[di] ?? si\n const height = s.values[di]!\n const cy = height * 0.5\n buildCuboid(x, cy, z, barWidth, Math.max(0.01, height), barDepth, color[0], color[1], color[2], verts, indices, baseVertex)\n baseVertex += 24\n barData.push({ si, di, cx: x, cy, cz: z, height, name: s.name, value: height })\n }\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = baseVertex > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('mesh')!\n const progress = ctx.animationProgress\n\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n const animModel = mat4(); mat4Identity(animModel)\n animModel[5] = progress\n prog.setMat4('u_model', animModel)\n mat3NormalFromMat4(normalMatrix, animModel)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', 1.0)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 30\n for (const d of barData) {\n const screen = projectToScreen(new Float32Array([d.cx, d.cy, d.cz]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) {\n closestDist = dist\n closest = { seriesIndex: d.si, dataIndex: d.di, value: d.value, x: d.cx, y: d.cy, z: d.cz, seriesName: d.name }\n }\n }\n return closest\n },\n\n dispose() {\n vbo?.destroy(); vbo = null\n ibo?.destroy(); ibo = null\n barData = []\n },\n }\n}\n","/**\n * Surface3D — grid heightmap mesh with computed normals, wireframe option.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4 } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nfunction heightToColor(v: number, min: number, range: number): [number, number, number] {\n const t = range > 0 ? (v - min) / range : 0.5\n // Deep blue -> teal -> emerald -> gold -> coral\n if (t < 0.2) { const s = t / 0.2; return [0.1 + s * 0.05, 0.15 + s * 0.35, 0.6 + s * 0.2] }\n if (t < 0.4) { const s = (t - 0.2) / 0.2; return [0.15 - s * 0.05, 0.5 + s * 0.3, 0.8 - s * 0.25] }\n if (t < 0.6) { const s = (t - 0.4) / 0.2; return [0.1 + s * 0.6, 0.8 - s * 0.1, 0.55 - s * 0.35] }\n if (t < 0.8) { const s = (t - 0.6) / 0.2; return [0.7 + s * 0.28, 0.7 - s * 0.2, 0.2 - s * 0.05] }\n const s = (t - 0.8) / 0.2; return [0.98, 0.5 - s * 0.15, 0.15 + s * 0.2]\n}\n\nexport function createSurface3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n let drawMode: number = 0\n const modelMatrix = mat4()\n const normalMatrix = new Float32Array(9)\n let gridPoints: { x: number; y: number; z: number; row: number; col: number }[] = []\n\n return {\n type: 'surface3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options } = ctx\n const gl = renderer.gl\n const grid = data.grid\n if (!grid || grid.length === 0) return\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n const rows = grid.length\n const cols = grid[0]!.length\n\n let min = Infinity, max = -Infinity\n for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) {\n const v = grid[r]![c]!; if (v < min) min = v; if (v > max) max = v\n }\n const range = max - min\n\n const verts = new Float32Array(rows * cols * 9)\n gridPoints = []\n let vi = 0\n\n for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) {\n const y = grid[r]![c]!\n const x = c / (cols - 1 || 1) * 10 - 5\n const z = r / (rows - 1 || 1) * 10 - 5\n const yl = c > 0 ? grid[r]![c - 1]! : y\n const yr = c < cols - 1 ? grid[r]![c + 1]! : y\n const yd = r > 0 ? grid[r - 1]![c]! : y\n const yu = r < rows - 1 ? grid[r + 1]![c]! : y\n const dx = 10 / (cols - 1 || 1), dz = 10 / (rows - 1 || 1)\n const nx = (yl - yr) / (2 * dx), nz = (yd - yu) / (2 * dz)\n const len = Math.sqrt(nx * nx + 1 + nz * nz)\n const color = heightToColor(y, min, range)\n verts[vi++] = x; verts[vi++] = y; verts[vi++] = z\n verts[vi++] = nx / len; verts[vi++] = 1 / len; verts[vi++] = nz / len\n verts[vi++] = color[0]; verts[vi++] = color[1]; verts[vi++] = color[2]\n gridPoints.push({ x, y, z, row: r, col: c })\n }\n\n const isWireframe = options.wireframe === true\n const indices: number[] = []\n if (isWireframe) {\n for (let r = 0; r < rows; r++) for (let c = 0; c < cols; c++) {\n const idx = r * cols + c\n if (c < cols - 1) indices.push(idx, idx + 1)\n if (r < rows - 1) indices.push(idx, idx + cols)\n }\n drawMode = gl.LINES\n } else {\n for (let r = 0; r < rows - 1; r++) for (let c = 0; c < cols - 1; c++) {\n const tl = r * cols + c\n indices.push(tl, tl + cols, tl + 1, tl + 1, tl + cols, tl + cols + 1)\n }\n drawMode = gl.TRIANGLES\n }\n\n const maxIdx = rows * cols\n const use32 = maxIdx > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n if (vbo) vbo.update(verts); else vbo = createVertexBuffer(gl, verts, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('mesh')!\n\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n mat3NormalFromMat4(normalMatrix, modelMatrix)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n ibo.bind()\n gl.disable(gl.CULL_FACE)\n gl.drawElements(drawMode, indexCount, indexType, 0)\n gl.enable(gl.CULL_FACE)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height, data } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 20\n for (const gp of gridPoints) {\n const screen = projectToScreen(new Float32Array([gp.x, gp.y, gp.z]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) {\n closestDist = dist\n closest = { seriesIndex: 0, dataIndex: gp.row * (data.grid?.[0]?.length ?? 0) + gp.col, value: gp.y, x: gp.x, y: gp.y, z: gp.z, seriesName: `[${gp.row},${gp.col}]` }\n }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; ibo?.destroy(); ibo = null; gridPoints = [] },\n }\n}\n","/**\n * Globe3D — single high-res sphere with data projected as glowing surface\n * patches, subtle baked graticule, labels, and legend.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4 } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nconst GLOBE_RADIUS = 3\nconst SEGMENTS = 128\nconst RINGS = 64\n\nfunction latLngToXYZ(lat: number, lng: number, radius: number): [number, number, number] {\n const phi = (90 - lat) * Math.PI / 180\n const theta = (lng + 180) * Math.PI / 180\n return [\n -radius * Math.sin(phi) * Math.cos(theta),\n radius * Math.cos(phi),\n radius * Math.sin(phi) * Math.sin(theta),\n ]\n}\n\n/** Great-circle angular distance between two lat/lng points (radians) */\nfunction angularDistance(lat1: number, lng1: number, lat2: number, lng2: number): number {\n const p1 = lat1 * Math.PI / 180, p2 = lat2 * Math.PI / 180\n const dl = (lng2 - lng1) * Math.PI / 180\n return Math.acos(\n Math.min(1, Math.max(-1,\n Math.sin(p1) * Math.sin(p2) + Math.cos(p1) * Math.cos(p2) * Math.cos(dl)\n ))\n )\n}\n\ninterface DataPatch {\n lat: number; lng: number; value: number; normValue: number\n color: [number, number, number]\n si: number; di: number; name: string; label: string\n}\n\ninterface ScreenPoint {\n si: number; di: number; lat: number; lng: number\n wx: number; wy: number; wz: number\n value: number; name: string; label: string\n}\n\nexport function createGlobe3DPlugin(): GLChartTypePlugin {\n let sphereVBO: GLBuffer | null = null\n let sphereIBO: GLBuffer | null = null\n let sphereIndexCount = 0\n const modelMatrix = mat4()\n let locationColors: Map<string, string> = new Map()\n const normalMatrix = new Float32Array(9)\n let screenPoints: ScreenPoint[] = []\n let seriesInfo: { name: string; color: string }[] = []\n\n return {\n type: 'globe3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n // Collect unique locations and merge series values per location\n // Each location gets its own distinct color from the palette\n const locationMap = new Map<string, { lat: number; lng: number; totalValue: number; label: string; entries: { si: number; di: number; value: number }[] }>()\n seriesInfo = []\n screenPoints = []\n\n for (let sIdx = 0; sIdx < series.length; sIdx++) {\n const s = series[sIdx]!\n const colorHex = s.color ?? theme.colors[sIdx % theme.colors.length]!\n seriesInfo.push({ name: s.name, color: colorHex })\n for (let di = 0; di < s.values.length; di++) {\n const lat = s.y?.[di] ?? 0, lng = s.x?.[di] ?? 0, value = s.values[di]!\n const label = data.categories?.[di] ?? ''\n const key = `${lat.toFixed(1)}_${lng.toFixed(1)}`\n let loc = locationMap.get(key)\n if (!loc) { loc = { lat, lng, totalValue: 0, label, entries: [] }; locationMap.set(key, loc) }\n loc.totalValue += Math.abs(value)\n loc.entries.push({ si: sIdx, di, value })\n const [wx, wy, wz] = latLngToXYZ(lat, lng, GLOBE_RADIUS)\n screenPoints.push({ si: sIdx, di, lat, lng, wx, wy, wz, value, name: s.name, label })\n }\n }\n\n // Build patches: one per unique location, each with its own color\n const patches: DataPatch[] = []\n locationColors = new Map()\n let maxVal = 0\n for (const loc of locationMap.values()) if (loc.totalValue > maxVal) maxVal = loc.totalValue\n if (maxVal === 0) maxVal = 1\n\n let locIdx = 0\n for (const loc of locationMap.values()) {\n const colorHex = theme.colors[locIdx % theme.colors.length]!\n locationColors.set(loc.label, colorHex)\n const color = hexToRGB(colorHex)\n const normValue = loc.totalValue / maxVal\n patches.push({ lat: loc.lat, lng: loc.lng, value: loc.totalValue, normValue, color, si: 0, di: locIdx, name: loc.label, label: loc.label })\n locIdx++\n }\n\n // Build sphere with data baked into vertex colors\n const baseColor: [number, number, number] = [0.03, 0.05, 0.12]\n // Wide patch radius in radians (~45 degrees) for visible splashes\n const patchRadius = 0.8\n // Graticule parameters\n const gratLatStep = 30, gratLngStep = 30\n const gratWidth = 0.015\n const gratColor: [number, number, number] = [0.08, 0.12, 0.22]\n\n\n const verts: number[] = []\n const indices: number[] = []\n let patchedVerts = 0\n\n for (let ring = 0; ring <= RINGS; ring++) {\n const phi = (ring / RINGS) * Math.PI\n const lat = 90 - (ring / RINGS) * 180\n for (let seg = 0; seg <= SEGMENTS; seg++) {\n const theta = (seg / SEGMENTS) * Math.PI * 2\n const lng = (seg / SEGMENTS) * 360 - 180\n const nx = Math.sin(phi) * Math.cos(theta)\n const ny = Math.cos(phi)\n const nz = Math.sin(phi) * Math.sin(theta)\n\n // Start with base color\n let r = baseColor[0], g = baseColor[1], b = baseColor[2]\n\n // Bake graticule: check proximity to lat/lng grid lines\n const latMod = ((lat % gratLatStep) + gratLatStep) % gratLatStep\n const latDist = Math.min(latMod, gratLatStep - latMod) * Math.PI / 180\n const lngMod = ((lng % gratLngStep) + gratLngStep) % gratLngStep\n const lngDist = Math.min(lngMod, gratLngStep - lngMod) * Math.PI / 180\n const gratDist = Math.min(latDist, lngDist)\n if (gratDist < gratWidth) {\n const gratT = 1 - gratDist / gratWidth\n r = r + (gratColor[0] - r) * gratT\n g = g + (gratColor[1] - g) * gratT\n b = b + (gratColor[2] - b) * gratT\n }\n\n // Accumulate data patch influence (additive)\n let ar = 0, ag = 0, ab = 0\n for (const patch of patches) {\n const dist = angularDistance(lat, lng, patch.lat, patch.lng)\n if (dist < patchRadius) {\n const t = 1 - dist / patchRadius\n // Linear core + soft outer glow\n const influence = t * (0.4 + t * 0.6) * patch.normValue\n ar += patch.color[0] * influence\n ag += patch.color[1] * influence\n ab += patch.color[2] * influence\n }\n }\n\n if (ar > 0.01 || ag > 0.01 || ab > 0.01) {\n patchedVerts++\n r = Math.min(1, r + ar)\n g = Math.min(1, g + ag)\n b = Math.min(1, b + ab)\n }\n\n verts.push(\n nx * GLOBE_RADIUS, ny * GLOBE_RADIUS, nz * GLOBE_RADIUS,\n nx, ny, nz,\n r, g, b,\n )\n }\n }\n\n\n // Triangulate (CCW winding for correct front-face)\n for (let ring = 0; ring < RINGS; ring++) {\n for (let seg = 0; seg < SEGMENTS; seg++) {\n const a = ring * (SEGMENTS + 1) + seg\n const b = a + SEGMENTS + 1\n indices.push(a, a + 1, b, a + 1, b + 1, b)\n }\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = (RINGS + 1) * (SEGMENTS + 1) > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n\n if (sphereVBO) sphereVBO.update(vertArr); else sphereVBO = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (sphereIBO) sphereIBO.update(idxArr); else sphereIBO = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n sphereIndexCount = indices.length\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const progress = ctx.animationProgress\n\n const prog = renderer.getProgram('mesh')!\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n mat3NormalFromMat4(normalMatrix, modelMatrix)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', progress)\n\n if (sphereVBO && sphereIBO) {\n gl.disable(gl.CULL_FACE)\n sphereVBO.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n sphereIBO.bind()\n const indexType = (RINGS + 1) * (SEGMENTS + 1) > 65535 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n gl.drawElements(gl.TRIANGLES, sphereIndexCount, indexType, 0)\n disableVertexLayout(gl, layout)\n gl.enable(gl.CULL_FACE)\n }\n },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n const { camera, width, height, theme, animationProgress } = ctx\n if (animationProgress < 0.5) return\n\n ctx2d.save()\n\n // -- Point labels --\n // Deduplicate labels (multiple series share same locations)\n const seenLabels = new Set<string>()\n ctx2d.font = `${theme.fontSize - 1}px ${theme.fontFamily}`\n ctx2d.textBaseline = 'middle'\n\n for (const sp of screenPoints) {\n if (!sp.label || seenLabels.has(sp.label)) continue\n const screen = projectToScreen(\n new Float32Array([sp.wx, sp.wy, sp.wz]),\n camera.projViewMatrix, width, height,\n )\n if (!screen || screen.z < -1 || screen.z > 1 || screen.z > 0.97) continue\n seenLabels.add(sp.label)\n\n const locColor = locationColors.get(sp.label) ?? theme.textColor\n\n // Colored dot at location matching the surface patch\n ctx2d.fillStyle = locColor\n ctx2d.globalAlpha = 0.9\n ctx2d.beginPath()\n ctx2d.arc(screen.x, screen.y, 3, 0, Math.PI * 2)\n ctx2d.fill()\n\n // Label\n ctx2d.fillStyle = theme.textColor\n ctx2d.globalAlpha = 0.85\n ctx2d.textAlign = 'left'\n ctx2d.fillText(sp.label, screen.x + 8, screen.y)\n }\n\n ctx2d.restore()\n },\n\n needsLoop() { return false },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 25\n for (const sp of screenPoints) {\n const screen = projectToScreen(\n new Float32Array([sp.wx, sp.wy, sp.wz]),\n camera.projViewMatrix, width, height,\n )\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) {\n closestDist = dist\n closest = {\n seriesIndex: sp.si, dataIndex: sp.di, value: sp.value,\n x: sp.lng, y: sp.lat, seriesName: sp.label || sp.name,\n }\n }\n }\n return closest\n },\n\n dispose() {\n sphereVBO?.destroy(); sphereVBO = null\n sphereIBO?.destroy(); sphereIBO = null\n screenPoints = []\n },\n }\n}\n","/**\n * Map3D — extruded regions with choropleth coloring.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4 } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nfunction valueToColor(v: number, min: number, range: number): [number, number, number] {\n const t = range > 0 ? (v - min) / range : 0.5\n return [0.2 + t * 0.6, 0.3 + (1 - t) * 0.4, 0.8 - t * 0.5]\n}\n\ninterface RegionData { name: string; cx: number; cy: number; cz: number; value: number; si: number; di: number }\n\nexport function createMap3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n const modelMatrix = mat4()\n const normalMatrix = new Float32Array(9)\n let regionData: RegionData[] = []\n\n return {\n type: 'map3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n const verts: number[] = [], indices: number[] = []\n regionData = []\n let baseVertex = 0\n let min = Infinity, max = -Infinity\n for (const s of series) for (const v of s.values) { if (v < min) min = v; if (v > max) max = v }\n const range = max - min\n const extrudeHeight = (options['extrudeHeight'] as number | undefined) ?? 1.0\n\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n for (let di = 0; di < s.values.length; di++) {\n const value = s.values[di]!, height = value / (max || 1) * extrudeHeight\n const color = valueToColor(value, min, range)\n const px = s.x?.[di] ?? (di % 10) * 1.2, pz = s.z?.[di] ?? Math.floor(di / 10) * 1.2\n const w = 0.9, d = 0.9, topY = height\n const darker: [number, number, number] = [color[0] * 0.7, color[1] * 0.7, color[2] * 0.7]\n\n // Top face\n verts.push(px, topY, pz, 0, 1, 0, ...color, px + w, topY, pz, 0, 1, 0, ...color, px + w, topY, pz + d, 0, 1, 0, ...color, px, topY, pz + d, 0, 1, 0, ...color)\n indices.push(baseVertex, baseVertex + 1, baseVertex + 2, baseVertex, baseVertex + 2, baseVertex + 3)\n baseVertex += 4\n\n // 4 side faces\n const sides: [number[], number[], number[], number[], number[]][] = [\n [[px, 0, pz], [px + w, 0, pz], [px + w, topY, pz], [px, topY, pz], [0, 0, -1]],\n [[px + w, 0, pz], [px + w, 0, pz + d], [px + w, topY, pz + d], [px + w, topY, pz], [1, 0, 0]],\n [[px + w, 0, pz + d], [px, 0, pz + d], [px, topY, pz + d], [px + w, topY, pz + d], [0, 0, 1]],\n [[px, 0, pz + d], [px, 0, pz], [px, topY, pz], [px, topY, pz + d], [-1, 0, 0]],\n ]\n for (const [p0, p1, p2, p3, n] of sides) {\n verts.push(p0[0]!, p0[1]!, p0[2]!, n[0]!, n[1]!, n[2]!, ...darker)\n verts.push(p1[0]!, p1[1]!, p1[2]!, n[0]!, n[1]!, n[2]!, ...darker)\n verts.push(p2[0]!, p2[1]!, p2[2]!, n[0]!, n[1]!, n[2]!, ...darker)\n verts.push(p3[0]!, p3[1]!, p3[2]!, n[0]!, n[1]!, n[2]!, ...darker)\n indices.push(baseVertex, baseVertex + 1, baseVertex + 2, baseVertex, baseVertex + 2, baseVertex + 3)\n baseVertex += 4\n }\n regionData.push({ name: data.categories?.[di] ?? s.name, cx: px + w * 0.5, cy: topY, cz: pz + d * 0.5, value, si, di })\n }\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = baseVertex > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('mesh')!\n\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n const animModel = mat4(); mat4Identity(animModel); animModel[5] = ctx.animationProgress\n prog.setMat4('u_model', animModel)\n mat3NormalFromMat4(normalMatrix, animModel)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', 1.0)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0)\n disableVertexLayout(gl, layout)\n },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n ctx2d.font = `${ctx.theme.fontSize}px ${ctx.theme.fontFamily}`\n ctx2d.fillStyle = ctx.theme.textColor; ctx2d.textAlign = 'center'\n for (const r of regionData) {\n const screen = projectToScreen(new Float32Array([r.cx, r.cy + 0.3, r.cz]), ctx.camera.projViewMatrix, ctx.width, ctx.height)\n if (screen && screen.z > -1 && screen.z < 1) ctx2d.fillText(r.name, screen.x, screen.y)\n }\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n let closest: GLDataPoint | null = null\n let closestDist = 30\n for (const r of regionData) {\n const screen = projectToScreen(new Float32Array([r.cx, r.cy, r.cz]), ctx.camera.projViewMatrix, ctx.width, ctx.height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) { closestDist = dist; closest = { seriesIndex: r.si, dataIndex: r.di, value: r.value, x: r.cx, y: r.cy, z: r.cz, seriesName: r.name } }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; ibo?.destroy(); ibo = null; regionData = [] },\n }\n}\n","/**\n * Screen-space thick line vertex shader via triangle expansion.\n * Each line segment is a quad (2 triangles, 4 vertices + 6 indices).\n */\n\nimport { PROJECTION_UNIFORMS } from './common.glsl'\n\nexport const LINE_VERT = /* glsl */ `\nprecision highp float;\n\n${PROJECTION_UNIFORMS}\n\nattribute vec3 a_position;\nattribute vec3 a_next;\nattribute vec3 a_color;\nattribute float a_side;\n\nuniform vec2 u_resolution;\nuniform float u_lineWidth;\n\nvarying vec3 v_color;\nvarying float v_side;\n\nvoid main() {\n vec4 clipCurrent = u_projView * u_model * vec4(a_position, 1.0);\n vec4 clipNext = u_projView * u_model * vec4(a_next, 1.0);\n\n vec2 screenCurrent = clipCurrent.xy / clipCurrent.w * u_resolution * 0.5;\n vec2 screenNext = clipNext.xy / clipNext.w * u_resolution * 0.5;\n\n vec2 dir = screenNext - screenCurrent;\n float len = length(dir);\n dir = len > 0.001 ? dir / len : vec2(1.0, 0.0);\n vec2 normal = vec2(-dir.y, dir.x);\n\n vec2 offset = normal * u_lineWidth * 0.5 * a_side;\n vec2 finalScreen = screenCurrent + offset;\n\n gl_Position = vec4(finalScreen / (u_resolution * 0.5) * clipCurrent.w, clipCurrent.z, clipCurrent.w);\n v_color = a_color;\n v_side = a_side;\n}\n`\n\nexport const LINE_VERT_UNIFORMS = [\n 'u_projView', 'u_model', 'u_resolution', 'u_lineWidth',\n]\n\nexport const LINE_VERT_ATTRIBUTES = [\n 'a_position', 'a_next', 'a_color', 'a_side',\n]\n","/**\n * Line fragment shader with optional dash pattern.\n */\n\nexport const LINE_FRAG = /* glsl */ `\nprecision highp float;\n\nuniform float u_opacity;\n\nvarying vec3 v_color;\nvarying float v_side;\n\nvoid main() {\n float alpha = 1.0 - smoothstep(0.9, 1.0, abs(v_side));\n gl_FragColor = vec4(v_color, alpha * u_opacity);\n}\n`\n\nexport const LINE_FRAG_UNIFORMS = ['u_opacity']\n","/**\n * Lines3D — multiple 3D polylines with thick line shader.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { LINE_VERT, LINE_VERT_UNIFORMS, LINE_VERT_ATTRIBUTES } from '../../shaders/line.vert'\nimport { LINE_FRAG, LINE_FRAG_UNIFORMS } from '../../shaders/line.frag'\nimport { mat4, mat4Identity } from '../../engine/math'\nimport { projectToScreen } from '../../engine/camera'\n\ninterface LPoint { si: number; di: number; x: number; y: number; z: number; value: number; name: string }\n\nexport function createLines3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n const modelMatrix = mat4()\n let linePoints: LPoint[] = []\n\n return {\n type: 'lines3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('line3d', LINE_VERT, LINE_FRAG,\n [...LINE_VERT_UNIFORMS, ...LINE_FRAG_UNIFORMS], LINE_VERT_ATTRIBUTES)\n\n const verts: number[] = []\n const indices: number[] = []\n linePoints = []\n let baseVertex = 0\n\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n const color = hexToRGB(s.color ?? theme.colors[si % theme.colors.length]!)\n for (let di = 0; di < s.values.length - 1; di++) {\n const x0 = s.x?.[di] ?? di, y0 = s.values[di]!, z0 = s.z?.[di] ?? 0\n const x1 = s.x?.[di + 1] ?? (di + 1), y1 = s.values[di + 1]!, z1 = s.z?.[di + 1] ?? 0\n for (const side of [-1, 1]) verts.push(x0, y0, z0, x1, y1, z1, color[0], color[1], color[2], side)\n for (const side of [-1, 1]) verts.push(x1, y1, z1, x1, y1, z1, color[0], color[1], color[2], side)\n indices.push(baseVertex, baseVertex + 2, baseVertex + 1, baseVertex + 1, baseVertex + 2, baseVertex + 3)\n baseVertex += 4\n if (di === 0) linePoints.push({ si, di, x: x0, y: y0, z: z0, value: y0, name: s.name })\n linePoints.push({ si, di: di + 1, x: x1, y: y1, z: z1, value: y1, name: s.name })\n }\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = baseVertex > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('line3d')!\n\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n prog.setVec2('u_resolution', ctx.width * renderer.pixelRatio, ctx.height * renderer.pixelRatio)\n prog.setFloat('u_lineWidth', (ctx.options.lineWidth ?? 2) * renderer.pixelRatio)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_next']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n { location: prog.attributes['a_side']!, size: 1 },\n ])\n applyVertexLayout(gl, layout)\n gl.disable(gl.CULL_FACE)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0)\n gl.enable(gl.CULL_FACE)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 15\n for (const d of linePoints) {\n const screen = projectToScreen(new Float32Array([d.x, d.y, d.z]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) { closestDist = dist; closest = { seriesIndex: d.si, dataIndex: d.di, value: d.value, x: d.x, y: d.y, z: d.z, seriesName: d.name } }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; ibo?.destroy(); ibo = null; linePoints = [] },\n }\n}\n","/**\n * Line3D — single line as tube/ribbon via Frenet frames.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4, vec3, vec3Cross, vec3Normalize } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nexport function createLine3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n const modelMatrix = mat4()\n const normalMatrix = new Float32Array(9)\n let tubePoints: { di: number; x: number; y: number; z: number; value: number; name: string }[] = []\n\n return {\n type: 'line3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n const s = series[0]\n if (!s || s.values.length < 2) return\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n const tubeRadius = (options['tubeRadius'] as number | undefined) ?? 0.15\n const tubeSides = (options['tubeSides'] as number | undefined) ?? 8\n const color = hexToRGB(s.color ?? theme.colors[0]!)\n const n = s.values.length\n\n const points: [number, number, number][] = []\n for (let i = 0; i < n; i++) points.push([s.x?.[i] ?? i, s.values[i]!, s.z?.[i] ?? 0])\n\n // Tangents\n const tangents: [number, number, number][] = []\n for (let i = 0; i < n; i++) {\n const prev = points[Math.max(0, i - 1)]!, next = points[Math.min(n - 1, i + 1)]!\n const t = vec3(next[0] - prev[0], next[1] - prev[1], next[2] - prev[2])\n vec3Normalize(t, t)\n tangents.push([t[0]!, t[1]!, t[2]!])\n }\n\n // Frenet frames\n const t0 = tangents[0]!\n const initNormal: [number, number, number] = Math.abs(t0[0]) < 0.9 ? [1, 0, 0] : [0, 1, 0]\n const normals: [number, number, number][] = []\n const binormals: [number, number, number][] = []\n\n const N = vec3(0, 0, 0), B = vec3(0, 0, 0)\n const T = vec3(t0[0], t0[1], t0[2])\n vec3Cross(B, T, vec3(initNormal[0], initNormal[1], initNormal[2]))\n vec3Normalize(B, B)\n vec3Cross(N, B, T); vec3Normalize(N, N)\n normals.push([N[0]!, N[1]!, N[2]!])\n binormals.push([B[0]!, B[1]!, B[2]!])\n\n for (let i = 1; i < n; i++) {\n const t = tangents[i]!\n const T2 = vec3(t[0], t[1], t[2])\n vec3Cross(B, T2, N); vec3Normalize(B, B)\n vec3Cross(N, B, T2); vec3Normalize(N, N)\n normals.push([N[0]!, N[1]!, N[2]!])\n binormals.push([B[0]!, B[1]!, B[2]!])\n }\n\n const verts: number[] = []\n const indices: number[] = []\n tubePoints = []\n\n for (let i = 0; i < n; i++) {\n const p = points[i]!, nm = normals[i]!, bi = binormals[i]!\n for (let j = 0; j < tubeSides; j++) {\n const angle = (j / tubeSides) * Math.PI * 2\n const cos = Math.cos(angle), sin = Math.sin(angle)\n const nx = nm[0] * cos + bi[0] * sin, ny = nm[1] * cos + bi[1] * sin, nz = nm[2] * cos + bi[2] * sin\n verts.push(p[0] + nx * tubeRadius, p[1] + ny * tubeRadius, p[2] + nz * tubeRadius, nx, ny, nz, color[0], color[1], color[2])\n }\n tubePoints.push({ di: i, x: p[0], y: p[1], z: p[2], value: s.values[i]!, name: s.name })\n }\n\n for (let i = 0; i < n - 1; i++) for (let j = 0; j < tubeSides; j++) {\n const j2 = (j + 1) % tubeSides\n const a = i * tubeSides + j, b = i * tubeSides + j2, c = (i + 1) * tubeSides + j, d = (i + 1) * tubeSides + j2\n indices.push(a, c, b, b, c, d)\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = verts.length / 9 > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('mesh')!\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n mat3NormalFromMat4(normalMatrix, modelMatrix)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 15\n for (const d of tubePoints) {\n const screen = projectToScreen(new Float32Array([d.x, d.y, d.z]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) { closestDist = dist; closest = { seriesIndex: 0, dataIndex: d.di, value: d.value, x: d.x, y: d.y, z: d.z, seriesName: d.name } }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; ibo?.destroy(); ibo = null; tubePoints = [] },\n }\n}\n","/**\n * 2D orthographic vertex shader for GL-accelerated 2D charts.\n */\n\nexport const FLAT_VERT = /* glsl */ `\nprecision highp float;\n\nattribute vec2 a_position;\nattribute vec3 a_color;\nattribute float a_size;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\n\nvarying vec3 v_color;\n\nvoid main() {\n // Convert pixel coords to clip space\n vec2 clipPos = (a_position / u_resolution) * 2.0 - 1.0;\n clipPos.y = -clipPos.y; // flip Y for screen coords\n gl_Position = vec4(clipPos, 0.0, 1.0);\n gl_PointSize = a_size * u_pixelRatio;\n v_color = a_color;\n}\n`\n\nexport const FLAT_VERT_UNIFORMS = ['u_resolution', 'u_pixelRatio']\n\nexport const FLAT_VERT_ATTRIBUTES = ['a_position', 'a_color', 'a_size']\n","/**\n * ScatterGL — GPU-accelerated 2D scatter with axes, grid, legend, and density glow.\n * Uses spatial grid for efficient hitTest on millions of points.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries2D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { FLAT_VERT, FLAT_VERT_UNIFORMS, FLAT_VERT_ATTRIBUTES } from '../../shaders/flat.vert'\nimport { POINT_FRAG, POINT_FRAG_UNIFORMS } from '../../shaders/point.frag'\n\nconst GRID_SIZE = 64\n\ninterface GridPoint { si: number; di: number; sx: number; sy: number; value: number; name: string }\n\nfunction toGridKey(gx: number, gy: number): number { return gy * GRID_SIZE + gx }\nfunction screenToGrid(sx: number, sy: number, w: number, h: number): [number, number] {\n return [Math.floor((sx / w) * GRID_SIZE) | 0, Math.floor((sy / h) * GRID_SIZE) | 0]\n}\n\n/** Compute nice tick values for an axis range */\nfunction niceScale(min: number, max: number, maxTicks: number): number[] {\n const range = max - min || 1\n const rawStep = range / maxTicks\n const mag = Math.pow(10, Math.floor(Math.log10(rawStep)))\n const norm = rawStep / mag\n const step = norm < 1.5 ? mag : norm < 3 ? 2 * mag : norm < 7 ? 5 * mag : 10 * mag\n const start = Math.ceil(min / step) * step\n const ticks: number[] = []\n for (let v = start; v <= max + step * 0.001; v += step) ticks.push(v)\n return ticks\n}\n\nfunction formatTick(v: number): string {\n if (Math.abs(v) >= 1e6) return (v / 1e6).toFixed(1) + 'M'\n if (Math.abs(v) >= 1e3) return (v / 1e3).toFixed(1) + 'K'\n if (Number.isInteger(v)) return String(v)\n return v.toFixed(Math.abs(v) < 1 ? 2 : 1)\n}\n\n// Margins for axes\nconst MARGIN = { top: 20, right: 20, bottom: 40, left: 55 }\n\nexport function createScatterGLPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let pointCount = 0\n let gridCells: Map<number, GridPoint[]> = new Map()\n let dataBounds = { minX: 0, maxX: 1, minY: 0, maxY: 1 }\n let seriesInfo: { name: string; color: string; count: number }[] = []\n\n return {\n type: 'scatter-gl',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, theme, width, height } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries2D[]\n\n renderer.registerProgram('flat-point', FLAT_VERT, POINT_FRAG,\n [...FLAT_VERT_UNIFORMS, ...POINT_FRAG_UNIFORMS], FLAT_VERT_ATTRIBUTES)\n\n // Compute data bounds\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity\n for (const s of series) for (let i = 0; i < s.x.length; i++) {\n const x = s.x[i]!, y = s.y[i]!\n if (x < minX) minX = x; if (x > maxX) maxX = x\n if (y < minY) minY = y; if (y > maxY) maxY = y\n }\n if (minX === Infinity) { minX = 0; maxX = 100; minY = 0; maxY = 100 }\n // Add 5% padding\n const padX = (maxX - minX) * 0.05 || 0.5\n const padY = (maxY - minY) * 0.05 || 0.5\n minX -= padX; maxX += padX; minY -= padY; maxY += padY\n dataBounds = { minX, maxX, minY, maxY }\n\n const rangeX = maxX - minX || 1, rangeY = maxY - minY || 1\n const plotLeft = MARGIN.left, plotRight = width - MARGIN.right\n const plotTop = MARGIN.top, plotBottom = height - MARGIN.bottom\n const plotW = plotRight - plotLeft, plotH = plotBottom - plotTop\n\n let totalPoints = 0\n for (const s of series) totalPoints += s.x.length\n const verts = new Float32Array(totalPoints * 6)\n gridCells = new Map()\n seriesInfo = []\n\n let vi = 0\n const defaultSize = options.pointSize ?? 4\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n const colorHex = s.color ?? theme.colors[si % theme.colors.length]!\n const color = hexToRGB(colorHex)\n const size = s.size ?? defaultSize\n seriesInfo.push({ name: s.name, color: colorHex, count: s.x.length })\n for (let di = 0; di < s.x.length; di++) {\n const sx = plotLeft + ((s.x[di]! - minX) / rangeX) * plotW\n const sy = plotTop + (1 - (s.y[di]! - minY) / rangeY) * plotH\n verts[vi++] = sx; verts[vi++] = sy\n verts[vi++] = color[0]; verts[vi++] = color[1]; verts[vi++] = color[2]\n verts[vi++] = size\n const [gx, gy] = screenToGrid(sx, sy, width, height)\n if (gx >= 0 && gx < GRID_SIZE && gy >= 0 && gy < GRID_SIZE) {\n const key = toGridKey(gx, gy)\n let cell = gridCells.get(key)\n if (!cell) { cell = []; gridCells.set(key, cell) }\n cell.push({ si, di, sx, sy, value: s.y[di]!, name: s.name })\n }\n }\n }\n\n if (vbo) vbo.update(verts); else vbo = createVertexBuffer(gl, verts, gl.DYNAMIC_DRAW)\n pointCount = totalPoints\n },\n\n render(ctx: GLRenderContext) {\n const { renderer } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('flat-point')!\n prog.use()\n prog.setVec2('u_resolution', ctx.width, ctx.height)\n prog.setFloat('u_pixelRatio', renderer.pixelRatio)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || pointCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 2 },\n { location: prog.attributes['a_color']!, size: 3 },\n { location: prog.attributes['a_size']!, size: 1 },\n ])\n applyVertexLayout(gl, layout)\n\n // Additive blending for density glow where points overlap\n gl.disable(gl.DEPTH_TEST)\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE)\n gl.drawArrays(gl.POINTS, 0, pointCount)\n // Restore normal blending\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)\n gl.enable(gl.DEPTH_TEST)\n disableVertexLayout(gl, layout)\n },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n const { width, height, theme } = ctx\n const { minX, maxX, minY, maxY } = dataBounds\n const plotLeft = MARGIN.left, plotRight = width - MARGIN.right\n const plotTop = MARGIN.top, plotBottom = height - MARGIN.bottom\n const plotW = plotRight - plotLeft, plotH = plotBottom - plotTop\n const rangeX = maxX - minX || 1, rangeY = maxY - minY || 1\n\n ctx2d.save()\n\n // -- Grid lines --\n const xTicks = niceScale(minX, maxX, 6)\n const yTicks = niceScale(minY, maxY, 5)\n\n ctx2d.strokeStyle = theme.gridColor\n ctx2d.lineWidth = 1\n ctx2d.globalAlpha = 0.4\n ctx2d.beginPath()\n for (const v of xTicks) {\n const sx = plotLeft + ((v - minX) / rangeX) * plotW\n ctx2d.moveTo(sx, plotTop)\n ctx2d.lineTo(sx, plotBottom)\n }\n for (const v of yTicks) {\n const sy = plotTop + (1 - (v - minY) / rangeY) * plotH\n ctx2d.moveTo(plotLeft, sy)\n ctx2d.lineTo(plotRight, sy)\n }\n ctx2d.stroke()\n ctx2d.globalAlpha = 1\n\n // -- Axes lines --\n ctx2d.strokeStyle = theme.textColor\n ctx2d.globalAlpha = 0.5\n ctx2d.lineWidth = 1\n ctx2d.beginPath()\n ctx2d.moveTo(plotLeft, plotTop)\n ctx2d.lineTo(plotLeft, plotBottom)\n ctx2d.lineTo(plotRight, plotBottom)\n ctx2d.stroke()\n ctx2d.globalAlpha = 1\n\n // -- Tick labels --\n ctx2d.font = `${theme.fontSize - 1}px ${theme.fontFamily}`\n ctx2d.fillStyle = theme.textColor\n ctx2d.globalAlpha = 0.7\n\n // X axis ticks\n ctx2d.textAlign = 'center'\n ctx2d.textBaseline = 'top'\n for (const v of xTicks) {\n const sx = plotLeft + ((v - minX) / rangeX) * plotW\n ctx2d.fillText(formatTick(v), sx, plotBottom + 6)\n }\n\n // Y axis ticks\n ctx2d.textAlign = 'right'\n ctx2d.textBaseline = 'middle'\n for (const v of yTicks) {\n const sy = plotTop + (1 - (v - minY) / rangeY) * plotH\n ctx2d.fillText(formatTick(v), plotLeft - 8, sy)\n }\n ctx2d.globalAlpha = 1\n\n // -- Legend --\n if (seriesInfo.length > 1) {\n const legendX = plotRight - 10\n let legendY = plotTop + 8\n ctx2d.textAlign = 'right'\n ctx2d.textBaseline = 'top'\n ctx2d.font = `${theme.fontSize - 1}px ${theme.fontFamily}`\n\n for (const s of seriesInfo) {\n // Color dot\n ctx2d.fillStyle = s.color\n ctx2d.globalAlpha = 0.9\n ctx2d.beginPath()\n ctx2d.arc(legendX - ctx2d.measureText(s.name).width - 10, legendY + 6, 4, 0, Math.PI * 2)\n ctx2d.fill()\n // Label\n ctx2d.fillStyle = theme.textColor\n ctx2d.globalAlpha = 0.8\n ctx2d.fillText(s.name, legendX, legendY)\n legendY += 18\n }\n }\n\n // -- Point count badge --\n ctx2d.textAlign = 'left'\n ctx2d.textBaseline = 'top'\n ctx2d.font = `${theme.fontSize - 2}px ${theme.fontFamily}`\n ctx2d.fillStyle = theme.textColor\n ctx2d.globalAlpha = 0.4\n const totalPts = seriesInfo.reduce((sum, s) => sum + s.count, 0)\n const label = totalPts >= 1000 ? `${(totalPts / 1000).toFixed(totalPts >= 10000 ? 0 : 1)}K points` : `${totalPts} points`\n ctx2d.fillText(label, plotLeft + 4, plotTop + 4)\n\n ctx2d.restore()\n },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { width, height } = ctx\n const [gx, gy] = screenToGrid(x, y, width, height)\n let closest: GLDataPoint | null = null\n let closestDist = 10\n for (let dy = -1; dy <= 1; dy++) for (let dx = -1; dx <= 1; dx++) {\n const cx = gx + dx, cy = gy + dy\n if (cx < 0 || cx >= GRID_SIZE || cy < 0 || cy >= GRID_SIZE) continue\n const cell = gridCells.get(toGridKey(cx, cy))\n if (!cell) continue\n for (const p of cell) {\n const d = Math.sqrt((p.sx - x) ** 2 + (p.sy - y) ** 2)\n if (d < closestDist) { closestDist = d; closest = { seriesIndex: p.si, dataIndex: p.di, value: p.value, x: p.sx, y: p.sy, seriesName: p.name } }\n }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; gridCells.clear() },\n }\n}\n","/**\n * LinesGL — 2D thick line triangles for per-series polylines.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries2D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\n\nconst FLAT_LINE_VERT = `precision highp float; attribute vec2 a_position; attribute vec2 a_next; attribute vec3 a_color; attribute float a_side; uniform vec2 u_resolution; uniform float u_lineWidth; varying vec3 v_color; void main() { vec2 dir = a_next - a_position; float len = length(dir); dir = len > 0.001 ? dir / len : vec2(1.0, 0.0); vec2 normal = vec2(-dir.y, dir.x); vec2 pos = a_position + normal * u_lineWidth * 0.5 * a_side; vec2 c = (pos / u_resolution) * 2.0 - 1.0; c.y = -c.y; gl_Position = vec4(c, 0.0, 1.0); v_color = a_color; }`\nconst FLAT_LINE_FRAG = `precision highp float; uniform float u_opacity; varying vec3 v_color; void main() { gl_FragColor = vec4(v_color, u_opacity); }`\n\ninterface LPoint { si: number; di: number; sx: number; sy: number; value: number; name: string }\n\nexport function createLinesGLPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let indexType: number = 0\n let linePoints: LPoint[] = []\n\n return {\n type: 'lines-gl',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, theme, width, height } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries2D[]\n\n renderer.registerProgram('flat-line', FLAT_LINE_VERT, FLAT_LINE_FRAG,\n ['u_resolution', 'u_lineWidth', 'u_opacity'], ['a_position', 'a_next', 'a_color', 'a_side'])\n\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity\n for (const s of series) for (let i = 0; i < s.x.length; i++) {\n const x = s.x[i]!, y = s.y[i]!\n if (x < minX) minX = x; if (x > maxX) maxX = x; if (y < minY) minY = y; if (y > maxY) maxY = y\n }\n const rangeX = maxX - minX || 1, rangeY = maxY - minY || 1, margin = 40\n const toScreen = (dx: number, dy: number): [number, number] => [\n margin + ((dx - minX) / rangeX) * (width - margin * 2),\n margin + (1 - (dy - minY) / rangeY) * (height - margin * 2),\n ]\n\n const verts: number[] = [], indices: number[] = []\n linePoints = []\n let baseVertex = 0\n\n for (let si = 0; si < series.length; si++) {\n const s = series[si]!\n const color = hexToRGB(s.color ?? theme.colors[si % theme.colors.length]!)\n for (let di = 0; di < s.x.length; di++) {\n const [sx, sy] = toScreen(s.x[di]!, s.y[di]!)\n linePoints.push({ si, di, sx, sy, value: s.y[di]!, name: s.name })\n }\n for (let di = 0; di < s.x.length - 1; di++) {\n const [sx0, sy0] = toScreen(s.x[di]!, s.y[di]!)\n const [sx1, sy1] = toScreen(s.x[di + 1]!, s.y[di + 1]!)\n for (const side of [-1, 1]) verts.push(sx0, sy0, sx1, sy1, color[0], color[1], color[2], side)\n for (const side of [-1, 1]) verts.push(sx1, sy1, sx1, sy1, color[0], color[1], color[2], side)\n indices.push(baseVertex, baseVertex + 2, baseVertex + 1, baseVertex + 1, baseVertex + 2, baseVertex + 3)\n baseVertex += 4\n }\n }\n\n const vertArr = new Float32Array(verts)\n const use32 = baseVertex > 65535\n const idxArr = use32 ? new Uint32Array(indices) : new Uint16Array(indices)\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n indexType = use32 ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT\n },\n\n render(ctx: GLRenderContext) {\n const { renderer } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('flat-line')!\n prog.use()\n prog.setVec2('u_resolution', ctx.width, ctx.height)\n prog.setFloat('u_lineWidth', ctx.options.lineWidth ?? 2)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (!vbo || !ibo || indexCount === 0) return\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 2 },\n { location: prog.attributes['a_next']!, size: 2 },\n { location: prog.attributes['a_color']!, size: 3 },\n { location: prog.attributes['a_side']!, size: 1 },\n ])\n applyVertexLayout(gl, layout)\n gl.disable(gl.DEPTH_TEST)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, indexType, 0)\n gl.enable(gl.DEPTH_TEST)\n disableVertexLayout(gl, layout)\n },\n\n hitTest(_ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n let closest: GLDataPoint | null = null\n let closestDist = 10\n for (const p of linePoints) {\n const d = Math.sqrt((p.sx - x) ** 2 + (p.sy - y) ** 2)\n if (d < closestDist) { closestDist = d; closest = { seriesIndex: p.si, dataIndex: p.di, value: p.value, x: p.sx, y: p.sy, seriesName: p.name } }\n }\n return closest\n },\n\n dispose() { vbo?.destroy(); vbo = null; ibo?.destroy(); ibo = null; linePoints = [] },\n }\n}\n","/**\n * FlowGL particle vertex shader — position + velocity + age → dynamic trail.\n * Supports speed-based sizing, velocity coloring, and direction encoding.\n */\n\nexport const PARTICLE_VERT = /* glsl */ `\nprecision highp float;\n\nattribute vec2 a_position;\nattribute vec2 a_velocity;\nattribute float a_age;\nattribute float a_speed;\n\nuniform vec2 u_resolution;\nuniform float u_pointSize;\nuniform float u_pixelRatio;\nuniform float u_speedRange; // max speed for normalization\nuniform float u_sizeBySpeed; // 0..1 how much speed affects size\n\nvarying float v_age;\nvarying float v_speed; // normalized 0..1\nvarying vec2 v_velocity;\n\nvoid main() {\n vec2 clipPos = (a_position / u_resolution) * 2.0 - 1.0;\n clipPos.y = -clipPos.y;\n gl_Position = vec4(clipPos, 0.0, 1.0);\n\n float normSpeed = clamp(a_speed / max(u_speedRange, 0.001), 0.0, 1.0);\n v_speed = normSpeed;\n v_age = a_age;\n v_velocity = a_velocity;\n\n // Size: base + speed contribution. Faster = bigger.\n float speedScale = mix(1.0, 1.0 + normSpeed * 2.0, u_sizeBySpeed);\n // Young particles slightly larger\n float ageScale = 1.0 - a_age * 0.3;\n gl_PointSize = u_pointSize * u_pixelRatio * speedScale * ageScale;\n}\n`\n\nexport const PARTICLE_VERT_UNIFORMS = [\n 'u_resolution', 'u_pointSize', 'u_pixelRatio',\n 'u_speedRange', 'u_sizeBySpeed',\n]\n\nexport const PARTICLE_VERT_ATTRIBUTES = [\n 'a_position', 'a_velocity', 'a_age', 'a_speed',\n]\n","/**\n * Particle fragment shader — velocity-colored with glow, trail fade, and\n * direction-aware elongation via gl_PointCoord manipulation.\n */\n\nexport const PARTICLE_FRAG = /* glsl */ `\nprecision highp float;\n\nuniform vec3 u_colorSlow; // color at speed=0\nuniform vec3 u_colorMid; // color at speed=0.5\nuniform vec3 u_colorFast; // color at speed=1\nuniform float u_useSpeedColor; // 0=use vertex color, 1=use speed gradient\n\nvarying float v_age;\nvarying float v_speed;\nvarying vec2 v_velocity;\n\nvec3 speedGradient(float t) {\n if (t < 0.5) {\n return mix(u_colorSlow, u_colorMid, t * 2.0);\n }\n return mix(u_colorMid, u_colorFast, (t - 0.5) * 2.0);\n}\n\nvoid main() {\n vec2 coord = gl_PointCoord - vec2(0.5);\n\n // Direction-aware elongation: stretch along velocity\n float speed = length(v_velocity);\n if (speed > 0.01) {\n vec2 dir = normalize(v_velocity);\n // Rotate coord into velocity-aligned frame\n float stretch = 1.0 + v_speed * 1.5;\n float cx = coord.x * dir.x + coord.y * dir.y; // along velocity\n float cy = -coord.x * dir.y + coord.y * dir.x; // perpendicular\n cx /= stretch;\n coord = vec2(cx, cy);\n }\n\n float dist = length(coord);\n if (dist > 0.5) discard;\n\n // Core + glow\n float core = 1.0 - smoothstep(0.15, 0.35, dist);\n float glow = (1.0 - smoothstep(0.1, 0.5, dist)) * 0.6;\n float alpha = max(core, glow);\n\n // Age fade: quadratic for longer visible tail\n float ageFade = 1.0 - v_age * v_age;\n alpha *= ageFade;\n\n // Color: speed gradient or fallback\n vec3 color = speedGradient(v_speed);\n\n // Brighten core of young fast particles\n float hotspot = core * (1.0 - v_age) * v_speed;\n color += vec3(0.3, 0.2, 0.1) * hotspot;\n\n gl_FragColor = vec4(color, alpha);\n}\n`\n\nexport const PARTICLE_FRAG_UNIFORMS = [\n 'u_colorSlow', 'u_colorMid', 'u_colorFast', 'u_useSpeedColor',\n]\n","/**\n * FlowGL — GPU-accelerated particle flow field visualization.\n *\n * Visualizes vector fields (wind, currents, forces) using thousands of\n * animated particles that follow the field direction. Supports:\n * - Velocity-based coloring (slow=cool, fast=hot)\n * - Speed-based particle sizing\n * - Direction-aware particle elongation\n * - Age-based trail fade with glow\n * - Grid-based or procedural vector fields\n * - Arrow overlay showing field direction\n * - Speed legend\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { PARTICLE_VERT, PARTICLE_VERT_UNIFORMS, PARTICLE_VERT_ATTRIBUTES } from '../../shaders/particle.vert'\nimport { PARTICLE_FRAG, PARTICLE_FRAG_UNIFORMS } from '../../shaders/particle.frag'\n\nconst MAX_PARTICLES = 20000\n// position(2) + velocity(2) + age(1) + speed(1)\nconst PARTICLE_FLOATS = 6\n\nexport interface FlowGLOptions {\n particleCount?: number\n pointSize?: number\n ageSpeed?: number\n /** How much speed affects particle size. 0=uniform, 1=full scaling. Default 0.7 */\n sizeBySpeed?: number\n /** Color at zero speed. Default '#1e3a5f' (deep blue) */\n colorSlow?: string\n /** Color at mid speed. Default '#22d3ee' (cyan) */\n colorMid?: string\n /** Color at max speed. Default '#fbbf24' (amber) */\n colorFast?: string\n /** Show direction arrows overlay. Default true */\n showArrows?: boolean\n /** Show speed legend. Default true */\n showLegend?: boolean\n /** Arrow grid density. Default 12 */\n arrowDensity?: number\n /** Field type for built-in fields. Default 'swirl' */\n fieldType?: 'swirl' | 'wind' | 'vortex' | 'source' | 'turbulence'\n}\n\ntype FieldFn = (x: number, y: number) => [number, number]\n\n// Built-in field functions\nfunction createFieldFn(type: string, w: number, h: number): FieldFn {\n switch (type) {\n case 'wind':\n return (x, y) => {\n const nx = x / w, ny = y / h\n const base = 2.5 + Math.sin(ny * Math.PI * 2) * 0.8\n const gust = Math.sin(nx * 6 + ny * 3) * 0.5\n const vy = Math.cos(nx * 4) * 0.6 + Math.sin(ny * 5 + nx * 2) * 0.3\n return [base + gust, vy]\n }\n case 'vortex':\n return (x, y) => {\n const cx = w / 2, cy = h / 2\n const dx = x - cx, dy = y - cy\n const dist = Math.sqrt(dx * dx + dy * dy) + 1\n const maxR = Math.min(w, h) * 0.45\n const falloff = Math.max(0, 1 - dist / maxR)\n const strength = falloff * falloff * 4\n // Tangential + slight inward pull\n return [-dy / dist * strength - dx / dist * 0.3 * falloff,\n dx / dist * strength - dy / dist * 0.3 * falloff]\n }\n case 'source':\n return (x, y) => {\n // Two sources, one sink\n const pts: [number, number, number][] = [\n [w * 0.25, h * 0.35, 1.5],\n [w * 0.75, h * 0.65, 1.5],\n [w * 0.5, h * 0.5, -2.5],\n ]\n let vx = 0, vy = 0\n for (const [px, py, strength] of pts) {\n const dx = x - px, dy = y - py\n const dist = Math.sqrt(dx * dx + dy * dy) + 10\n vx += (dx / dist) * strength * (50 / dist)\n vy += (dy / dist) * strength * (50 / dist)\n }\n return [vx, vy]\n }\n case 'turbulence':\n return (x, y) => {\n const nx = x / w * 6, ny = y / h * 6\n const vx = Math.sin(ny * 2.3 + nx) * 2 + Math.cos(nx * 1.7 - ny * 0.8) * 1.5\n + Math.sin(nx * 3.1 + ny * 2.7) * 0.5\n const vy = Math.cos(nx * 2.1 - ny * 1.3) * 2 + Math.sin(ny * 1.9 + nx * 0.6) * 1.5\n - Math.cos(ny * 2.8 + nx * 1.5) * 0.5\n return [vx, vy]\n }\n case 'swirl':\n default:\n return (x, y) => {\n const nx = x / w - 0.5, ny = y / h - 0.5\n const angle = Math.atan2(ny, nx)\n const dist = Math.sqrt(nx * nx + ny * ny)\n const spiral = dist * 8 + angle * 2\n const strength = Math.max(0, 1 - dist * 2.5) * 3\n return [\n Math.cos(spiral) * strength + Math.sin(ny * 6) * 0.5,\n Math.sin(spiral) * strength + Math.cos(nx * 6) * 0.5,\n ]\n }\n }\n}\n\nexport function createFlowGLPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let positions: Float32Array\n let velocities: Float32Array\n let ages: Float32Array\n let speeds: Float32Array\n let particleSpeeds: Float32Array\n let fieldFn: FieldFn = () => [1, 0]\n let particleCount = 0\n let fieldWidth = 0\n let fieldHeight = 0\n let maxSpeed = 1\n // Cache field samples for overlay arrows\n let arrowCache: { x: number; y: number; vx: number; vy: number; speed: number }[] = []\n let opts: FlowGLOptions = {}\n\n function resetParticle(i: number, w: number, h: number) {\n positions[i * 2] = Math.random() * w\n positions[i * 2 + 1] = Math.random() * h\n ages[i] = Math.random() * 0.2 // start young for stagger\n particleSpeeds[i] = 0.5 + Math.random() * 1.5\n velocities[i * 2] = 0\n velocities[i * 2 + 1] = 0\n speeds[i] = 0\n }\n\n function sampleArrows(w: number, h: number, density: number) {\n arrowCache = []\n const stepX = w / density, stepY = h / density\n let trackMaxSpeed = 0\n for (let gy = 0; gy < density; gy++) {\n for (let gx = 0; gx < density; gx++) {\n const x = stepX * (gx + 0.5), y = stepY * (gy + 0.5)\n const [vx, vy] = fieldFn(x, y)\n const speed = Math.sqrt(vx * vx + vy * vy)\n if (speed > trackMaxSpeed) trackMaxSpeed = speed\n arrowCache.push({ x, y, vx, vy, speed })\n }\n }\n maxSpeed = Math.max(trackMaxSpeed, 0.01)\n }\n\n return {\n type: 'flow-gl',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, width, height } = ctx\n const gl = renderer.gl\n\n renderer.registerProgram('particle', PARTICLE_VERT, PARTICLE_FRAG,\n [...PARTICLE_VERT_UNIFORMS, ...PARTICLE_FRAG_UNIFORMS], PARTICLE_VERT_ATTRIBUTES)\n\n fieldWidth = width; fieldHeight = height\n opts = options as unknown as FlowGLOptions\n\n // Set up field function: grid data or built-in type\n if (data.grid && data.grid.length > 0) {\n const rows = data.grid.length, cols = data.grid[0]!.length / 2\n fieldFn = (x, y) => {\n const cx = Math.max(0, Math.min(cols - 1, Math.floor((x / width) * (cols - 1))))\n const cy = Math.max(0, Math.min(rows - 1, Math.floor((y / height) * (rows - 1))))\n return [data.grid![cy]![cx * 2] ?? 0, data.grid![cy]![cx * 2 + 1] ?? 0]\n }\n } else {\n const fieldType = opts.fieldType ?? 'swirl'\n fieldFn = createFieldFn(fieldType, width, height)\n }\n\n particleCount = Math.min(MAX_PARTICLES, opts.particleCount ?? 5000)\n positions = new Float32Array(particleCount * 2)\n velocities = new Float32Array(particleCount * 2)\n ages = new Float32Array(particleCount)\n speeds = new Float32Array(particleCount)\n particleSpeeds = new Float32Array(particleCount)\n for (let i = 0; i < particleCount; i++) resetParticle(i, width, height)\n\n // Sample field for arrows and max speed\n sampleArrows(width, height, opts.arrowDensity ?? 12)\n\n const vertData = new Float32Array(particleCount * PARTICLE_FLOATS)\n if (vbo) vbo.update(vertData); else vbo = createVertexBuffer(gl, vertData, gl.DYNAMIC_DRAW)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer } = ctx\n const gl = renderer.gl\n const prog = renderer.getProgram('particle')!\n const ageSpeed = opts.ageSpeed ?? 0.006\n\n // Parse speed colors\n const colorSlow = hexToRGB(opts.colorSlow ?? '#1e3a5f')\n const colorMid = hexToRGB(opts.colorMid ?? '#22d3ee')\n const colorFast = hexToRGB(opts.colorFast ?? '#fbbf24')\n\n // Simulate + build vertex data\n const vertData = new Float32Array(particleCount * PARTICLE_FLOATS)\n let frameMaxSpeed = 0\n for (let i = 0; i < particleCount; i++) {\n const px = positions[i * 2]!, py = positions[i * 2 + 1]!\n const [u, v] = fieldFn(px, py)\n const spd = Math.sqrt(u * u + v * v)\n if (spd > frameMaxSpeed) frameMaxSpeed = spd\n\n // Smoothly interpolate velocity for less jitter\n velocities[i * 2] = velocities[i * 2]! * 0.7 + u * 0.3\n velocities[i * 2 + 1] = velocities[i * 2 + 1]! * 0.7 + v * 0.3\n speeds[i] = spd\n\n const vx = velocities[i * 2]!, vy = velocities[i * 2 + 1]!\n positions[i * 2] = px + vx * particleSpeeds[i]!\n positions[i * 2 + 1] = py + vy * particleSpeeds[i]!\n ages[i] = ages[i]! + ageSpeed\n\n if (ages[i]! > 1 || positions[i * 2]! < 0 || positions[i * 2]! > fieldWidth ||\n positions[i * 2 + 1]! < 0 || positions[i * 2 + 1]! > fieldHeight) {\n resetParticle(i, fieldWidth, fieldHeight)\n }\n\n const off = i * PARTICLE_FLOATS\n vertData[off] = positions[i * 2]!\n vertData[off + 1] = positions[i * 2 + 1]!\n vertData[off + 2] = vx\n vertData[off + 3] = vy\n vertData[off + 4] = ages[i]!\n vertData[off + 5] = speeds[i]!\n }\n\n // Track max speed across frames (smooth it)\n maxSpeed = maxSpeed * 0.95 + frameMaxSpeed * 0.05\n\n if (!vbo) return\n vbo.update(vertData); vbo.bind()\n prog.use()\n prog.setVec2('u_resolution', ctx.width, ctx.height)\n prog.setFloat('u_pointSize', opts.pointSize ?? 4)\n prog.setFloat('u_pixelRatio', renderer.pixelRatio)\n prog.setFloat('u_speedRange', maxSpeed)\n prog.setFloat('u_sizeBySpeed', opts.sizeBySpeed ?? 0.7)\n prog.setVec3('u_colorSlow', colorSlow[0], colorSlow[1], colorSlow[2])\n prog.setVec3('u_colorMid', colorMid[0], colorMid[1], colorMid[2])\n prog.setVec3('u_colorFast', colorFast[0], colorFast[1], colorFast[2])\n prog.setFloat('u_useSpeedColor', 1.0)\n\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 2 },\n { location: prog.attributes['a_velocity']!, size: 2 },\n { location: prog.attributes['a_age']!, size: 1 },\n { location: prog.attributes['a_speed']!, size: 1 },\n ])\n applyVertexLayout(gl, layout)\n gl.disable(gl.DEPTH_TEST)\n gl.drawArrays(gl.POINTS, 0, particleCount)\n gl.enable(gl.DEPTH_TEST)\n disableVertexLayout(gl, layout)\n },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n const showArrows = opts.showArrows ?? true\n const showLegend = opts.showLegend ?? true\n const { width, height, theme } = ctx\n\n // -- Direction arrows --\n if (showArrows && arrowCache.length > 0) {\n ctx2d.save()\n const arrowLen = Math.min(width, height) / (opts.arrowDensity ?? 12) * 0.35\n for (const a of arrowCache) {\n const speed = a.speed\n if (speed < 0.01) continue\n const nx = a.vx / speed, ny = a.vy / speed\n const norm = Math.min(speed / maxSpeed, 1)\n ctx2d.globalAlpha = 0.12 + norm * 0.18\n ctx2d.strokeStyle = theme.textColor\n ctx2d.lineWidth = 1\n ctx2d.beginPath()\n const len = arrowLen * (0.3 + norm * 0.7)\n const ex = a.x + nx * len, ey = a.y + ny * len\n ctx2d.moveTo(a.x - nx * len * 0.3, a.y - ny * len * 0.3)\n ctx2d.lineTo(ex, ey)\n // Arrowhead\n const headLen = len * 0.3\n const hx1 = ex - headLen * (nx * 0.8 + ny * 0.5)\n const hy1 = ey - headLen * (ny * 0.8 - nx * 0.5)\n const hx2 = ex - headLen * (nx * 0.8 - ny * 0.5)\n const hy2 = ey - headLen * (ny * 0.8 + nx * 0.5)\n ctx2d.moveTo(ex, ey)\n ctx2d.lineTo(hx1, hy1)\n ctx2d.moveTo(ex, ey)\n ctx2d.lineTo(hx2, hy2)\n ctx2d.stroke()\n }\n ctx2d.restore()\n }\n\n // -- Speed legend --\n if (showLegend) {\n ctx2d.save()\n const lx = width - 140, ly = height - 50\n const lw = 120, lh = 10\n\n // Gradient bar\n const colorSlow = opts.colorSlow ?? '#1e3a5f'\n const colorMid = opts.colorMid ?? '#22d3ee'\n const colorFast = opts.colorFast ?? '#fbbf24'\n const grad = ctx2d.createLinearGradient(lx, 0, lx + lw, 0)\n grad.addColorStop(0, colorSlow)\n grad.addColorStop(0.5, colorMid)\n grad.addColorStop(1, colorFast)\n\n // Background\n ctx2d.fillStyle = 'rgba(0,0,0,0.4)'\n ctx2d.beginPath()\n ctx2d.roundRect(lx - 10, ly - 20, lw + 20, lh + 36, 6)\n ctx2d.fill()\n\n ctx2d.fillStyle = grad\n ctx2d.beginPath()\n ctx2d.roundRect(lx, ly, lw, lh, 3)\n ctx2d.fill()\n\n // Labels\n ctx2d.font = `${theme.fontSize - 2}px ${theme.fontFamily}`\n ctx2d.fillStyle = 'rgba(255,255,255,0.7)'\n ctx2d.textAlign = 'left'\n ctx2d.fillText('Slow', lx, ly + lh + 14)\n ctx2d.textAlign = 'center'\n ctx2d.fillText('Speed', lx + lw / 2, ly - 6)\n ctx2d.textAlign = 'right'\n ctx2d.fillText('Fast', lx + lw, ly + lh + 14)\n ctx2d.restore()\n }\n },\n\n needsLoop() { return true },\n hitTest(): GLDataPoint | null { return null },\n\n dispose() { vbo?.destroy(); vbo = null; arrowCache = [] },\n }\n}\n","/**\n * GraphGL — force-directed graph layout with Barnes-Hut optimization, GL rendering.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries2D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { FLAT_VERT, FLAT_VERT_UNIFORMS, FLAT_VERT_ATTRIBUTES } from '../../shaders/flat.vert'\nimport { POINT_FRAG, POINT_FRAG_UNIFORMS } from '../../shaders/point.frag'\n\ninterface GNode { x: number; y: number; vx: number; vy: number; name: string; value: number; si: number; di: number }\ninterface GEdge { source: number; target: number }\ninterface QNode { cx: number; cy: number; mass: number; x0: number; y0: number; x1: number; y1: number; children: (QNode | null)[]; body: GNode | null }\n\nfunction insertNode(quad: QNode, node: GNode) {\n if (quad.mass === 0 && !quad.body) { quad.body = node; quad.cx = node.x; quad.cy = node.y; quad.mass = 1; return }\n if (quad.body) { const existing = quad.body; quad.body = null; insertIntoChild(quad, existing) }\n quad.cx = (quad.cx * quad.mass + node.x) / (quad.mass + 1)\n quad.cy = (quad.cy * quad.mass + node.y) / (quad.mass + 1)\n quad.mass += 1\n insertIntoChild(quad, node)\n}\n\nfunction insertIntoChild(quad: QNode, node: GNode) {\n const midX = (quad.x0 + quad.x1) / 2, midY = (quad.y0 + quad.y1) / 2\n const idx = (node.x > midX ? 1 : 0) + (node.y > midY ? 2 : 0)\n if (!quad.children[idx]) {\n quad.children[idx] = { cx: 0, cy: 0, mass: 0, x0: idx & 1 ? midX : quad.x0, y0: idx & 2 ? midY : quad.y0, x1: idx & 1 ? quad.x1 : midX, y1: idx & 2 ? quad.y1 : midY, children: [null, null, null, null], body: null }\n }\n insertNode(quad.children[idx]!, node)\n}\n\nfunction applyBarnesHut(quad: QNode, node: GNode, theta: number, repulsion: number) {\n if (quad.mass === 0) return\n const dx = quad.cx - node.x, dy = quad.cy - node.y\n const dist = Math.sqrt(dx * dx + dy * dy) + 0.01\n if ((quad.x1 - quad.x0) / dist < theta || quad.mass === 1) {\n const force = -repulsion * quad.mass / (dist * dist)\n node.vx += force * dx / dist; node.vy += force * dy / dist; return\n }\n for (const child of quad.children) if (child) applyBarnesHut(child, node, theta, repulsion)\n}\n\nconst EDGE_VERT = `precision highp float; attribute vec2 a_position; attribute vec3 a_color; uniform vec2 u_resolution; varying vec3 v_color; void main() { vec2 c = (a_position / u_resolution) * 2.0 - 1.0; c.y = -c.y; gl_Position = vec4(c, 0.0, 1.0); v_color = a_color; }`\nconst EDGE_FRAG = `precision highp float; uniform float u_opacity; varying vec3 v_color; void main() { gl_FragColor = vec4(v_color, u_opacity * 0.4); }`\n\nexport function createGraphGLPlugin(): GLChartTypePlugin {\n let nodeVBO: GLBuffer | null = null\n let edgeVBO: GLBuffer | null = null\n let nodeCount = 0\n let nodes: GNode[] = []\n let edges: GEdge[] = []\n let simulating = true\n let simIterations = 0\n const MAX_ITER = 300\n\n function stepSim(w: number, h: number) {\n if (!simulating || simIterations >= MAX_ITER) { simulating = false; return }\n const root: QNode = { cx: 0, cy: 0, mass: 0, x0: 0, y0: 0, x1: w, y1: h, children: [null, null, null, null], body: null }\n for (const n of nodes) insertNode(root, n)\n for (const n of nodes) applyBarnesHut(root, n, 0.8, 500)\n for (const e of edges) {\n const s = nodes[e.source]!, t = nodes[e.target]!\n const dx = t.x - s.x, dy = t.y - s.y, dist = Math.sqrt(dx * dx + dy * dy) + 0.01\n const f = 0.01 * (dist - 100), fx = f * dx / dist, fy = f * dy / dist\n s.vx += fx; s.vy += fy; t.vx -= fx; t.vy -= fy\n }\n const cx = w / 2, cy = h / 2\n for (const n of nodes) {\n n.vx += (cx - n.x) * 0.001; n.vy += (cy - n.y) * 0.001\n n.vx *= 0.9; n.vy *= 0.9\n n.x = Math.max(20, Math.min(w - 20, n.x + n.vx))\n n.y = Math.max(20, Math.min(h - 20, n.y + n.vy))\n }\n simIterations++\n }\n\n return {\n type: 'graph-gl',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, width, height } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries2D[]\n\n renderer.registerProgram('flat-point', FLAT_VERT, POINT_FRAG,\n [...FLAT_VERT_UNIFORMS, ...POINT_FRAG_UNIFORMS], FLAT_VERT_ATTRIBUTES)\n renderer.registerProgram('edge', EDGE_VERT, EDGE_FRAG,\n ['u_resolution', 'u_opacity'], ['a_position', 'a_color'])\n\n nodes = []; edges = (options['edges'] as GEdge[] | undefined) ?? []\n const s = series[0]\n if (s) {\n for (let i = 0; i < s.x.length; i++) {\n nodes.push({ x: Math.random() * (width - 40) + 20, y: Math.random() * (height - 40) + 20, vx: 0, vy: 0, name: data.categories?.[i] ?? `N${i}`, value: s.y[i] ?? 1, si: 0, di: i })\n }\n if (edges.length === 0) for (let i = 0; i < nodes.length; i++) {\n for (let e = 0; e < Math.min(3, Math.floor(Math.random() * 4)); e++) {\n const t = Math.floor(Math.random() * nodes.length)\n if (t !== i) edges.push({ source: i, target: t })\n }\n }\n }\n simulating = true; simIterations = 0\n if (nodeVBO) nodeVBO.update(new Float32Array(nodes.length * 6)); else nodeVBO = createVertexBuffer(gl, new Float32Array(nodes.length * 6), gl.DYNAMIC_DRAW)\n if (edgeVBO) edgeVBO.update(new Float32Array(edges.length * 10)); else edgeVBO = createVertexBuffer(gl, new Float32Array(edges.length * 10), gl.DYNAMIC_DRAW)\n nodeCount = nodes.length\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, theme } = ctx\n const gl = renderer.gl\n const progress = ctx.animationProgress\n\n if (simulating) for (let i = 0; i < 5; i++) stepSim(ctx.width, ctx.height)\n\n const edgeColor = hexToRGB(theme.gridColor)\n const defaultSize = ctx.options.pointSize ?? 6\n\n // Edges\n const ed = new Float32Array(edges.length * 10)\n for (let i = 0; i < edges.length; i++) {\n const s = nodes[edges[i]!.source]!, t = nodes[edges[i]!.target]!\n const o = i * 10\n ed[o] = s.x; ed[o+1] = s.y; ed[o+2] = edgeColor[0]; ed[o+3] = edgeColor[1]; ed[o+4] = edgeColor[2]\n ed[o+5] = t.x; ed[o+6] = t.y; ed[o+7] = edgeColor[0]; ed[o+8] = edgeColor[1]; ed[o+9] = edgeColor[2]\n }\n if (edgeVBO) edgeVBO.update(ed)\n\n const ep = renderer.getProgram('edge')!\n ep.use(); ep.setVec2('u_resolution', ctx.width, ctx.height); ep.setFloat('u_opacity', progress)\n if (edgeVBO) {\n edgeVBO.bind()\n const el = createVertexLayout([{ location: ep.attributes['a_position']!, size: 2 }, { location: ep.attributes['a_color']!, size: 3 }])\n applyVertexLayout(gl, el)\n gl.disable(gl.DEPTH_TEST)\n gl.drawArrays(gl.LINES, 0, edges.length * 2)\n disableVertexLayout(gl, el)\n }\n\n // Nodes\n const nd = new Float32Array(nodes.length * 6)\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!, color = hexToRGB(theme.colors[i % theme.colors.length]!)\n const o = i * 6\n nd[o] = n.x; nd[o+1] = n.y; nd[o+2] = color[0]; nd[o+3] = color[1]; nd[o+4] = color[2]; nd[o+5] = defaultSize + n.value * 0.5\n }\n if (nodeVBO) nodeVBO.update(nd)\n\n const pp = renderer.getProgram('flat-point')!\n pp.use(); pp.setVec2('u_resolution', ctx.width, ctx.height); pp.setFloat('u_pixelRatio', renderer.pixelRatio); pp.setFloat('u_opacity', progress)\n if (nodeVBO) {\n nodeVBO.bind()\n const nl = createVertexLayout([{ location: pp.attributes['a_position']!, size: 2 }, { location: pp.attributes['a_color']!, size: 3 }, { location: pp.attributes['a_size']!, size: 1 }])\n applyVertexLayout(gl, nl)\n gl.drawArrays(gl.POINTS, 0, nodeCount)\n gl.enable(gl.DEPTH_TEST)\n disableVertexLayout(gl, nl)\n }\n },\n\n needsLoop() { return simulating },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n ctx2d.font = `${ctx.theme.fontSize - 1}px ${ctx.theme.fontFamily}`\n ctx2d.fillStyle = ctx.theme.textColor; ctx2d.textAlign = 'center'\n for (const n of nodes) ctx2d.fillText(n.name, n.x, n.y - 8)\n },\n\n hitTest(_ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n let closest: GLDataPoint | null = null\n let closestDist = 15\n for (const n of nodes) {\n const d = Math.sqrt((n.x - x) ** 2 + (n.y - y) ** 2)\n if (d < closestDist) { closestDist = d; closest = { seriesIndex: n.si, dataIndex: n.di, value: n.value, x: n.x, y: n.y, seriesName: n.name } }\n }\n return closest\n },\n\n dispose() { nodeVBO?.destroy(); nodeVBO = null; edgeVBO?.destroy(); edgeVBO = null; nodes = []; edges = [] },\n }\n}\n","/**\n * Torus3D — stacked cylindrical rings revolved around Y axis.\n * Each data value = one ring with radius proportional to value.\n * Blocky stepped profile with smooth rounded transitions between rings.\n */\n\nimport type { GLChartTypePlugin, GLRenderContext, GLDataPoint, GLSeries3D } from '../../types'\nimport { hexToRGB } from '../../types'\nimport { createVertexBuffer, createIndexBuffer, createVertexLayout, applyVertexLayout, disableVertexLayout, type GLBuffer } from '../../engine/buffer'\nimport { MESH_VERT, MESH_VERT_UNIFORMS, MESH_VERT_ATTRIBUTES } from '../../shaders/mesh.vert'\nimport { MESH_FRAG, MESH_FRAG_UNIFORMS } from '../../shaders/mesh.frag'\nimport { mat4, mat4Identity, mat3NormalFromMat4 } from '../../engine/math'\nimport { setLightUniforms, defaultLightConfig } from '../../engine/lighting'\nimport { projectToScreen } from '../../engine/camera'\n\nexport interface Torus3DOptions {\n /** Scale for ring radius. Default 1. */\n intensity?: number\n}\n\nconst RADIAL_SEGMENTS = 64\nconst HEIGHT_STEPS = 200\nconst TOTAL_HEIGHT = 6.0\nconst MIN_RADIUS = 0.6\nconst MAX_RADIUS = 2.0\ninterface LabelPoint {\n si: number; di: number\n wx: number; wy: number; wz: number\n value: number; label: string; color: string\n}\n\nexport function createTorus3DPlugin(): GLChartTypePlugin {\n let vbo: GLBuffer | null = null\n let ibo: GLBuffer | null = null\n let indexCount = 0\n let use32bit = false\n const modelMatrix = mat4()\n const normalMatrix = new Float32Array(9)\n let labelPoints: LabelPoint[] = []\n\n return {\n type: 'torus3d',\n\n prepare(ctx: GLRenderContext) {\n const { renderer, data, options, theme } = ctx\n const gl = renderer.gl\n const series = data.series as GLSeries3D[]\n\n renderer.registerProgram('mesh', MESH_VERT, MESH_FRAG,\n [...MESH_VERT_UNIFORMS, ...MESH_FRAG_UNIFORMS], MESH_VERT_ATTRIBUTES)\n\n const s = series[0]\n if (!s || s.values.length === 0) return\n\n const opts = options as unknown as Torus3DOptions\n const intensity = opts.intensity ?? 1\n const numRings = s.values.length\n\n let maxVal = 0\n for (const v of s.values) if (Math.abs(v) > maxVal) maxVal = Math.abs(v)\n if (maxVal === 0) maxVal = 1\n\n // Radius per ring\n const ringRadii: number[] = []\n for (let i = 0; i < numRings; i++) {\n const norm = Math.abs(s.values[i]!) / maxVal\n ringRadii.push((MIN_RADIUS + norm * (MAX_RADIUS - MIN_RADIUS)) * intensity)\n }\n\n // Colors per ring\n const ringColors: [number, number, number][] = []\n const ringHexColors: string[] = []\n for (let i = 0; i < numRings; i++) {\n const hex = theme.colors[i % theme.colors.length]!\n ringHexColors.push(hex)\n ringColors.push(hexToRGB(hex))\n }\n\n // Catmull-Rom spline through ring radii for fully smooth curve\n function catmullRom(p0: number, p1: number, p2: number, p3: number, t: number): number {\n return 0.5 * ((2 * p1) + (-p0 + p2) * t + (2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t + (-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t)\n }\n\n function radiusAt(t: number): number {\n const f = t * (numRings - 1)\n const i = Math.max(0, Math.min(Math.floor(f), numRings - 2))\n const frac = f - i\n const p0 = ringRadii[Math.max(0, i - 1)]!\n const p1 = ringRadii[i]!\n const p2 = ringRadii[Math.min(numRings - 1, i + 1)]!\n const p3 = ringRadii[Math.min(numRings - 1, i + 2)]!\n return Math.max(MIN_RADIUS * 0.5, catmullRom(p0, p1, p2, p3, frac))\n }\n\n function colorAt(t: number): [number, number, number] {\n const f = t * (numRings - 1)\n const i = Math.max(0, Math.min(Math.floor(f), numRings - 2))\n const frac = f - i\n const c0 = ringColors[Math.max(0, i - 1)]!\n const c1 = ringColors[i]!\n const c2 = ringColors[Math.min(numRings - 1, i + 1)]!\n const c3 = ringColors[Math.min(numRings - 1, i + 2)]!\n return [\n Math.max(0, Math.min(1, catmullRom(c0[0], c1[0], c2[0], c3[0], frac))),\n Math.max(0, Math.min(1, catmullRom(c0[1], c1[1], c2[1], c3[1], frac))),\n Math.max(0, Math.min(1, catmullRom(c0[2], c1[2], c2[2], c3[2], frac))),\n ]\n }\n\n const verts: number[] = []\n const indices: number[] = []\n labelPoints = []\n\n for (let h = 0; h <= HEIGHT_STEPS; h++) {\n const t = h / HEIGHT_STEPS\n const y = (t - 0.5) * TOTAL_HEIGHT\n const radius = radiusAt(t)\n const color = colorAt(t)\n\n // Finite difference normal slope\n const eps = 0.002\n const rPrev = radiusAt(Math.max(0, t - eps))\n const rNext = radiusAt(Math.min(1, t + eps))\n const drdy = (rNext - rPrev) / (2 * eps * TOTAL_HEIGHT)\n\n for (let seg = 0; seg <= RADIAL_SEGMENTS; seg++) {\n const theta = (seg / RADIAL_SEGMENTS) * Math.PI * 2\n const cosT = Math.cos(theta)\n const sinT = Math.sin(theta)\n\n const nx = cosT\n const ny = -drdy\n const nz = sinT\n const nlen = Math.sqrt(nx * nx + ny * ny + nz * nz) || 1\n\n verts.push(\n radius * cosT, y, radius * sinT,\n nx / nlen, ny / nlen, nz / nlen,\n color[0], color[1], color[2],\n )\n }\n }\n\n // Labels at each ring center\n for (let i = 0; i < numRings; i++) {\n const t = (i + 0.5) / numRings\n const y = (t - 0.5) * TOTAL_HEIGHT\n const r = ringRadii[i]!\n labelPoints.push({\n si: 0, di: i,\n wx: r + 0.4, wy: y, wz: 0,\n value: s.values[i]!,\n label: data.categories?.[i] ?? `${i + 1}`,\n color: ringHexColors[i]!,\n })\n }\n\n // Triangulate\n for (let h = 0; h < HEIGHT_STEPS; h++) {\n for (let seg = 0; seg < RADIAL_SEGMENTS; seg++) {\n const a = h * (RADIAL_SEGMENTS + 1) + seg\n const b = a + RADIAL_SEGMENTS + 1\n indices.push(a, a + 1, b, a + 1, b + 1, b)\n }\n }\n\n // End caps\n const capStart = verts.length / 9\n const bottomColor = colorAt(0)\n verts.push(0, -0.5 * TOTAL_HEIGHT, 0, 0, -1, 0, bottomColor[0], bottomColor[1], bottomColor[2])\n const topColor = colorAt(1)\n verts.push(0, 0.5 * TOTAL_HEIGHT, 0, 0, 1, 0, topColor[0], topColor[1], topColor[2])\n\n for (let seg = 0; seg < RADIAL_SEGMENTS; seg++) {\n indices.push(capStart, seg + 1, seg) // bottom\n const topRow = HEIGHT_STEPS * (RADIAL_SEGMENTS + 1)\n indices.push(capStart + 1, topRow + seg, topRow + seg + 1) // top\n }\n\n const vertArr = new Float32Array(verts)\n use32bit = verts.length / 9 > 65535\n const idxArr = use32bit ? new Uint32Array(indices) : new Uint16Array(indices)\n\n if (vbo) vbo.update(vertArr); else vbo = createVertexBuffer(gl, vertArr, gl.DYNAMIC_DRAW)\n if (ibo) ibo.update(idxArr); else ibo = createIndexBuffer(gl, idxArr, gl.DYNAMIC_DRAW)\n indexCount = indices.length\n mat4Identity(modelMatrix)\n },\n\n render(ctx: GLRenderContext) {\n const { renderer, camera } = ctx\n const gl = renderer.gl\n\n const prog = renderer.getProgram('mesh')!\n prog.use()\n prog.setMat4('u_projView', camera.projViewMatrix)\n prog.setMat4('u_model', modelMatrix)\n mat3NormalFromMat4(normalMatrix, modelMatrix)\n prog.setMat3('u_normalMatrix', normalMatrix)\n setLightUniforms(prog, defaultLightConfig(), camera.position)\n prog.setFloat('u_opacity', ctx.animationProgress)\n\n if (vbo && ibo) {\n gl.disable(gl.CULL_FACE)\n vbo.bind()\n const layout = createVertexLayout([\n { location: prog.attributes['a_position']!, size: 3 },\n { location: prog.attributes['a_normal']!, size: 3 },\n { location: prog.attributes['a_color']!, size: 3 },\n ])\n applyVertexLayout(gl, layout)\n ibo.bind()\n gl.drawElements(gl.TRIANGLES, indexCount, use32bit ? gl.UNSIGNED_INT : gl.UNSIGNED_SHORT, 0)\n disableVertexLayout(gl, layout)\n gl.enable(gl.CULL_FACE)\n }\n },\n\n renderOverlay(ctx: GLRenderContext, ctx2d: CanvasRenderingContext2D) {\n const { camera, width, height, theme, animationProgress } = ctx\n if (animationProgress < 0.3) return\n ctx2d.save()\n ctx2d.font = `bold ${theme.fontSize}px ${theme.fontFamily}`\n ctx2d.textBaseline = 'middle'\n for (const lp of labelPoints) {\n const screen = projectToScreen(new Float32Array([lp.wx, lp.wy, lp.wz]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n ctx2d.fillStyle = lp.color\n ctx2d.globalAlpha = 0.9\n ctx2d.beginPath()\n ctx2d.arc(screen.x, screen.y, 4, 0, Math.PI * 2)\n ctx2d.fill()\n ctx2d.fillStyle = theme.textColor\n ctx2d.globalAlpha = 0.85\n ctx2d.textAlign = 'left'\n ctx2d.fillText(`${lp.label}: ${lp.value}`, screen.x + 10, screen.y)\n }\n ctx2d.restore()\n },\n\n needsLoop() { return false },\n\n hitTest(ctx: GLRenderContext, x: number, y: number): GLDataPoint | null {\n const { camera, width, height } = ctx\n let closest: GLDataPoint | null = null\n let closestDist = 30\n for (const lp of labelPoints) {\n const screen = projectToScreen(new Float32Array([lp.wx, lp.wy, lp.wz]), camera.projViewMatrix, width, height)\n if (!screen || screen.z < -1 || screen.z > 1) continue\n const dist = Math.sqrt((screen.x - x) ** 2 + (screen.y - y) ** 2)\n if (dist < closestDist) {\n closestDist = dist\n closest = { seriesIndex: lp.si, dataIndex: lp.di, value: lp.value, x: screen.x, y: screen.y, seriesName: lp.label }\n }\n }\n return closest\n },\n\n dispose() {\n vbo?.destroy(); vbo = null\n ibo?.destroy(); ibo = null\n labelPoints = []\n },\n }\n}\n","/**\n * Convenience factories — one function per chart type.\n */\n\nimport type { GLChartData, GLChartOptions, GLChartInstance, GLSeries3D } from '../types'\nimport { createGLChart } from './create-gl'\n\nimport { createScatter3DPlugin } from '../charts/scatter3d/scatter3d-type'\nimport { createBar3DPlugin } from '../charts/bar3d/bar3d-type'\nimport { createSurface3DPlugin } from '../charts/surface3d/surface3d-type'\nimport { createGlobe3DPlugin } from '../charts/globe3d/globe3d-type'\nimport { createMap3DPlugin } from '../charts/map3d/map3d-type'\nimport { createLines3DPlugin } from '../charts/lines3d/lines3d-type'\nimport { createLine3DPlugin } from '../charts/line3d/line3d-type'\nimport { createScatterGLPlugin } from '../charts/scatter-gl/scatter-gl-type'\nimport { createLinesGLPlugin } from '../charts/lines-gl/lines-gl-type'\nimport { createFlowGLPlugin } from '../charts/flow-gl/flow-gl-type'\nimport { createGraphGLPlugin } from '../charts/graph-gl/graph-gl-type'\nimport { createTorus3DPlugin } from '../charts/torus3d/torus3d-type'\n\nexport function Scatter3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createScatter3DPlugin(), data, options)\n}\n\nexport function Bar3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createBar3DPlugin(), data, options)\n}\n\nexport function Surface3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createSurface3DPlugin(), data, options)\n}\n\nexport function Globe3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n if (!options.orbit) options.orbit = { autoRotate: true, autoRotateSpeed: 0.5 }\n if (!options.camera) options.camera = { position: [0, 2, 9], target: [0, 0, 0] }\n return createGLChart(container, createGlobe3DPlugin(), data, options)\n}\n\nexport function Map3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n // Map3D normalizes values to extrudeHeight, so auto-fit camera from x/z extent only\n if (!options.camera) {\n const series = data.series as GLSeries3D[]\n let minX = Infinity, maxX = -Infinity, minZ = Infinity, maxZ = -Infinity\n for (const s of series) {\n if (s.x) for (const v of s.x) { if (v < minX) minX = v; if (v > maxX) maxX = v }\n if (s.z) for (const v of s.z) { if (v < minZ) minZ = v; if (v > maxZ) maxZ = v }\n }\n if (minX === Infinity) { minX = 0; maxX = 10 }\n if (minZ === Infinity) { minZ = 0; maxZ = 10 }\n const cx = (minX + maxX) / 2, cz = (minZ + maxZ) / 2\n const ext = Math.max(maxX - minX, maxZ - minZ, 1)\n const dist = Math.max(ext * 1.8, 5)\n options.camera = {\n position: [cx + dist * 0.6, dist * 0.5, cz + dist * 0.6],\n target: [cx, 0, cz],\n }\n }\n return createGLChart(container, createMap3DPlugin(), data, options)\n}\n\nexport function Lines3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createLines3DPlugin(), data, options)\n}\n\nexport function Line3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createLine3DPlugin(), data, options)\n}\n\nexport function ScatterGL(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createScatterGLPlugin(), data, options)\n}\n\nexport function LinesGL(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createLinesGLPlugin(), data, options)\n}\n\nexport function FlowGL(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createFlowGLPlugin(), data, options)\n}\n\nexport function GraphGL(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n return createGLChart(container, createGraphGLPlugin(), data, options)\n}\n\nexport function Torus3D(container: HTMLElement | string, opts: GLChartOptions & { data: GLChartData }): GLChartInstance {\n const { data, ...options } = opts\n if (!options.camera) options.camera = { position: [4, 2, 6], target: [0, 0, 0] }\n return createGLChart(container, createTorus3DPlugin(), data, options)\n}\n"]}