flexium 0.12.13 → 0.12.16
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.
- package/dist/canvas.d.cts +14 -13
- package/dist/canvas.d.ts +14 -13
- package/dist/canvas.js +1 -1
- package/dist/canvas.js.map +1 -1
- package/dist/canvas.mjs +1 -1
- package/dist/canvas.mjs.map +1 -1
- package/dist/chunk-3DKZ2J4D.mjs +2 -0
- package/dist/chunk-3DKZ2J4D.mjs.map +1 -0
- package/dist/chunk-5PNH2ARD.mjs +2 -0
- package/dist/chunk-5PNH2ARD.mjs.map +1 -0
- package/dist/{chunk-7BXR4ZFD.js → chunk-6VIRXD2Y.js} +2 -2
- package/dist/chunk-6VIRXD2Y.js.map +1 -0
- package/dist/chunk-6Z33DLMI.js +2 -0
- package/dist/chunk-6Z33DLMI.js.map +1 -0
- package/dist/chunk-E75BJDOQ.mjs +2 -0
- package/dist/chunk-E75BJDOQ.mjs.map +1 -0
- package/dist/chunk-IWFEXW4F.mjs +2 -0
- package/dist/chunk-IWFEXW4F.mjs.map +1 -0
- package/dist/chunk-JY6CE6RN.mjs +2 -0
- package/dist/chunk-JY6CE6RN.mjs.map +1 -0
- package/dist/chunk-LTT43APF.js +2 -0
- package/dist/chunk-LTT43APF.js.map +1 -0
- package/dist/chunk-PSKDIB7J.js +2 -0
- package/dist/chunk-PSKDIB7J.js.map +1 -0
- package/dist/chunk-UWFVCKRU.js +2 -0
- package/dist/chunk-UWFVCKRU.js.map +1 -0
- package/dist/chunk-WGKD63GN.mjs +2 -0
- package/dist/chunk-WGKD63GN.mjs.map +1 -0
- package/dist/chunk-YWTD32NA.js +2 -0
- package/dist/chunk-YWTD32NA.js.map +1 -0
- package/dist/core.d.cts +91 -15
- package/dist/core.d.ts +91 -15
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +1 -1
- package/dist/core.mjs.map +1 -1
- package/dist/dom.d.cts +154 -9
- package/dist/dom.d.ts +154 -9
- package/dist/dom.js +1 -1
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/dom.mjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/interactive.d.cts +17 -16
- package/dist/interactive.d.ts +17 -16
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/jsx-dev-runtime.d.cts +1 -1
- package/dist/jsx-dev-runtime.d.ts +1 -1
- package/dist/jsx-runtime.d.cts +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/render-QZAFAGIM.js +2 -0
- package/dist/render-QZAFAGIM.js.map +1 -0
- package/dist/render-UIWHIMS2.mjs +2 -0
- package/dist/render-UIWHIMS2.mjs.map +1 -0
- package/dist/router.d.cts +1 -1
- package/dist/router.d.ts +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/dist/router.mjs +1 -1
- package/dist/router.mjs.map +1 -1
- package/dist/server.d.cts +17 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +2 -0
- package/dist/server.mjs.map +1 -0
- package/dist/types-CxlS2F2j.d.cts +19 -0
- package/dist/types-CxlS2F2j.d.ts +19 -0
- package/dist/types-y2GGaXXk.d.cts +9 -0
- package/dist/types-y2GGaXXk.d.ts +9 -0
- package/package.json +6 -1
- package/dist/chunk-44RZHCII.mjs +0 -2
- package/dist/chunk-44RZHCII.mjs.map +0 -1
- package/dist/chunk-7BXR4ZFD.js.map +0 -1
- package/dist/chunk-APAMPY43.js +0 -2
- package/dist/chunk-APAMPY43.js.map +0 -1
- package/dist/chunk-CPJRQL2C.mjs +0 -2
- package/dist/chunk-CPJRQL2C.mjs.map +0 -1
- package/dist/chunk-ECB5HZOQ.mjs +0 -2
- package/dist/chunk-ECB5HZOQ.mjs.map +0 -1
- package/dist/chunk-ENWGYQNU.js +0 -2
- package/dist/chunk-ENWGYQNU.js.map +0 -1
- package/dist/chunk-IA4FEBFE.js +0 -2
- package/dist/chunk-IA4FEBFE.js.map +0 -1
- package/dist/chunk-LUREDEUB.mjs +0 -2
- package/dist/chunk-LUREDEUB.mjs.map +0 -1
- package/dist/chunk-LUW7DIEW.js +0 -2
- package/dist/chunk-LUW7DIEW.js.map +0 -1
- package/dist/chunk-S6WF3XNF.mjs +0 -2
- package/dist/chunk-S6WF3XNF.mjs.map +0 -1
package/dist/canvas.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSX } from './jsx-runtime.cjs';
|
|
2
|
-
import './
|
|
2
|
+
import './types-y2GGaXXk.cjs';
|
|
3
3
|
|
|
4
4
|
interface CanvasProps {
|
|
5
5
|
width: number;
|
|
@@ -8,8 +8,6 @@ interface CanvasProps {
|
|
|
8
8
|
style?: any;
|
|
9
9
|
ref?: (el: HTMLCanvasElement) => void;
|
|
10
10
|
}
|
|
11
|
-
declare function Canvas(props: CanvasProps): JSX.Element;
|
|
12
|
-
|
|
13
11
|
interface DrawRectProps {
|
|
14
12
|
x: number | (() => number);
|
|
15
13
|
y: number | (() => number);
|
|
@@ -20,8 +18,6 @@ interface DrawRectProps {
|
|
|
20
18
|
strokeWidth?: number | (() => number);
|
|
21
19
|
opacity?: number | (() => number);
|
|
22
20
|
}
|
|
23
|
-
declare function DrawRect(props: DrawRectProps): null;
|
|
24
|
-
|
|
25
21
|
interface DrawCircleProps {
|
|
26
22
|
x: number | (() => number);
|
|
27
23
|
y: number | (() => number);
|
|
@@ -31,8 +27,6 @@ interface DrawCircleProps {
|
|
|
31
27
|
strokeWidth?: number | (() => number);
|
|
32
28
|
opacity?: number | (() => number);
|
|
33
29
|
}
|
|
34
|
-
declare function DrawCircle(props: DrawCircleProps): null;
|
|
35
|
-
|
|
36
30
|
interface DrawArcProps {
|
|
37
31
|
x: number | (() => number);
|
|
38
32
|
y: number | (() => number);
|
|
@@ -45,8 +39,6 @@ interface DrawArcProps {
|
|
|
45
39
|
strokeWidth?: number | (() => number);
|
|
46
40
|
opacity?: number | (() => number);
|
|
47
41
|
}
|
|
48
|
-
declare function DrawArc(props: DrawArcProps): null;
|
|
49
|
-
|
|
50
42
|
interface DrawLineProps {
|
|
51
43
|
x1: number | (() => number);
|
|
52
44
|
y1: number | (() => number);
|
|
@@ -56,8 +48,6 @@ interface DrawLineProps {
|
|
|
56
48
|
strokeWidth?: number | (() => number);
|
|
57
49
|
opacity?: number | (() => number);
|
|
58
50
|
}
|
|
59
|
-
declare function DrawLine(props: DrawLineProps): null;
|
|
60
|
-
|
|
61
51
|
interface DrawTextProps {
|
|
62
52
|
text: string | (() => string);
|
|
63
53
|
x: number | (() => number);
|
|
@@ -69,8 +59,6 @@ interface DrawTextProps {
|
|
|
69
59
|
textAlign?: 'left' | 'center' | 'right';
|
|
70
60
|
opacity?: number | (() => number);
|
|
71
61
|
}
|
|
72
|
-
declare function DrawText(props: DrawTextProps): null;
|
|
73
|
-
|
|
74
62
|
interface DrawPathProps {
|
|
75
63
|
d: string | (() => string);
|
|
76
64
|
fill?: string | (() => string);
|
|
@@ -78,6 +66,19 @@ interface DrawPathProps {
|
|
|
78
66
|
strokeWidth?: number | (() => number);
|
|
79
67
|
opacity?: number | (() => number);
|
|
80
68
|
}
|
|
69
|
+
|
|
70
|
+
declare function Canvas(props: CanvasProps): JSX.Element;
|
|
71
|
+
|
|
72
|
+
declare function DrawRect(props: DrawRectProps): null;
|
|
73
|
+
|
|
74
|
+
declare function DrawCircle(props: DrawCircleProps): null;
|
|
75
|
+
|
|
76
|
+
declare function DrawArc(props: DrawArcProps): null;
|
|
77
|
+
|
|
78
|
+
declare function DrawLine(props: DrawLineProps): null;
|
|
79
|
+
|
|
80
|
+
declare function DrawText(props: DrawTextProps): null;
|
|
81
|
+
|
|
81
82
|
declare function DrawPath(props: DrawPathProps): null;
|
|
82
83
|
|
|
83
84
|
export { Canvas, type CanvasProps, DrawArc, type DrawArcProps, DrawCircle, type DrawCircleProps, DrawLine, type DrawLineProps, DrawPath, type DrawPathProps, DrawRect, type DrawRectProps, DrawText, type DrawTextProps };
|
package/dist/canvas.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { JSX } from './jsx-runtime.js';
|
|
2
|
-
import './
|
|
2
|
+
import './types-y2GGaXXk.js';
|
|
3
3
|
|
|
4
4
|
interface CanvasProps {
|
|
5
5
|
width: number;
|
|
@@ -8,8 +8,6 @@ interface CanvasProps {
|
|
|
8
8
|
style?: any;
|
|
9
9
|
ref?: (el: HTMLCanvasElement) => void;
|
|
10
10
|
}
|
|
11
|
-
declare function Canvas(props: CanvasProps): JSX.Element;
|
|
12
|
-
|
|
13
11
|
interface DrawRectProps {
|
|
14
12
|
x: number | (() => number);
|
|
15
13
|
y: number | (() => number);
|
|
@@ -20,8 +18,6 @@ interface DrawRectProps {
|
|
|
20
18
|
strokeWidth?: number | (() => number);
|
|
21
19
|
opacity?: number | (() => number);
|
|
22
20
|
}
|
|
23
|
-
declare function DrawRect(props: DrawRectProps): null;
|
|
24
|
-
|
|
25
21
|
interface DrawCircleProps {
|
|
26
22
|
x: number | (() => number);
|
|
27
23
|
y: number | (() => number);
|
|
@@ -31,8 +27,6 @@ interface DrawCircleProps {
|
|
|
31
27
|
strokeWidth?: number | (() => number);
|
|
32
28
|
opacity?: number | (() => number);
|
|
33
29
|
}
|
|
34
|
-
declare function DrawCircle(props: DrawCircleProps): null;
|
|
35
|
-
|
|
36
30
|
interface DrawArcProps {
|
|
37
31
|
x: number | (() => number);
|
|
38
32
|
y: number | (() => number);
|
|
@@ -45,8 +39,6 @@ interface DrawArcProps {
|
|
|
45
39
|
strokeWidth?: number | (() => number);
|
|
46
40
|
opacity?: number | (() => number);
|
|
47
41
|
}
|
|
48
|
-
declare function DrawArc(props: DrawArcProps): null;
|
|
49
|
-
|
|
50
42
|
interface DrawLineProps {
|
|
51
43
|
x1: number | (() => number);
|
|
52
44
|
y1: number | (() => number);
|
|
@@ -56,8 +48,6 @@ interface DrawLineProps {
|
|
|
56
48
|
strokeWidth?: number | (() => number);
|
|
57
49
|
opacity?: number | (() => number);
|
|
58
50
|
}
|
|
59
|
-
declare function DrawLine(props: DrawLineProps): null;
|
|
60
|
-
|
|
61
51
|
interface DrawTextProps {
|
|
62
52
|
text: string | (() => string);
|
|
63
53
|
x: number | (() => number);
|
|
@@ -69,8 +59,6 @@ interface DrawTextProps {
|
|
|
69
59
|
textAlign?: 'left' | 'center' | 'right';
|
|
70
60
|
opacity?: number | (() => number);
|
|
71
61
|
}
|
|
72
|
-
declare function DrawText(props: DrawTextProps): null;
|
|
73
|
-
|
|
74
62
|
interface DrawPathProps {
|
|
75
63
|
d: string | (() => string);
|
|
76
64
|
fill?: string | (() => string);
|
|
@@ -78,6 +66,19 @@ interface DrawPathProps {
|
|
|
78
66
|
strokeWidth?: number | (() => number);
|
|
79
67
|
opacity?: number | (() => number);
|
|
80
68
|
}
|
|
69
|
+
|
|
70
|
+
declare function Canvas(props: CanvasProps): JSX.Element;
|
|
71
|
+
|
|
72
|
+
declare function DrawRect(props: DrawRectProps): null;
|
|
73
|
+
|
|
74
|
+
declare function DrawCircle(props: DrawCircleProps): null;
|
|
75
|
+
|
|
76
|
+
declare function DrawArc(props: DrawArcProps): null;
|
|
77
|
+
|
|
78
|
+
declare function DrawLine(props: DrawLineProps): null;
|
|
79
|
+
|
|
80
|
+
declare function DrawText(props: DrawTextProps): null;
|
|
81
|
+
|
|
81
82
|
declare function DrawPath(props: DrawPathProps): null;
|
|
82
83
|
|
|
83
84
|
export { Canvas, type CanvasProps, DrawArc, type DrawArcProps, DrawCircle, type DrawCircleProps, DrawLine, type DrawLineProps, DrawPath, type DrawPathProps, DrawRect, type DrawRectProps, DrawText, type DrawTextProps };
|
package/dist/canvas.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var chunk6VIRXD2Y_js=require('./chunk-6VIRXD2Y.js'),chunkYWTD32NA_js=require('./chunk-YWTD32NA.js');require('./chunk-UWFVCKRU.js');var chunkEXLNKYSH_js=require('./chunk-EXLNKYSH.js');var D=[];function l(t){D.push(t);}function C(t){let{width:u,height:w,children:e,style:y,ref:a}=t,s,n=null,i=()=>{!s||!n||(n.clearRect(0,0,u,w),D.length=0,Array.isArray(e)?e.forEach(o=>{typeof o=="function"&&o();}):typeof e=="function"&&e(),D.forEach(o=>{g(n,o);}),null);};return chunkYWTD32NA_js.e(()=>{s&&i();}),chunkEXLNKYSH_js.a("canvas",{ref:o=>{s=o,n=o.getContext("2d"),a&&a(o),i();},width:u,height:w,style:y})}function r(t){return chunk6VIRXD2Y_js.b(t)?t.valueOf?.()??t:t}function g(t,u){let{type:w,props:e}=u,y=r(e.opacity);switch(y!==void 0&&(t.globalAlpha=y),w){case "rect":{let a=r(e.x),s=r(e.y),n=r(e.width),i=r(e.height),o=r(e.fill),f=r(e.stroke),c=r(e.strokeWidth);o&&(t.fillStyle=o,t.fillRect(a,s,n,i)),f&&(t.strokeStyle=f,c&&(t.lineWidth=c),t.strokeRect(a,s,n,i));break}case "circle":{let a=r(e.x),s=r(e.y),n=r(e.radius),i=r(e.fill),o=r(e.stroke),f=r(e.strokeWidth);t.beginPath(),t.arc(a,s,n,0,Math.PI*2),i&&(t.fillStyle=i,t.fill()),o&&(t.strokeStyle=o,f&&(t.lineWidth=f),t.stroke());break}case "arc":{let a=r(e.x),s=r(e.y),n=r(e.radius),i=r(e.startAngle),o=r(e.endAngle),f=r(e.counterclockwise)||false,c=r(e.fill),m=r(e.stroke),h=r(e.strokeWidth);t.beginPath(),t.arc(a,s,n,i,o,f),c&&(t.fillStyle=c,t.fill()),m&&(t.strokeStyle=m,h&&(t.lineWidth=h),t.stroke());break}case "line":{let a=r(e.x1),s=r(e.y1),n=r(e.x2),i=r(e.y2),o=r(e.stroke)||"black",f=r(e.strokeWidth)||1;t.beginPath(),t.moveTo(a,s),t.lineTo(n,i),t.strokeStyle=o,t.lineWidth=f,t.stroke();break}case "text":{let a=r(e.x),s=r(e.y),n=r(e.text),i=r(e.fill)||"black",o=r(e.fontSize)||16,f=r(e.fontFamily)||"sans-serif",c=r(e.fontWeight)||"normal",m=r(e.textAlign)||"left";t.font=`${c} ${o}px ${f}`,t.textAlign=m,t.fillStyle=i,t.fillText(n,a,s);break}case "path":{let a=r(e.d),s=r(e.fill),n=r(e.stroke),i=r(e.strokeWidth),o=new Path2D(a);s&&(t.fillStyle=s,t.fill(o)),n&&(t.strokeStyle=n,i&&(t.lineWidth=i),t.stroke(o));break}}y!==void 0&&(t.globalAlpha=1);}function x(t){return chunkYWTD32NA_js.e(()=>{l({type:"rect",props:t});}),null}function v(t){return chunkYWTD32NA_js.e(()=>{l({type:"circle",props:t});}),null}function A(t){return chunkYWTD32NA_js.e(()=>{l({type:"arc",props:t});}),null}function W(t){return chunkYWTD32NA_js.e(()=>{l({type:"line",props:t});}),null}function b(t){return chunkYWTD32NA_js.e(()=>{l({type:"text",props:t});}),null}function R(t){return chunkYWTD32NA_js.e(()=>{l({type:"path",props:t});}),null}exports.Canvas=C;exports.DrawArc=A;exports.DrawCircle=v;exports.DrawLine=W;exports.DrawPath=R;exports.DrawRect=x;exports.DrawText=b;//# sourceMappingURL=canvas.js.map
|
|
2
2
|
//# sourceMappingURL=canvas.js.map
|
package/dist/canvas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/canvas/Canvas.tsx","../src/canvas/dom/DrawRect.tsx","../src/canvas/dom/DrawCircle.tsx","../src/canvas/dom/DrawArc.tsx","../src/canvas/dom/DrawLine.tsx","../src/canvas/dom/DrawText.tsx","../src/canvas/dom/DrawPath.tsx"],"names":["drawQueue","queueDraw","node","Canvas","props","width","height","children","style","ref","canvas","ctx","render","child","drawNode","effect","jsx","el","getValue","val","isReactive","type","opacity","x","y","w","h","fill","stroke","strokeWidth","radius","startAngle","endAngle","counterclockwise","x1","y1","x2","y2","text","fontSize","fontFamily","fontWeight","textAlign","d","path","DrawRect","DrawCircle","DrawArc","DrawLine","DrawText","DrawPath"],"mappings":"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","file":"canvas.js","sourcesContent":["import { effect } from '../core/lifecycle'\nimport { isReactive } from '../core/reactive'\n\nexport interface CanvasProps {\n width: number\n height: number\n children?: any\n style?: any\n ref?: (el: HTMLCanvasElement) => void\n}\n\ninterface CanvasDrawNode {\n type: 'rect' | 'circle' | 'arc' | 'line' | 'text' | 'path'\n props: any\n}\n\n// Canvas context for children to access\nlet currentCanvasContext: CanvasRenderingContext2D | null = null\nconst drawQueue: CanvasDrawNode[] = []\n\nexport function getCanvasContext() {\n return currentCanvasContext\n}\n\nexport function queueDraw(node: CanvasDrawNode) {\n drawQueue.push(node)\n}\n\nexport function Canvas(props: CanvasProps) {\n const { width, height, children, style, ref } = props\n\n let canvas: HTMLCanvasElement | undefined\n let ctx: CanvasRenderingContext2D | null = null\n\n const render = () => {\n if (!canvas || !ctx) return\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Clear draw queue\n drawQueue.length = 0\n\n // Set current context for children\n currentCanvasContext = ctx\n\n // Render children (they will queue draw commands)\n if (Array.isArray(children)) {\n children.forEach(child => {\n if (typeof child === 'function') {\n child()\n }\n })\n } else if (typeof children === 'function') {\n children()\n }\n\n // Execute draw queue\n drawQueue.forEach(node => {\n drawNode(ctx!, node)\n })\n\n // Clear context\n currentCanvasContext = null\n }\n\n effect(() => {\n if (canvas) {\n render()\n }\n })\n\n return (\n <canvas\n ref={(el: HTMLCanvasElement) => {\n canvas = el\n ctx = el.getContext('2d')\n if (ref) ref(el)\n render()\n }}\n width={width}\n height={height}\n style={style}\n />\n )\n}\n\nfunction getValue(val: any): any {\n if (isReactive(val)) {\n return val.valueOf?.() ?? val\n }\n return val\n}\n\nfunction drawNode(ctx: CanvasRenderingContext2D, node: CanvasDrawNode) {\n const { type, props } = node\n\n // Apply opacity\n const opacity = getValue(props.opacity)\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n switch (type) {\n case 'rect': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const w = getValue(props.width)\n const h = getValue(props.height)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, w, h)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.strokeRect(x, y, w, h)\n }\n break\n }\n\n case 'circle': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, Math.PI * 2)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'arc': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const startAngle = getValue(props.startAngle)\n const endAngle = getValue(props.endAngle)\n const counterclockwise = getValue(props.counterclockwise) || false\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'line': {\n const x1 = getValue(props.x1)\n const y1 = getValue(props.y1)\n const x2 = getValue(props.x2)\n const y2 = getValue(props.y2)\n const stroke = getValue(props.stroke) || 'black'\n const strokeWidth = getValue(props.strokeWidth) || 1\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n break\n }\n\n case 'text': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const text = getValue(props.text)\n const fill = getValue(props.fill) || 'black'\n const fontSize = getValue(props.fontSize) || 16\n const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n const fontWeight = getValue(props.fontWeight) || 'normal'\n const textAlign = getValue(props.textAlign) || 'left'\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign as CanvasTextAlign\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n break\n }\n\n case 'path': {\n const d = getValue(props.d)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n // Parse SVG path data\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke(path)\n }\n break\n }\n }\n\n // Reset opacity\n if (opacity !== undefined) {\n ctx.globalAlpha = 1\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawRectProps {\n x: number | (() => number)\n y: number | (() => number)\n width: number | (() => number)\n height: number | (() => number)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawRect(props: DrawRectProps) {\n effect(() => {\n queueDraw({\n type: 'rect',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawCircleProps {\n x: number | (() => number)\n y: number | (() => number)\n radius: number | (() => number)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawCircle(props: DrawCircleProps) {\n effect(() => {\n queueDraw({\n type: 'circle',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawArcProps {\n x: number | (() => number)\n y: number | (() => number)\n radius: number | (() => number)\n startAngle: number | (() => number)\n endAngle: number | (() => number)\n counterclockwise?: boolean\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawArc(props: DrawArcProps) {\n effect(() => {\n queueDraw({\n type: 'arc',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawLineProps {\n x1: number | (() => number)\n y1: number | (() => number)\n x2: number | (() => number)\n y2: number | (() => number)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawLine(props: DrawLineProps) {\n effect(() => {\n queueDraw({\n type: 'line',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawTextProps {\n text: string | (() => string)\n x: number | (() => number)\n y: number | (() => number)\n fill?: string | (() => string)\n fontSize?: number | (() => number)\n fontFamily?: string | (() => string)\n fontWeight?: string | (() => string)\n textAlign?: 'left' | 'center' | 'right'\n opacity?: number | (() => number)\n}\n\nexport function DrawText(props: DrawTextProps) {\n effect(() => {\n queueDraw({\n type: 'text',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawPathProps {\n d: string | (() => string)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawPath(props: DrawPathProps) {\n effect(() => {\n queueDraw({\n type: 'path',\n props\n })\n })\n\n return null\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/canvas/Canvas.tsx","../src/canvas/dom/DrawRect.tsx","../src/canvas/dom/DrawCircle.tsx","../src/canvas/dom/DrawArc.tsx","../src/canvas/dom/DrawLine.tsx","../src/canvas/dom/DrawText.tsx","../src/canvas/dom/DrawPath.tsx"],"names":["drawQueue","queueDraw","node","Canvas","props","width","height","children","style","ref","canvas","ctx","render","child","drawNode","effect","jsx","el","getValue","val","isReactive","type","opacity","x","y","w","h","fill","stroke","strokeWidth","radius","startAngle","endAngle","counterclockwise","x1","y1","x2","y2","text","fontSize","fontFamily","fontWeight","textAlign","d","path","DrawRect","DrawCircle","DrawArc","DrawLine","DrawText","DrawPath"],"mappings":"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","file":"canvas.js","sourcesContent":["import { effect } from '../core/lifecycle'\nimport { isReactive } from '../core/reactive'\nimport type { CanvasProps, CanvasDrawNode } from './types'\n\nexport type { CanvasProps }\n\n// Canvas context for children to access\nlet currentCanvasContext: CanvasRenderingContext2D | null = null\nconst drawQueue: CanvasDrawNode[] = []\n\nexport function getCanvasContext() {\n return currentCanvasContext\n}\n\nexport function queueDraw(node: CanvasDrawNode) {\n drawQueue.push(node)\n}\n\nexport function Canvas(props: CanvasProps) {\n const { width, height, children, style, ref } = props\n\n let canvas: HTMLCanvasElement | undefined\n let ctx: CanvasRenderingContext2D | null = null\n\n const render = () => {\n if (!canvas || !ctx) return\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Clear draw queue\n drawQueue.length = 0\n\n // Set current context for children\n currentCanvasContext = ctx\n\n // Render children (they will queue draw commands)\n if (Array.isArray(children)) {\n children.forEach(child => {\n if (typeof child === 'function') {\n child()\n }\n })\n } else if (typeof children === 'function') {\n children()\n }\n\n // Execute draw queue\n drawQueue.forEach(node => {\n drawNode(ctx!, node)\n })\n\n // Clear context\n currentCanvasContext = null\n }\n\n effect(() => {\n if (canvas) {\n render()\n }\n })\n\n return (\n <canvas\n ref={(el: HTMLCanvasElement) => {\n canvas = el\n ctx = el.getContext('2d')\n if (ref) ref(el)\n render()\n }}\n width={width}\n height={height}\n style={style}\n />\n )\n}\n\nfunction getValue(val: any): any {\n if (isReactive(val)) {\n return val.valueOf?.() ?? val\n }\n return val\n}\n\nfunction drawNode(ctx: CanvasRenderingContext2D, node: CanvasDrawNode) {\n const { type, props } = node\n\n // Apply opacity\n const opacity = getValue(props.opacity)\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n switch (type) {\n case 'rect': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const w = getValue(props.width)\n const h = getValue(props.height)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, w, h)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.strokeRect(x, y, w, h)\n }\n break\n }\n\n case 'circle': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, Math.PI * 2)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'arc': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const startAngle = getValue(props.startAngle)\n const endAngle = getValue(props.endAngle)\n const counterclockwise = getValue(props.counterclockwise) || false\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'line': {\n const x1 = getValue(props.x1)\n const y1 = getValue(props.y1)\n const x2 = getValue(props.x2)\n const y2 = getValue(props.y2)\n const stroke = getValue(props.stroke) || 'black'\n const strokeWidth = getValue(props.strokeWidth) || 1\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n break\n }\n\n case 'text': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const text = getValue(props.text)\n const fill = getValue(props.fill) || 'black'\n const fontSize = getValue(props.fontSize) || 16\n const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n const fontWeight = getValue(props.fontWeight) || 'normal'\n const textAlign = getValue(props.textAlign) || 'left'\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign as CanvasTextAlign\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n break\n }\n\n case 'path': {\n const d = getValue(props.d)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n // Parse SVG path data\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke(path)\n }\n break\n }\n }\n\n // Reset opacity\n if (opacity !== undefined) {\n ctx.globalAlpha = 1\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawRectProps } from '../types'\n\nexport type { DrawRectProps }\n\nexport function DrawRect(props: DrawRectProps) {\n effect(() => {\n queueDraw({\n type: 'rect',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawCircleProps } from '../types'\n\nexport type { DrawCircleProps }\n\nexport function DrawCircle(props: DrawCircleProps) {\n effect(() => {\n queueDraw({\n type: 'circle',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawArcProps } from '../types'\n\nexport type { DrawArcProps }\n\nexport function DrawArc(props: DrawArcProps) {\n effect(() => {\n queueDraw({\n type: 'arc',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawLineProps } from '../types'\n\nexport type { DrawLineProps }\n\nexport function DrawLine(props: DrawLineProps) {\n effect(() => {\n queueDraw({\n type: 'line',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawTextProps } from '../types'\n\nexport type { DrawTextProps }\n\nexport function DrawText(props: DrawTextProps) {\n effect(() => {\n queueDraw({\n type: 'text',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawPathProps } from '../types'\n\nexport type { DrawPathProps }\n\nexport function DrawPath(props: DrawPathProps) {\n effect(() => {\n queueDraw({\n type: 'path',\n props\n })\n })\n\n return null\n}\n"]}
|
package/dist/canvas.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {b as b$1}from'./chunk-JY6CE6RN.mjs';import {e}from'./chunk-IWFEXW4F.mjs';import'./chunk-5PNH2ARD.mjs';import {a}from'./chunk-ZCO4NIGC.mjs';var D=[];function l(t){D.push(t);}function C(t){let{width:u,height:w,children:e$1,style:y,ref:a$1}=t,s,n=null,i=()=>{!s||!n||(n.clearRect(0,0,u,w),D.length=0,Array.isArray(e$1)?e$1.forEach(o=>{typeof o=="function"&&o();}):typeof e$1=="function"&&e$1(),D.forEach(o=>{g(n,o);}),null);};return e(()=>{s&&i();}),a("canvas",{ref:o=>{s=o,n=o.getContext("2d"),a$1&&a$1(o),i();},width:u,height:w,style:y})}function r(t){return b$1(t)?t.valueOf?.()??t:t}function g(t,u){let{type:w,props:e}=u,y=r(e.opacity);switch(y!==void 0&&(t.globalAlpha=y),w){case "rect":{let a=r(e.x),s=r(e.y),n=r(e.width),i=r(e.height),o=r(e.fill),f=r(e.stroke),c=r(e.strokeWidth);o&&(t.fillStyle=o,t.fillRect(a,s,n,i)),f&&(t.strokeStyle=f,c&&(t.lineWidth=c),t.strokeRect(a,s,n,i));break}case "circle":{let a=r(e.x),s=r(e.y),n=r(e.radius),i=r(e.fill),o=r(e.stroke),f=r(e.strokeWidth);t.beginPath(),t.arc(a,s,n,0,Math.PI*2),i&&(t.fillStyle=i,t.fill()),o&&(t.strokeStyle=o,f&&(t.lineWidth=f),t.stroke());break}case "arc":{let a=r(e.x),s=r(e.y),n=r(e.radius),i=r(e.startAngle),o=r(e.endAngle),f=r(e.counterclockwise)||false,c=r(e.fill),m=r(e.stroke),h=r(e.strokeWidth);t.beginPath(),t.arc(a,s,n,i,o,f),c&&(t.fillStyle=c,t.fill()),m&&(t.strokeStyle=m,h&&(t.lineWidth=h),t.stroke());break}case "line":{let a=r(e.x1),s=r(e.y1),n=r(e.x2),i=r(e.y2),o=r(e.stroke)||"black",f=r(e.strokeWidth)||1;t.beginPath(),t.moveTo(a,s),t.lineTo(n,i),t.strokeStyle=o,t.lineWidth=f,t.stroke();break}case "text":{let a=r(e.x),s=r(e.y),n=r(e.text),i=r(e.fill)||"black",o=r(e.fontSize)||16,f=r(e.fontFamily)||"sans-serif",c=r(e.fontWeight)||"normal",m=r(e.textAlign)||"left";t.font=`${c} ${o}px ${f}`,t.textAlign=m,t.fillStyle=i,t.fillText(n,a,s);break}case "path":{let a=r(e.d),s=r(e.fill),n=r(e.stroke),i=r(e.strokeWidth),o=new Path2D(a);s&&(t.fillStyle=s,t.fill(o)),n&&(t.strokeStyle=n,i&&(t.lineWidth=i),t.stroke(o));break}}y!==void 0&&(t.globalAlpha=1);}function x(t){return e(()=>{l({type:"rect",props:t});}),null}function v(t){return e(()=>{l({type:"circle",props:t});}),null}function A(t){return e(()=>{l({type:"arc",props:t});}),null}function W(t){return e(()=>{l({type:"line",props:t});}),null}function b(t){return e(()=>{l({type:"text",props:t});}),null}function R(t){return e(()=>{l({type:"path",props:t});}),null}export{C as Canvas,A as DrawArc,v as DrawCircle,W as DrawLine,R as DrawPath,x as DrawRect,b as DrawText};//# sourceMappingURL=canvas.mjs.map
|
|
2
2
|
//# sourceMappingURL=canvas.mjs.map
|
package/dist/canvas.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/canvas/Canvas.tsx","../src/canvas/dom/DrawRect.tsx","../src/canvas/dom/DrawCircle.tsx","../src/canvas/dom/DrawArc.tsx","../src/canvas/dom/DrawLine.tsx","../src/canvas/dom/DrawText.tsx","../src/canvas/dom/DrawPath.tsx"],"names":["drawQueue","queueDraw","node","Canvas","props","width","height","children","style","ref","canvas","ctx","render","child","drawNode","effect","jsx","el","getValue","val","isReactive","type","opacity","x","y","w","h","fill","stroke","strokeWidth","radius","startAngle","endAngle","counterclockwise","x1","y1","x2","y2","text","fontSize","fontFamily","fontWeight","textAlign","d","path","DrawRect","DrawCircle","DrawArc","DrawLine","DrawText","DrawPath"],"mappings":"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","file":"canvas.mjs","sourcesContent":["import { effect } from '../core/lifecycle'\nimport { isReactive } from '../core/reactive'\n\nexport interface CanvasProps {\n width: number\n height: number\n children?: any\n style?: any\n ref?: (el: HTMLCanvasElement) => void\n}\n\ninterface CanvasDrawNode {\n type: 'rect' | 'circle' | 'arc' | 'line' | 'text' | 'path'\n props: any\n}\n\n// Canvas context for children to access\nlet currentCanvasContext: CanvasRenderingContext2D | null = null\nconst drawQueue: CanvasDrawNode[] = []\n\nexport function getCanvasContext() {\n return currentCanvasContext\n}\n\nexport function queueDraw(node: CanvasDrawNode) {\n drawQueue.push(node)\n}\n\nexport function Canvas(props: CanvasProps) {\n const { width, height, children, style, ref } = props\n\n let canvas: HTMLCanvasElement | undefined\n let ctx: CanvasRenderingContext2D | null = null\n\n const render = () => {\n if (!canvas || !ctx) return\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Clear draw queue\n drawQueue.length = 0\n\n // Set current context for children\n currentCanvasContext = ctx\n\n // Render children (they will queue draw commands)\n if (Array.isArray(children)) {\n children.forEach(child => {\n if (typeof child === 'function') {\n child()\n }\n })\n } else if (typeof children === 'function') {\n children()\n }\n\n // Execute draw queue\n drawQueue.forEach(node => {\n drawNode(ctx!, node)\n })\n\n // Clear context\n currentCanvasContext = null\n }\n\n effect(() => {\n if (canvas) {\n render()\n }\n })\n\n return (\n <canvas\n ref={(el: HTMLCanvasElement) => {\n canvas = el\n ctx = el.getContext('2d')\n if (ref) ref(el)\n render()\n }}\n width={width}\n height={height}\n style={style}\n />\n )\n}\n\nfunction getValue(val: any): any {\n if (isReactive(val)) {\n return val.valueOf?.() ?? val\n }\n return val\n}\n\nfunction drawNode(ctx: CanvasRenderingContext2D, node: CanvasDrawNode) {\n const { type, props } = node\n\n // Apply opacity\n const opacity = getValue(props.opacity)\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n switch (type) {\n case 'rect': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const w = getValue(props.width)\n const h = getValue(props.height)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, w, h)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.strokeRect(x, y, w, h)\n }\n break\n }\n\n case 'circle': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, Math.PI * 2)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'arc': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const startAngle = getValue(props.startAngle)\n const endAngle = getValue(props.endAngle)\n const counterclockwise = getValue(props.counterclockwise) || false\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'line': {\n const x1 = getValue(props.x1)\n const y1 = getValue(props.y1)\n const x2 = getValue(props.x2)\n const y2 = getValue(props.y2)\n const stroke = getValue(props.stroke) || 'black'\n const strokeWidth = getValue(props.strokeWidth) || 1\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n break\n }\n\n case 'text': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const text = getValue(props.text)\n const fill = getValue(props.fill) || 'black'\n const fontSize = getValue(props.fontSize) || 16\n const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n const fontWeight = getValue(props.fontWeight) || 'normal'\n const textAlign = getValue(props.textAlign) || 'left'\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign as CanvasTextAlign\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n break\n }\n\n case 'path': {\n const d = getValue(props.d)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n // Parse SVG path data\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke(path)\n }\n break\n }\n }\n\n // Reset opacity\n if (opacity !== undefined) {\n ctx.globalAlpha = 1\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawRectProps {\n x: number | (() => number)\n y: number | (() => number)\n width: number | (() => number)\n height: number | (() => number)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawRect(props: DrawRectProps) {\n effect(() => {\n queueDraw({\n type: 'rect',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawCircleProps {\n x: number | (() => number)\n y: number | (() => number)\n radius: number | (() => number)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawCircle(props: DrawCircleProps) {\n effect(() => {\n queueDraw({\n type: 'circle',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawArcProps {\n x: number | (() => number)\n y: number | (() => number)\n radius: number | (() => number)\n startAngle: number | (() => number)\n endAngle: number | (() => number)\n counterclockwise?: boolean\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawArc(props: DrawArcProps) {\n effect(() => {\n queueDraw({\n type: 'arc',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawLineProps {\n x1: number | (() => number)\n y1: number | (() => number)\n x2: number | (() => number)\n y2: number | (() => number)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawLine(props: DrawLineProps) {\n effect(() => {\n queueDraw({\n type: 'line',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawTextProps {\n text: string | (() => string)\n x: number | (() => number)\n y: number | (() => number)\n fill?: string | (() => string)\n fontSize?: number | (() => number)\n fontFamily?: string | (() => string)\n fontWeight?: string | (() => string)\n textAlign?: 'left' | 'center' | 'right'\n opacity?: number | (() => number)\n}\n\nexport function DrawText(props: DrawTextProps) {\n effect(() => {\n queueDraw({\n type: 'text',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\n\nexport interface DrawPathProps {\n d: string | (() => string)\n fill?: string | (() => string)\n stroke?: string | (() => string)\n strokeWidth?: number | (() => number)\n opacity?: number | (() => number)\n}\n\nexport function DrawPath(props: DrawPathProps) {\n effect(() => {\n queueDraw({\n type: 'path',\n props\n })\n })\n\n return null\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/canvas/Canvas.tsx","../src/canvas/dom/DrawRect.tsx","../src/canvas/dom/DrawCircle.tsx","../src/canvas/dom/DrawArc.tsx","../src/canvas/dom/DrawLine.tsx","../src/canvas/dom/DrawText.tsx","../src/canvas/dom/DrawPath.tsx"],"names":["drawQueue","queueDraw","node","Canvas","props","width","height","children","style","ref","canvas","ctx","render","child","drawNode","effect","jsx","el","getValue","val","isReactive","type","opacity","x","y","w","h","fill","stroke","strokeWidth","radius","startAngle","endAngle","counterclockwise","x1","y1","x2","y2","text","fontSize","fontFamily","fontWeight","textAlign","d","path","DrawRect","DrawCircle","DrawArc","DrawLine","DrawText","DrawPath"],"mappings":"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","file":"canvas.mjs","sourcesContent":["import { effect } from '../core/lifecycle'\nimport { isReactive } from '../core/reactive'\nimport type { CanvasProps, CanvasDrawNode } from './types'\n\nexport type { CanvasProps }\n\n// Canvas context for children to access\nlet currentCanvasContext: CanvasRenderingContext2D | null = null\nconst drawQueue: CanvasDrawNode[] = []\n\nexport function getCanvasContext() {\n return currentCanvasContext\n}\n\nexport function queueDraw(node: CanvasDrawNode) {\n drawQueue.push(node)\n}\n\nexport function Canvas(props: CanvasProps) {\n const { width, height, children, style, ref } = props\n\n let canvas: HTMLCanvasElement | undefined\n let ctx: CanvasRenderingContext2D | null = null\n\n const render = () => {\n if (!canvas || !ctx) return\n\n // Clear canvas\n ctx.clearRect(0, 0, width, height)\n\n // Clear draw queue\n drawQueue.length = 0\n\n // Set current context for children\n currentCanvasContext = ctx\n\n // Render children (they will queue draw commands)\n if (Array.isArray(children)) {\n children.forEach(child => {\n if (typeof child === 'function') {\n child()\n }\n })\n } else if (typeof children === 'function') {\n children()\n }\n\n // Execute draw queue\n drawQueue.forEach(node => {\n drawNode(ctx!, node)\n })\n\n // Clear context\n currentCanvasContext = null\n }\n\n effect(() => {\n if (canvas) {\n render()\n }\n })\n\n return (\n <canvas\n ref={(el: HTMLCanvasElement) => {\n canvas = el\n ctx = el.getContext('2d')\n if (ref) ref(el)\n render()\n }}\n width={width}\n height={height}\n style={style}\n />\n )\n}\n\nfunction getValue(val: any): any {\n if (isReactive(val)) {\n return val.valueOf?.() ?? val\n }\n return val\n}\n\nfunction drawNode(ctx: CanvasRenderingContext2D, node: CanvasDrawNode) {\n const { type, props } = node\n\n // Apply opacity\n const opacity = getValue(props.opacity)\n if (opacity !== undefined) {\n ctx.globalAlpha = opacity\n }\n\n switch (type) {\n case 'rect': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const w = getValue(props.width)\n const h = getValue(props.height)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fillRect(x, y, w, h)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.strokeRect(x, y, w, h)\n }\n break\n }\n\n case 'circle': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, 0, Math.PI * 2)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'arc': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const radius = getValue(props.radius)\n const startAngle = getValue(props.startAngle)\n const endAngle = getValue(props.endAngle)\n const counterclockwise = getValue(props.counterclockwise) || false\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n ctx.beginPath()\n ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill()\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke()\n }\n break\n }\n\n case 'line': {\n const x1 = getValue(props.x1)\n const y1 = getValue(props.y1)\n const x2 = getValue(props.x2)\n const y2 = getValue(props.y2)\n const stroke = getValue(props.stroke) || 'black'\n const strokeWidth = getValue(props.strokeWidth) || 1\n\n ctx.beginPath()\n ctx.moveTo(x1, y1)\n ctx.lineTo(x2, y2)\n ctx.strokeStyle = stroke\n ctx.lineWidth = strokeWidth\n ctx.stroke()\n break\n }\n\n case 'text': {\n const x = getValue(props.x)\n const y = getValue(props.y)\n const text = getValue(props.text)\n const fill = getValue(props.fill) || 'black'\n const fontSize = getValue(props.fontSize) || 16\n const fontFamily = getValue(props.fontFamily) || 'sans-serif'\n const fontWeight = getValue(props.fontWeight) || 'normal'\n const textAlign = getValue(props.textAlign) || 'left'\n\n ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`\n ctx.textAlign = textAlign as CanvasTextAlign\n ctx.fillStyle = fill\n ctx.fillText(text, x, y)\n break\n }\n\n case 'path': {\n const d = getValue(props.d)\n const fill = getValue(props.fill)\n const stroke = getValue(props.stroke)\n const strokeWidth = getValue(props.strokeWidth)\n\n // Parse SVG path data\n const path = new Path2D(d)\n\n if (fill) {\n ctx.fillStyle = fill\n ctx.fill(path)\n }\n\n if (stroke) {\n ctx.strokeStyle = stroke\n if (strokeWidth) ctx.lineWidth = strokeWidth\n ctx.stroke(path)\n }\n break\n }\n }\n\n // Reset opacity\n if (opacity !== undefined) {\n ctx.globalAlpha = 1\n }\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawRectProps } from '../types'\n\nexport type { DrawRectProps }\n\nexport function DrawRect(props: DrawRectProps) {\n effect(() => {\n queueDraw({\n type: 'rect',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawCircleProps } from '../types'\n\nexport type { DrawCircleProps }\n\nexport function DrawCircle(props: DrawCircleProps) {\n effect(() => {\n queueDraw({\n type: 'circle',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawArcProps } from '../types'\n\nexport type { DrawArcProps }\n\nexport function DrawArc(props: DrawArcProps) {\n effect(() => {\n queueDraw({\n type: 'arc',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawLineProps } from '../types'\n\nexport type { DrawLineProps }\n\nexport function DrawLine(props: DrawLineProps) {\n effect(() => {\n queueDraw({\n type: 'line',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawTextProps } from '../types'\n\nexport type { DrawTextProps }\n\nexport function DrawText(props: DrawTextProps) {\n effect(() => {\n queueDraw({\n type: 'text',\n props\n })\n })\n\n return null\n}\n","import { effect } from '../../core/lifecycle'\nimport { queueDraw } from '../Canvas'\nimport type { DrawPathProps } from '../types'\n\nexport type { DrawPathProps }\n\nexport function DrawPath(props: DrawPathProps) {\n effect(() => {\n queueDraw({\n type: 'path',\n props\n })\n })\n\n return null\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var n=new Map;function a(t){let e=Symbol("context"),o=r=>r.children;return o._contextId=e,{Provider:o,id:e,defaultValue:t}}function p(t){return n.has(t.id)?n.get(t.id):t.defaultValue}function s(t,e){let o=n.get(t);return n.set(t,e),o}function c(t,e){e===void 0?n.delete(t):n.set(t,e);}export{a,p as b,s as c,c as d};//# sourceMappingURL=chunk-3DKZ2J4D.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-3DKZ2J4D.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/context.ts"],"names":["contextMap","createContext","defaultValue","id","Provider","props","context","ctx","pushContext","value","prev","popContext","prevValue"],"mappings":"AAIA,IAAMA,EAAa,IAAI,GAAA,CAEhB,SAASC,CAAAA,CAAiBC,EAA6B,CAC1D,IAAMC,CAAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CACrBC,CAAAA,CAAYC,GAAuCA,CAAAA,CAAM,QAAA,CAC/D,OAACD,CAAAA,CAAiB,UAAA,CAAaD,CAAAA,CACxB,CAAE,SAAAC,CAAAA,CAAU,EAAA,CAAAD,CAAAA,CAAI,YAAA,CAAAD,CAAa,CACxC,CAEO,SAASI,CAAAA,CAAWC,EAAoB,CAC3C,OAAOP,EAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIP,CAAAA,CAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIA,CAAAA,CAAI,YACjE,CAGO,SAASC,CAAAA,CAAYL,CAAAA,CAAYM,CAAAA,CAAY,CAChD,IAAMC,CAAAA,CAAOV,CAAAA,CAAW,IAAIG,CAAE,CAAA,CAC9B,OAAAH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIM,CAAK,EACjBC,CACX,CAGO,SAASC,CAAAA,CAAWR,CAAAA,CAAYS,EAAgB,CAC/CA,CAAAA,GAAc,MAAA,CACdZ,CAAAA,CAAW,OAAOG,CAAE,CAAA,CAEpBH,EAAW,GAAA,CAAIG,CAAAA,CAAIS,CAAS,EAEpC","file":"chunk-3DKZ2J4D.mjs","sourcesContent":["import type { Context } from './types'\n\nexport type { Context }\n\nconst contextMap = new Map<symbol, any>()\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context')\n const Provider = (props: { value: T; children: any }) => props.children;\n (Provider as any)._contextId = id\n return { Provider, id, defaultValue }\n}\n\nexport function context<T>(ctx: Context<T>): T {\n return contextMap.has(ctx.id) ? contextMap.get(ctx.id) : ctx.defaultValue\n}\n\n// Internal helpers for renderer\nexport function pushContext(id: symbol, value: any) {\n const prev = contextMap.get(id)\n contextMap.set(id, value)\n return prev\n}\n\n\nexport function popContext(id: symbol, prevValue: any) {\n if (prevValue === undefined) {\n contextMap.delete(id)\n } else {\n contextMap.set(id, prevValue)\n }\n}\n\nexport function snapshotContext(): Map<symbol, any> {\n return new Map(contextMap)\n}\n\nexport function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R {\n // 1. Save current context\n const prevContext = new Map(contextMap)\n\n // 2. Apply snapshot\n contextMap.clear()\n snapshot.forEach((value, key) => contextMap.set(key, value))\n\n try {\n return fn()\n } finally {\n // 3. Restore previous context\n contextMap.clear()\n prevContext.forEach((value, key) => contextMap.set(key, value))\n }\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var t=null;function s(n,o){let e=t;t=n,n.hookIndex=0;try{return o()}finally{t=e;}}function c(n){if(!t)return n();let o=t,{hooks:e,hookIndex:r}=o;if(r<e.length)return o.hookIndex++,e[r];let u=n();return e.push(u),o.hookIndex++,u}export{s as a,c as b};//# sourceMappingURL=chunk-5PNH2ARD.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-5PNH2ARD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/hook.ts"],"names":["currentComponent","runWithComponent","component","fn","prev","hook","factory","instance","hooks","hookIndex","value"],"mappings":"AAMA,IAAIA,CAAAA,CAA6C,IAAA,CAM1C,SAASC,CAAAA,CAAoBC,CAAAA,CAA8BC,CAAAA,CAAgB,CAC9E,IAAMC,CAAAA,CAAOJ,CAAAA,CACbA,CAAAA,CAAmBE,CAAAA,CACnBA,EAAU,SAAA,CAAY,CAAA,CACtB,GAAI,CACA,OAAOC,CAAAA,EACX,CAAA,OAAE,CACEH,CAAAA,CAAmBI,EACvB,CACJ,CAEO,SAASC,CAAAA,CAAQC,CAAAA,CAAqB,CACzC,GAAI,CAACN,CAAAA,CAED,OAAOM,CAAAA,EAAQ,CAGnB,IAAMC,CAAAA,CAAWP,CAAAA,CACX,CAAE,KAAA,CAAAQ,CAAAA,CAAO,SAAA,CAAAC,CAAU,CAAA,CAAIF,CAAAA,CAE7B,GAAIE,CAAAA,CAAYD,EAAM,MAAA,CAElB,OAAAD,CAAAA,CAAS,SAAA,EAAA,CACFC,CAAAA,CAAMC,CAAS,CAAA,CAI1B,IAAMC,EAAQJ,CAAAA,EAAQ,CACtB,OAAAE,CAAAA,CAAM,IAAA,CAAKE,CAAK,CAAA,CAChBH,CAAAA,CAAS,YAEFG,CACX","file":"chunk-5PNH2ARD.mjs","sourcesContent":["\nexport interface ComponentInstance {\n hooks: any[]\n hookIndex: number\n}\n\nlet currentComponent: ComponentInstance | null = null\n\nexport function getComponent(): ComponentInstance | null {\n return currentComponent\n}\n\nexport function runWithComponent<T>(component: ComponentInstance, fn: () => T): T {\n const prev = currentComponent\n currentComponent = component\n component.hookIndex = 0\n try {\n return fn()\n } finally {\n currentComponent = prev\n }\n}\n\nexport function hook<T>(factory: () => T): T {\n if (!currentComponent) {\n // Outside component: just run factory\n return factory()\n }\n\n const instance = currentComponent\n const { hooks, hookIndex } = instance\n\n if (hookIndex < hooks.length) {\n // Return existing hook\n instance.hookIndex++\n return hooks[hookIndex] as T\n }\n\n // Create new hook\n const value = factory()\n hooks.push(value)\n instance.hookIndex++\n\n return value\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
'use strict';var chunkYWTD32NA_js=require('./chunk-YWTD32NA.js');var p=Symbol("flexium.reactive"),s=new WeakMap,l=new WeakMap;function M(e){if(e&&e[p])return e;let o=l.get(e);if(o)return o;let t=new Proxy(e,{get(n,r,i){if(r===p)return true;let c=Reflect.get(n,r,i);return b(n,r),c!==null&&typeof c=="object"?M(c):c},set(n,r,i,c){let x=n[r],a=Reflect.set(n,r,i,c);return a&&d(i,x)&&w(n,r),a}});return l.set(e,t),t}function b(e,o){if(!chunkYWTD32NA_js.a)return;let t=s.get(e);t||s.set(e,t=new Map);let n=t.get(o);n||t.set(o,n=new Set),chunkYWTD32NA_js.c(n);}function w(e,o){let t=s.get(e);if(!t)return;let n=t.get(o);n&&chunkYWTD32NA_js.d(n);}function d(e,o){return !Object.is(e,o)}function T(e){return !!(e&&e[p])}exports.a=M;exports.b=T;//# sourceMappingURL=chunk-6VIRXD2Y.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-6VIRXD2Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/reactive.ts"],"names":["REACTIVE_SIGNAL","targetMap","reactiveMap","reactive","target","existingProxy","proxy","key","receiver","res","track","value","oldValue","result","hasChanged","trigger","activeEffect","depsMap","dep","trackEffect","triggerEffects","isReactive"],"mappings":"iEAEO,IAAMA,CAAAA,CAAkB,OAAO,kBAAkB,CAAA,CAIlDC,EAAY,IAAI,OAAA,CAGhBC,EAAc,IAAI,OAAA,CAEjB,SAASC,CAAAA,CAA2BC,CAAAA,CAAc,CACrD,GAAIA,CAAAA,EAAWA,EAAeJ,CAAe,CAAA,CACzC,OAAOI,CAAAA,CAGX,IAAMC,CAAAA,CAAgBH,EAAY,GAAA,CAAIE,CAAM,EAC5C,GAAIC,CAAAA,CACA,OAAOA,CAAAA,CAGX,IAAMC,CAAAA,CAAQ,IAAI,KAAA,CAAMF,CAAAA,CAAQ,CAC5B,GAAA,CAAIA,CAAAA,CAAQG,EAAKC,CAAAA,CAAU,CACvB,GAAID,CAAAA,GAAQP,CAAAA,CAAiB,OAAO,KAAA,CAEpC,IAAMS,CAAAA,CAAM,QAAQ,GAAA,CAAIL,CAAAA,CAAQG,EAAKC,CAAQ,CAAA,CAI7C,OAFAE,CAAAA,CAAMN,CAAAA,CAAQG,CAAG,CAAA,CAEbE,CAAAA,GAAQ,MAAQ,OAAOA,CAAAA,EAAQ,SACxBN,CAAAA,CAASM,CAAG,EAGhBA,CACX,CAAA,CACA,GAAA,CAAIL,CAAAA,CAAQG,CAAAA,CAAKI,CAAAA,CAAOH,EAAU,CAC9B,IAAMI,EAAYR,CAAAA,CAAeG,CAAG,EAC9BM,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAIT,CAAAA,CAAQG,CAAAA,CAAKI,CAAAA,CAAOH,CAAQ,CAAA,CAEvD,OAAIK,GAAUC,CAAAA,CAAWH,CAAAA,CAAOC,CAAQ,CAAA,EACpCG,CAAAA,CAAQX,CAAAA,CAAQG,CAAG,CAAA,CAGhBM,CACX,CACJ,CAAC,CAAA,CAED,OAAAX,CAAAA,CAAY,GAAA,CAAIE,EAAQE,CAAK,CAAA,CACtBA,CACX,CAEO,SAASI,EAAMN,CAAAA,CAAgBG,CAAAA,CAAc,CAChD,GAAI,CAACS,mBAAc,OAEnB,IAAIC,CAAAA,CAAUhB,CAAAA,CAAU,GAAA,CAAIG,CAAM,EAC7Ba,CAAAA,EACDhB,CAAAA,CAAU,IAAIG,CAAAA,CAASa,CAAAA,CAAU,IAAI,GAAM,CAAA,CAG/C,IAAIC,CAAAA,CAAMD,CAAAA,CAAQ,GAAA,CAAIV,CAAG,CAAA,CACpBW,CAAAA,EACDD,EAAQ,GAAA,CAAIV,CAAAA,CAAMW,EAAM,IAAI,GAAM,CAAA,CAGtCC,kBAAAA,CAAYD,CAAG,EACnB,CAEO,SAASH,CAAAA,CAAQX,EAAgBG,CAAAA,CAAc,CAClD,IAAMU,CAAAA,CAAUhB,CAAAA,CAAU,GAAA,CAAIG,CAAM,CAAA,CACpC,GAAI,CAACa,CAAAA,CAAS,OAEd,IAAMC,CAAAA,CAAMD,CAAAA,CAAQ,IAAIV,CAAG,CAAA,CACvBW,CAAAA,EACAE,kBAAAA,CAAeF,CAAG,EAE1B,CAEA,SAASJ,CAAAA,CAAWH,EAAYC,CAAAA,CAAwB,CACpD,OAAO,CAAC,MAAA,CAAO,EAAA,CAAGD,CAAAA,CAAOC,CAAQ,CACrC,CAEO,SAASS,CAAAA,CAAWV,EAAyB,CAChD,OAAO,CAAC,EAAEA,CAAAA,EAAUA,CAAAA,CAAcX,CAAe,CAAA,CACrD","file":"chunk-6VIRXD2Y.js","sourcesContent":["import { activeEffect, trackEffect, triggerEffects } from './lifecycle'\n\nexport const REACTIVE_SIGNAL = Symbol('flexium.reactive')\n\ntype Dep = Set<any>\ntype KeyToDepMap = Map<any, Dep>\nconst targetMap = new WeakMap<any, KeyToDepMap>()\n\n// WeakMap to store existing proxies to avoid duplicates\nconst reactiveMap = new WeakMap<object, any>()\n\nexport function reactive<T extends object>(target: T): T {\n if (target && (target as any)[REACTIVE_SIGNAL]) {\n return target\n }\n\n const existingProxy = reactiveMap.get(target)\n if (existingProxy) {\n return existingProxy\n }\n\n const proxy = new Proxy(target, {\n get(target, key, receiver) {\n if (key === REACTIVE_SIGNAL) return true\n\n const res = Reflect.get(target, key, receiver)\n\n track(target, key)\n\n if (res !== null && typeof res === 'object') {\n return reactive(res)\n }\n\n return res\n },\n set(target, key, value, receiver) {\n const oldValue = (target as any)[key]\n const result = Reflect.set(target, key, value, receiver)\n\n if (result && hasChanged(value, oldValue)) {\n trigger(target, key)\n }\n\n return result\n }\n })\n\n reactiveMap.set(target, proxy)\n return proxy\n}\n\nexport function track(target: object, key: unknown) {\n if (!activeEffect) return\n\n let depsMap = targetMap.get(target)\n if (!depsMap) {\n targetMap.set(target, (depsMap = new Map()))\n }\n\n let dep = depsMap.get(key)\n if (!dep) {\n depsMap.set(key, (dep = new Set()))\n }\n\n trackEffect(dep)\n}\n\nexport function trigger(target: object, key: unknown) {\n const depsMap = targetMap.get(target)\n if (!depsMap) return\n\n const dep = depsMap.get(key)\n if (dep) {\n triggerEffects(dep)\n }\n}\n\nfunction hasChanged(value: any, oldValue: any): boolean {\n return !Object.is(value, oldValue)\n}\n\nexport function isReactive(value: unknown): boolean {\n return !!(value && (value as any)[REACTIVE_SIGNAL])\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
'use strict';var chunkPSKDIB7J_js=require('./chunk-PSKDIB7J.js'),chunkYWTD32NA_js=require('./chunk-YWTD32NA.js'),chunkUWFVCKRU_js=require('./chunk-UWFVCKRU.js');var p=new WeakMap,h=null;function E(e){e.children.forEach(n=>{E(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function S(e,n,o){let c=o||n,r=f=>{let u={...f.props};return f.children&&f.children.length>0&&(u.children=f.children.length===1?f.children[0]:f.children),u},a=e.key!==void 0;p.has(c)||p.set(c,new Map);let t=p.get(c),i;if(a)i=e.key;else {let f=0,u=e.type.name||"anonymous";t.forEach((b,l)=>{typeof l=="string"&&l.startsWith(`__auto_${u}_`)&&f++;}),i=`__auto_${u}_${f}`;}if(t.has(i)){let f=t.get(i);f.fnode=e;let u=r(e);return f.props=u,f.children.clear(),f.renderFn&&f.renderFn(),f.nodes}let s={hooks:[],hookIndex:0,nodes:[],parent:n,fnode:e,props:r(e),key:i,children:new Set,parentInstance:h||void 0};h&&h.children.add(s),t.set(i,s);let d=true,_=()=>{let f=s.fnode,u=s.props;f.type._contextId!==void 0&&chunkPSKDIB7J_js.c(f.type._contextId,u.value);let l=h;h=s;let v=chunkUWFVCKRU_js.a(s,()=>f.type(u));if(d){let g=y(v,n);s.nodes=g?Array.isArray(g)?g:[g]:[],s.nodes.forEach(m=>{m.__ownerInstance||(m.__ownerInstance=s);}),d=false;}else {if(s.nodes.length===0){let C=y(v,n);s.nodes=C?Array.isArray(C)?C:[C]:[],h=l;return}let m=s.nodes[0].parentNode;if(!m){h=l;return}let M=document.createComment("flexium-marker"),I=s.nodes[s.nodes.length-1];I.nextSibling?m.insertBefore(M,I.nextSibling):m.appendChild(M),s.children.clear();let x=document.createElement("div"),T=y(v,x,m),O=T?Array.isArray(T)?T:[T]:[],R=P(s.nodes,O,m,M);m.removeChild(M),s.nodes=R;}h=l;};return s.renderFn=_,chunkYWTD32NA_js.b(_),s.nodes}function y(e,n,o){let c=o||n;if(e==null||typeof e=="boolean"){let r=document.createTextNode("");return n.appendChild(r),r}if(typeof e=="string"||typeof e=="number"){let r=document.createTextNode(String(e));return n.appendChild(r),r}if(Array.isArray(e)){let r=new Set;p.has(c)&&p.get(c).forEach((s,d)=>r.add(d));let a=[];e.forEach(i=>{let s=y(i,n,o);s&&(Array.isArray(s)?a.push(...s):a.push(s));});let t=new Set;if(p.has(c)&&p.get(c).forEach((s,d)=>t.add(d)),p.has(c)){let i=p.get(c),s=[];r.forEach(d=>{if(!t.has(d)){let _=i.get(d);_&&(E(_),s.push(d));}}),s.forEach(d=>i.delete(d));}return a}if(typeof e=="object"){if(typeof e.type=="string"){let r=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([a,t])=>{if(a==="ref")typeof t=="function"?t(r):t&&typeof t=="object"&&"current"in t&&(t.current=r);else if(a.startsWith("on")&&typeof t=="function"){let i=a.slice(2).toLowerCase();r.addEventListener(i,t),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=t;}else a!=="ref"&&D(r,a,t);}),e.children&&e.children.length>0&&e.children.forEach(a=>{y(a,r);}),n.appendChild(r),r}if(typeof e.type=="function")return S(e,n,o)}return null}function D(e,n,o){o==null?e.removeAttribute(n):n==="style"&&typeof o=="object"?Object.assign(e.style,o):n==="class"?e.className=String(o):n in e&&typeof e[n]!="function"?e[n]=o:e.setAttribute(n,String(o));}function j(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function k(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&(t.name==="value"&&"value"in e?e.value=t.value:t.name==="checked"&&"checked"in e?e.checked=t.value==="true"||t.value==="":e.setAttribute(t.name,t.value));});let r=e.__eventHandlers||{},a=n.__eventHandlers||{};Object.keys(r).forEach(t=>{a[t]||e.removeEventListener(t,r[t]);}),Object.keys(a).forEach(t=>{r[t]!==a[t]&&(r[t]&&e.removeEventListener(t,r[t]),e.addEventListener(t,a[t]));}),Object.keys(a).length>0?e.__eventHandlers=a:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function F(e,n){let o=Array.from(e.childNodes),c=Array.from(n.childNodes),r=Math.max(o.length,c.length);for(let a=0;a<r;a++){let t=o[a],i=c[a];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&H(t,i,e);}}function H(e,n,o){if(j(e,n)){let c=n.__ownerInstance;if(c){let r=c.nodes.indexOf(n);r!==-1&&(c.nodes[r]=e),e.__ownerInstance=c,delete n.__ownerInstance;}e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(k(e,n),F(e,n));}else o.replaceChild(n,e);}function P(e,n,o,c){let r=Math.max(e.length,n.length),a=[];for(let t=0;t<r;t++){let i=e[t],s=n[t];!i&&s?(o.insertBefore(s,c),a.push(s)):i&&!s?i.parentNode&&o.removeChild(i):i&&s&&(H(i,s,o),a.push(i));}return a}function $(e,n){n.innerHTML="",typeof e=="function"&&(e={type:e,props:{},children:[],key:void 0}),y(e,n);}exports.a=P;exports.b=$;//# sourceMappingURL=chunk-6Z33DLMI.js.map
|
|
2
|
+
//# sourceMappingURL=chunk-6Z33DLMI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom/render.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentFnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","nodeParent","marker","lastNode","tempContainer","newNodesArray","reconciledNodes","reconcile","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","ownerInstance","idx","oldNodes","beforeMarker","resultNodes","render","app","container"],"mappings":"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","file":"chunk-6Z33DLMI.js","sourcesContent":["import { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n instance.children.clear()\n\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n const hasExplicitKey = fnode.key !== undefined\n\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n instance.fnode = fnode\n const newProps = mergeProps(fnode)\n instance.props = newProps\n instance.children.clear()\n\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode: fnode,\n props: mergeProps(fnode),\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n let isFirstRender = true\n\n const renderFn = () => {\n const currentFnode = instance.fnode\n const currentProps = instance.props\n\n const isProvider = (currentFnode.type as any)._contextId !== undefined\n if (isProvider) {\n pushContext((currentFnode.type as any)._contextId, currentProps.value)\n }\n\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n const result = runWithComponent(instance, () => currentFnode.type(currentProps))\n\n if (isFirstRender) {\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n instance.nodes.forEach(node => {\n if (!(node as any).__ownerInstance) {\n (node as any).__ownerInstance = instance\n }\n })\n isFirstRender = false\n } else {\n if (instance.nodes.length === 0) {\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const marker = document.createComment('flexium-marker')\n const lastNode = instance.nodes[instance.nodes.length - 1]\n if (lastNode.nextSibling) {\n nodeParent.insertBefore(marker, lastNode.nextSibling)\n } else {\n nodeParent.appendChild(marker)\n }\n\n instance.children.clear()\n\n const tempContainer = document.createElement('div')\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n const reconciledNodes = reconcile(instance.nodes, newNodesArray, nodeParent, marker)\n\n nodeParent.removeChild(marker)\n\n instance.nodes = reconciledNodes\n }\n\n currentRenderingInstance = previousRenderingInstance\n }\n\n instance.renderFn = renderFn\n\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n const effectiveRegistryParent = registryParent || parent\n\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('')\n parent.appendChild(node)\n return node\n }\n\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode))\n parent.appendChild(node)\n return node\n }\n\n if (Array.isArray(fnode)) {\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n const nodes: Node[] = []\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n })\n\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes\n }\n\n if (typeof fnode === 'object') {\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type)\n\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key === 'ref') {\n // Handle both callback refs and RefObject\n if (typeof value === 'function') {\n value(dom)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = dom\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n dom.addEventListener(eventName, value as EventListener)\n\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {}\n }\n (dom as any).__eventHandlers[eventName] = value\n } else if (key !== 'ref') {\n setAttribute(dom, key, value)\n }\n })\n }\n\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom)\n })\n }\n\n parent.appendChild(dom)\n return dom\n }\n\n if (typeof fnode.type === 'function') {\n return renderComponent(fnode, parent, registryParent)\n }\n }\n\n return null\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n (el as any)[key] = value\n } else {\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n if (attr.name === 'value' && 'value' in oldEl) {\n (oldEl as HTMLInputElement).value = attr.value\n } else if (attr.name === 'checked' && 'checked' in oldEl) {\n (oldEl as HTMLInputElement).checked = attr.value === 'true' || attr.value === ''\n } else {\n oldEl.setAttribute(attr.name, attr.value)\n }\n }\n })\n\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n const ownerInstance = (newNode as any).__ownerInstance as DOMComponentInstance | undefined\n if (ownerInstance) {\n const idx = ownerInstance.nodes.indexOf(newNode)\n if (idx !== -1) {\n ownerInstance.nodes[idx] = oldNode\n }\n ;(oldNode as any).__ownerInstance = ownerInstance\n delete (newNode as any).__ownerInstance\n }\n\n if (oldNode.nodeType === Node.TEXT_NODE) {\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n parent.replaceChild(newNode, oldNode)\n }\n}\n\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n if (typeof app === 'function') {\n app = { type: app, props: {}, children: [], key: undefined }\n }\n\n renderNode(app, container)\n}\n"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {c}from'./chunk-3DKZ2J4D.mjs';import {b}from'./chunk-IWFEXW4F.mjs';import {a}from'./chunk-5PNH2ARD.mjs';var p=new WeakMap,h=null;function E(e){e.children.forEach(n=>{E(n);}),e.nodes.forEach(n=>{n.parentNode&&n.parentNode.removeChild(n);}),e.children.clear(),e.parentInstance&&e.parentInstance.children.delete(e);}function S(e,n,o){let c$1=o||n,r=f=>{let u={...f.props};return f.children&&f.children.length>0&&(u.children=f.children.length===1?f.children[0]:f.children),u},a$1=e.key!==void 0;p.has(c$1)||p.set(c$1,new Map);let t=p.get(c$1),i;if(a$1)i=e.key;else {let f=0,u=e.type.name||"anonymous";t.forEach((b,l)=>{typeof l=="string"&&l.startsWith(`__auto_${u}_`)&&f++;}),i=`__auto_${u}_${f}`;}if(t.has(i)){let f=t.get(i);f.fnode=e;let u=r(e);return f.props=u,f.children.clear(),f.renderFn&&f.renderFn(),f.nodes}let s={hooks:[],hookIndex:0,nodes:[],parent:n,fnode:e,props:r(e),key:i,children:new Set,parentInstance:h||void 0};h&&h.children.add(s),t.set(i,s);let d=true,_=()=>{let f=s.fnode,u=s.props;f.type._contextId!==void 0&&c(f.type._contextId,u.value);let l=h;h=s;let v=a(s,()=>f.type(u));if(d){let g=y(v,n);s.nodes=g?Array.isArray(g)?g:[g]:[],s.nodes.forEach(m=>{m.__ownerInstance||(m.__ownerInstance=s);}),d=false;}else {if(s.nodes.length===0){let C=y(v,n);s.nodes=C?Array.isArray(C)?C:[C]:[],h=l;return}let m=s.nodes[0].parentNode;if(!m){h=l;return}let M=document.createComment("flexium-marker"),I=s.nodes[s.nodes.length-1];I.nextSibling?m.insertBefore(M,I.nextSibling):m.appendChild(M),s.children.clear();let x=document.createElement("div"),T=y(v,x,m),O=T?Array.isArray(T)?T:[T]:[],R=P(s.nodes,O,m,M);m.removeChild(M),s.nodes=R;}h=l;};return s.renderFn=_,b(_),s.nodes}function y(e,n,o){let c=o||n;if(e==null||typeof e=="boolean"){let r=document.createTextNode("");return n.appendChild(r),r}if(typeof e=="string"||typeof e=="number"){let r=document.createTextNode(String(e));return n.appendChild(r),r}if(Array.isArray(e)){let r=new Set;p.has(c)&&p.get(c).forEach((s,d)=>r.add(d));let a=[];e.forEach(i=>{let s=y(i,n,o);s&&(Array.isArray(s)?a.push(...s):a.push(s));});let t=new Set;if(p.has(c)&&p.get(c).forEach((s,d)=>t.add(d)),p.has(c)){let i=p.get(c),s=[];r.forEach(d=>{if(!t.has(d)){let _=i.get(d);_&&(E(_),s.push(d));}}),s.forEach(d=>i.delete(d));}return a}if(typeof e=="object"){if(typeof e.type=="string"){let r=document.createElement(e.type);return e.props&&Object.entries(e.props).forEach(([a,t])=>{if(a==="ref")typeof t=="function"?t(r):t&&typeof t=="object"&&"current"in t&&(t.current=r);else if(a.startsWith("on")&&typeof t=="function"){let i=a.slice(2).toLowerCase();r.addEventListener(i,t),r.__eventHandlers||(r.__eventHandlers={}),r.__eventHandlers[i]=t;}else a!=="ref"&&D(r,a,t);}),e.children&&e.children.length>0&&e.children.forEach(a=>{y(a,r);}),n.appendChild(r),r}if(typeof e.type=="function")return S(e,n,o)}return null}function D(e,n,o){o==null?e.removeAttribute(n):n==="style"&&typeof o=="object"?Object.assign(e.style,o):n==="class"?e.className=String(o):n in e&&typeof e[n]!="function"?e[n]=o:e.setAttribute(n,String(o));}function j(e,n){return e.nodeType!==n.nodeType?false:e.nodeType===Node.ELEMENT_NODE&&n.nodeType===Node.ELEMENT_NODE?e.tagName===n.tagName:true}function k(e,n){Array.from(e.attributes).forEach(t=>{n.hasAttribute(t.name)||e.removeAttribute(t.name);}),Array.from(n.attributes).forEach(t=>{e.getAttribute(t.name)!==t.value&&(t.name==="value"&&"value"in e?e.value=t.value:t.name==="checked"&&"checked"in e?e.checked=t.value==="true"||t.value==="":e.setAttribute(t.name,t.value));});let r=e.__eventHandlers||{},a=n.__eventHandlers||{};Object.keys(r).forEach(t=>{a[t]||e.removeEventListener(t,r[t]);}),Object.keys(a).forEach(t=>{r[t]!==a[t]&&(r[t]&&e.removeEventListener(t,r[t]),e.addEventListener(t,a[t]));}),Object.keys(a).length>0?e.__eventHandlers=a:delete e.__eventHandlers,e instanceof HTMLInputElement&&n instanceof HTMLInputElement&&(e.value!==n.value&&(e.value=n.value),e.checked!==n.checked&&(e.checked=n.checked)),e instanceof HTMLTextAreaElement&&n instanceof HTMLTextAreaElement&&e.value!==n.value&&(e.value=n.value),e instanceof HTMLSelectElement&&n instanceof HTMLSelectElement&&e.value!==n.value&&(e.value=n.value);}function F(e,n){let o=Array.from(e.childNodes),c=Array.from(n.childNodes),r=Math.max(o.length,c.length);for(let a=0;a<r;a++){let t=o[a],i=c[a];!t&&i?e.appendChild(i):t&&!i?e.removeChild(t):t&&i&&H(t,i,e);}}function H(e,n,o){if(j(e,n)){let c=n.__ownerInstance;if(c){let r=c.nodes.indexOf(n);r!==-1&&(c.nodes[r]=e),e.__ownerInstance=c,delete n.__ownerInstance;}e.nodeType===Node.TEXT_NODE?e.nodeValue!==n.nodeValue&&(e.nodeValue=n.nodeValue):e.nodeType===Node.ELEMENT_NODE&&(k(e,n),F(e,n));}else o.replaceChild(n,e);}function P(e,n,o,c){let r=Math.max(e.length,n.length),a=[];for(let t=0;t<r;t++){let i=e[t],s=n[t];!i&&s?(o.insertBefore(s,c),a.push(s)):i&&!s?i.parentNode&&o.removeChild(i):i&&s&&(H(i,s,o),a.push(i));}return a}function $(e,n){n.innerHTML="",typeof e=="function"&&(e={type:e,props:{},children:[],key:void 0}),y(e,n);}export{P as a,$ as b};//# sourceMappingURL=chunk-E75BJDOQ.mjs.map
|
|
2
|
+
//# sourceMappingURL=chunk-E75BJDOQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/dom/render.ts"],"names":["instanceRegistry","currentRenderingInstance","removeComponentInstance","instance","child","node","renderComponent","fnode","parent","registryParent","effectiveRegistryParent","mergeProps","props","hasExplicitKey","parentRegistry","key","instanceCount","componentName","_","k","newProps","isFirstRender","renderFn","currentFnode","currentProps","pushContext","previousRenderingInstance","result","runWithComponent","newNodes","renderNode","nodeParent","marker","lastNode","tempContainer","newNodesArray","reconciledNodes","reconcile","unsafeEffect","oldKeysSet","nodes","newKeysSet","keysToRemove","dom","value","eventName","setAttribute","el","canReuse","oldNode","newNode","updateAttributes","oldEl","newEl","attr","oldHandlers","newHandlers","event","reconcileChildren","oldChildren","newChildren","maxLen","i","oldChild","newChild","patchNode","ownerInstance","idx","oldNodes","beforeMarker","resultNodes","render","app","container"],"mappings":"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","file":"chunk-E75BJDOQ.mjs","sourcesContent":["import { pushContext } from '../core/context'\nimport { runWithComponent, type ComponentInstance } from '../core/hook'\nimport { unsafeEffect } from '../core/lifecycle'\n\n// Extended ComponentInstance for DOM tracking\ninterface DOMComponentInstance extends ComponentInstance {\n nodes: Node[]\n parent: HTMLElement\n fnode: any\n props: any\n key?: any\n renderFn?: () => void\n children: Set<DOMComponentInstance>\n parentInstance?: DOMComponentInstance\n}\n\n// Registry to store component instances by parent and key\nconst instanceRegistry = new WeakMap<HTMLElement, Map<any, DOMComponentInstance>>()\n\n// Current rendering component instance (for tracking parent-child relationships)\nlet currentRenderingInstance: DOMComponentInstance | null = null\n\n// Recursively remove component instance and all its children\nfunction removeComponentInstance(instance: DOMComponentInstance): void {\n instance.children.forEach(child => {\n removeComponentInstance(child)\n })\n\n instance.nodes.forEach(node => {\n if (node.parentNode) {\n node.parentNode.removeChild(node)\n }\n })\n\n instance.children.clear()\n\n if (instance.parentInstance) {\n instance.parentInstance.children.delete(instance)\n }\n}\n\n// Render a function component with reactive re-rendering\nfunction renderComponent(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node[] {\n const effectiveRegistryParent = registryParent || parent\n\n const mergeProps = (node: any) => {\n const props = { ...node.props }\n if (node.children && node.children.length > 0) {\n props.children = node.children.length === 1\n ? node.children[0]\n : node.children\n }\n return props\n }\n\n const hasExplicitKey = fnode.key !== undefined\n\n if (!instanceRegistry.has(effectiveRegistryParent)) {\n instanceRegistry.set(effectiveRegistryParent, new Map())\n }\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n\n let key: any\n if (hasExplicitKey) {\n key = fnode.key\n } else {\n let instanceCount = 0\n const componentName = fnode.type.name || 'anonymous'\n parentRegistry.forEach((_, k) => {\n if (typeof k === 'string' && k.startsWith(`__auto_${componentName}_`)) {\n instanceCount++\n }\n })\n key = `__auto_${componentName}_${instanceCount}`\n }\n\n if (parentRegistry.has(key)) {\n const instance = parentRegistry.get(key)!\n instance.fnode = fnode\n const newProps = mergeProps(fnode)\n instance.props = newProps\n instance.children.clear()\n\n if (instance.renderFn) {\n instance.renderFn()\n }\n\n return instance.nodes\n }\n\n const instance: DOMComponentInstance = {\n hooks: [],\n hookIndex: 0,\n nodes: [],\n parent,\n fnode: fnode,\n props: mergeProps(fnode),\n key,\n children: new Set(),\n parentInstance: currentRenderingInstance || undefined\n }\n\n if (currentRenderingInstance) {\n currentRenderingInstance.children.add(instance)\n }\n\n parentRegistry.set(key, instance)\n\n let isFirstRender = true\n\n const renderFn = () => {\n const currentFnode = instance.fnode\n const currentProps = instance.props\n\n const isProvider = (currentFnode.type as any)._contextId !== undefined\n if (isProvider) {\n pushContext((currentFnode.type as any)._contextId, currentProps.value)\n }\n\n const previousRenderingInstance = currentRenderingInstance\n currentRenderingInstance = instance\n\n const result = runWithComponent(instance, () => currentFnode.type(currentProps))\n\n if (isFirstRender) {\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n instance.nodes.forEach(node => {\n if (!(node as any).__ownerInstance) {\n (node as any).__ownerInstance = instance\n }\n })\n isFirstRender = false\n } else {\n if (instance.nodes.length === 0) {\n const newNodes = renderNode(result, parent)\n instance.nodes = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const firstNode = instance.nodes[0]\n const nodeParent = firstNode.parentNode as HTMLElement\n\n if (!nodeParent) {\n currentRenderingInstance = previousRenderingInstance\n return\n }\n\n const marker = document.createComment('flexium-marker')\n const lastNode = instance.nodes[instance.nodes.length - 1]\n if (lastNode.nextSibling) {\n nodeParent.insertBefore(marker, lastNode.nextSibling)\n } else {\n nodeParent.appendChild(marker)\n }\n\n instance.children.clear()\n\n const tempContainer = document.createElement('div')\n const newNodes = renderNode(result, tempContainer, nodeParent)\n const newNodesArray = newNodes ? (Array.isArray(newNodes) ? newNodes : [newNodes]) : []\n\n const reconciledNodes = reconcile(instance.nodes, newNodesArray, nodeParent, marker)\n\n nodeParent.removeChild(marker)\n\n instance.nodes = reconciledNodes\n }\n\n currentRenderingInstance = previousRenderingInstance\n }\n\n instance.renderFn = renderFn\n\n unsafeEffect(renderFn)\n\n return instance.nodes\n}\n\nfunction renderNode(fnode: any, parent: HTMLElement, registryParent?: HTMLElement): Node | Node[] | null {\n const effectiveRegistryParent = registryParent || parent\n\n if (fnode === null || fnode === undefined || typeof fnode === 'boolean') {\n const node = document.createTextNode('')\n parent.appendChild(node)\n return node\n }\n\n if (typeof fnode === 'string' || typeof fnode === 'number') {\n const node = document.createTextNode(String(fnode))\n parent.appendChild(node)\n return node\n }\n\n if (Array.isArray(fnode)) {\n const oldKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => oldKeysSet.add(key))\n }\n\n const nodes: Node[] = []\n fnode.forEach((child) => {\n const result = renderNode(child, parent, registryParent)\n if (result) {\n if (Array.isArray(result)) {\n nodes.push(...result)\n } else {\n nodes.push(result)\n }\n }\n })\n\n const newKeysSet = new Set<any>()\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n parentRegistry.forEach((_, key) => newKeysSet.add(key))\n }\n\n if (instanceRegistry.has(effectiveRegistryParent)) {\n const parentRegistry = instanceRegistry.get(effectiveRegistryParent)!\n const keysToRemove: any[] = []\n\n oldKeysSet.forEach(key => {\n if (!newKeysSet.has(key)) {\n const instance = parentRegistry.get(key)\n if (instance) {\n removeComponentInstance(instance)\n keysToRemove.push(key)\n }\n }\n })\n\n keysToRemove.forEach(key => parentRegistry.delete(key))\n }\n\n return nodes\n }\n\n if (typeof fnode === 'object') {\n if (typeof fnode.type === 'string') {\n const dom = document.createElement(fnode.type)\n\n if (fnode.props) {\n Object.entries(fnode.props).forEach(([key, value]) => {\n if (key === 'ref') {\n // Handle both callback refs and RefObject\n if (typeof value === 'function') {\n value(dom)\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = dom\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase()\n dom.addEventListener(eventName, value as EventListener)\n\n if (!(dom as any).__eventHandlers) {\n (dom as any).__eventHandlers = {}\n }\n (dom as any).__eventHandlers[eventName] = value\n } else if (key !== 'ref') {\n setAttribute(dom, key, value)\n }\n })\n }\n\n if (fnode.children && fnode.children.length > 0) {\n fnode.children.forEach((child: any) => {\n renderNode(child, dom)\n })\n }\n\n parent.appendChild(dom)\n return dom\n }\n\n if (typeof fnode.type === 'function') {\n return renderComponent(fnode, parent, registryParent)\n }\n }\n\n return null\n}\n\nfunction setAttribute(el: Element, key: string, value: any) {\n if (value === null || value === undefined) {\n el.removeAttribute(key)\n } else if (key === 'style' && typeof value === 'object') {\n Object.assign((el as HTMLElement).style, value)\n } else if (key === 'class') {\n el.className = String(value)\n } else if (key in el && typeof (el as any)[key] !== 'function') {\n (el as any)[key] = value\n } else {\n el.setAttribute(key, String(value))\n }\n}\n\n// Reconciliation helpers\nfunction canReuse(oldNode: Node, newNode: Node): boolean {\n if (oldNode.nodeType !== newNode.nodeType) return false\n if (oldNode.nodeType === Node.ELEMENT_NODE && newNode.nodeType === Node.ELEMENT_NODE) {\n return (oldNode as Element).tagName === (newNode as Element).tagName\n }\n return true\n}\n\nfunction updateAttributes(oldEl: Element, newEl: Element): void {\n const oldAttrs = Array.from(oldEl.attributes)\n oldAttrs.forEach(attr => {\n if (!newEl.hasAttribute(attr.name)) {\n oldEl.removeAttribute(attr.name)\n }\n })\n\n const newAttrs = Array.from(newEl.attributes)\n newAttrs.forEach(attr => {\n if (oldEl.getAttribute(attr.name) !== attr.value) {\n if (attr.name === 'value' && 'value' in oldEl) {\n (oldEl as HTMLInputElement).value = attr.value\n } else if (attr.name === 'checked' && 'checked' in oldEl) {\n (oldEl as HTMLInputElement).checked = attr.value === 'true' || attr.value === ''\n } else {\n oldEl.setAttribute(attr.name, attr.value)\n }\n }\n })\n\n const oldHandlers = (oldEl as any).__eventHandlers || {}\n const newHandlers = (newEl as any).__eventHandlers || {}\n\n Object.keys(oldHandlers).forEach(event => {\n if (!newHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n })\n\n Object.keys(newHandlers).forEach(event => {\n if (oldHandlers[event] !== newHandlers[event]) {\n if (oldHandlers[event]) {\n oldEl.removeEventListener(event, oldHandlers[event])\n }\n oldEl.addEventListener(event, newHandlers[event])\n }\n })\n\n if (Object.keys(newHandlers).length > 0) {\n (oldEl as any).__eventHandlers = newHandlers\n } else {\n delete (oldEl as any).__eventHandlers\n }\n\n if (oldEl instanceof HTMLInputElement && newEl instanceof HTMLInputElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n if (oldEl.checked !== newEl.checked) {\n oldEl.checked = newEl.checked\n }\n }\n if (oldEl instanceof HTMLTextAreaElement && newEl instanceof HTMLTextAreaElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n if (oldEl instanceof HTMLSelectElement && newEl instanceof HTMLSelectElement) {\n if (oldEl.value !== newEl.value) {\n oldEl.value = newEl.value\n }\n }\n}\n\nfunction reconcileChildren(oldEl: Element, newEl: Element): void {\n const oldChildren = Array.from(oldEl.childNodes)\n const newChildren = Array.from(newEl.childNodes)\n const maxLen = Math.max(oldChildren.length, newChildren.length)\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = oldChildren[i]\n const newChild = newChildren[i]\n\n if (!oldChild && newChild) {\n oldEl.appendChild(newChild)\n } else if (oldChild && !newChild) {\n oldEl.removeChild(oldChild)\n } else if (oldChild && newChild) {\n patchNode(oldChild, newChild, oldEl)\n }\n }\n}\n\nfunction patchNode(oldNode: Node, newNode: Node, parent: Element): void {\n if (canReuse(oldNode, newNode)) {\n const ownerInstance = (newNode as any).__ownerInstance as DOMComponentInstance | undefined\n if (ownerInstance) {\n const idx = ownerInstance.nodes.indexOf(newNode)\n if (idx !== -1) {\n ownerInstance.nodes[idx] = oldNode\n }\n ;(oldNode as any).__ownerInstance = ownerInstance\n delete (newNode as any).__ownerInstance\n }\n\n if (oldNode.nodeType === Node.TEXT_NODE) {\n if (oldNode.nodeValue !== newNode.nodeValue) {\n oldNode.nodeValue = newNode.nodeValue\n }\n } else if (oldNode.nodeType === Node.ELEMENT_NODE) {\n updateAttributes(oldNode as Element, newNode as Element)\n reconcileChildren(oldNode as Element, newNode as Element)\n }\n } else {\n parent.replaceChild(newNode, oldNode)\n }\n}\n\nexport function reconcile(oldNodes: Node[], newNodes: Node[], parent: Node, beforeMarker: Node): Node[] {\n const maxLen = Math.max(oldNodes.length, newNodes.length)\n const resultNodes: Node[] = []\n\n for (let i = 0; i < maxLen; i++) {\n const oldNode = oldNodes[i]\n const newNode = newNodes[i]\n\n if (!oldNode && newNode) {\n parent.insertBefore(newNode, beforeMarker)\n resultNodes.push(newNode)\n } else if (oldNode && !newNode) {\n if (oldNode.parentNode) {\n parent.removeChild(oldNode)\n }\n } else if (oldNode && newNode) {\n patchNode(oldNode, newNode, parent as Element)\n resultNodes.push(oldNode)\n }\n }\n\n return resultNodes\n}\n\nexport function render(app: any, container: HTMLElement) {\n container.innerHTML = ''\n\n if (typeof app === 'function') {\n app = { type: app, props: {}, children: [], key: undefined }\n }\n\n renderNode(app, container)\n}\n"]}
|