{"version":3,"sources":["../src/canvas/webgl/shaders.ts","../src/canvas/webgl/renderer.ts","../src/canvas/Canvas.tsx","../src/canvas/dom/DrawRect.tsx","../src/canvas/dom/DrawCircle.tsx","../src/canvas/dom/DrawArc.tsx","../src/canvas/dom/DrawLine.tsx","../src/canvas/dom/DrawText.tsx","../src/canvas/dom/DrawPath.tsx"],"names":["basicVertexShader","basicFragmentShader","textureVertexShader","textureFragmentShader","createShader","gl","type","source","shader","createProgram","vertexShader","fragmentShader","program","glStateCache","textCanvasCache","getGLState","state","positionBuffer","positionLocation","resolutionLocation","colorLocation","texVertexShader","texFragmentShader","textureProgram","texPositionBuffer","texCoordBuffer","texPositionLocation","texCoordLocation","texResolutionLocation","texOpacityLocation","parseColor","color","hex","r","g","b","rgbMatch","drawShape","positions","opacity","a","drawLineGL","lineWidth","drawNodeWebGL","node","getValue","props","x","y","w","h","fill","cx","cy","radius","i","angle1","angle2","startAngle","endAngle","angleRange","x1","y1","x2","y2","stroke","strokeWidth","text","fontSize","fontFamily","fontWeight","textAlign","drawTextWebGL","d","parseSVGPath","getTextCanvas","canvas","textCanvas","ctx","metrics","textWidth","textHeight","drawX","texture","posX","posY","commands","startX","startY","points","cmd","isRelative","nums","n","CanvasCtx","Context","drawQueue","getCanvasRenderContext","getContextValue","getCanvasContext","renderContext","getWebGLContext","getWebGL2Context","queueDraw","Canvas","width","height","mode","webglAttributes","children","style","ref","render","prevContext","pushContext","child","drawNode2D","popContext","use","jsx","el","val","isReactive","counterclockwise","path","DrawRect","DrawCircle","DrawArc","DrawLine","DrawText","DrawPath"],"mappings":"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","file":"dom.mjs","sourcesContent":["// Basic vertex shader for 2D shapes\nexport const basicVertexShader = `\n  attribute vec2 a_position;\n  uniform vec2 u_resolution;\n\n  void main() {\n    vec2 zeroToOne = a_position / u_resolution;\n    vec2 zeroToTwo = zeroToOne * 2.0;\n    vec2 clipSpace = zeroToTwo - 1.0;\n    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);\n  }\n`\n\n// Basic fragment shader with uniform color\nexport const basicFragmentShader = `\n  precision mediump float;\n  uniform vec4 u_color;\n\n  void main() {\n    gl_FragColor = u_color;\n  }\n`\n\n// Texture vertex shader for text rendering\nexport const textureVertexShader = `\n  attribute vec2 a_position;\n  attribute vec2 a_texCoord;\n  uniform vec2 u_resolution;\n  varying vec2 v_texCoord;\n\n  void main() {\n    vec2 zeroToOne = a_position / u_resolution;\n    vec2 zeroToTwo = zeroToOne * 2.0;\n    vec2 clipSpace = zeroToTwo - 1.0;\n    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);\n    v_texCoord = a_texCoord;\n  }\n`\n\n// Texture fragment shader\nexport const textureFragmentShader = `\n  precision mediump float;\n  uniform sampler2D u_texture;\n  uniform float u_opacity;\n  varying vec2 v_texCoord;\n\n  void main() {\n    vec4 color = texture2D(u_texture, v_texCoord);\n    gl_FragColor = vec4(color.rgb, color.a * u_opacity);\n  }\n`\n\nexport function createShader(gl: WebGLRenderingContext, type: number, source: string): WebGLShader | null {\n  const shader = gl.createShader(type)\n  if (!shader) return null\n\n  gl.shaderSource(shader, source)\n  gl.compileShader(shader)\n\n  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n    console.error('Shader compile error:', gl.getShaderInfoLog(shader))\n    gl.deleteShader(shader)\n    return null\n  }\n\n  return shader\n}\n\nexport function createProgram(gl: WebGLRenderingContext, vertexShader: WebGLShader, fragmentShader: WebGLShader): WebGLProgram | null {\n  const program = gl.createProgram()\n  if (!program) return null\n\n  gl.attachShader(program, vertexShader)\n  gl.attachShader(program, fragmentShader)\n  gl.linkProgram(program)\n\n  if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n    console.error('Program link error:', gl.getProgramInfoLog(program))\n    gl.deleteProgram(program)\n    return null\n  }\n\n  return program\n}\n","import { createShader, createProgram, basicVertexShader, basicFragmentShader, textureVertexShader, textureFragmentShader } from './shaders'\nimport type { CanvasDrawNode } from '../types'\n\ninterface WebGLState {\n  program: WebGLProgram\n  positionBuffer: WebGLBuffer\n  positionLocation: number\n  resolutionLocation: WebGLUniformLocation\n  colorLocation: WebGLUniformLocation\n  // Texture program for text\n  textureProgram: WebGLProgram\n  texPositionBuffer: WebGLBuffer\n  texCoordBuffer: WebGLBuffer\n  texPositionLocation: number\n  texCoordLocation: number\n  texResolutionLocation: WebGLUniformLocation\n  texOpacityLocation: WebGLUniformLocation\n}\n\nconst glStateCache = new WeakMap<WebGLRenderingContext, WebGLState>()\nconst textCanvasCache = new WeakMap<WebGLRenderingContext, HTMLCanvasElement>()\n\nfunction getGLState(gl: WebGLRenderingContext): WebGLState | null {\n  let state = glStateCache.get(gl)\n  if (state) return state\n\n  // Basic shape program\n  const vertexShader = createShader(gl, gl.VERTEX_SHADER, basicVertexShader)\n  const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, basicFragmentShader)\n  if (!vertexShader || !fragmentShader) return null\n\n  const program = createProgram(gl, vertexShader, fragmentShader)\n  if (!program) return null\n\n  const positionBuffer = gl.createBuffer()\n  if (!positionBuffer) return null\n\n  const positionLocation = gl.getAttribLocation(program, 'a_position')\n  const resolutionLocation = gl.getUniformLocation(program, 'u_resolution')\n  const colorLocation = gl.getUniformLocation(program, 'u_color')\n  if (resolutionLocation === null || colorLocation === null) return null\n\n  // Texture program for text\n  const texVertexShader = createShader(gl, gl.VERTEX_SHADER, textureVertexShader)\n  const texFragmentShader = createShader(gl, gl.FRAGMENT_SHADER, textureFragmentShader)\n  if (!texVertexShader || !texFragmentShader) return null\n\n  const textureProgram = createProgram(gl, texVertexShader, texFragmentShader)\n  if (!textureProgram) return null\n\n  const texPositionBuffer = gl.createBuffer()\n  const texCoordBuffer = gl.createBuffer()\n  if (!texPositionBuffer || !texCoordBuffer) return null\n\n  const texPositionLocation = gl.getAttribLocation(textureProgram, 'a_position')\n  const texCoordLocation = gl.getAttribLocation(textureProgram, 'a_texCoord')\n  const texResolutionLocation = gl.getUniformLocation(textureProgram, 'u_resolution')\n  const texOpacityLocation = gl.getUniformLocation(textureProgram, 'u_opacity')\n  if (texResolutionLocation === null || texOpacityLocation === null) return null\n\n  state = {\n    program, positionBuffer, positionLocation, resolutionLocation, colorLocation,\n    textureProgram, texPositionBuffer, texCoordBuffer, texPositionLocation, texCoordLocation, texResolutionLocation, texOpacityLocation\n  }\n  glStateCache.set(gl, state)\n  return state\n}\n\nfunction parseColor(color: string): [number, number, number, number] {\n  // Handle hex colors\n  if (color.startsWith('#')) {\n    const hex = color.slice(1)\n    if (hex.length === 3) {\n      const r = parseInt(hex[0] + hex[0], 16) / 255\n      const g = parseInt(hex[1] + hex[1], 16) / 255\n      const b = parseInt(hex[2] + hex[2], 16) / 255\n      return [r, g, b, 1]\n    }\n    if (hex.length === 6) {\n      const r = parseInt(hex.slice(0, 2), 16) / 255\n      const g = parseInt(hex.slice(2, 4), 16) / 255\n      const b = parseInt(hex.slice(4, 6), 16) / 255\n      return [r, g, b, 1]\n    }\n  }\n  // Handle rgb/rgba\n  const rgbMatch = color.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([\\d.]+))?\\)/)\n  if (rgbMatch) {\n    return [\n      parseInt(rgbMatch[1]) / 255,\n      parseInt(rgbMatch[2]) / 255,\n      parseInt(rgbMatch[3]) / 255,\n      rgbMatch[4] ? parseFloat(rgbMatch[4]) : 1\n    ]\n  }\n  // Handle named colors (basic set)\n  const namedColors: Record<string, [number, number, number, number]> = {\n    black: [0, 0, 0, 1],\n    white: [1, 1, 1, 1],\n    red: [1, 0, 0, 1],\n    green: [0, 0.5, 0, 1],\n    blue: [0, 0, 1, 1],\n    yellow: [1, 1, 0, 1],\n    cyan: [0, 1, 1, 1],\n    magenta: [1, 0, 1, 1],\n    gray: [0.5, 0.5, 0.5, 1],\n    orange: [1, 0.65, 0, 1],\n    purple: [0.5, 0, 0.5, 1],\n  }\n  return namedColors[color.toLowerCase()] || [0, 0, 0, 1]\n}\n\nfunction drawShape(gl: WebGLRenderingContext, state: WebGLState, positions: number[], color: string, opacity: number) {\n  gl.useProgram(state.program)\n\n  gl.bindBuffer(gl.ARRAY_BUFFER, state.positionBuffer)\n  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW)\n\n  gl.enableVertexAttribArray(state.positionLocation)\n  gl.vertexAttribPointer(state.positionLocation, 2, gl.FLOAT, false, 0, 0)\n\n  gl.uniform2f(state.resolutionLocation, gl.canvas.width, gl.canvas.height)\n\n  const [r, g, b, a] = parseColor(color)\n  gl.uniform4f(state.colorLocation, r, g, b, a * opacity)\n\n  gl.drawArrays(gl.TRIANGLES, 0, positions.length / 2)\n}\n\nfunction drawLineGL(gl: WebGLRenderingContext, state: WebGLState, positions: number[], color: string, opacity: number, lineWidth: number) {\n  gl.useProgram(state.program)\n\n  gl.bindBuffer(gl.ARRAY_BUFFER, state.positionBuffer)\n  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW)\n\n  gl.enableVertexAttribArray(state.positionLocation)\n  gl.vertexAttribPointer(state.positionLocation, 2, gl.FLOAT, false, 0, 0)\n\n  gl.uniform2f(state.resolutionLocation, gl.canvas.width, gl.canvas.height)\n\n  const [r, g, b, a] = parseColor(color)\n  gl.uniform4f(state.colorLocation, r, g, b, a * opacity)\n\n  gl.lineWidth(lineWidth)\n  gl.drawArrays(gl.LINES, 0, positions.length / 2)\n}\n\nexport function drawNodeWebGL(gl: WebGLRenderingContext, node: CanvasDrawNode, getValue: (val: any) => any) {\n  const state = getGLState(gl)\n  if (!state) return\n\n  const { type, props } = node\n  const opacity = getValue(props.opacity) ?? 1\n\n  gl.enable(gl.BLEND)\n  gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)\n\n  switch (type) {\n    case 'rect': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const w = getValue(props.width)\n      const h = getValue(props.height)\n      const fill = getValue(props.fill)\n\n      if (fill) {\n        // Two triangles for rectangle\n        const positions = [\n          x, y,\n          x + w, y,\n          x, y + h,\n          x, y + h,\n          x + w, y,\n          x + w, y + h\n        ]\n        drawShape(gl, state, positions, fill, opacity)\n      }\n      break\n    }\n\n    case 'circle': {\n      const cx = getValue(props.x)\n      const cy = getValue(props.y)\n      const radius = getValue(props.radius)\n      const fill = getValue(props.fill)\n\n      if (fill) {\n        // Create triangle fan for circle\n        const segments = 32\n        const positions: number[] = []\n        for (let i = 0; i < segments; i++) {\n          const angle1 = (i / segments) * Math.PI * 2\n          const angle2 = ((i + 1) / segments) * Math.PI * 2\n          // Center\n          positions.push(cx, cy)\n          // Point 1\n          positions.push(cx + Math.cos(angle1) * radius, cy + Math.sin(angle1) * radius)\n          // Point 2\n          positions.push(cx + Math.cos(angle2) * radius, cy + Math.sin(angle2) * radius)\n        }\n        drawShape(gl, state, positions, fill, opacity)\n      }\n      break\n    }\n\n    case 'arc': {\n      const cx = getValue(props.x)\n      const cy = getValue(props.y)\n      const radius = getValue(props.radius)\n      const startAngle = getValue(props.startAngle)\n      const endAngle = getValue(props.endAngle)\n      const fill = getValue(props.fill)\n\n      if (fill) {\n        const segments = 32\n        const positions: number[] = []\n        const angleRange = endAngle - startAngle\n        for (let i = 0; i < segments; i++) {\n          const angle1 = startAngle + (i / segments) * angleRange\n          const angle2 = startAngle + ((i + 1) / segments) * angleRange\n          positions.push(cx, cy)\n          positions.push(cx + Math.cos(angle1) * radius, cy + Math.sin(angle1) * radius)\n          positions.push(cx + Math.cos(angle2) * radius, cy + Math.sin(angle2) * radius)\n        }\n        drawShape(gl, state, positions, fill, opacity)\n      }\n      break\n    }\n\n    case 'line': {\n      const x1 = getValue(props.x1)\n      const y1 = getValue(props.y1)\n      const x2 = getValue(props.x2)\n      const y2 = getValue(props.y2)\n      const stroke = getValue(props.stroke) || 'black'\n      const strokeWidth = getValue(props.strokeWidth) || 1\n\n      drawLineGL(gl, state, [x1, y1, x2, y2], stroke, opacity, strokeWidth)\n      break\n    }\n\n    case 'text': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const text = getValue(props.text)\n      const fill = getValue(props.fill) || 'black'\n      const fontSize = getValue(props.fontSize) || 16\n      const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n      const fontWeight = getValue(props.fontWeight) || 'normal'\n      const textAlign = getValue(props.textAlign) || 'left'\n\n      drawTextWebGL(gl, state, text, x, y, fill, fontSize, fontFamily, fontWeight, textAlign, opacity)\n      break\n    }\n\n    case 'path': {\n      const d = getValue(props.d)\n      const fill = getValue(props.fill)\n\n      if (fill) {\n        const positions = parseSVGPath(d)\n        if (positions.length > 0) {\n          drawShape(gl, state, positions, fill, opacity)\n        }\n      }\n      break\n    }\n  }\n}\n\nfunction getTextCanvas(gl: WebGLRenderingContext): HTMLCanvasElement {\n  let canvas = textCanvasCache.get(gl)\n  if (!canvas) {\n    canvas = document.createElement('canvas')\n    textCanvasCache.set(gl, canvas)\n  }\n  return canvas\n}\n\nfunction drawTextWebGL(\n  gl: WebGLRenderingContext,\n  state: WebGLState,\n  text: string,\n  x: number,\n  y: number,\n  fill: string,\n  fontSize: number,\n  fontFamily: string,\n  fontWeight: string,\n  textAlign: string,\n  opacity: number\n) {\n  // Render text to 2D canvas\n  const textCanvas = getTextCanvas(gl)\n  const ctx = textCanvas.getContext('2d')\n  if (!ctx) return\n\n  ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n  const metrics = ctx.measureText(text)\n  const textWidth = Math.ceil(metrics.width) + 4\n  const textHeight = Math.ceil(fontSize * 1.5)\n\n  textCanvas.width = textWidth\n  textCanvas.height = textHeight\n\n  ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n  ctx.textAlign = textAlign as CanvasTextAlign\n  ctx.textBaseline = 'top'\n  ctx.fillStyle = fill\n  ctx.clearRect(0, 0, textWidth, textHeight)\n\n  let drawX = 2\n  if (textAlign === 'center') drawX = textWidth / 2\n  else if (textAlign === 'right') drawX = textWidth - 2\n\n  ctx.fillText(text, drawX, 2)\n\n  // Create WebGL texture\n  const texture = gl.createTexture()\n  gl.bindTexture(gl.TEXTURE_2D, texture)\n  gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, textCanvas)\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  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)\n\n  // Calculate position\n  let posX = x\n  if (textAlign === 'center') posX = x - textWidth / 2\n  else if (textAlign === 'right') posX = x - textWidth\n\n  const posY = y - fontSize\n\n  // Draw textured quad\n  gl.useProgram(state.textureProgram)\n\n  gl.bindBuffer(gl.ARRAY_BUFFER, state.texPositionBuffer)\n  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([\n    posX, posY,\n    posX + textWidth, posY,\n    posX, posY + textHeight,\n    posX, posY + textHeight,\n    posX + textWidth, posY,\n    posX + textWidth, posY + textHeight\n  ]), gl.STATIC_DRAW)\n  gl.enableVertexAttribArray(state.texPositionLocation)\n  gl.vertexAttribPointer(state.texPositionLocation, 2, gl.FLOAT, false, 0, 0)\n\n  gl.bindBuffer(gl.ARRAY_BUFFER, state.texCoordBuffer)\n  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([\n    0, 0, 1, 0, 0, 1,\n    0, 1, 1, 0, 1, 1\n  ]), gl.STATIC_DRAW)\n  gl.enableVertexAttribArray(state.texCoordLocation)\n  gl.vertexAttribPointer(state.texCoordLocation, 2, gl.FLOAT, false, 0, 0)\n\n  gl.uniform2f(state.texResolutionLocation, gl.canvas.width, gl.canvas.height)\n  gl.uniform1f(state.texOpacityLocation, opacity)\n\n  gl.drawArrays(gl.TRIANGLES, 0, 6)\n\n  gl.deleteTexture(texture)\n}\n\n// Simple SVG path parser - supports M, L, H, V, Z commands\nfunction parseSVGPath(d: string): number[] {\n  const positions: number[] = []\n  const commands = d.match(/[MLHVCSQTAZ][^MLHVCSQTAZ]*/gi) || []\n\n  let x = 0, y = 0\n  let startX = 0, startY = 0\n  const points: [number, number][] = []\n\n  for (const cmd of commands) {\n    const type = cmd[0].toUpperCase()\n    const isRelative = cmd[0] === cmd[0].toLowerCase()\n    const nums = cmd.slice(1).trim().split(/[\\s,]+/).map(Number).filter(n => !isNaN(n))\n\n    switch (type) {\n      case 'M':\n        x = isRelative ? x + nums[0] : nums[0]\n        y = isRelative ? y + nums[1] : nums[1]\n        startX = x\n        startY = y\n        points.push([x, y])\n        break\n      case 'L':\n        x = isRelative ? x + nums[0] : nums[0]\n        y = isRelative ? y + nums[1] : nums[1]\n        points.push([x, y])\n        break\n      case 'H':\n        x = isRelative ? x + nums[0] : nums[0]\n        points.push([x, y])\n        break\n      case 'V':\n        y = isRelative ? y + nums[0] : nums[0]\n        points.push([x, y])\n        break\n      case 'Z':\n        x = startX\n        y = startY\n        break\n    }\n  }\n\n  // Triangulate polygon (simple ear clipping for convex polygons)\n  if (points.length >= 3) {\n    for (let i = 1; i < points.length - 1; i++) {\n      positions.push(points[0][0], points[0][1])\n      positions.push(points[i][0], points[i][1])\n      positions.push(points[i + 1][0], points[i + 1][1])\n    }\n  }\n\n  return positions\n}\n","import { use, Context, isReactive, getContextValue, pushContext, popContext } from 'flexium/core'\nimport { drawNodeWebGL } from './webgl/renderer'\nimport type { CanvasProps, CanvasDrawNode, CanvasContext as CanvasCtxType, CanvasRenderContext } from './types'\n\nexport type { CanvasProps }\n\n// Canvas context for children to access render information\nexport const CanvasCtx = new Context<CanvasRenderContext | null>(null)\n\nconst drawQueue: CanvasDrawNode[] = []\n\n/** Get current canvas render context (mode, ctx, dimensions) */\nexport function getCanvasRenderContext(): CanvasRenderContext | null {\n  return getContextValue(CanvasCtx)\n}\n\n/** Get current 2D canvas context (returns null if not in 2D mode) */\nexport function getCanvasContext(): CanvasRenderingContext2D | null {\n  const renderContext = getContextValue(CanvasCtx)\n  if (renderContext?.mode === '2d') {\n    return renderContext.ctx as CanvasRenderingContext2D | null\n  }\n  return null\n}\n\n/** Get current WebGL context (returns null if not in WebGL mode) */\nexport function getWebGLContext(): WebGLRenderingContext | null {\n  const renderContext = getContextValue(CanvasCtx)\n  if (renderContext?.mode === 'webgl') {\n    return renderContext.ctx as WebGLRenderingContext | null\n  }\n  return null\n}\n\n/** Get current WebGL2 context (returns null if not in WebGL2 mode) */\nexport function getWebGL2Context(): WebGL2RenderingContext | null {\n  const renderContext = getContextValue(CanvasCtx)\n  if (renderContext?.mode === 'webgl2') {\n    return renderContext.ctx as WebGL2RenderingContext | null\n  }\n  return null\n}\n\nexport function queueDraw(node: CanvasDrawNode) {\n  drawQueue.push(node)\n}\n\nexport function Canvas(props: CanvasProps) {\n  const { width, height, mode = '2d', webglAttributes, children, style, ref } = props\n\n  let canvas: HTMLCanvasElement | undefined\n  let ctx: CanvasCtxType | null = null\n\n  const render = () => {\n    if (!canvas || !ctx) return\n\n    // Push render context for children\n    const renderContext: CanvasRenderContext = { mode, ctx, width, height }\n    const prevContext = pushContext(CanvasCtx.id, renderContext)\n\n    // Clear draw queue\n    drawQueue.length = 0\n\n    try {\n      // Render children (they will queue draw commands)\n      if (Array.isArray(children)) {\n        children.forEach(child => {\n          if (typeof child === 'function') {\n            child()\n          }\n        })\n      } else if (typeof children === 'function') {\n        children()\n      }\n\n      // Execute draw queue based on mode\n      if (mode === '2d' && ctx instanceof CanvasRenderingContext2D) {\n        ctx.clearRect(0, 0, width, height)\n        drawQueue.forEach(node => {\n          drawNode2D(ctx as CanvasRenderingContext2D, node)\n        })\n      } else if ((mode === 'webgl' || mode === 'webgl2') && ctx instanceof WebGLRenderingContext) {\n        const gl = ctx as WebGLRenderingContext\n        gl.viewport(0, 0, width, height)\n        gl.clearColor(0, 0, 0, 0)\n        gl.clear(gl.COLOR_BUFFER_BIT)\n        drawQueue.forEach(node => {\n          drawNodeWebGL(gl, node, getValue)\n        })\n      }\n    } finally {\n      // Restore previous context\n      popContext(CanvasCtx.id, prevContext)\n    }\n  }\n\n  use(() => {\n    if (canvas) {\n      render()\n    }\n  })\n\n  return (\n    <canvas\n      ref={(el: HTMLCanvasElement) => {\n        canvas = el\n        // Get the appropriate context based on mode\n        if (mode === '2d') {\n          ctx = el.getContext('2d')\n        } else if (mode === 'webgl') {\n          ctx = el.getContext('webgl', webglAttributes) || el.getContext('experimental-webgl', webglAttributes) as WebGLRenderingContext | null\n        } else if (mode === 'webgl2') {\n          ctx = el.getContext('webgl2', webglAttributes)\n        }\n        if (ref) ref(el)\n        render()\n      }}\n      width={width}\n      height={height}\n      style={style}\n    />\n  )\n}\n\nfunction getValue(val: any): any {\n  if (isReactive(val)) {\n    return val.valueOf?.() ?? val\n  }\n  return val\n}\n\nfunction drawNode2D(ctx: CanvasRenderingContext2D, node: CanvasDrawNode) {\n  const { type, props } = node\n\n  // Apply opacity\n  const opacity = getValue(props.opacity)\n  if (opacity !== undefined) {\n    ctx.globalAlpha = opacity\n  }\n\n  switch (type) {\n    case 'rect': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const w = getValue(props.width)\n      const h = getValue(props.height)\n      const fill = getValue(props.fill)\n      const stroke = getValue(props.stroke)\n      const strokeWidth = getValue(props.strokeWidth)\n\n      if (fill) {\n        ctx.fillStyle = fill\n        ctx.fillRect(x, y, w, h)\n      }\n\n      if (stroke) {\n        ctx.strokeStyle = stroke\n        if (strokeWidth) ctx.lineWidth = strokeWidth\n        ctx.strokeRect(x, y, w, h)\n      }\n      break\n    }\n\n    case 'circle': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const radius = getValue(props.radius)\n      const fill = getValue(props.fill)\n      const stroke = getValue(props.stroke)\n      const strokeWidth = getValue(props.strokeWidth)\n\n      ctx.beginPath()\n      ctx.arc(x, y, radius, 0, Math.PI * 2)\n\n      if (fill) {\n        ctx.fillStyle = fill\n        ctx.fill()\n      }\n\n      if (stroke) {\n        ctx.strokeStyle = stroke\n        if (strokeWidth) ctx.lineWidth = strokeWidth\n        ctx.stroke()\n      }\n      break\n    }\n\n    case 'arc': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const radius = getValue(props.radius)\n      const startAngle = getValue(props.startAngle)\n      const endAngle = getValue(props.endAngle)\n      const counterclockwise = getValue(props.counterclockwise) || false\n      const fill = getValue(props.fill)\n      const stroke = getValue(props.stroke)\n      const strokeWidth = getValue(props.strokeWidth)\n\n      ctx.beginPath()\n      ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n      if (fill) {\n        ctx.fillStyle = fill\n        ctx.fill()\n      }\n\n      if (stroke) {\n        ctx.strokeStyle = stroke\n        if (strokeWidth) ctx.lineWidth = strokeWidth\n        ctx.stroke()\n      }\n      break\n    }\n\n    case 'line': {\n      const x1 = getValue(props.x1)\n      const y1 = getValue(props.y1)\n      const x2 = getValue(props.x2)\n      const y2 = getValue(props.y2)\n      const stroke = getValue(props.stroke) || 'black'\n      const strokeWidth = getValue(props.strokeWidth) || 1\n\n      ctx.beginPath()\n      ctx.moveTo(x1, y1)\n      ctx.lineTo(x2, y2)\n      ctx.strokeStyle = stroke\n      ctx.lineWidth = strokeWidth\n      ctx.stroke()\n      break\n    }\n\n    case 'text': {\n      const x = getValue(props.x)\n      const y = getValue(props.y)\n      const text = getValue(props.text)\n      const fill = getValue(props.fill) || 'black'\n      const fontSize = getValue(props.fontSize) || 16\n      const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n      const fontWeight = getValue(props.fontWeight) || 'normal'\n      const textAlign = getValue(props.textAlign) || 'left'\n\n      ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n      ctx.textAlign = textAlign as CanvasTextAlign\n      ctx.fillStyle = fill\n      ctx.fillText(text, x, y)\n      break\n    }\n\n    case 'path': {\n      const d = getValue(props.d)\n      const fill = getValue(props.fill)\n      const stroke = getValue(props.stroke)\n      const strokeWidth = getValue(props.strokeWidth)\n\n      // Parse SVG path data\n      const path = new Path2D(d)\n\n      if (fill) {\n        ctx.fillStyle = fill\n        ctx.fill(path)\n      }\n\n      if (stroke) {\n        ctx.strokeStyle = stroke\n        if (strokeWidth) ctx.lineWidth = strokeWidth\n        ctx.stroke(path)\n      }\n      break\n    }\n  }\n\n  // Reset opacity\n  if (opacity !== undefined) {\n    ctx.globalAlpha = 1\n  }\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawRectProps } from '../types'\n\nexport type { DrawRectProps }\n\nexport function DrawRect(props: DrawRectProps) {\n  use(() => {\n    queueDraw({\n      type: 'rect',\n      props\n    })\n  })\n\n  return null\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawCircleProps } from '../types'\n\nexport type { DrawCircleProps }\n\nexport function DrawCircle(props: DrawCircleProps) {\n  use(() => {\n    queueDraw({\n      type: 'circle',\n      props\n    })\n  })\n\n  return null\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawArcProps } from '../types'\n\nexport type { DrawArcProps }\n\nexport function DrawArc(props: DrawArcProps) {\n  use(() => {\n    queueDraw({\n      type: 'arc',\n      props\n    })\n  })\n\n  return null\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawLineProps } from '../types'\n\nexport type { DrawLineProps }\n\nexport function DrawLine(props: DrawLineProps) {\n  use(() => {\n    queueDraw({\n      type: 'line',\n      props\n    })\n  })\n\n  return null\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawTextProps } from '../types'\n\nexport type { DrawTextProps }\n\nexport function DrawText(props: DrawTextProps) {\n  use(() => {\n    queueDraw({\n      type: 'text',\n      props\n    })\n  })\n\n  return null\n}\n","import { use } from 'flexium/core'\nimport { queueDraw } from '../Canvas'\nimport type { DrawPathProps } from '../types'\n\nexport type { DrawPathProps }\n\nexport function DrawPath(props: DrawPathProps) {\n  use(() => {\n    queueDraw({\n      type: 'path',\n      props\n    })\n  })\n\n  return null\n}\n"]}