flexium 0.10.6 → 0.10.7

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 (53) hide show
  1. package/README.md +5 -5
  2. package/dist/canvas.js +1 -1
  3. package/dist/canvas.mjs +1 -1
  4. package/dist/{chunk-RLLO5M6F.js → chunk-5ICRQIS2.js} +3 -3
  5. package/dist/{chunk-RLLO5M6F.js.map → chunk-5ICRQIS2.js.map} +1 -1
  6. package/dist/{chunk-ERIXVRJ4.mjs → chunk-5K55ASOD.mjs} +3 -3
  7. package/dist/{chunk-ERIXVRJ4.mjs.map → chunk-5K55ASOD.mjs.map} +1 -1
  8. package/dist/{chunk-NF4RPLCK.js → chunk-AZEHBSBG.js} +3 -3
  9. package/dist/{chunk-NF4RPLCK.js.map → chunk-AZEHBSBG.js.map} +1 -1
  10. package/dist/chunk-BBNYMXE7.mjs +2 -0
  11. package/dist/chunk-BBNYMXE7.mjs.map +1 -0
  12. package/dist/{chunk-ANJNQW77.js → chunk-QPCIDSMM.js} +2 -2
  13. package/dist/{chunk-ANJNQW77.js.map → chunk-QPCIDSMM.js.map} +1 -1
  14. package/dist/{chunk-F23GIQDE.mjs → chunk-QZIX4FXS.mjs} +2 -2
  15. package/dist/{chunk-F23GIQDE.mjs.map → chunk-QZIX4FXS.mjs.map} +1 -1
  16. package/dist/chunk-XJHWMHKF.js +2 -0
  17. package/dist/chunk-XJHWMHKF.js.map +1 -0
  18. package/dist/{chunk-E5WYPGCV.mjs → chunk-Y6KKAHLS.mjs} +3 -3
  19. package/dist/{chunk-E5WYPGCV.mjs.map → chunk-Y6KKAHLS.mjs.map} +1 -1
  20. package/dist/core.js +1 -1
  21. package/dist/core.mjs +1 -1
  22. package/dist/dom.js +1 -1
  23. package/dist/dom.mjs +1 -1
  24. package/dist/index.d.cts +1 -1
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.js +1 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/index.mjs +1 -1
  29. package/dist/index.mjs.map +1 -1
  30. package/dist/interactive.js +1 -1
  31. package/dist/interactive.mjs +1 -1
  32. package/dist/metafile-cjs.json +1 -1
  33. package/dist/metafile-esm.json +1 -1
  34. package/dist/primitives/ui.js +1 -1
  35. package/dist/primitives/ui.mjs +1 -1
  36. package/dist/primitives.js +1 -1
  37. package/dist/primitives.mjs +1 -1
  38. package/dist/router.js +1 -1
  39. package/dist/router.mjs +1 -1
  40. package/dist/server.js +1 -1
  41. package/dist/server.mjs +1 -1
  42. package/dist/{state-SUVOJZYY.mjs → state-RYKSC35A.mjs} +2 -2
  43. package/dist/{state-SUVOJZYY.mjs.map → state-RYKSC35A.mjs.map} +1 -1
  44. package/dist/state-XUXPMCFJ.js +2 -0
  45. package/dist/{state-S3TSPDMB.js.map → state-XUXPMCFJ.js.map} +1 -1
  46. package/dist/test-exports.js +1 -1
  47. package/dist/test-exports.mjs +1 -1
  48. package/package.json +1 -1
  49. package/dist/chunk-2L2QFYBL.mjs +0 -2
  50. package/dist/chunk-2L2QFYBL.mjs.map +0 -1
  51. package/dist/chunk-YEBBTVHG.js +0 -2
  52. package/dist/chunk-YEBBTVHG.js.map +0 -1
  53. package/dist/state-S3TSPDMB.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","m","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"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","file":"chunk-ANJNQW77.js","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/state'\nimport type { StateValue } from '../../core/state'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | StateValue<T>): value is StateValue<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | StateValue<T>): T {\n // Check for real signals first (have STATE_SIGNAL)\n if (isSignal(value)) {\n return (value as StateValue<T>)()\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Check if effect is available before trying to import\n // Import effect and onCleanup dynamically to avoid circular deps\n Promise.all([\n import('../../core/effect').then(m => ({ effect: m.effect, onCleanup: m.onCleanup })),\n import('../../core/state').then(m => ({ isSignal: m.isSignal }))\n ])\n .then(([{ effect, onCleanup }, { isSignal }]) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void (value as any)() // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","m","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"iEASO,SAASA,EACdC,CAAAA,CAEqB,CACrB,GAAI,CAACA,CAAAA,CAAO,OAAO,EAAC,CAGpB,IAAMC,CAAAA,CAA2B,EAAC,CAG9BD,CAAAA,CAAM,UAASC,CAAAA,CAAI,OAAA,CAAUD,EAAM,OAAA,CAAA,CACnCA,CAAAA,CAAM,IAAA,GAAS,MAAA,GAAWC,EAAI,IAAA,CAAOD,CAAAA,CAAM,MAC3CA,CAAAA,CAAM,aAAA,GAAeC,EAAI,aAAA,CAAgBD,CAAAA,CAAM,aAAA,CAAA,CAC/CA,CAAAA,CAAM,WAAUC,CAAAA,CAAI,QAAA,CAAWD,EAAM,QAAA,CAAA,CACrCA,CAAAA,CAAM,iBAAgBC,CAAAA,CAAI,cAAA,CAAiBD,CAAAA,CAAM,cAAA,CAAA,CACjDA,EAAM,UAAA,GAAYC,CAAAA,CAAI,WAAaD,CAAAA,CAAM,UAAA,CAAA,CACzCA,EAAM,SAAA,GAAWC,CAAAA,CAAI,SAAA,CAAYD,CAAAA,CAAM,WACvCA,CAAAA,CAAM,GAAA,GAAQ,SAAWC,CAAAA,CAAI,GAAA,CAAM,GAAGD,CAAAA,CAAM,GAAG,CAAA,EAAA,CAAA,CAAA,CAG/CA,CAAAA,CAAM,UAAY,MAAA,GAAWC,CAAAA,CAAI,QAAU,CAAA,EAAGD,CAAAA,CAAM,OAAO,CAAA,EAAA,CAAA,CAAA,CAC3DA,CAAAA,CAAM,aAAe,MAAA,GAAWC,CAAAA,CAAI,WAAa,CAAA,EAAGD,CAAAA,CAAM,UAAU,CAAA,EAAA,CAAA,CAAA,CACpEA,CAAAA,CAAM,eAAiB,MAAA,GACzBC,CAAAA,CAAI,YAAA,CAAe,CAAA,EAAGD,EAAM,YAAY,CAAA,EAAA,CAAA,CAAA,CACtCA,EAAM,aAAA,GAAkB,MAAA,GAC1BC,EAAI,aAAA,CAAgB,CAAA,EAAGD,CAAAA,CAAM,aAAa,MACxCA,CAAAA,CAAM,WAAA,GAAgB,SACxBC,CAAAA,CAAI,WAAA,CAAc,GAAGD,CAAAA,CAAM,WAAW,CAAA,EAAA,CAAA,CAAA,CACpCA,CAAAA,CAAM,oBAAsB,MAAA,GAC9BC,CAAAA,CAAI,YAAc,CAAA,EAAGD,CAAAA,CAAM,iBAAiB,CAAA,EAAA,CAAA,CAC5CC,CAAAA,CAAI,YAAA,CAAe,CAAA,EAAGD,EAAM,iBAAiB,CAAA,EAAA,CAAA,CAAA,CAE3CA,EAAM,eAAA,GAAoB,MAAA,GAC5BC,EAAI,UAAA,CAAa,CAAA,EAAGD,CAAAA,CAAM,eAAe,KACzCC,CAAAA,CAAI,aAAA,CAAgB,GAAGD,CAAAA,CAAM,eAAe,MAI1CA,CAAAA,CAAM,MAAA,GAAW,MAAA,GAAWC,CAAAA,CAAI,OAAS,CAAA,EAAGD,CAAAA,CAAM,MAAM,CAAA,EAAA,CAAA,CAAA,CACxDA,CAAAA,CAAM,YAAc,MAAA,GAAWC,CAAAA,CAAI,SAAA,CAAY,CAAA,EAAGD,EAAM,SAAS,CAAA,EAAA,CAAA,CAAA,CACjEA,EAAM,WAAA,GAAgB,MAAA,GACxBC,EAAI,WAAA,CAAc,CAAA,EAAGD,EAAM,WAAW,CAAA,EAAA,CAAA,CAAA,CACpCA,EAAM,YAAA,GAAiB,MAAA,GACzBC,EAAI,YAAA,CAAe,CAAA,EAAGD,EAAM,YAAY,CAAA,EAAA,CAAA,CAAA,CACtCA,CAAAA,CAAM,UAAA,GAAe,SAAWC,CAAAA,CAAI,UAAA,CAAa,GAAGD,CAAAA,CAAM,UAAU,MACpEA,CAAAA,CAAM,gBAAA,GAAqB,MAAA,GAC7BC,CAAAA,CAAI,WAAa,CAAA,EAAGD,CAAAA,CAAM,gBAAgB,CAAA,EAAA,CAAA,CAC1CC,CAAAA,CAAI,YAAc,CAAA,EAAGD,CAAAA,CAAM,gBAAgB,CAAA,EAAA,CAAA,CAAA,CAEzCA,EAAM,cAAA,GAAmB,MAAA,GAC3BC,EAAI,SAAA,CAAY,CAAA,EAAGD,EAAM,cAAc,CAAA,EAAA,CAAA,CACvCC,CAAAA,CAAI,YAAA,CAAe,GAAGD,CAAAA,CAAM,cAAc,MAIxCA,CAAAA,CAAM,KAAA,GAAU,SAClBC,CAAAA,CAAI,KAAA,CACF,OAAOD,CAAAA,CAAM,OAAU,QAAA,CAAW,CAAA,EAAGA,EAAM,KAAK,CAAA,EAAA,CAAA,CAAOA,EAAM,KAAA,CAAA,CAC7DA,CAAAA,CAAM,MAAA,GAAW,MAAA,GACnBC,EAAI,MAAA,CACF,OAAOD,EAAM,MAAA,EAAW,QAAA,CAAW,GAAGA,CAAAA,CAAM,MAAM,CAAA,EAAA,CAAA,CAAOA,CAAAA,CAAM,QAC/DA,CAAAA,CAAM,QAAA,GAAa,SAAWC,CAAAA,CAAI,QAAA,CAAW,GAAGD,CAAAA,CAAM,QAAQ,MAC9DA,CAAAA,CAAM,QAAA,GAAa,SAAWC,CAAAA,CAAI,QAAA,CAAW,GAAGD,CAAAA,CAAM,QAAQ,MAC9DA,CAAAA,CAAM,SAAA,GAAc,MAAA,GAAWC,CAAAA,CAAI,UAAY,CAAA,EAAGD,CAAAA,CAAM,SAAS,CAAA,EAAA,CAAA,CAAA,CACjEA,CAAAA,CAAM,YAAc,MAAA,GAAWC,CAAAA,CAAI,SAAA,CAAY,CAAA,EAAGD,EAAM,SAAS,CAAA,EAAA,CAAA,CAAA,CAGjEA,EAAM,eAAA,GAAiBC,CAAAA,CAAI,gBAAkBD,CAAAA,CAAM,eAAA,CAAA,CACnDA,CAAAA,CAAM,YAAA,GAAiB,SACzBC,CAAAA,CAAI,YAAA,CAAe,GAAGD,CAAAA,CAAM,YAAY,MACtCA,CAAAA,CAAM,mBAAA,GAAwB,MAAA,GAChCC,CAAAA,CAAI,oBAAsB,CAAA,EAAGD,CAAAA,CAAM,mBAAmB,CAAA,EAAA,CAAA,CAAA,CACpDA,CAAAA,CAAM,uBAAyB,MAAA,GACjCC,CAAAA,CAAI,oBAAA,CAAuB,CAAA,EAAGD,EAAM,oBAAoB,CAAA,EAAA,CAAA,CAAA,CACtDA,EAAM,sBAAA,GAA2B,MAAA,GACnCC,EAAI,sBAAA,CAAyB,CAAA,EAAGD,CAAAA,CAAM,sBAAsB,MAC1DA,CAAAA,CAAM,uBAAA,GAA4B,SACpCC,CAAAA,CAAI,uBAAA,CAA0B,GAAGD,CAAAA,CAAM,uBAAuB,CAAA,EAAA,CAAA,CAAA,CAC5DA,CAAAA,CAAM,UAAY,MAAA,GAAWC,CAAAA,CAAI,QAAUD,CAAAA,CAAM,OAAA,CAAA,CAGjDA,EAAM,WAAA,GAAgB,MAAA,GACxBC,EAAI,WAAA,CAAc,CAAA,EAAGD,EAAM,WAAW,CAAA,EAAA,CAAA,CAAA,CACpCA,EAAM,WAAA,GAAaC,CAAAA,CAAI,YAAcD,CAAAA,CAAM,WAAA,CAAA,CAC3CA,CAAAA,CAAM,cAAA,GAAmB,SAC3BC,CAAAA,CAAI,cAAA,CAAiB,GAAGD,CAAAA,CAAM,cAAc,MAC1CA,CAAAA,CAAM,gBAAA,GAAqB,MAAA,GAC7BC,CAAAA,CAAI,iBAAmB,CAAA,EAAGD,CAAAA,CAAM,gBAAgB,CAAA,EAAA,CAAA,CAAA,CAC9CA,CAAAA,CAAM,oBAAsB,MAAA,GAC9BC,CAAAA,CAAI,iBAAA,CAAoB,CAAA,EAAGD,EAAM,iBAAiB,CAAA,EAAA,CAAA,CAAA,CAChDA,EAAM,eAAA,GAAoB,MAAA,GAC5BC,EAAI,eAAA,CAAkB,CAAA,EAAGD,CAAAA,CAAM,eAAe,MAG5CA,CAAAA,CAAM,QAAA,GAAUC,EAAI,QAAA,CAAWD,CAAAA,CAAM,UACrCA,CAAAA,CAAM,GAAA,GAAQ,MAAA,GAAWC,CAAAA,CAAI,IAAM,CAAA,EAAGD,CAAAA,CAAM,GAAG,CAAA,EAAA,CAAA,CAAA,CAC/CA,CAAAA,CAAM,QAAU,MAAA,GAAWC,CAAAA,CAAI,KAAA,CAAQ,CAAA,EAAGD,EAAM,KAAK,CAAA,EAAA,CAAA,CAAA,CACrDA,EAAM,MAAA,GAAW,MAAA,GAAWC,EAAI,MAAA,CAAS,CAAA,EAAGD,CAAAA,CAAM,MAAM,MACxDA,CAAAA,CAAM,IAAA,GAAS,SAAWC,CAAAA,CAAI,IAAA,CAAO,GAAGD,CAAAA,CAAM,IAAI,MAClDA,CAAAA,CAAM,MAAA,GAAW,SAAWC,CAAAA,CAAI,MAAA,CAASD,EAAM,MAAA,CAAA,CAG/CA,CAAAA,CAAM,YAAWC,CAAAA,CAAI,SAAA,CAAYD,CAAAA,CAAM,SAAA,CAAA,CAG3C,IAAME,CAAAA,CAAYF,CAAAA,CAClB,OAAIE,CAAAA,CAAU,KAAA,GAAOD,EAAI,KAAA,CAAQC,CAAAA,CAAU,KAAA,CAAA,CACvCA,CAAAA,CAAU,WAAa,MAAA,GAAWD,CAAAA,CAAI,SAAW,CAAA,EAAGC,CAAAA,CAAU,QAAQ,CAAA,EAAA,CAAA,CAAA,CACtEA,CAAAA,CAAU,UAAA,GAAYD,CAAAA,CAAI,WAAaC,CAAAA,CAAU,UAAA,CAAA,CACjDA,EAAU,UAAA,GAAYD,CAAAA,CAAI,WAAaC,CAAAA,CAAU,UAAA,CAAA,CACjDA,CAAAA,CAAU,SAAA,GAAWD,EAAI,SAAA,CAAYC,CAAAA,CAAU,WAC/CA,CAAAA,CAAU,SAAA,GAAWD,EAAI,SAAA,CAAYC,CAAAA,CAAU,SAAA,CAAA,CAC/CA,CAAAA,CAAU,iBAAgBD,CAAAA,CAAI,cAAA,CAAiBC,EAAU,cAAA,CAAA,CACzDA,CAAAA,CAAU,aAAe,MAAA,GAC3BD,CAAAA,CAAI,UAAA,CAAa,CAAA,EAAGC,EAAU,UAAU,CAAA,EAAA,CAAA,CAAA,CACtCA,EAAU,aAAA,GAAkB,MAAA,GAC9BD,EAAI,aAAA,CAAgB,CAAA,EAAGC,CAAAA,CAAU,aAAa,MAEzCD,CACT,CCtHO,SAASE,CAAAA,CAAYC,CAAAA,CAAkD,CAG5E,OAAOD,kBAAAA,CAAaC,CAAK,CAC3B,CAKO,SAASC,CAAAA,CAAgBD,CAAAA,CAA6B,CAE3D,OAAID,CAAAA,CAASC,CAAK,CAAA,CACRA,CAAAA,EAAwB,CAKhCA,CAAAA,GAAU,MACV,OAAOA,CAAAA,EAAU,UACjB,OAAA,GAAWA,CAAAA,EACX,SAAUA,CAAAA,CAEFA,CAAAA,CAAc,KAAA,CAEjBA,CACT,CClBO,SAASE,CAAAA,CACdC,EAEAC,CAAAA,CACAC,CAAAA,CACAC,EACM,CACN,GAAI,CAACF,CAAAA,CAAU,OAEf,IAAMG,CAAAA,CAAa,MAAM,OAAA,CAAQH,CAAQ,EAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CAEjE,QAAWI,CAAAA,IAASD,CAAAA,CAClB,GAAI,EAAA,CAACC,CAAAA,EAAS,CAACA,CAAAA,CAAM,IAAA,CAAA,CAErB,OAAQA,CAAAA,CAAM,MACZ,KAAK,cACHC,CAAAA,CAAWN,CAAAA,CAAKK,EAAM,KAAK,CAAA,CAC3B,MACF,KAAK,gBACHE,CAAAA,CAAaP,CAAAA,CAAKK,EAAM,KAAK,CAAA,CAC7B,MACF,KAAK,aAAA,CACHG,CAAAA,CAAWR,CAAAA,CAAKK,EAAM,KAAK,CAAA,CAC3B,MACF,KAAK,aAAA,CACHI,EAAWT,CAAAA,CAAKK,CAAAA,CAAM,KAAK,CAAA,CAC3B,MACF,KAAK,aAAA,CACHK,CAAAA,CAAWV,EAAKK,CAAAA,CAAM,KAAK,EAC3B,MACF,KAAK,YAAA,CACHM,CAAAA,CAAUX,EAAKK,CAAAA,CAAM,KAAK,EAC1B,KACJ,CAEJ,CAKA,SAASC,CAAAA,CAAWN,CAAAA,CAA+BY,CAAAA,CAA4B,CAC7E,IAAMC,CAAAA,CAAIf,EAAac,CAAAA,CAAM,CAAC,EACxBE,CAAAA,CAAIhB,CAAAA,CAAac,CAAAA,CAAM,CAAC,EACxBG,CAAAA,CAAQjB,CAAAA,CAAac,EAAM,KAAK,CAAA,CAChCI,EAASlB,CAAAA,CAAac,CAAAA,CAAM,MAAM,CAAA,CAClCK,CAAAA,CAAOnB,EAAac,CAAAA,CAAM,IAAI,EAC9BM,CAAAA,CAASpB,CAAAA,CAAac,EAAM,MAAM,CAAA,CAClCO,CAAAA,CAAcrB,CAAAA,CAAac,EAAM,WAAW,CAAA,CAC5CQ,EAAUtB,CAAAA,CAAac,CAAAA,CAAM,OAAO,CAAA,CAE1CZ,CAAAA,CAAI,IAAA,EAAK,CAELoB,IAAY,MAAA,GACdpB,CAAAA,CAAI,YAAcoB,CAAAA,CAAAA,CAGhBH,CAAAA,GACFjB,EAAI,SAAA,CAAYiB,CAAAA,CAChBjB,CAAAA,CAAI,QAAA,CAASa,EAAGC,CAAAA,CAAGC,CAAAA,CAAOC,CAAM,CAAA,CAAA,CAG9BE,CAAAA,GACFlB,EAAI,WAAA,CAAckB,CAAAA,CAClBlB,EAAI,SAAA,CAAYmB,CAAAA,EAAe,EAC/BnB,CAAAA,CAAI,UAAA,CAAWa,EAAGC,CAAAA,CAAGC,CAAAA,CAAOC,CAAM,CAAA,CAAA,CAGpChB,CAAAA,CAAI,OAAA,GACN,CAKA,SAASO,CAAAA,CACPP,EACAY,CAAAA,CACM,CACN,IAAMC,CAAAA,CAAIf,CAAAA,CAAac,CAAAA,CAAM,CAAC,EACxBE,CAAAA,CAAIhB,CAAAA,CAAac,EAAM,CAAC,CAAA,CACxBS,EAASvB,CAAAA,CAAac,CAAAA,CAAM,MAAM,CAAA,CAClCK,EAAOnB,CAAAA,CAAac,CAAAA,CAAM,IAAI,CAAA,CAC9BM,CAAAA,CAASpB,EAAac,CAAAA,CAAM,MAAM,CAAA,CAClCO,CAAAA,CAAcrB,EAAac,CAAAA,CAAM,WAAW,EAC5CQ,CAAAA,CAAUtB,CAAAA,CAAac,EAAM,OAAO,CAAA,CAE1CZ,CAAAA,CAAI,IAAA,GAEAoB,CAAAA,GAAY,MAAA,GACdpB,EAAI,WAAA,CAAcoB,CAAAA,CAAAA,CAGpBpB,EAAI,SAAA,EAAU,CACdA,CAAAA,CAAI,GAAA,CAAIa,EAAGC,CAAAA,CAAGO,CAAAA,CAAQ,EAAG,CAAA,CAAI,IAAA,CAAK,EAAE,CAAA,CAEhCJ,CAAAA,GACFjB,CAAAA,CAAI,SAAA,CAAYiB,EAChBjB,CAAAA,CAAI,IAAA,IAGFkB,CAAAA,GACFlB,CAAAA,CAAI,YAAckB,CAAAA,CAClBlB,CAAAA,CAAI,UAAYmB,CAAAA,EAAe,CAAA,CAC/BnB,EAAI,MAAA,EAAO,CAAA,CAGbA,EAAI,OAAA,GACN,CAKA,SAASQ,CAAAA,CAAWR,CAAAA,CAA+BY,CAAAA,CAA4B,CAC7E,IAAMU,CAAAA,CAAIxB,EAAac,CAAAA,CAAM,CAAC,EACxBK,CAAAA,CAAOnB,CAAAA,CAAac,CAAAA,CAAM,IAAI,EAC9BM,CAAAA,CAASpB,CAAAA,CAAac,EAAM,MAAM,CAAA,CAClCO,EAAcrB,CAAAA,CAAac,CAAAA,CAAM,WAAW,CAAA,CAC5CQ,EAAUtB,CAAAA,CAAac,CAAAA,CAAM,OAAO,CAAA,CAE1CZ,CAAAA,CAAI,MAAK,CAELoB,CAAAA,GAAY,MAAA,GACdpB,CAAAA,CAAI,YAAcoB,CAAAA,CAAAA,CAIpB,IAAMG,EAAO,IAAI,MAAA,CAAOD,CAAC,CAAA,CAErBL,CAAAA,GACFjB,CAAAA,CAAI,SAAA,CAAYiB,EAChBjB,CAAAA,CAAI,IAAA,CAAKuB,CAAI,CAAA,CAAA,CAGXL,CAAAA,GACFlB,EAAI,WAAA,CAAckB,CAAAA,CAClBlB,CAAAA,CAAI,SAAA,CAAYmB,GAAe,CAAA,CAC/BnB,CAAAA,CAAI,OAAOuB,CAAI,CAAA,CAAA,CAGjBvB,EAAI,OAAA,GACN,CAKA,SAASS,EAAWT,CAAAA,CAA+BY,CAAAA,CAA4B,CAC7E,IAAMC,CAAAA,CAAIf,EAAac,CAAAA,CAAM,CAAC,EACxBE,CAAAA,CAAIhB,CAAAA,CAAac,EAAM,CAAC,CAAA,CACxBY,EAAO1B,CAAAA,CAAac,CAAAA,CAAM,IAAI,CAAA,CAC9BK,CAAAA,CAAOnB,CAAAA,CAAac,CAAAA,CAAM,IAAI,CAAA,CAC9Ba,CAAAA,CAAW3B,EAAac,CAAAA,CAAM,QAAQ,GAAK,EAAA,CAC3Cc,CAAAA,CAAa5B,CAAAA,CAAac,CAAAA,CAAM,UAAU,CAAA,EAAK,YAAA,CAC/Ce,EAAa7B,CAAAA,CAAac,CAAAA,CAAM,UAAU,CAAA,EAAK,QAAA,CAC/CgB,CAAAA,CAAY9B,CAAAA,CAAac,EAAM,SAAS,CAAA,EAAK,OAC7CiB,CAAAA,CAAe/B,CAAAA,CAAac,EAAM,YAAY,CAAA,EAAK,YAAA,CAEzDZ,CAAAA,CAAI,MAAK,CAETA,CAAAA,CAAI,KAAO,CAAA,EAAG2B,CAAU,IAAIF,CAAQ,CAAA,GAAA,EAAMC,CAAU,CAAA,CAAA,CACpD1B,EAAI,SAAA,CAAY4B,CAAAA,CAChB5B,EAAI,YAAA,CAAe6B,CAAAA,CAEfZ,IACFjB,CAAAA,CAAI,SAAA,CAAYiB,CAAAA,CAChBjB,CAAAA,CAAI,SAASwB,CAAAA,CAAMX,CAAAA,CAAGC,CAAC,CAAA,CAAA,CAGzBd,CAAAA,CAAI,UACN,CAKA,SAASU,CAAAA,CAAWV,EAA+BY,CAAAA,CAA4B,CAC7E,IAAMkB,CAAAA,CAAKhC,CAAAA,CAAac,EAAM,EAAE,CAAA,CAC1BmB,EAAKjC,CAAAA,CAAac,CAAAA,CAAM,EAAE,CAAA,CAC1BoB,CAAAA,CAAKlC,EAAac,CAAAA,CAAM,EAAE,EAC1BqB,CAAAA,CAAKnC,CAAAA,CAAac,CAAAA,CAAM,EAAE,EAC1BM,CAAAA,CAASpB,CAAAA,CAAac,EAAM,MAAM,CAAA,EAAK,QACvCO,CAAAA,CAAcrB,CAAAA,CAAac,CAAAA,CAAM,WAAW,GAAK,CAAA,CACjDQ,CAAAA,CAAUtB,EAAac,CAAAA,CAAM,OAAO,EAE1CZ,CAAAA,CAAI,IAAA,EAAK,CAELoB,CAAAA,GAAY,SACdpB,CAAAA,CAAI,WAAA,CAAcoB,GAGpBpB,CAAAA,CAAI,SAAA,GACJA,CAAAA,CAAI,MAAA,CAAO8B,EAAIC,CAAE,CAAA,CACjB/B,EAAI,MAAA,CAAOgC,CAAAA,CAAIC,CAAE,CAAA,CAEjBjC,CAAAA,CAAI,YAAckB,CAAAA,CAClBlB,CAAAA,CAAI,SAAA,CAAYmB,CAAAA,CAChBnB,EAAI,MAAA,EAAO,CAEXA,EAAI,OAAA,GACN,CAKA,SAASW,CAAAA,CAAUX,CAAAA,CAA+BY,CAAAA,CAA2B,CAC3E,IAAMC,CAAAA,CAAIf,EAAac,CAAAA,CAAM,CAAC,EACxBE,CAAAA,CAAIhB,CAAAA,CAAac,CAAAA,CAAM,CAAC,EACxBS,CAAAA,CAASvB,CAAAA,CAAac,EAAM,MAAM,CAAA,CAClCsB,EAAapC,CAAAA,CAAac,CAAAA,CAAM,UAAU,CAAA,CAC1CuB,CAAAA,CAAWrC,EAAac,CAAAA,CAAM,QAAQ,EACtCwB,CAAAA,CAAmBtC,CAAAA,CAAac,EAAM,gBAAgB,CAAA,EAAK,KAAA,CAC3DK,CAAAA,CAAOnB,EAAac,CAAAA,CAAM,IAAI,EAC9BM,CAAAA,CAASpB,CAAAA,CAAac,EAAM,MAAM,CAAA,CAClCO,CAAAA,CAAcrB,CAAAA,CAAac,EAAM,WAAW,CAAA,CAC5CQ,EAAUtB,CAAAA,CAAac,CAAAA,CAAM,OAAO,CAAA,CAE1CZ,CAAAA,CAAI,IAAA,EAAK,CAELoB,IAAY,MAAA,GACdpB,CAAAA,CAAI,YAAcoB,CAAAA,CAAAA,CAGpBpB,CAAAA,CAAI,WAAU,CACdA,CAAAA,CAAI,GAAA,CAAIa,CAAAA,CAAGC,EAAGO,CAAAA,CAAQa,CAAAA,CAAYC,EAAUC,CAAgB,CAAA,CAExDnB,IACFjB,CAAAA,CAAI,SAAA,CAAYiB,CAAAA,CAChBjB,CAAAA,CAAI,MAAK,CAAA,CAGPkB,CAAAA,GACFlB,EAAI,WAAA,CAAckB,CAAAA,CAClBlB,EAAI,SAAA,CAAYmB,CAAAA,EAAe,CAAA,CAC/BnB,CAAAA,CAAI,QAAO,CAAA,CAGbA,CAAAA,CAAI,UACN,CCtOO,SAASqC,CAAAA,CAAOzB,CAAAA,CAA2B,CAChD,GAAM,CAAE,KAAA,CAAAG,CAAAA,CAAO,OAAAC,CAAAA,CAAQ,QAAA,CAAAf,EAAU,KAAA,CAAAR,CAAAA,CAAO,GAAA6C,CAAAA,CAAI,GAAGC,CAAK,CAAA,CAAI3B,CAAAA,CAExD,OAAO,CACL,IAAA,CAAM,SACN,KAAA,CAAO,CACL,GAAG2B,CAAAA,CACH,GAAAD,CAAAA,CACA,KAAA,CAAAvB,EACA,MAAA,CAAAC,CAAAA,CACA,MAAOxB,CAAAA,CAAeC,CAAK,CAAA,CAE3B,GAAA,CAAM+C,GAAqC,CAIzC,GAHI,CAACA,CAAAA,EAGD,OAAO,sBAA0B,GAAA,CAAa,OAElD,IAAMxC,CAAAA,CAAMwC,EAAO,UAAA,CAAW,IAAI,EAC7BxC,CAAAA,EAIL,OAAA,CAAQ,IAAI,CACV,OAAO,sBAAmB,CAAA,CAAE,KAAKyC,CAAAA,GAAM,CAAE,OAAQA,CAAAA,CAAE,MAAA,CAAQ,UAAWA,CAAAA,CAAE,SAAU,CAAA,CAAE,CAAA,CACpF,OAAO,qBAAkB,CAAA,CAAE,KAAKA,CAAAA,GAAM,CAAE,SAAUA,CAAAA,CAAE,QAAS,CAAA,CAAE,CACjE,CAAC,CAAA,CACE,IAAA,CAAK,CAAC,CAAC,CAAE,OAAAC,CAAAA,CAAQ,SAAA,CAAAC,CAAU,CAAA,CAAG,CAAE,QAAA,CAAA/C,CAAS,CAAC,CAAA,GAAM,CAC/C,IAAIgD,CAAAA,CAEEC,CAAAA,CAAiB,IAAM,CACvBD,CAAAA,GAAU,QACZ,oBAAA,CAAqBA,CAAK,EAG5BA,CAAAA,CAAQ,qBAAA,CAAsB,IAAM,CAElC5C,CAAAA,CAAI,SAAA,CAAU,CAAA,CAAG,EAAGe,CAAAA,CAAOC,CAAM,EAGjCjB,CAAAA,CAAqBC,CAAAA,CAAKC,CAAuB,CAAA,CAEjD2C,CAAAA,CAAQ,OACV,CAAC,EACH,EAEAF,CAAAA,CAAO,IAAM,CAGX,IAAMtC,CAAAA,CAAa,KAAA,CAAM,OAAA,CAAQH,CAAQ,CAAA,CAAIA,CAAAA,CAAW,CAACA,CAAQ,CAAA,CACjE,QAAWI,CAAAA,IAASD,CAAAA,CAClB,GAAIC,CAAAA,EAASA,EAAM,KAAA,CAEjB,IAAA,IAAWyC,KAAOzC,CAAAA,CAAM,KAAA,CAAO,CAC7B,IAAMR,CAAAA,CAAQQ,CAAAA,CAAM,KAAA,CAAMyC,CAAG,CAAA,CAEzBlD,CAAAA,CAASC,CAAK,CAAA,EACVA,CAAAA,GAEV,CAKJgD,CAAAA,EAAe,CAGfF,CAAAA,CAAU,IAAM,CACVC,CAAAA,GAAU,SACZ,oBAAA,CAAqBA,CAAK,EAC1BA,CAAAA,CAAQ,MAAA,EAEZ,CAAC,EACH,CAAC,EACH,CAAC,EACA,KAAA,CAAOG,CAAAA,EAAQ,CACd,OAAA,CAAQ,KAAA,CAAM,iDAAkDA,CAAG,EACrE,CAAC,EACL,CACF,EACA,QAAA,CAAU,EACZ,CACF,CC3FO,SAASC,CAAAA,CAASpC,EAA6B,CACpD,OAAO,CACL,IAAA,CAAM,aAAA,CACN,MAAAA,CAAAA,CACA,QAAA,CAAU,EACZ,CACF,CCNO,SAASqC,EAAWrC,CAAAA,CAA+B,CACxD,OAAO,CACL,IAAA,CAAM,eAAA,CACN,KAAA,CAAAA,EACA,QAAA,CAAU,EACZ,CACF,CCNO,SAASsC,CAAAA,CAAQtC,CAAAA,CAA4B,CAClD,OAAO,CACL,KAAM,YAAA,CACN,KAAA,CAAAA,EACA,QAAA,CAAU,EACZ,CACF,CCNO,SAASuC,CAAAA,CAASvC,EAA6B,CACpD,OAAO,CACL,IAAA,CAAM,aAAA,CACN,MAAAA,CAAAA,CACA,QAAA,CAAU,EACZ,CACF,CCNO,SAASwC,EAASxC,CAAAA,CAA6B,CACpD,OAAO,CACL,IAAA,CAAM,aAAA,CACN,KAAA,CAAAA,EACA,QAAA,CAAU,EACZ,CACF,CCNO,SAASyC,CAAAA,CAASzC,CAAAA,CAA6B,CACpD,OAAO,CACL,KAAM,aAAA,CACN,KAAA,CAAAA,EACA,QAAA,CAAU,EACZ,CACF","file":"chunk-QPCIDSMM.js","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/state'\nimport type { StateValue } from '../../core/state'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | StateValue<T>): value is StateValue<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | StateValue<T>): T {\n // Check for real signals first (have STATE_SIGNAL)\n if (isSignal(value)) {\n return (value as StateValue<T>)()\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Check if effect is available before trying to import\n // Import effect and onCleanup dynamically to avoid circular deps\n Promise.all([\n import('../../core/effect').then(m => ({ effect: m.effect, onCleanup: m.onCleanup })),\n import('../../core/state').then(m => ({ isSignal: m.isSignal }))\n ])\n .then(([{ effect, onCleanup }, { isSignal }]) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void (value as any)() // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
@@ -1,2 +1,2 @@
1
- import {g}from'./chunk-2L2QFYBL.mjs';function x(i){if(!i)return {};let e={};i.display&&(e.display=i.display),i.flex!==void 0&&(e.flex=i.flex),i.flexDirection&&(e.flexDirection=i.flexDirection),i.flexWrap&&(e.flexWrap=i.flexWrap),i.justifyContent&&(e.justifyContent=i.justifyContent),i.alignItems&&(e.alignItems=i.alignItems),i.alignSelf&&(e.alignSelf=i.alignSelf),i.gap!==void 0&&(e.gap=`${i.gap}px`),i.padding!==void 0&&(e.padding=`${i.padding}px`),i.paddingTop!==void 0&&(e.paddingTop=`${i.paddingTop}px`),i.paddingRight!==void 0&&(e.paddingRight=`${i.paddingRight}px`),i.paddingBottom!==void 0&&(e.paddingBottom=`${i.paddingBottom}px`),i.paddingLeft!==void 0&&(e.paddingLeft=`${i.paddingLeft}px`),i.paddingHorizontal!==void 0&&(e.paddingLeft=`${i.paddingHorizontal}px`,e.paddingRight=`${i.paddingHorizontal}px`),i.paddingVertical!==void 0&&(e.paddingTop=`${i.paddingVertical}px`,e.paddingBottom=`${i.paddingVertical}px`),i.margin!==void 0&&(e.margin=`${i.margin}px`),i.marginTop!==void 0&&(e.marginTop=`${i.marginTop}px`),i.marginRight!==void 0&&(e.marginRight=`${i.marginRight}px`),i.marginBottom!==void 0&&(e.marginBottom=`${i.marginBottom}px`),i.marginLeft!==void 0&&(e.marginLeft=`${i.marginLeft}px`),i.marginHorizontal!==void 0&&(e.marginLeft=`${i.marginHorizontal}px`,e.marginRight=`${i.marginHorizontal}px`),i.marginVertical!==void 0&&(e.marginTop=`${i.marginVertical}px`,e.marginBottom=`${i.marginVertical}px`),i.width!==void 0&&(e.width=typeof i.width=="number"?`${i.width}px`:i.width),i.height!==void 0&&(e.height=typeof i.height=="number"?`${i.height}px`:i.height),i.minWidth!==void 0&&(e.minWidth=`${i.minWidth}px`),i.maxWidth!==void 0&&(e.maxWidth=`${i.maxWidth}px`),i.minHeight!==void 0&&(e.minHeight=`${i.minHeight}px`),i.maxHeight!==void 0&&(e.maxHeight=`${i.maxHeight}px`),i.backgroundColor&&(e.backgroundColor=i.backgroundColor),i.borderRadius!==void 0&&(e.borderRadius=`${i.borderRadius}px`),i.borderTopLeftRadius!==void 0&&(e.borderTopLeftRadius=`${i.borderTopLeftRadius}px`),i.borderTopRightRadius!==void 0&&(e.borderTopRightRadius=`${i.borderTopRightRadius}px`),i.borderBottomLeftRadius!==void 0&&(e.borderBottomLeftRadius=`${i.borderBottomLeftRadius}px`),i.borderBottomRightRadius!==void 0&&(e.borderBottomRightRadius=`${i.borderBottomRightRadius}px`),i.opacity!==void 0&&(e.opacity=i.opacity),i.borderWidth!==void 0&&(e.borderWidth=`${i.borderWidth}px`),i.borderColor&&(e.borderColor=i.borderColor),i.borderTopWidth!==void 0&&(e.borderTopWidth=`${i.borderTopWidth}px`),i.borderRightWidth!==void 0&&(e.borderRightWidth=`${i.borderRightWidth}px`),i.borderBottomWidth!==void 0&&(e.borderBottomWidth=`${i.borderBottomWidth}px`),i.borderLeftWidth!==void 0&&(e.borderLeftWidth=`${i.borderLeftWidth}px`),i.position&&(e.position=i.position),i.top!==void 0&&(e.top=`${i.top}px`),i.right!==void 0&&(e.right=`${i.right}px`),i.bottom!==void 0&&(e.bottom=`${i.bottom}px`),i.left!==void 0&&(e.left=`${i.left}px`),i.zIndex!==void 0&&(e.zIndex=i.zIndex),i.transform&&(e.transform=i.transform);let t=i;return t.color&&(e.color=t.color),t.fontSize!==void 0&&(e.fontSize=`${t.fontSize}px`),t.fontWeight&&(e.fontWeight=t.fontWeight),t.fontFamily&&(e.fontFamily=t.fontFamily),t.fontStyle&&(e.fontStyle=t.fontStyle),t.textAlign&&(e.textAlign=t.textAlign),t.textDecoration&&(e.textDecoration=t.textDecoration),t.lineHeight!==void 0&&(e.lineHeight=`${t.lineHeight}px`),t.letterSpacing!==void 0&&(e.letterSpacing=`${t.letterSpacing}px`),e}function k(i){return g(i)}function n(i){return k(i)?i():i!==null&&typeof i=="object"&&"value"in i&&"peek"in i?i.value:i}function b(i,e,t,r){if(!e)return;let a=Array.isArray(e)?e:[e];for(let o of a)if(!(!o||!o.type))switch(o.type){case "canvas-rect":D(i,o.props);break;case "canvas-circle":S(i,o.props);break;case "canvas-path":W(i,o.props);break;case "canvas-text":C(i,o.props);break;case "canvas-line":T(i,o.props);break;case "canvas-arc":v(i,o.props);break}}function D(i,e){let t=n(e.x),r=n(e.y),a=n(e.width),o=n(e.height),d=n(e.fill),f=n(e.stroke),p=n(e.strokeWidth),c=n(e.opacity);i.save(),c!==void 0&&(i.globalAlpha=c),d&&(i.fillStyle=d,i.fillRect(t,r,a,o)),f&&(i.strokeStyle=f,i.lineWidth=p||1,i.strokeRect(t,r,a,o)),i.restore();}function S(i,e){let t=n(e.x),r=n(e.y),a=n(e.radius),o=n(e.fill),d=n(e.stroke),f=n(e.strokeWidth),p=n(e.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.arc(t,r,a,0,2*Math.PI),o&&(i.fillStyle=o,i.fill()),d&&(i.strokeStyle=d,i.lineWidth=f||1,i.stroke()),i.restore();}function W(i,e){let t=n(e.d),r=n(e.fill),a=n(e.stroke),o=n(e.strokeWidth),d=n(e.opacity);i.save(),d!==void 0&&(i.globalAlpha=d);let f=new Path2D(t);r&&(i.fillStyle=r,i.fill(f)),a&&(i.strokeStyle=a,i.lineWidth=o||1,i.stroke(f)),i.restore();}function C(i,e){let t=n(e.x),r=n(e.y),a=n(e.text),o=n(e.fill),d=n(e.fontSize)||12,f=n(e.fontFamily)||"sans-serif",p=n(e.fontWeight)||"normal",c=n(e.textAlign)||"left",m=n(e.textBaseline)||"alphabetic";i.save(),i.font=`${p} ${d}px ${f}`,i.textAlign=c,i.textBaseline=m,o&&(i.fillStyle=o,i.fillText(a,t,r)),i.restore();}function T(i,e){let t=n(e.x1),r=n(e.y1),a=n(e.x2),o=n(e.y2),d=n(e.stroke)||"black",f=n(e.strokeWidth)||1,p=n(e.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.moveTo(t,r),i.lineTo(a,o),i.strokeStyle=d,i.lineWidth=f,i.stroke(),i.restore();}function v(i,e){let t=n(e.x),r=n(e.y),a=n(e.radius),o=n(e.startAngle),d=n(e.endAngle),f=n(e.counterclockwise)||false,p=n(e.fill),c=n(e.stroke),m=n(e.strokeWidth),h=n(e.opacity);i.save(),h!==void 0&&(i.globalAlpha=h),i.beginPath(),i.arc(t,r,a,o,d,f),p&&(i.fillStyle=p,i.fill()),c&&(i.strokeStyle=c,i.lineWidth=m||1,i.stroke()),i.restore();}function N(i){let{width:e,height:t,children:r,style:a,id:o,...d}=i;return {type:"canvas",props:{...d,id:o,width:e,height:t,style:x(a),ref:f=>{if(!f||typeof requestAnimationFrame>"u")return;let p=f.getContext("2d");p&&Promise.all([import('./effect-T2GVIS3T.mjs').then(c=>({effect:c.effect,onCleanup:c.onCleanup})),import('./state-SUVOJZYY.mjs').then(c=>({isSignal:c.isSignal}))]).then(([{effect:c,onCleanup:m},{isSignal:h}])=>{let g,R=()=>{g!==void 0&&cancelAnimationFrame(g),g=requestAnimationFrame(()=>{p.clearRect(0,0,e,t),b(p,r),g=void 0;});};c(()=>{let w=Array.isArray(r)?r:[r];for(let u of w)if(u&&u.props)for(let $ in u.props){let s=u.props[$];h(s)&&s();}R(),m(()=>{g!==void 0&&(cancelAnimationFrame(g),g=void 0);});});}).catch(c=>{console.error("[Flexium Canvas] Failed to load signal module:",c);});}},children:[]}}function V(i){return {type:"canvas-rect",props:i,children:[]}}function j(i){return {type:"canvas-circle",props:i,children:[]}}function M(i){return {type:"canvas-arc",props:i,children:[]}}function E(i){return {type:"canvas-line",props:i,children:[]}}function J(i){return {type:"canvas-path",props:i,children:[]}}function O(i){return {type:"canvas-text",props:i,children:[]}}export{x as a,n as b,b as c,N as d,V as e,j as f,M as g,E as h,J as i,O as j};//# sourceMappingURL=chunk-F23GIQDE.mjs.map
2
- //# sourceMappingURL=chunk-F23GIQDE.mjs.map
1
+ import {g}from'./chunk-BBNYMXE7.mjs';function x(i){if(!i)return {};let e={};i.display&&(e.display=i.display),i.flex!==void 0&&(e.flex=i.flex),i.flexDirection&&(e.flexDirection=i.flexDirection),i.flexWrap&&(e.flexWrap=i.flexWrap),i.justifyContent&&(e.justifyContent=i.justifyContent),i.alignItems&&(e.alignItems=i.alignItems),i.alignSelf&&(e.alignSelf=i.alignSelf),i.gap!==void 0&&(e.gap=`${i.gap}px`),i.padding!==void 0&&(e.padding=`${i.padding}px`),i.paddingTop!==void 0&&(e.paddingTop=`${i.paddingTop}px`),i.paddingRight!==void 0&&(e.paddingRight=`${i.paddingRight}px`),i.paddingBottom!==void 0&&(e.paddingBottom=`${i.paddingBottom}px`),i.paddingLeft!==void 0&&(e.paddingLeft=`${i.paddingLeft}px`),i.paddingHorizontal!==void 0&&(e.paddingLeft=`${i.paddingHorizontal}px`,e.paddingRight=`${i.paddingHorizontal}px`),i.paddingVertical!==void 0&&(e.paddingTop=`${i.paddingVertical}px`,e.paddingBottom=`${i.paddingVertical}px`),i.margin!==void 0&&(e.margin=`${i.margin}px`),i.marginTop!==void 0&&(e.marginTop=`${i.marginTop}px`),i.marginRight!==void 0&&(e.marginRight=`${i.marginRight}px`),i.marginBottom!==void 0&&(e.marginBottom=`${i.marginBottom}px`),i.marginLeft!==void 0&&(e.marginLeft=`${i.marginLeft}px`),i.marginHorizontal!==void 0&&(e.marginLeft=`${i.marginHorizontal}px`,e.marginRight=`${i.marginHorizontal}px`),i.marginVertical!==void 0&&(e.marginTop=`${i.marginVertical}px`,e.marginBottom=`${i.marginVertical}px`),i.width!==void 0&&(e.width=typeof i.width=="number"?`${i.width}px`:i.width),i.height!==void 0&&(e.height=typeof i.height=="number"?`${i.height}px`:i.height),i.minWidth!==void 0&&(e.minWidth=`${i.minWidth}px`),i.maxWidth!==void 0&&(e.maxWidth=`${i.maxWidth}px`),i.minHeight!==void 0&&(e.minHeight=`${i.minHeight}px`),i.maxHeight!==void 0&&(e.maxHeight=`${i.maxHeight}px`),i.backgroundColor&&(e.backgroundColor=i.backgroundColor),i.borderRadius!==void 0&&(e.borderRadius=`${i.borderRadius}px`),i.borderTopLeftRadius!==void 0&&(e.borderTopLeftRadius=`${i.borderTopLeftRadius}px`),i.borderTopRightRadius!==void 0&&(e.borderTopRightRadius=`${i.borderTopRightRadius}px`),i.borderBottomLeftRadius!==void 0&&(e.borderBottomLeftRadius=`${i.borderBottomLeftRadius}px`),i.borderBottomRightRadius!==void 0&&(e.borderBottomRightRadius=`${i.borderBottomRightRadius}px`),i.opacity!==void 0&&(e.opacity=i.opacity),i.borderWidth!==void 0&&(e.borderWidth=`${i.borderWidth}px`),i.borderColor&&(e.borderColor=i.borderColor),i.borderTopWidth!==void 0&&(e.borderTopWidth=`${i.borderTopWidth}px`),i.borderRightWidth!==void 0&&(e.borderRightWidth=`${i.borderRightWidth}px`),i.borderBottomWidth!==void 0&&(e.borderBottomWidth=`${i.borderBottomWidth}px`),i.borderLeftWidth!==void 0&&(e.borderLeftWidth=`${i.borderLeftWidth}px`),i.position&&(e.position=i.position),i.top!==void 0&&(e.top=`${i.top}px`),i.right!==void 0&&(e.right=`${i.right}px`),i.bottom!==void 0&&(e.bottom=`${i.bottom}px`),i.left!==void 0&&(e.left=`${i.left}px`),i.zIndex!==void 0&&(e.zIndex=i.zIndex),i.transform&&(e.transform=i.transform);let t=i;return t.color&&(e.color=t.color),t.fontSize!==void 0&&(e.fontSize=`${t.fontSize}px`),t.fontWeight&&(e.fontWeight=t.fontWeight),t.fontFamily&&(e.fontFamily=t.fontFamily),t.fontStyle&&(e.fontStyle=t.fontStyle),t.textAlign&&(e.textAlign=t.textAlign),t.textDecoration&&(e.textDecoration=t.textDecoration),t.lineHeight!==void 0&&(e.lineHeight=`${t.lineHeight}px`),t.letterSpacing!==void 0&&(e.letterSpacing=`${t.letterSpacing}px`),e}function k(i){return g(i)}function n(i){return k(i)?i():i!==null&&typeof i=="object"&&"value"in i&&"peek"in i?i.value:i}function b(i,e,t,r){if(!e)return;let a=Array.isArray(e)?e:[e];for(let o of a)if(!(!o||!o.type))switch(o.type){case "canvas-rect":D(i,o.props);break;case "canvas-circle":S(i,o.props);break;case "canvas-path":W(i,o.props);break;case "canvas-text":C(i,o.props);break;case "canvas-line":T(i,o.props);break;case "canvas-arc":v(i,o.props);break}}function D(i,e){let t=n(e.x),r=n(e.y),a=n(e.width),o=n(e.height),d=n(e.fill),f=n(e.stroke),p=n(e.strokeWidth),c=n(e.opacity);i.save(),c!==void 0&&(i.globalAlpha=c),d&&(i.fillStyle=d,i.fillRect(t,r,a,o)),f&&(i.strokeStyle=f,i.lineWidth=p||1,i.strokeRect(t,r,a,o)),i.restore();}function S(i,e){let t=n(e.x),r=n(e.y),a=n(e.radius),o=n(e.fill),d=n(e.stroke),f=n(e.strokeWidth),p=n(e.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.arc(t,r,a,0,2*Math.PI),o&&(i.fillStyle=o,i.fill()),d&&(i.strokeStyle=d,i.lineWidth=f||1,i.stroke()),i.restore();}function W(i,e){let t=n(e.d),r=n(e.fill),a=n(e.stroke),o=n(e.strokeWidth),d=n(e.opacity);i.save(),d!==void 0&&(i.globalAlpha=d);let f=new Path2D(t);r&&(i.fillStyle=r,i.fill(f)),a&&(i.strokeStyle=a,i.lineWidth=o||1,i.stroke(f)),i.restore();}function C(i,e){let t=n(e.x),r=n(e.y),a=n(e.text),o=n(e.fill),d=n(e.fontSize)||12,f=n(e.fontFamily)||"sans-serif",p=n(e.fontWeight)||"normal",c=n(e.textAlign)||"left",m=n(e.textBaseline)||"alphabetic";i.save(),i.font=`${p} ${d}px ${f}`,i.textAlign=c,i.textBaseline=m,o&&(i.fillStyle=o,i.fillText(a,t,r)),i.restore();}function T(i,e){let t=n(e.x1),r=n(e.y1),a=n(e.x2),o=n(e.y2),d=n(e.stroke)||"black",f=n(e.strokeWidth)||1,p=n(e.opacity);i.save(),p!==void 0&&(i.globalAlpha=p),i.beginPath(),i.moveTo(t,r),i.lineTo(a,o),i.strokeStyle=d,i.lineWidth=f,i.stroke(),i.restore();}function v(i,e){let t=n(e.x),r=n(e.y),a=n(e.radius),o=n(e.startAngle),d=n(e.endAngle),f=n(e.counterclockwise)||false,p=n(e.fill),c=n(e.stroke),m=n(e.strokeWidth),h=n(e.opacity);i.save(),h!==void 0&&(i.globalAlpha=h),i.beginPath(),i.arc(t,r,a,o,d,f),p&&(i.fillStyle=p,i.fill()),c&&(i.strokeStyle=c,i.lineWidth=m||1,i.stroke()),i.restore();}function N(i){let{width:e,height:t,children:r,style:a,id:o,...d}=i;return {type:"canvas",props:{...d,id:o,width:e,height:t,style:x(a),ref:f=>{if(!f||typeof requestAnimationFrame>"u")return;let p=f.getContext("2d");p&&Promise.all([import('./effect-T2GVIS3T.mjs').then(c=>({effect:c.effect,onCleanup:c.onCleanup})),import('./state-RYKSC35A.mjs').then(c=>({isSignal:c.isSignal}))]).then(([{effect:c,onCleanup:m},{isSignal:h}])=>{let g,R=()=>{g!==void 0&&cancelAnimationFrame(g),g=requestAnimationFrame(()=>{p.clearRect(0,0,e,t),b(p,r),g=void 0;});};c(()=>{let w=Array.isArray(r)?r:[r];for(let u of w)if(u&&u.props)for(let $ in u.props){let s=u.props[$];h(s)&&s();}R(),m(()=>{g!==void 0&&(cancelAnimationFrame(g),g=void 0);});});}).catch(c=>{console.error("[Flexium Canvas] Failed to load signal module:",c);});}},children:[]}}function V(i){return {type:"canvas-rect",props:i,children:[]}}function j(i){return {type:"canvas-circle",props:i,children:[]}}function M(i){return {type:"canvas-arc",props:i,children:[]}}function E(i){return {type:"canvas-line",props:i,children:[]}}function J(i){return {type:"canvas-path",props:i,children:[]}}function O(i){return {type:"canvas-text",props:i,children:[]}}export{x as a,n as b,b as c,N as d,V as e,j as f,M as g,E as h,J as i,O as j};//# sourceMappingURL=chunk-QZIX4FXS.mjs.map
2
+ //# sourceMappingURL=chunk-QZIX4FXS.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","m","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"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","file":"chunk-F23GIQDE.mjs","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/state'\nimport type { StateValue } from '../../core/state'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | StateValue<T>): value is StateValue<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | StateValue<T>): T {\n // Check for real signals first (have STATE_SIGNAL)\n if (isSignal(value)) {\n return (value as StateValue<T>)()\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Check if effect is available before trying to import\n // Import effect and onCleanup dynamically to avoid circular deps\n Promise.all([\n import('../../core/effect').then(m => ({ effect: m.effect, onCleanup: m.onCleanup })),\n import('../../core/state').then(m => ({ isSignal: m.isSignal }))\n ])\n .then(([{ effect, onCleanup }, { isSignal }]) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void (value as any)() // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/utils.ts","../src/primitives/canvas/utils.ts","../src/primitives/canvas/renderer.ts","../src/primitives/canvas/Canvas.ts","../src/primitives/canvas/DrawRect.ts","../src/primitives/canvas/DrawCircle.ts","../src/primitives/canvas/DrawArc.ts","../src/primitives/canvas/DrawLine.ts","../src/primitives/canvas/DrawPath.ts","../src/primitives/canvas/DrawText.ts"],"names":["normalizeStyle","style","css","textStyle","isSignal","value","unwrapSignal","renderCanvasChildren","ctx","children","_width","_height","childArray","child","renderRect","renderCircle","renderPath","renderText","renderLine","renderArc","props","x","y","width","height","fill","stroke","strokeWidth","opacity","radius","d","path","text","fontSize","fontFamily","fontWeight","textAlign","textBaseline","x1","y1","x2","y2","startAngle","endAngle","counterclockwise","Canvas","id","rest","canvas","m","effect","onCleanup","rafId","scheduleRender","key","err","DrawRect","DrawCircle","DrawArc","DrawLine","DrawPath","DrawText"],"mappings":"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","file":"chunk-QZIX4FXS.mjs","sourcesContent":["/**\n * Primitive utilities\n */\n\nimport type { CommonStyle, TextStyle } from './types'\n\n/**\n * Normalize CommonStyle to CSS properties\n */\nexport function normalizeStyle(\n style?: CommonStyle | TextStyle\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n): Record<string, any> {\n if (!style) return {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const css: Record<string, any> = {}\n\n // Layout\n if (style.display) css.display = style.display\n if (style.flex !== undefined) css.flex = style.flex\n if (style.flexDirection) css.flexDirection = style.flexDirection\n if (style.flexWrap) css.flexWrap = style.flexWrap\n if (style.justifyContent) css.justifyContent = style.justifyContent\n if (style.alignItems) css.alignItems = style.alignItems\n if (style.alignSelf) css.alignSelf = style.alignSelf\n if (style.gap !== undefined) css.gap = `${style.gap}px`\n\n // Spacing - padding\n if (style.padding !== undefined) css.padding = `${style.padding}px`\n if (style.paddingTop !== undefined) css.paddingTop = `${style.paddingTop}px`\n if (style.paddingRight !== undefined)\n css.paddingRight = `${style.paddingRight}px`\n if (style.paddingBottom !== undefined)\n css.paddingBottom = `${style.paddingBottom}px`\n if (style.paddingLeft !== undefined)\n css.paddingLeft = `${style.paddingLeft}px`\n if (style.paddingHorizontal !== undefined) {\n css.paddingLeft = `${style.paddingHorizontal}px`\n css.paddingRight = `${style.paddingHorizontal}px`\n }\n if (style.paddingVertical !== undefined) {\n css.paddingTop = `${style.paddingVertical}px`\n css.paddingBottom = `${style.paddingVertical}px`\n }\n\n // Spacing - margin\n if (style.margin !== undefined) css.margin = `${style.margin}px`\n if (style.marginTop !== undefined) css.marginTop = `${style.marginTop}px`\n if (style.marginRight !== undefined)\n css.marginRight = `${style.marginRight}px`\n if (style.marginBottom !== undefined)\n css.marginBottom = `${style.marginBottom}px`\n if (style.marginLeft !== undefined) css.marginLeft = `${style.marginLeft}px`\n if (style.marginHorizontal !== undefined) {\n css.marginLeft = `${style.marginHorizontal}px`\n css.marginRight = `${style.marginHorizontal}px`\n }\n if (style.marginVertical !== undefined) {\n css.marginTop = `${style.marginVertical}px`\n css.marginBottom = `${style.marginVertical}px`\n }\n\n // Sizing\n if (style.width !== undefined)\n css.width =\n typeof style.width === 'number' ? `${style.width}px` : style.width\n if (style.height !== undefined)\n css.height =\n typeof style.height === 'number' ? `${style.height}px` : style.height\n if (style.minWidth !== undefined) css.minWidth = `${style.minWidth}px`\n if (style.maxWidth !== undefined) css.maxWidth = `${style.maxWidth}px`\n if (style.minHeight !== undefined) css.minHeight = `${style.minHeight}px`\n if (style.maxHeight !== undefined) css.maxHeight = `${style.maxHeight}px`\n\n // Visual\n if (style.backgroundColor) css.backgroundColor = style.backgroundColor\n if (style.borderRadius !== undefined)\n css.borderRadius = `${style.borderRadius}px`\n if (style.borderTopLeftRadius !== undefined)\n css.borderTopLeftRadius = `${style.borderTopLeftRadius}px`\n if (style.borderTopRightRadius !== undefined)\n css.borderTopRightRadius = `${style.borderTopRightRadius}px`\n if (style.borderBottomLeftRadius !== undefined)\n css.borderBottomLeftRadius = `${style.borderBottomLeftRadius}px`\n if (style.borderBottomRightRadius !== undefined)\n css.borderBottomRightRadius = `${style.borderBottomRightRadius}px`\n if (style.opacity !== undefined) css.opacity = style.opacity\n\n // Border\n if (style.borderWidth !== undefined)\n css.borderWidth = `${style.borderWidth}px`\n if (style.borderColor) css.borderColor = style.borderColor\n if (style.borderTopWidth !== undefined)\n css.borderTopWidth = `${style.borderTopWidth}px`\n if (style.borderRightWidth !== undefined)\n css.borderRightWidth = `${style.borderRightWidth}px`\n if (style.borderBottomWidth !== undefined)\n css.borderBottomWidth = `${style.borderBottomWidth}px`\n if (style.borderLeftWidth !== undefined)\n css.borderLeftWidth = `${style.borderLeftWidth}px`\n\n // Position\n if (style.position) css.position = style.position\n if (style.top !== undefined) css.top = `${style.top}px`\n if (style.right !== undefined) css.right = `${style.right}px`\n if (style.bottom !== undefined) css.bottom = `${style.bottom}px`\n if (style.left !== undefined) css.left = `${style.left}px`\n if (style.zIndex !== undefined) css.zIndex = style.zIndex\n\n // Transform\n if (style.transform) css.transform = style.transform\n\n // Text-specific (if TextStyle)\n const textStyle = style as TextStyle\n if (textStyle.color) css.color = textStyle.color\n if (textStyle.fontSize !== undefined) css.fontSize = `${textStyle.fontSize}px`\n if (textStyle.fontWeight) css.fontWeight = textStyle.fontWeight\n if (textStyle.fontFamily) css.fontFamily = textStyle.fontFamily\n if (textStyle.fontStyle) css.fontStyle = textStyle.fontStyle\n if (textStyle.textAlign) css.textAlign = textStyle.textAlign\n if (textStyle.textDecoration) css.textDecoration = textStyle.textDecoration\n if (textStyle.lineHeight !== undefined)\n css.lineHeight = `${textStyle.lineHeight}px`\n if (textStyle.letterSpacing !== undefined)\n css.letterSpacing = `${textStyle.letterSpacing}px`\n\n return css\n}\n","/**\n * Canvas utilities\n */\n\nimport { isSignal as coreIsSignal } from '../../core/state'\nimport type { StateValue } from '../../core/state'\n\n/**\n * Check if a value is a Signal\n */\nexport function isSignal<T>(value: T | StateValue<T>): value is StateValue<T> {\n // Use core isSignal which checks for SIGNAL_MARKER symbol\n // Signals are functions with properties, not plain objects\n return coreIsSignal(value)\n}\n\n/**\n * Unwrap a value that might be a Signal\n */\nexport function unwrapSignal<T>(value: T | StateValue<T>): T {\n // Check for real signals first (have STATE_SIGNAL)\n if (isSignal(value)) {\n return (value as StateValue<T>)()\n }\n // Handle signal-like objects (for testing) - duck typing\n // Check if it's an object with a 'value' property\n if (\n value !== null &&\n typeof value === 'object' &&\n 'value' in value &&\n 'peek' in value\n ) {\n return (value as any).value\n }\n return value\n}\n","/**\n * Canvas renderer - renders canvas primitives to canvas context\n */\n\nimport type {\n DrawRectProps,\n DrawCircleProps,\n DrawPathProps,\n DrawTextProps,\n DrawLineProps,\n DrawArcProps,\n} from '../types'\nimport { unwrapSignal } from './utils'\n\n/**\n * Render canvas children to context\n */\nexport function renderCanvasChildren(\n ctx: CanvasRenderingContext2D,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n children: any,\n _width: number,\n _height: number\n): void {\n if (!children) return\n\n const childArray = Array.isArray(children) ? children : [children]\n\n for (const child of childArray) {\n if (!child || !child.type) continue\n\n switch (child.type) {\n case 'canvas-rect':\n renderRect(ctx, child.props)\n break\n case 'canvas-circle':\n renderCircle(ctx, child.props)\n break\n case 'canvas-path':\n renderPath(ctx, child.props)\n break\n case 'canvas-text':\n renderText(ctx, child.props)\n break\n case 'canvas-line':\n renderLine(ctx, child.props)\n break\n case 'canvas-arc':\n renderArc(ctx, child.props)\n break\n }\n }\n}\n\n/**\n * Render rectangle\n */\nfunction renderRect(ctx: CanvasRenderingContext2D, props: DrawRectProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const width = unwrapSignal(props.width)\n const height = unwrapSignal(props.height)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, width, height)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.strokeRect(x, y, width, height)\n }\n\n ctx.restore()\n}\n\n/**\n * Render circle\n */\nfunction renderCircle(\n ctx: CanvasRenderingContext2D,\n props: DrawCircleProps\n): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, 2 * Math.PI)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n\n/**\n * Render path\n */\nfunction renderPath(ctx: CanvasRenderingContext2D, props: DrawPathProps): void {\n const d = unwrapSignal(props.d)\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n // Parse SVG path (simplified - only supports basic commands)\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke(path)\n }\n\n ctx.restore()\n}\n\n/**\n * Render text\n */\nfunction renderText(ctx: CanvasRenderingContext2D, props: DrawTextProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const text = unwrapSignal(props.text)\n const fill = unwrapSignal(props.fill)\n const fontSize = unwrapSignal(props.fontSize) || 12\n const fontFamily = unwrapSignal(props.fontFamily) || 'sans-serif'\n const fontWeight = unwrapSignal(props.fontWeight) || 'normal'\n const textAlign = unwrapSignal(props.textAlign) || 'left'\n const textBaseline = unwrapSignal(props.textBaseline) || 'alphabetic'\n\n ctx.save()\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign\n ctx.textBaseline = textBaseline\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n }\n\n ctx.restore()\n}\n\n/**\n * Render line\n */\nfunction renderLine(ctx: CanvasRenderingContext2D, props: DrawLineProps): void {\n const x1 = unwrapSignal(props.x1)\n const y1 = unwrapSignal(props.y1)\n const x2 = unwrapSignal(props.x2)\n const y2 = unwrapSignal(props.y2)\n const stroke = unwrapSignal(props.stroke) || 'black'\n const strokeWidth = unwrapSignal(props.strokeWidth) || 1\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n\n ctx.restore()\n}\n\n/**\n * Render arc\n */\nfunction renderArc(ctx: CanvasRenderingContext2D, props: DrawArcProps): void {\n const x = unwrapSignal(props.x)\n const y = unwrapSignal(props.y)\n const radius = unwrapSignal(props.radius)\n const startAngle = unwrapSignal(props.startAngle)\n const endAngle = unwrapSignal(props.endAngle)\n const counterclockwise = unwrapSignal(props.counterclockwise) || false\n const fill = unwrapSignal(props.fill)\n const stroke = unwrapSignal(props.stroke)\n const strokeWidth = unwrapSignal(props.strokeWidth)\n const opacity = unwrapSignal(props.opacity)\n\n ctx.save()\n\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\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 ctx.lineWidth = strokeWidth || 1\n ctx.stroke()\n }\n\n ctx.restore()\n}\n","/**\n * Canvas - Declarative canvas container with JSX drawing\n *\n * Supports Signal-based reactive rendering\n *\n * @example\n * ```tsx\n * const x = signal(50)\n *\n * <Canvas width={300} height={200}>\n * <Rect x={x} y={50} width={100} height={50} fill=\"blue\" />\n * <Circle x={150} y={100} radius={30} fill=\"red\" />\n * </Canvas>\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { CanvasProps } from '../types'\nimport { normalizeStyle } from '../utils'\nimport { renderCanvasChildren } from './renderer'\n\nexport function Canvas(props: CanvasProps): FNode {\n const { width, height, children, style, id, ...rest } = props\n\n return {\n type: 'canvas',\n props: {\n ...rest,\n id,\n width,\n height,\n style: normalizeStyle(style),\n // Attach canvas renderer when element is mounted\n ref: (canvas: HTMLCanvasElement | null) => {\n if (!canvas) return\n\n // SSR guard: skip canvas rendering on server\n if (typeof requestAnimationFrame === 'undefined') return\n\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n // Check if effect is available before trying to import\n // Import effect and onCleanup dynamically to avoid circular deps\n Promise.all([\n import('../../core/effect').then(m => ({ effect: m.effect, onCleanup: m.onCleanup })),\n import('../../core/state').then(m => ({ isSignal: m.isSignal }))\n ])\n .then(([{ effect, onCleanup }, { isSignal }]) => {\n let rafId: number | undefined\n\n const scheduleRender = () => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n }\n\n rafId = requestAnimationFrame(() => {\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Render all children\n renderCanvasChildren(ctx, children, width, height)\n\n rafId = undefined\n })\n }\n\n effect(() => {\n // To track signal dependencies, we need to access them in the effect\n // Walk through children and touch any signals to track dependencies\n const childArray = Array.isArray(children) ? children : [children]\n for (const child of childArray) {\n if (child && child.props) {\n // Touch each prop to track signal dependencies\n for (const key in child.props) {\n const value = child.props[key]\n // If it's a signal, access its value to track it\n if (isSignal(value)) {\n void (value as any)() // Touch the signal to track dependency\n }\n }\n }\n }\n\n // Now schedule the actual render\n scheduleRender()\n\n // Cleanup RAF when effect is disposed\n onCleanup(() => {\n if (rafId !== undefined) {\n cancelAnimationFrame(rafId)\n rafId = undefined\n }\n })\n })\n })\n .catch((err) => {\n console.error('[Flexium Canvas] Failed to load signal module:', err)\n })\n },\n },\n children: [],\n }\n}\n","/**\n * DrawRect - Canvas rectangle primitive\n *\n * @example\n * ```tsx\n * <DrawRect x={10} y={10} width={100} height={50} fill=\"blue\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawRectProps } from '../types'\n\nexport function DrawRect(props: DrawRectProps): FNode {\n return {\n type: 'canvas-rect',\n props,\n children: [],\n }\n}\n","/**\n * DrawCircle - Canvas circle primitive\n *\n * @example\n * ```tsx\n * <DrawCircle x={100} y={100} radius={50} fill=\"red\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawCircleProps } from '../types'\n\nexport function DrawCircle(props: DrawCircleProps): FNode {\n return {\n type: 'canvas-circle',\n props,\n children: [],\n }\n}\n","/**\n * DrawArc - Canvas arc primitive\n *\n * @example\n * ```tsx\n * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill=\"green\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawArcProps } from '../types'\n\nexport function DrawArc(props: DrawArcProps): FNode {\n return {\n type: 'canvas-arc',\n props,\n children: [],\n }\n}\n","/**\n * DrawLine - Canvas line primitive\n *\n * @example\n * ```tsx\n * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawLineProps } from '../types'\n\nexport function DrawLine(props: DrawLineProps): FNode {\n return {\n type: 'canvas-line',\n props,\n children: [],\n }\n}\n","/**\n * DrawPath - Canvas path primitive\n *\n * @example\n * ```tsx\n * <DrawPath d=\"M 10 10 L 100 100\" stroke=\"black\" strokeWidth={2} />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawPathProps } from '../types'\n\nexport function DrawPath(props: DrawPathProps): FNode {\n return {\n type: 'canvas-path',\n props,\n children: [],\n }\n}\n","/**\n * DrawText - Canvas text primitive\n *\n * @example\n * ```tsx\n * <DrawText x={50} y={50} text=\"Hello Canvas\" fontSize={20} fill=\"black\" />\n * ```\n */\n\nimport type { FNode } from '../../types'\nimport type { DrawTextProps } from '../types'\n\nexport function DrawText(props: DrawTextProps): FNode {\n return {\n type: 'canvas-text',\n props,\n children: [],\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkYPVRQKMW_js=require('./chunk-YPVRQKMW.js'),chunkWWEWRI6S_js=require('./chunk-WWEWRI6S.js'),chunkGYDP6MFV_js=require('./chunk-GYDP6MFV.js');function U(e){return e&&(typeof e=="object"||typeof e=="function")?g in e:false}function X(e){return typeof e=="function"?(e()):U(e)?e():e}function Y(e,t){let[a,n]=d(void 0),[r,o]=d(void 0),[u,s]=d(false),[l,y]=d("unresolved"),p=null,x=async(c,P=false)=>{P?(y("refreshing"),s(true)):(y("pending"),s(true)),o(void 0);let C=t(c,{value:a.peek(),refetching:P});p=C;try{let T=await C;p===C&&(n(T),y("ready"),s(!1));}catch(T){p===C&&(o(T),y("errored"),s(false));}};chunkWWEWRI6S_js.c(()=>{let c=X(e);x(c,false);});let v=function(){return a()};return Object.defineProperties(v,{value:{get:()=>a(),enumerable:true,configurable:true},loading:{get:()=>u(),enumerable:true,configurable:true},error:{get:()=>r(),enumerable:true,configurable:true},state:{get:()=>l(),enumerable:true,configurable:true},latest:{get:()=>a.peek(),enumerable:true,configurable:true},peek:{value:()=>a.peek(),enumerable:false,configurable:true},[g]:{value:v,enumerable:false,configurable:false}}),[v,{mutate:c=>n(c),refetch:()=>{let c=X(e);x(c,true);}}]}var m=new Map,w=new Map,b=new Map,h={enabled:true,maxIdleTime:300*1e3,checkInterval:60*1e3,minAccessCount:0},k=null;function M(){return k}function _(e){k=e;}(typeof window<"u"||typeof globalThis<"u")&&setTimeout(()=>{h.enabled&&!k&&(k=setInterval(E,h.checkInterval),k&&typeof k=="object"&&"unref"in k&&typeof k.unref=="function"&&k.unref());},0);var ge=1e4,te=false,Z=new WeakMap;function R(e){if(typeof e=="string")return e;let t=Z.get(e);if(t!==void 0)return t;try{let a=JSON.stringify(e);return Z.set(e,a),a}catch{return String(e)}}function ee(e,t){t&&(w.has(t)||w.set(t,new Set),w.get(t).add(e));}function N(e,t){if(!t)return;let a=w.get(t);a&&(a.delete(e),a.size===0&&w.delete(t));}function I(e,t,a){let n=Date.now(),r=b.get(e);r?(r.lastAccessed=n,r.accessCount++,r.referenceCount++,t&&r.namespace!==t&&(r.namespace&&N(e,r.namespace),r.namespace=t,ee(e,t))):(b.set(e,{key:e,namespace:t,createdAt:n,lastAccessed:n,accessCount:1,referenceCount:1,signalRef:a&&typeof WeakRef<"u"?new WeakRef(a):void 0}),ee(e,t));}var H=null;function ne(e){H=e;}function E(){if(!h.enabled||!H)return;let e=Date.now(),t=[];for(let[a,n]of b.entries()){if(n.signalRef&&typeof WeakRef<"u"&&!n.signalRef.deref()){t.push(a);continue}e-n.lastAccessed>h.maxIdleTime&&n.referenceCount===0&&n.accessCount>=h.minAccessCount&&t.push(a);}for(let a of t)H(a);t.length>0&&typeof process<"u"&&process.env?.NODE_ENV!=="production"&&console.log(`[Flexium] Auto-cleaned ${t.length} idle states`);}function ae(){return te}function W(e){te=e;}function re(){return ge}var z=0,f=new WeakMap,oe=new WeakMap,be=new WeakMap;function S(e,t,a){let n=oe.get(e);n||(n=new Map,oe.set(e,n));let r=n.get(t);if(!r){let o=a!==void 0?a:Reflect.get(e,t);r=O(o),n.set(t,r);}return r}function O(e,t,a){let n={_value:e,subsHead:void 0,depsHead:void 0,version:0,nodeType:t?2:1,computeFn:t,flags:t?12:0,lastCleanEpoch:0,key:a},r=function(){let s=f.get(r),l=chunkGYDP6MFV_js.d();return l&&l!==r&&chunkWWEWRI6S_js.a.connect(r,l),s.computeFn?A(s,r):s._value},o=r;return f.set(o,n),a&&be.set(o,a),Object.defineProperty(o,"subsHead",{get:()=>f.get(o).subsHead,set:s=>{f.get(o).subsHead=s;},enumerable:false,configurable:true}),Object.defineProperty(o,"depsHead",{get:()=>f.get(o).depsHead,set:s=>{f.get(o).depsHead=s;},enumerable:false,configurable:true}),Object.defineProperty(o,"version",{get:()=>f.get(o).version,enumerable:false,configurable:true}),Object.defineProperty(o,"nodeType",{get:()=>f.get(o).nodeType,enumerable:false,configurable:true}),Object.defineProperty(o,"flags",{get:()=>f.get(o).flags||0,set:s=>{f.get(o).flags=s;},enumerable:false,configurable:true}),o.peek=()=>{let s=f.get(o);return s.computeFn?A(s,o,true):s._value},t||(o.set=s=>{let l=f.get(o),y=l._value,p=typeof s=="function"?s(y):s;l._value!==p&&(l._value=p,l.version=++z,K(l));}),o.execute=()=>{let s=f.get(o);s.computeFn&&(s.flags=(s.flags||0)|4|8,K(s));},o.notify=()=>{let s=f.get(o);K(s);},new Proxy(o,Se)}function A(e,t,a=false){if(!e.computeFn)return e._value;let n=e.flags||0,r=n&12;if(!a&&r===0)return e._value;if((n&4)===0&&(n&8)!==0&&!me(e))return e.flags=n&-9,e._value;e.flags=n&-13,chunkWWEWRI6S_js.a.disconnectDependencies(t);let o=chunkGYDP6MFV_js.d();chunkGYDP6MFV_js.e(t);try{let u=e.computeFn();e._value!==u&&(e._value=u,e.version=++z),e.lastCleanEpoch=z;}finally{chunkGYDP6MFV_js.e(o);}return e._value}function me(e){if(!e.depsHead)return true;let t=e.depsHead;for(;t;){let a=t.dep;if(a.version>(e.lastCleanEpoch||0))return true;if(a.nodeType===2){let n=f.get(a);if(((n.flags||0)&12)!==0){let o=a.version;if(A(n,a,true),a.version!==o&&a.version>(e.lastCleanEpoch||0))return true}}t=t.nextDep;}return false}function K(e){if(chunkYPVRQKMW_js.d()===0){if(e.subsHead){let t=false,a=e.subsHead;for(;a;){let n=a.sub;n.nodeType===2?n.execute&&n.execute():(chunkYPVRQKMW_js.b(n),t||(t=true,chunkYPVRQKMW_js.a())),a=a.nextSub;}}}else {let t=e.subsHead;for(;t;)t.sub&&chunkYPVRQKMW_js.c(t.sub),t=t.nextSub;}}var Se={get(e,t){let a=f.get(e);if(t===g)return e;if(a.key&&I(a.key),t==="peek")return e.peek;if(t==="set"&&!a.computeFn)return e.set;let n=a.computeFn?A(a,e):a._value,r=chunkGYDP6MFV_js.d();if(r&&r!==e&&chunkWWEWRI6S_js.a.connect(e,r),t===Symbol.toPrimitive||t==="valueOf")return ()=>n;if(t===Symbol.iterator&&Array.isArray(n))return S(n,"length")(),S(n,"iterate")(),n[Symbol.iterator].bind(n);if(t==="prototype"||t==="name"||t==="caller"||t==="arguments"){if(typeof n=="function")return n[t];if(n===null||typeof n!="object")return}if(n!==null&&typeof n=="object"){let u=Reflect.get(n,t);return typeof u=="function"?Array.isArray(n)&&["push","pop","shift","unshift","splice","sort","reverse"].includes(t)?function(...l){let y=u.apply(n,l),p=f.get(e),x=p.computeFn?A(p,e):p._value;return n===x&&(S(n,"length").set(n.length),S(n,"iterate")()),y}:Array.isArray(n)?u.bind(n):n[t].bind(n):(S(n,t,u)(),u!==null&&typeof u=="object"?ie(u):u)}let o=n[t];return typeof o=="function"?o.bind(n):o},set(e,t,a){let n=f.get(e);if(n.computeFn)throw new Error("Cannot set computed signal");let r=n._value;if(r!==null&&typeof r=="object"){let o=Reflect.set(r,t,a);return o&&S(r,t).set(a),o}return false},has(e,t){if(t===g)return true;let a=f.get(e),n=a.computeFn?A(a,e):a._value;return n===null?false:typeof n=="object"?Reflect.has(n,t):false},ownKeys(e){let t=f.get(e),a=t.computeFn?A(t,e):t._value;if(a===null||typeof a!="object")return [];Array.isArray(a)&&S(a,"length")(),S(a,"iterate")();let n=Reflect.ownKeys(a),r=Reflect.ownKeys(e),o=["prototype","name","length"],u=[...n];for(let s of o)r.includes(s)&&!u.includes(s)&&Reflect.getOwnPropertyDescriptor(e,s)&&u.push(s);return u},getPrototypeOf(e){let t=f.get(e),a=t.computeFn?A(t,e):t._value;return a!==null&&typeof a=="object"?Reflect.getPrototypeOf(a):Object.prototype},getOwnPropertyDescriptor(e,t){if(t===g)return {configurable:true,enumerable:false,value:e};let a=f.get(e),n=a.computeFn?A(a,e):a._value;if(t==="prototype"||t==="name"||t==="caller"||t==="arguments"){if(t==="prototype"){let o=Reflect.getOwnPropertyDescriptor(e,t);return o||void 0}if(n!==null&&typeof n=="object"){let o=Reflect.getOwnPropertyDescriptor(n,t);if(o)return {...o,configurable:true,enumerable:true}}if(typeof n=="function"){let o=Reflect.getOwnPropertyDescriptor(n,t);if(o)return {...o,configurable:true,enumerable:true}}return}if(n===null||typeof n!="object")return;let r=Reflect.getOwnPropertyDescriptor(n,t);if(r)return {...r,configurable:true,enumerable:true}}},ve={get(e,t,a){if(t===g)return e;let n=Reflect.get(e,t,a);return S(e,t,n)(),n!==null&&typeof n=="object"?ie(n):n},set(e,t,a,n){let r=Reflect.set(e,t,a,n);return r&&S(e,t).set(a),r},has(e,t){return t===g?true:Reflect.has(e,t)}},se=new WeakMap;function ie(e){let t=se.get(e);return t||(t=new Proxy(e,ve),se.set(e,t)),t}var ue=new WeakMap;function ce(e,t){if(typeof e=="object"&&e!==null){let a=ue.get(e);return a||(a=O(e,void 0,t),ue.set(e,a),a)}return O(e,void 0,t)}function j(e,t){return O(void 0,e,t)}function le(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&g in e?e[g]:null}var fe=null;function L(e){fe=e;}function de(){return fe}function Fe(){return {id:Symbol("component"),hookIndex:0,hooks:[]}}function He(e){e.hookIndex=0;}var g=Symbol.for("flexium.stateSignal");function B(e){return (typeof e=="object"||typeof e=="function")&&e!==null&&g in e}function Ke(e){return B(e)}function ze(e){return le(e)}function Le(e,t){return B(e)?e.peek()===t:false}function Be(e){return B(e)?!!e.peek():false}function Te(e,t){let a=de();if(a&&!t?.key){let i=a,c=i.hookIndex++;if(c<i.hooks.length)return i.hooks[c];let P=a;L(null);let C=d(e,t);return L(P),i.hooks.push(C),C}let n=t?.key,r=n?R(n):void 0,o=Array.isArray(n)&&n.length>0?String(n[0]):void 0,u=t?.params;if(r&&m.has(r)){let i=m.get(r);I(r,o,i.proxy);let c=[i.proxy];return i.setter&&c.push(i.setter),i.refetch&&c.push(i.refetch),i.status&&c.push(i.status),i.error&&c.push(i.error),c}let s,l,y,p,x;if(typeof e=="function"){let i=e,c=u!==void 0?()=>i(u):i,P;try{P=c();}catch{}if(i.constructor.name==="AsyncFunction"||P instanceof Promise){let[T,pe]=Y(c,async ye=>ye);y=pe.refetch,s=j(()=>T(),r),p=j(()=>T.loading?"loading":T.error?"error":T.state==="unresolved"?"idle":"success",r),x=j(()=>T.error,r);}else s=j(c,r);}else s=ce(e,r),l=i=>{let c=s[g];typeof i=="function"?c.set(i(c.peek())):c.set(i);};let v=[s];return l&&v.push(l),y&&(v.splice(1,0,y),p&&v.push(p),x&&v.push(x)),r&&(m.set(r,{proxy:s,setter:l,refetch:y,status:p,error:x,createdAt:Date.now(),lastAccessed:Date.now(),accessCount:1,referenceCount:1,key:r,namespace:o}),I(r,o,s),typeof process<"u"&&process.env?.NODE_ENV!=="production"&&!ae()&&m.size>=re()&&(W(true),console.warn(`[Flexium] Registry size warning: ${m.size}`))),v}var d=Te;d.delete=function(e){let t=R(e),a=b.get(t);return a?.namespace&&N(t,a.namespace),b.delete(t),m.delete(t)};d.clear=function(){m.clear(),w.clear(),b.clear(),W(false);};d.has=function(e){return m.has(R(e))};d.clearByPrefix=function(e){let t=R(e),a=0,n=[];for(let[r]of b.entries()){if(r===t){n.push(r);continue}if(t.endsWith("]")){let o=t.slice(0,-1);r.startsWith(o)&&r.length>o.length&&r[o.length]===","&&n.push(r);}else r.startsWith(t)&&n.push(r);}for(let r of n)d.delete(r)&&a++;return a};d.getStats=function(){let e={};for(let[a,n]of w.entries())e[a]=n.size;let t=0;for(let a of b.values())t+=a.accessCount;return {total:m.size,byNamespace:e,topNamespaces:Object.entries(e).map(([a,n])=>({namespace:a,count:n})).sort((a,n)=>n.count-a.count).slice(0,10),averageAccessCount:b.size?t/b.size:0}};d.getNamespaceStats=function(e){let t=R(e),a=Array.isArray(e)&&e.length>0?String(e[0]):t,n=[],r=0;for(let[o,u]of b.entries()){let s=false;if(o===t)s=true;else if(t.endsWith("]")){let l=t.slice(0,-1);o.startsWith(l)&&o.length>l.length&&o[l.length]===","&&(s=true);}else o.startsWith(t)&&(s=true);s&&(n.push({key:o,accessCount:u.accessCount,createdAt:u.createdAt}),r+=u.accessCount);}return {namespace:a,count:n.length,totalAccessCount:r,averageAccessCount:n.length?r/n.length:0,states:n}};Object.defineProperty(d,"size",{get:()=>m.size,enumerable:true});d.enableAutoCleanup=e=>{Object.assign(h,e,{enabled:true});let t=M();t&&clearInterval(t);let a=setInterval(E,h.checkInterval);_(a);};d.disableAutoCleanup=()=>{h.enabled=false;let e=M();e&&clearInterval(e),_(null);};Object.defineProperty(d,"isAutoCleanupEnabled",{get:()=>h.enabled,enumerable:true});ne(e=>d.delete(e));function Ge(e){return {current:e}}exports.a=Y;exports.b=L;exports.c=Fe;exports.d=He;exports.e=g;exports.f=B;exports.g=Ke;exports.h=ze;exports.i=Le;exports.j=Be;exports.k=d;exports.l=Ge;//# sourceMappingURL=chunk-XJHWMHKF.js.map
2
+ //# sourceMappingURL=chunk-XJHWMHKF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/resource.ts","../src/core/registry.ts","../src/core/proxy.ts","../src/core/component.ts","../src/core/state.ts"],"names":["isStateValue","value","STATE_SIGNAL","getValue","source","createResource","fetcher","setValue","state","error","setError","loading","setLoading","resourceState","setResourceState","latestPromise","load","currentSource","refetching","currentPromise","result","err","effect","resource","v","globalStateRegistry","namespaceRegistry","stateMetadata","autoCleanupConfig","autoCleanupInterval","getAutoCleanupInterval","setAutoCleanupInterval","interval","performAutoCleanup","DEV_WARNING_THRESHOLD","hasWarnedAboutSize","keyCache","serializeKey","key","cached","serialized","registerStateInNamespace","namespace","unregisterStateFromNamespace","set","updateStateMetadata","signalRefTarget","now","existing","deleteStateCallback","setDeleteStateCallback","callback","keysToRemove","metadata","getHasWarnedAboutSize","setHasWarnedAboutSize","getDevWarningThreshold","globalVersion","proxyMetadata","depMap","signalToKeyMap","getDep","target","initialValue","deps","dep","currentVal","createReactiveProxy","computeFn","targetFn","meta","activeEffect","getActiveEffect","Graph","getComputedValue","newValue","prevValue","notifySubscribers","signalProxyHandlers","force","flags","dirtyOrStale","needsRefetch","prevEffect","setActiveEffect","link","depMeta","oldVersion","getBatchDepth","hasScheduled","sub","addToAutoBatch","scheduleAutoBatch","addToBatch","prop","innerValue","val","args","currentValue","createNestedProxy","success","keys","targetKeys","functionProps","targetDesc","innerDesc","desc","nestedHandlers","receiver","nestedProxyCache","proxy","reactiveProxyCache","createSignalProxy","createComputedProxy","getProxyFromStateValue","stateValue","currentComponent","setCurrentComponent","instance","getCurrentComponent","createComponentInstance","resetHookIndex","isSignal","getStateSignal","equals","isTruthy","stateImplementation","initialValueOrFetcher","options","comp","hookIndex","saved","res","rawKey","params","entry","setter","refetch","statusProxy","errorProxy","originalFn","fn","testResult","actions","proxySignal","sKey","prefix","prefixStr","cleared","keysToDelete","raw","k","byNamespace","ns","totalAccess","m","n","c","b","pStr","states","matched","newInterval","ref","initial"],"mappings":"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","file":"chunk-XJHWMHKF.js","sourcesContent":["/**\n * Resource API - Proxy-based async state management\n * \n * Creates a resource for handling async data with loading/error states\n */\n\nimport { state, type StateValue } from './state'\nimport { effect } from './effect'\nimport { STATE_SIGNAL } from './state'\n\n/**\n * Resource interface for async data\n */\nexport interface Resource<T> {\n (): T | undefined\n value: T | undefined\n loading: boolean\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error: any\n state: 'unresolved' | 'pending' | 'ready' | 'refreshing' | 'errored'\n latest: T | undefined\n peek(): T | undefined\n}\n\n/**\n * Helper to check if a value is a state value (Proxy-based)\n */\nfunction isStateValue(value: unknown): value is StateValue<unknown> {\n if (value && (typeof value === 'object' || typeof value === 'function')) {\n return STATE_SIGNAL in (value as object)\n }\n return false\n}\n\n/**\n * Helper to get value from state or plain value\n */\nfunction getValue<T>(source: T | StateValue<T> | (() => T)): T {\n if (typeof source === 'function') {\n // Check if it's a state value (Proxy)\n if (isStateValue(source)) {\n return (source as StateValue<T>)()\n }\n // It's a plain function\n return (source as () => T)()\n }\n // It's a static value or state value\n if (isStateValue(source)) {\n return (source as StateValue<T>)()\n }\n return source\n}\n\n/**\n * Creates a resource for handling async data\n * @internal Use state(async () => ...) instead which returns [data, refetch, status, error]\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createResource<T, S = any>(\n source: S | StateValue<S> | (() => S),\n fetcher: (\n source: S,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n { value, refetching }: { value: T | undefined; refetching: any }\n ) => Promise<T>\n): [Resource<T>, { mutate: (v: T | undefined) => void; refetch: () => void }] {\n const [value, setValue] = state<T | undefined>(undefined)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [error, setError] = state<any>(undefined)\n const [loading, setLoading] = state<boolean>(false)\n const [resourceState, setResourceState] = state<\n 'unresolved' | 'pending' | 'ready' | 'refreshing' | 'errored'\n >('unresolved')\n\n let latestPromise: Promise<T> | null = null\n\n const load = async (currentSource: S, refetching = false) => {\n if (refetching) {\n setResourceState('refreshing')\n setLoading(true)\n } else {\n setResourceState('pending')\n setLoading(true)\n }\n setError(undefined)\n\n const currentPromise = fetcher(currentSource, { value: value.peek(), refetching })\n latestPromise = currentPromise\n\n try {\n const result = await currentPromise\n if (latestPromise === currentPromise) {\n setValue(result)\n setResourceState('ready')\n setLoading(false)\n }\n } catch (err) {\n if (latestPromise === currentPromise) {\n setError(err)\n setResourceState('errored')\n setLoading(false)\n }\n }\n }\n\n // Track source changes\n effect(() => {\n const currentSource = getValue(source)\n load(currentSource, false)\n })\n\n // Create the resource object (read-only signal interface)\n const resource = function () {\n return value()\n } as unknown as Resource<T>\n\n Object.defineProperties(resource, {\n value: { get: () => value(), enumerable: true, configurable: true },\n loading: { get: () => loading(), enumerable: true, configurable: true },\n error: { get: () => error(), enumerable: true, configurable: true },\n state: { get: () => resourceState(), enumerable: true, configurable: true },\n latest: { get: () => value.peek(), enumerable: true, configurable: true },\n peek: { value: () => value.peek(), enumerable: false, configurable: true },\n // Expose STATE_SIGNAL for detection\n [STATE_SIGNAL]: { value: resource, enumerable: false, configurable: false }\n })\n\n const actions = {\n mutate: (v: T | undefined) => setValue(v),\n refetch: () => {\n const currentSource = getValue(source)\n load(currentSource, true)\n },\n }\n\n return [resource, actions]\n}\n","/**\n * Global State Registry & Metadata\n * \n * Manages global state registry, namespaces, metadata, and auto-cleanup\n */\n\nimport type { StateValue, StateAction, AsyncStatus, StateKey } from './state'\n\nexport interface RegistryEntry {\n proxy: StateValue<any> // Proxy itself is the signal\n setter: StateAction<any> | undefined\n refetch?: () => void\n status?: StateValue<AsyncStatus>\n error?: StateValue<unknown>\n key?: string\n namespace?: string\n\n // Metadata for tracking\n createdAt: number\n lastAccessed: number\n accessCount: number\n referenceCount: number\n}\n\nexport const globalStateRegistry = new Map<string, RegistryEntry>()\nexport const namespaceRegistry = new Map<string, Set<string>>()\n\nexport interface StateMetadata {\n key: string\n namespace?: string\n createdAt: number\n lastAccessed: number\n accessCount: number\n referenceCount: number\n signalRef?: WeakRef<any>\n}\n\nexport const stateMetadata = new Map<string, StateMetadata>()\n\nexport interface AutoCleanupConfig {\n enabled: boolean\n maxIdleTime: number\n checkInterval: number\n minAccessCount: number\n}\n\nexport let autoCleanupConfig: AutoCleanupConfig = {\n enabled: true,\n maxIdleTime: 5 * 60 * 1000,\n checkInterval: 60 * 1000,\n minAccessCount: 0,\n}\n\nlet autoCleanupInterval: AnyInterval | null = null\ntype AnyInterval = ReturnType<typeof setInterval>\n\nexport function getAutoCleanupInterval(): AnyInterval | null {\n return autoCleanupInterval\n}\n\nexport function setAutoCleanupInterval(interval: AnyInterval | null): void {\n autoCleanupInterval = interval\n}\n\nif (typeof window !== 'undefined' || typeof globalThis !== 'undefined') {\n setTimeout(() => {\n if (autoCleanupConfig.enabled && !autoCleanupInterval) {\n autoCleanupInterval = setInterval(performAutoCleanup, autoCleanupConfig.checkInterval)\n // Allow process to exit in Node.js environment even if interval is running\n if (autoCleanupInterval && typeof autoCleanupInterval === 'object' && 'unref' in autoCleanupInterval && typeof autoCleanupInterval.unref === 'function') {\n (autoCleanupInterval as any).unref()\n }\n }\n }, 0)\n}\n\nconst DEV_WARNING_THRESHOLD = 10000\nlet hasWarnedAboutSize = false\n\n/**\n * Helper Functions\n */\nconst keyCache = new WeakMap<readonly unknown[], string>()\n\nexport function serializeKey(key: StateKey): string {\n if (typeof key === 'string') return key\n const cached = keyCache.get(key)\n if (cached !== undefined) return cached\n try {\n const serialized = JSON.stringify(key)\n keyCache.set(key, serialized)\n return serialized\n } catch (error) {\n const fallback = String(key)\n return fallback\n }\n}\n\nexport function registerStateInNamespace(key: string, namespace?: string): void {\n if (!namespace) return\n if (!namespaceRegistry.has(namespace)) namespaceRegistry.set(namespace, new Set())\n namespaceRegistry.get(namespace)!.add(key)\n}\n\nexport function unregisterStateFromNamespace(key: string, namespace?: string): void {\n if (!namespace) return\n const set = namespaceRegistry.get(namespace)\n if (set) {\n set.delete(key)\n if (set.size === 0) namespaceRegistry.delete(namespace)\n }\n}\n\nexport function updateStateMetadata(key: string, namespace?: string, signalRefTarget?: any): void {\n const now = Date.now()\n const existing = stateMetadata.get(key)\n\n if (existing) {\n existing.lastAccessed = now\n existing.accessCount++\n existing.referenceCount++\n if (namespace && existing.namespace !== namespace) {\n if (existing.namespace) unregisterStateFromNamespace(key, existing.namespace)\n existing.namespace = namespace\n registerStateInNamespace(key, namespace)\n }\n } else {\n stateMetadata.set(key, {\n key,\n namespace,\n createdAt: now,\n lastAccessed: now,\n accessCount: 1,\n referenceCount: 1,\n signalRef: signalRefTarget && typeof WeakRef !== 'undefined' ? new WeakRef(signalRefTarget) : undefined\n })\n registerStateInNamespace(key, namespace)\n }\n}\n\n// Callback to delete state - set by state.ts to avoid circular dependency\nlet deleteStateCallback: ((key: string) => boolean) | null = null\n\nexport function setDeleteStateCallback(callback: (key: string) => boolean): void {\n deleteStateCallback = callback\n}\n\nexport function performAutoCleanup(): void {\n if (!autoCleanupConfig.enabled || !deleteStateCallback) return\n const now = Date.now()\n const keysToRemove: string[] = []\n\n for (const [key, metadata] of stateMetadata.entries()) {\n if (metadata.signalRef && typeof WeakRef !== 'undefined') {\n const sig = metadata.signalRef.deref()\n if (!sig) {\n keysToRemove.push(key)\n continue\n }\n }\n const idleTime = now - metadata.lastAccessed\n if (idleTime > autoCleanupConfig.maxIdleTime && metadata.referenceCount === 0 && metadata.accessCount >= autoCleanupConfig.minAccessCount) {\n keysToRemove.push(key)\n }\n }\n\n for (const key of keysToRemove) {\n deleteStateCallback(key)\n }\n\n if (keysToRemove.length > 0 && typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production') {\n console.log(`[Flexium] Auto-cleaned ${keysToRemove.length} idle states`)\n }\n}\n\nexport function getHasWarnedAboutSize(): boolean {\n return hasWarnedAboutSize\n}\n\nexport function setHasWarnedAboutSize(value: boolean): void {\n hasWarnedAboutSize = value\n}\n\nexport function getDevWarningThreshold(): number {\n return DEV_WARNING_THRESHOLD\n}\n","/**\n * Proxy-Centric Signaling Architecture\n * \n * Proxy directly stores values and manages dependency graph\n * No SignalNode/ComputedNode wrapper - Proxy IS the signal\n */\n\nimport { STATE_SIGNAL } from './state'\nimport { updateStateMetadata } from './registry'\nimport { Graph, type Link, type ISubscriber, type IObservable, SubscriberFlags, NodeType } from './graph'\nimport { getActiveEffect, setActiveEffect } from './owner'\nimport { scheduleAutoBatch, addToAutoBatch, addToBatch, getBatchDepth } from './sync'\n\n// Global version clock for epoch-based validation\nlet globalVersion = 0\n\n/**\n * Reactive Proxy Metadata\n * Stores all reactive state directly in Proxy metadata\n */\ninterface ReactiveMetadata {\n // Value storage\n _value: unknown\n\n // Graph state\n subsHead: Link | undefined\n depsHead: Link | undefined\n version: number\n\n // Node type\n nodeType: NodeType\n\n // Computed state (for computed proxies)\n computeFn?: () => unknown\n flags?: SubscriberFlags\n lastCleanEpoch?: number\n\n // Key for registry tracking\n key?: string\n}\n\nconst proxyMetadata = new WeakMap<object, ReactiveMetadata>()\n\n/**\n * Dependency Map: Stores signals for object properties.\n * Key: Target Object (The inner value)\n * Value: Map<PropertyKey, ReactiveProxy>\n */\nconst depMap = new WeakMap<object, Map<string | symbol, any>>()\nconst signalToKeyMap = new WeakMap<object, string>()\n\nfunction getDep(target: object, key: string | symbol, initialValue?: unknown): any {\n let deps = depMap.get(target)\n if (!deps) {\n deps = new Map()\n depMap.set(target, deps)\n }\n let dep = deps.get(key)\n if (!dep) {\n const currentVal = initialValue !== undefined ? initialValue : Reflect.get(target, key)\n dep = createReactiveProxy(currentVal)\n deps.set(key, dep)\n }\n return dep\n}\n\n/**\n * Reactive Proxy Target Interface\n * Extends function with IObservable/ISubscriber properties\n */\ninterface ReactiveTarget extends Function {\n // IObservable properties\n subsHead: Link | undefined\n version: number\n nodeType: NodeType\n notify(): void\n\n // ISubscriber properties (for computed)\n depsHead?: Link | undefined\n flags?: SubscriberFlags\n execute(): void\n\n // Proxy methods\n peek(): unknown\n set?(value: unknown | ((prev: unknown) => unknown)): void\n}\n\n/**\n * Create a reactive proxy that implements IObservable/ISubscriber\n */\nfunction createReactiveProxy<T>(initialValue: T, computeFn?: () => T, key?: string): ReactiveTarget {\n const metadata: ReactiveMetadata = {\n _value: initialValue,\n subsHead: undefined,\n depsHead: undefined,\n version: 0,\n nodeType: computeFn ? NodeType.Computed : NodeType.Signal,\n computeFn,\n flags: computeFn ? (SubscriberFlags.Dirty | SubscriberFlags.Stale) : 0,\n lastCleanEpoch: 0,\n key\n }\n\n // Create callable function target\n // We need to create the function first, then add properties\n const targetFn = function () {\n const meta = proxyMetadata.get(targetFn as any)!\n\n // Track dependency if in effect/computed\n const activeEffect = getActiveEffect()\n if (activeEffect && activeEffect !== (targetFn as any)) {\n Graph.connect(targetFn as any as IObservable, activeEffect)\n }\n\n if (meta.computeFn) {\n // Computed: lazy evaluation\n return getComputedValue(meta, targetFn as any as ReactiveTarget)\n }\n return meta._value\n } as unknown as ReactiveTarget\n\n const target = targetFn\n\n proxyMetadata.set(target as any, metadata)\n if (key) {\n signalToKeyMap.set(target as any, key)\n }\n\n // Make target implement IObservable/ISubscriber\n // Use non-enumerable properties to avoid issues with object spread\n Object.defineProperty(target, 'subsHead', {\n get: () => proxyMetadata.get(target as any)!.subsHead,\n set: (v) => { proxyMetadata.get(target as any)!.subsHead = v },\n enumerable: false,\n configurable: true\n })\n Object.defineProperty(target, 'depsHead', {\n get: () => proxyMetadata.get(target as any)!.depsHead,\n set: (v) => { proxyMetadata.get(target as any)!.depsHead = v },\n enumerable: false,\n configurable: true\n })\n Object.defineProperty(target, 'version', {\n get: () => proxyMetadata.get(target as any)!.version,\n enumerable: false,\n configurable: true\n })\n Object.defineProperty(target, 'nodeType', {\n get: () => proxyMetadata.get(target as any)!.nodeType,\n enumerable: false,\n configurable: true\n })\n Object.defineProperty(target, 'flags', {\n get: () => proxyMetadata.get(target as any)!.flags || 0,\n set: (v) => { proxyMetadata.get(target as any)!.flags = v },\n enumerable: false,\n configurable: true\n })\n\n // Add methods\n target.peek = () => {\n const meta = proxyMetadata.get(target as any)!\n if (meta.computeFn) {\n return getComputedValue(meta, target as any, true)\n }\n return meta._value\n }\n\n if (!computeFn) {\n target.set = (newValue: T | ((prev: T) => T)) => {\n const meta = proxyMetadata.get(target as any)!\n const prevValue = meta._value\n const value = typeof newValue === 'function' ? (newValue as (prev: T) => T)(prevValue as T) : newValue\n if (meta._value !== value) {\n meta._value = value\n meta.version = ++globalVersion\n notifySubscribers(meta)\n }\n }\n }\n\n target.execute = () => {\n const meta = proxyMetadata.get(target as any)!\n if (meta.computeFn) {\n meta.flags = (meta.flags || 0) | SubscriberFlags.Dirty | SubscriberFlags.Stale\n notifySubscribers(meta)\n }\n }\n\n // Add notify method for IObservable\n target.notify = () => {\n const meta = proxyMetadata.get(target as any)!\n notifySubscribers(meta)\n }\n\n const proxy = new Proxy(target, signalProxyHandlers) as any\n return proxy\n}\n\nfunction getComputedValue(meta: ReactiveMetadata, target: ReactiveTarget, force = false): unknown {\n if (!meta.computeFn) return meta._value\n\n const flags = meta.flags || 0\n const dirtyOrStale = flags & (SubscriberFlags.Dirty | SubscriberFlags.Stale)\n\n if (!force && dirtyOrStale === 0) {\n return meta._value\n }\n\n // Check if dependencies changed\n if ((flags & SubscriberFlags.Dirty) === 0 && (flags & SubscriberFlags.Stale) !== 0) {\n if (!needsRefetch(meta)) {\n meta.flags = flags & ~SubscriberFlags.Stale\n return meta._value\n }\n }\n\n // Re-compute\n meta.flags = flags & ~(SubscriberFlags.Dirty | SubscriberFlags.Stale)\n Graph.disconnectDependencies(target as ISubscriber)\n\n const prevEffect = getActiveEffect()\n setActiveEffect(target as ISubscriber)\n\n try {\n const newValue = meta.computeFn()\n if (meta._value !== newValue) {\n meta._value = newValue\n meta.version = ++globalVersion\n }\n meta.lastCleanEpoch = globalVersion\n } finally {\n setActiveEffect(prevEffect)\n }\n\n return meta._value\n}\n\nfunction needsRefetch(meta: ReactiveMetadata): boolean {\n if (!meta.depsHead) return true\n\n let link: Link | undefined = meta.depsHead\n while (link) {\n const dep = link.dep!\n if (dep.version > (meta.lastCleanEpoch || 0)) {\n return true\n }\n if (dep.nodeType === NodeType.Computed) {\n const depMeta = proxyMetadata.get(dep as any)!\n const flags = depMeta.flags || 0\n if ((flags & (SubscriberFlags.Dirty | SubscriberFlags.Stale)) !== 0) {\n const oldVersion = dep.version\n getComputedValue(depMeta, dep as any as ReactiveTarget, true)\n if (dep.version !== oldVersion && dep.version > (meta.lastCleanEpoch || 0)) {\n return true\n }\n }\n }\n link = link.nextDep\n }\n return false\n}\n\nfunction notifySubscribers(meta: ReactiveMetadata): void {\n if (getBatchDepth() === 0) {\n if (meta.subsHead) {\n let hasScheduled = false\n let link: Link | undefined = meta.subsHead\n\n while (link) {\n const sub = link.sub!\n if (sub.nodeType === NodeType.Computed) {\n if (sub.execute) sub.execute()\n } else {\n addToAutoBatch(sub)\n if (!hasScheduled) {\n hasScheduled = true\n scheduleAutoBatch()\n }\n }\n link = link.nextSub\n }\n }\n } else {\n let link = meta.subsHead\n while (link) {\n if (link.sub) addToBatch(link.sub)\n link = link.nextSub\n }\n }\n}\n\n/**\n * Proxy Handler for Reactive Proxies\n */\nconst signalProxyHandlers: ProxyHandler<ReactiveTarget> = {\n get(target, prop) {\n const meta = proxyMetadata.get(target as any)!\n\n // Direct access to underlying proxy\n if (prop === STATE_SIGNAL) return target\n\n // Access Tracking\n if (meta.key) updateStateMetadata(meta.key)\n\n // Expose peek method\n if (prop === 'peek') {\n return target.peek\n }\n\n // Expose set method for writable signals\n if (prop === 'set' && !meta.computeFn) {\n return target.set\n }\n\n // Get the current value (track dependency)\n const innerValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n\n // Track dependency if in effect/computed (before property access checks)\n const activeEffect = getActiveEffect()\n if (activeEffect && activeEffect !== (target as any)) {\n Graph.connect(target as IObservable, activeEffect)\n }\n\n // Enable primitive coercion (arithmetic operations)\n if (prop === Symbol.toPrimitive || prop === 'valueOf') {\n return () => innerValue\n }\n\n // Enable iteration (for arrays)\n if (prop === Symbol.iterator) {\n if (Array.isArray(innerValue)) {\n getDep(innerValue, 'length')()\n getDep(innerValue, 'iterate')()\n return (innerValue as any)[Symbol.iterator].bind(innerValue)\n }\n }\n\n // For function-specific properties on the target function itself, hide them\n // This ensures object spread only includes innerValue properties\n // Note: 'length' is NOT a function property - it's an array property, so we handle it separately\n // This check must come AFTER we've determined innerValue is an object\n if (prop === 'prototype' || prop === 'name' || prop === 'caller' || prop === 'arguments') {\n // Only return if innerValue itself is a function\n if (typeof innerValue === 'function') {\n return (innerValue as any)[prop]\n }\n // For non-function innerValue, return undefined to hide target function's properties\n // But only if innerValue is not an object (to avoid hiding object properties)\n if (innerValue === null || typeof innerValue !== 'object') {\n return undefined\n }\n // If innerValue is an object, continue to property access below\n }\n\n // Recursive Forwarding for object properties\n if (innerValue !== null && typeof innerValue === 'object') {\n // Get the property value from innerValue\n const val = Reflect.get(innerValue, prop)\n\n if (typeof val === 'function') {\n // Special handling for Array mutation methods\n if (Array.isArray(innerValue) && ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].includes(prop as string)) {\n return function (...args: any[]) {\n const result = (val as Function).apply(innerValue, args)\n const meta = proxyMetadata.get(target as any)!\n const currentValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n if (innerValue === currentValue) {\n const lengthDep = getDep(innerValue, 'length')\n lengthDep.set(innerValue.length)\n getDep(innerValue, 'iterate')()\n }\n return result\n }\n }\n if (Array.isArray(innerValue)) {\n return (val as Function).bind(innerValue)\n }\n return (innerValue as any)[prop].bind(innerValue)\n }\n\n // Track property access for reactivity (this creates/get a signal for the property)\n // Call the signal to track dependency\n const depSignal = getDep(innerValue, prop, val)\n depSignal() // Track dependency - this returns the signal's value\n\n // Create nested proxy for nested objects\n if (val !== null && typeof val === 'object') {\n return createNestedProxy(val)\n }\n // Return the actual property value from innerValue (not from signal)\n // The signal is only for tracking, we return the actual value\n return val\n }\n\n // Primitive property access (for primitives like numbers, strings)\n const val = (innerValue as any)[prop]\n return typeof val === 'function' ? val.bind(innerValue) : val\n },\n\n set(target, prop, newValue) {\n const meta = proxyMetadata.get(target as any)!\n if (meta.computeFn) {\n throw new Error('Cannot set computed signal')\n }\n\n const innerValue = meta._value\n if (innerValue !== null && typeof innerValue === 'object') {\n const success = Reflect.set(innerValue, prop, newValue)\n if (success) {\n getDep(innerValue, prop).set(newValue)\n }\n return success\n }\n return false\n },\n\n has(target, prop) {\n if (prop === STATE_SIGNAL) return true\n const meta = proxyMetadata.get(target as any)!\n const innerValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n if (innerValue === null) return false\n if (typeof innerValue === 'object') {\n return Reflect.has(innerValue, prop)\n }\n return false\n },\n\n ownKeys(target) {\n const meta = proxyMetadata.get(target as any)!\n const innerValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n\n if (innerValue === null || typeof innerValue !== 'object') {\n // For primitives, return empty array (no own keys)\n return []\n }\n\n if (Array.isArray(innerValue)) {\n getDep(innerValue, 'length')()\n getDep(innerValue, 'iterate')()\n } else {\n getDep(innerValue, 'iterate')()\n }\n\n // Return keys of innerValue (not target function)\n // This ensures object spread only includes innerValue properties\n // Note: Proxy spec requires ownKeys to match getOwnPropertyDescriptor\n // Since getOwnPropertyDescriptor returns descriptors for function properties (prototype, name, etc.),\n // we must include them in ownKeys to satisfy the Proxy spec\n // But we only include non-enumerable ones that getOwnPropertyDescriptor returns descriptors for\n const keys = Reflect.ownKeys(innerValue)\n const targetKeys = Reflect.ownKeys(target)\n // Add function properties that getOwnPropertyDescriptor returns descriptors for\n // These are non-enumerable so won't appear in object spread\n const functionProps = ['prototype', 'name', 'length']\n const result = [...keys]\n for (const prop of functionProps) {\n if (targetKeys.includes(prop) && !result.includes(prop)) {\n // Only add if getOwnPropertyDescriptor would return a descriptor for it\n const desc = Reflect.getOwnPropertyDescriptor(target, prop)\n if (desc) {\n result.push(prop)\n }\n }\n }\n return result\n },\n\n getPrototypeOf(target) {\n const meta = proxyMetadata.get(target as any)!\n const innerValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n\n if (innerValue !== null && typeof innerValue === 'object') {\n return Reflect.getPrototypeOf(innerValue)\n }\n\n // For primitives, return Object.prototype\n return Object.prototype\n },\n\n getOwnPropertyDescriptor(target, prop) {\n if (prop === STATE_SIGNAL) {\n return { configurable: true, enumerable: false, value: target }\n }\n\n const meta = proxyMetadata.get(target as any)!\n const innerValue = meta.computeFn ? getComputedValue(meta, target as any) : meta._value\n\n // Hide function-specific properties (prototype, name, etc.) from target function\n // Only expose properties from innerValue\n // This is critical: target is a function, but we want to expose innerValue's properties\n // Note: 'length' is NOT a function property - it's an array property, so we handle it separately\n if (prop === 'prototype' || prop === 'name' || prop === 'caller' || prop === 'arguments') {\n // For 'prototype', we must return a descriptor because target is a function\n // Return the actual function's prototype descriptor exactly as it is\n // IMPORTANT: We must preserve ALL descriptor properties exactly to match target\n if (prop === 'prototype') {\n const targetDesc = Reflect.getOwnPropertyDescriptor(target, prop)\n if (targetDesc) {\n // Return the descriptor exactly as it is - don't modify any properties\n return targetDesc\n }\n // If no descriptor exists, return undefined (not a descriptor)\n return undefined\n }\n // For other function properties (name, caller, arguments), check innerValue first\n // If innerValue has this property, return its descriptor (not the function's)\n if (innerValue !== null && typeof innerValue === 'object') {\n const innerDesc = Reflect.getOwnPropertyDescriptor(innerValue, prop)\n if (innerDesc) {\n // innerValue has this property, return its descriptor\n return {\n ...innerDesc,\n configurable: true,\n enumerable: true\n }\n }\n }\n // Only return descriptor if innerValue itself is a function (not the target function)\n if (typeof innerValue === 'function') {\n const desc = Reflect.getOwnPropertyDescriptor(innerValue, prop)\n if (desc) {\n return {\n ...desc,\n configurable: true,\n enumerable: true\n }\n }\n }\n // For other function properties, return undefined to hide function properties\n return undefined\n }\n\n if (innerValue === null || typeof innerValue !== 'object') {\n // For primitives, return undefined (no own properties)\n return undefined\n }\n\n // Return descriptor from innerValue (not from target function)\n // This ensures object spread works correctly\n const desc = Reflect.getOwnPropertyDescriptor(innerValue, prop)\n if (desc) {\n // Make sure descriptor is configurable and enumerable for spread syntax\n return {\n ...desc,\n configurable: true,\n enumerable: true\n }\n }\n\n // For properties that don't exist on innerValue, return undefined\n return undefined\n }\n}\n\nconst nestedHandlers: ProxyHandler<object> = {\n get(target, prop, receiver) {\n if (prop === STATE_SIGNAL) return target\n const val = Reflect.get(target, prop, receiver)\n getDep(target, prop, val)()\n if (val !== null && typeof val === 'object') {\n return createNestedProxy(val)\n }\n return val\n },\n set(target, prop, newValue, receiver) {\n const success = Reflect.set(target, prop, newValue, receiver)\n if (success) {\n getDep(target, prop).set(newValue)\n }\n return success\n },\n has(target, prop) {\n if (prop === STATE_SIGNAL) return true\n return Reflect.has(target, prop)\n }\n}\n\nconst nestedProxyCache = new WeakMap<object, any>()\n\nfunction createNestedProxy<T extends object>(target: T): T {\n let proxy = nestedProxyCache.get(target)\n if (!proxy) {\n proxy = new Proxy(target, nestedHandlers)\n nestedProxyCache.set(target, proxy)\n }\n return proxy\n}\n\n// Cache for Reactive Proxies (only for objects, primitives create new proxy each time)\nconst reactiveProxyCache = new WeakMap<object, any>()\n\nexport function createSignalProxy<T>(initialValue: T, key?: string): import('./state').StateValue<T> {\n // For objects, use cache. For primitives, always create new proxy\n if (typeof initialValue === 'object' && initialValue !== null) {\n let proxy = reactiveProxyCache.get(initialValue)\n if (proxy) return proxy as unknown as import('./state').StateValue<T>\n proxy = createReactiveProxy(initialValue, undefined, key)\n reactiveProxyCache.set(initialValue, proxy)\n return proxy as unknown as import('./state').StateValue<T>\n }\n\n // Primitives: always create new proxy (no caching)\n return createReactiveProxy(initialValue, undefined, key) as unknown as import('./state').StateValue<T>\n}\n\nexport function createComputedProxy<T>(computeFn: () => T, key?: string): import('./state').StateValue<T> {\n const proxy = createReactiveProxy(undefined as T, computeFn, key)\n return proxy as unknown as import('./state').StateValue<T>\n}\n\n// Helper to get underlying proxy from StateValue\nexport function getProxyFromStateValue(stateValue: unknown): any {\n if (typeof stateValue === 'object' || typeof stateValue === 'function') {\n if (stateValue !== null && STATE_SIGNAL in stateValue) {\n return (stateValue as any)[STATE_SIGNAL]\n }\n }\n return null\n}\n","/**\n * Component Hook System\n * \n * Manages component instances and hook state for state() API\n */\n\nexport interface ComponentInstance {\n id: symbol\n hookIndex: number\n hooks: unknown[]\n}\n\nlet currentComponent: ComponentInstance | null = null\n\nexport function setCurrentComponent(instance: ComponentInstance | null): void {\n currentComponent = instance\n}\n\nexport function getCurrentComponent(): ComponentInstance | null {\n return currentComponent\n}\n\nexport function createComponentInstance(): ComponentInstance {\n return {\n id: Symbol('component'),\n hookIndex: 0,\n hooks: [],\n }\n}\n\nexport function resetHookIndex(instance: ComponentInstance): void {\n instance.hookIndex = 0\n}\n","/**\n * Main State API\n * \n * Unified state() function that handles all state patterns:\n * - Local state (like useState)\n * - Global state (like Recoil atoms)\n * - Async resources (like React Query)\n * - Computed values (like selectors)\n */\n\nimport { createResource } from './resource'\nimport { createSignalProxy, createComputedProxy, getProxyFromStateValue } from './proxy'\nimport { getCurrentComponent, setCurrentComponent } from './component'\nimport {\n globalStateRegistry,\n namespaceRegistry,\n stateMetadata,\n serializeKey,\n unregisterStateFromNamespace,\n updateStateMetadata,\n performAutoCleanup,\n getHasWarnedAboutSize,\n setHasWarnedAboutSize,\n getDevWarningThreshold,\n getAutoCleanupInterval,\n setAutoCleanupInterval,\n setDeleteStateCallback,\n autoCleanupConfig,\n type AutoCleanupConfig\n} from './registry'\n\n/** Symbol to identify StateProxy and access underlying signal */\nexport const STATE_SIGNAL = Symbol.for('flexium.stateSignal')\n\n/**\n * Main State API Types\n */\nexport type StateKey = string | readonly (string | number | boolean | null | undefined | object)[]\nexport type StateAction<T> = (newValue: T | ((prev: T) => T)) => void\nexport type StateValue<T> = T & (() => T) & { peek(): T }\nexport type AsyncStatus = 'idle' | 'loading' | 'success' | 'error'\nexport interface StateOptions<P = unknown> {\n key?: StateKey\n params?: P\n}\n\n/**\n * Check if a value is a state value (Proxy-based)\n */\nexport function isStateValue(value: unknown): value is StateValue<unknown> {\n // Hybrid proxies are functions\n return (typeof value === 'object' || typeof value === 'function') && value !== null && STATE_SIGNAL in value\n}\n\n/**\n * Check if a value is a signal (alias for isStateValue for compatibility)\n * @deprecated Use isStateValue instead\n */\nexport function isSignal(value: unknown): value is StateValue<unknown> {\n return isStateValue(value)\n}\n\n// Helper to get the underlying proxy from a StateValue\nexport function getStateSignal(stateValue: unknown): any {\n return getProxyFromStateValue(stateValue)\n}\n\nexport function equals<T>(stateValue: StateValue<T>, value: T): boolean {\n if (!isStateValue(stateValue)) return false\n return stateValue.peek() === value\n}\n\nexport function isTruthy<T>(stateValue: StateValue<T>): boolean {\n if (!isStateValue(stateValue)) return false\n return Boolean(stateValue.peek())\n}\n\nexport interface StateStats {\n total: number\n byNamespace: Record<string, number>\n topNamespaces: Array<{ namespace: string; count: number }>\n averageAccessCount: number\n}\n\nexport interface NamespaceStats {\n namespace: string\n count: number\n totalAccessCount: number\n averageAccessCount: number\n states: Array<{ key: string; accessCount: number; createdAt: number }>\n}\n\ninterface StateFunction {\n <T>(initialValue: T, options?: StateOptions): [StateValue<T>, StateAction<T>]\n <T, P>(computeFn: (params: P) => T, options: StateOptions<P> & { params: P }): [StateValue<T>]\n <T>(computeFn: () => T, options?: StateOptions): [StateValue<T>]\n <T, P>(fetcher: (params: P) => Promise<T>, options: StateOptions<P> & { params: P }): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n <T>(fetcher: () => Promise<T>, options?: StateOptions): [StateValue<T | undefined>, () => void, StateValue<AsyncStatus>, StateValue<unknown>]\n\n delete: (key: StateKey) => boolean\n clear: () => void\n clearByPrefix: (prefix: StateKey) => number\n has: (key: StateKey) => boolean\n readonly size: number\n getStats: () => StateStats\n getNamespaceStats: (prefix: StateKey) => NamespaceStats\n enableAutoCleanup: (config?: Partial<AutoCleanupConfig>) => void\n disableAutoCleanup: () => void\n readonly isAutoCleanupEnabled: boolean\n}\n\nfunction stateImplementation<T, P = unknown>(\n initialValueOrFetcher: T | ((params?: P) => T) | ((params?: P) => Promise<T>),\n options?: StateOptions<P>\n): any {\n // Hook System\n const currentComponent = getCurrentComponent()\n if (currentComponent && !options?.key) {\n const comp = currentComponent\n const hookIndex = comp.hookIndex++\n if (hookIndex < comp.hooks.length) return comp.hooks[hookIndex]\n const saved = currentComponent\n setCurrentComponent(null)\n const res = state(initialValueOrFetcher as any, options as any)\n setCurrentComponent(saved)\n comp.hooks.push(res)\n return res\n }\n\n // Key Serializing\n const rawKey = options?.key\n const key = rawKey ? serializeKey(rawKey) : undefined\n const namespace = Array.isArray(rawKey) && rawKey.length > 0 ? String(rawKey[0]) : undefined\n const params = options?.params\n\n // Check Registry\n if (key && globalStateRegistry.has(key)) {\n const entry = globalStateRegistry.get(key)!\n updateStateMetadata(key, namespace, entry.proxy)\n\n const result = [entry.proxy]\n if (entry.setter) result.push(entry.setter)\n if (entry.refetch) result.push(entry.refetch)\n if (entry.status) result.push(entry.status)\n if (entry.error) result.push(entry.error)\n\n return result\n }\n\n // Logic - Create proxies directly\n let proxy: StateValue<T>\n let setter: StateAction<T> | undefined\n let refetch: (() => void) | undefined\n let statusProxy: StateValue<AsyncStatus> | undefined\n let errorProxy: StateValue<unknown> | undefined\n\n if (typeof initialValueOrFetcher === 'function') {\n const originalFn = initialValueOrFetcher as Function\n const fn = params !== undefined ? () => originalFn(params) : originalFn\n\n let testResult: any\n try { testResult = fn() } catch (e) { /* treat as computed */ }\n\n const isAsync = originalFn.constructor.name === 'AsyncFunction' || testResult instanceof Promise\n\n if (isAsync) {\n // Resource - TODO: createResource도 Proxy 기반으로 변경 필요\n const [res, actions] = createResource(fn as any, async (v) => v)\n refetch = actions.refetch\n\n // Create computed proxy for resource value\n proxy = createComputedProxy(() => res(), key) as any\n\n // Status Computed\n statusProxy = createComputedProxy(() => res.loading ? 'loading' : res.error ? 'error' : res.state === 'unresolved' ? 'idle' : 'success', key) as any\n\n // Error Computed\n errorProxy = createComputedProxy(() => res.error, key) as any\n } else {\n // Computed\n proxy = createComputedProxy(fn as any, key) as any\n }\n } else {\n // Signal - create proxy directly\n proxy = createSignalProxy(initialValueOrFetcher, key)\n setter = (newValue: any) => {\n const proxySignal = (proxy as any)[STATE_SIGNAL]\n if (typeof newValue === 'function') {\n proxySignal.set(newValue(proxySignal.peek()))\n } else {\n proxySignal.set(newValue)\n }\n }\n }\n\n const result: any[] = [proxy]\n if (setter) result.push(setter)\n if (refetch) {\n result.splice(1, 0, refetch) // [proxy, refetch, status, error]\n if (statusProxy) result.push(statusProxy)\n if (errorProxy) result.push(errorProxy)\n }\n\n // Register\n if (key) {\n globalStateRegistry.set(key, {\n proxy, setter, refetch, status: statusProxy, error: errorProxy,\n createdAt: Date.now(), lastAccessed: Date.now(), accessCount: 1, referenceCount: 1,\n key, namespace\n })\n\n updateStateMetadata(key, namespace, proxy)\n\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV !== 'production'\n if (isDev && !getHasWarnedAboutSize() && globalStateRegistry.size >= getDevWarningThreshold()) {\n setHasWarnedAboutSize(true)\n console.warn(`[Flexium] Registry size warning: ${globalStateRegistry.size}`)\n }\n }\n\n return result\n}\n\nconst state = stateImplementation as StateFunction\n\n// Static Methods\nstate.delete = function (key: StateKey): boolean {\n const sKey = serializeKey(key)\n const meta = stateMetadata.get(sKey)\n if (meta?.namespace) unregisterStateFromNamespace(sKey, meta.namespace)\n stateMetadata.delete(sKey)\n return globalStateRegistry.delete(sKey)\n}\n\nstate.clear = function (): void {\n globalStateRegistry.clear()\n namespaceRegistry.clear()\n stateMetadata.clear()\n setHasWarnedAboutSize(false)\n}\n\nstate.has = function (key: StateKey): boolean {\n return globalStateRegistry.has(serializeKey(key))\n}\n\nstate.clearByPrefix = function (prefix: StateKey): number {\n const prefixStr = serializeKey(prefix)\n let cleared = 0\n const keysToDelete: string[] = []\n\n for (const [key] of stateMetadata.entries()) {\n if (key === prefixStr) { keysToDelete.push(key); continue }\n if (prefixStr.endsWith(']')) {\n const raw = prefixStr.slice(0, -1)\n if (key.startsWith(raw) && key.length > raw.length && key[raw.length] === ',') keysToDelete.push(key)\n } else {\n if (key.startsWith(prefixStr)) keysToDelete.push(key)\n }\n }\n\n for (const k of keysToDelete) {\n if (state.delete(k)) cleared++\n }\n return cleared\n}\n\nstate.getStats = function (): StateStats {\n const byNamespace: Record<string, number> = {}\n for (const [ns, keys] of namespaceRegistry.entries()) byNamespace[ns] = keys.size\n\n let totalAccess = 0\n for (const m of stateMetadata.values()) totalAccess += m.accessCount\n\n return {\n total: globalStateRegistry.size,\n byNamespace,\n topNamespaces: Object.entries(byNamespace).map(([n, c]) => ({ namespace: n, count: c })).sort((a, b) => b.count - a.count).slice(0, 10),\n averageAccessCount: stateMetadata.size ? totalAccess / stateMetadata.size : 0\n }\n}\n\nstate.getNamespaceStats = function (prefix: StateKey): NamespaceStats {\n const pStr = serializeKey(prefix)\n const ns = Array.isArray(prefix) && prefix.length > 0 ? String(prefix[0]) : pStr\n const states: any[] = []\n let totalAccess = 0\n\n for (const [key, m] of stateMetadata.entries()) {\n let matched = false\n\n if (key === pStr) {\n matched = true\n } else if (pStr.endsWith(']')) {\n const raw = pStr.slice(0, -1)\n if (key.startsWith(raw) && key.length > raw.length && key[raw.length] === ',') {\n matched = true\n }\n } else {\n if (key.startsWith(pStr)) matched = true\n }\n\n if (matched) {\n states.push({ key, accessCount: m.accessCount, createdAt: m.createdAt })\n totalAccess += m.accessCount\n }\n }\n return {\n namespace: ns, count: states.length, totalAccessCount: totalAccess,\n averageAccessCount: states.length ? totalAccess / states.length : 0,\n states\n }\n}\n\nObject.defineProperty(state, 'size', { get: () => globalStateRegistry.size, enumerable: true })\nstate.enableAutoCleanup = (c) => {\n Object.assign(autoCleanupConfig, c, { enabled: true })\n const interval = getAutoCleanupInterval()\n if (interval) clearInterval(interval)\n const newInterval = setInterval(performAutoCleanup, autoCleanupConfig.checkInterval)\n setAutoCleanupInterval(newInterval)\n}\nstate.disableAutoCleanup = () => {\n autoCleanupConfig.enabled = false\n const interval = getAutoCleanupInterval()\n if (interval) clearInterval(interval)\n setAutoCleanupInterval(null)\n}\nObject.defineProperty(state, 'isAutoCleanupEnabled', { get: () => autoCleanupConfig.enabled, enumerable: true })\n\n// Set delete callback to avoid circular dependency\nsetDeleteStateCallback((key: string) => state.delete(key))\n\nexport { state }\n\nexport interface RefObject<T> { current: T | null }\nexport function ref<T>(initial: T | null): RefObject<T> { return { current: initial } }\n"]}