flexium 0.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/README.md +219 -0
  2. package/dist/DrawText-CeXBL8Ev.d.ts +309 -0
  3. package/dist/DrawText-JB58mpQT.d.cts +309 -0
  4. package/dist/Motion-BrOAJzgH.d.cts +87 -0
  5. package/dist/Motion-BrOAJzgH.d.ts +87 -0
  6. package/dist/advanced.d.cts +30 -0
  7. package/dist/advanced.d.ts +30 -0
  8. package/dist/advanced.js +2 -0
  9. package/dist/advanced.js.map +1 -0
  10. package/dist/advanced.mjs +2 -0
  11. package/dist/advanced.mjs.map +1 -0
  12. package/dist/canvas.d.cts +22 -0
  13. package/dist/canvas.d.ts +22 -0
  14. package/dist/canvas.js +2 -0
  15. package/dist/canvas.js.map +1 -0
  16. package/dist/canvas.mjs +2 -0
  17. package/dist/canvas.mjs.map +1 -0
  18. package/dist/chunk-2MVKTSFR.mjs +3 -0
  19. package/dist/chunk-2MVKTSFR.mjs.map +1 -0
  20. package/dist/chunk-2U4DW375.mjs +2 -0
  21. package/dist/chunk-2U4DW375.mjs.map +1 -0
  22. package/dist/chunk-3P6DMEGB.js +2 -0
  23. package/dist/chunk-3P6DMEGB.js.map +1 -0
  24. package/dist/chunk-5S3ZQ2LB.mjs +3 -0
  25. package/dist/chunk-5S3ZQ2LB.mjs.map +1 -0
  26. package/dist/chunk-CNY6FPKJ.js +2 -0
  27. package/dist/chunk-CNY6FPKJ.js.map +1 -0
  28. package/dist/chunk-CZYIK6FD.mjs +2 -0
  29. package/dist/chunk-CZYIK6FD.mjs.map +1 -0
  30. package/dist/chunk-DOGIWSDA.js +2 -0
  31. package/dist/chunk-DOGIWSDA.js.map +1 -0
  32. package/dist/chunk-EX2GURH5.mjs +3 -0
  33. package/dist/chunk-EX2GURH5.mjs.map +1 -0
  34. package/dist/chunk-GDBJ322I.js +2 -0
  35. package/dist/chunk-GDBJ322I.js.map +1 -0
  36. package/dist/chunk-I7UCVARB.js +2 -0
  37. package/dist/chunk-I7UCVARB.js.map +1 -0
  38. package/dist/chunk-KNF5ERPK.mjs +2 -0
  39. package/dist/chunk-KNF5ERPK.mjs.map +1 -0
  40. package/dist/chunk-MLZTCKTH.mjs +2 -0
  41. package/dist/chunk-MLZTCKTH.mjs.map +1 -0
  42. package/dist/chunk-OPAQ4R4M.mjs +2 -0
  43. package/dist/chunk-OPAQ4R4M.mjs.map +1 -0
  44. package/dist/chunk-Q7IWDVJ4.js +2 -0
  45. package/dist/chunk-Q7IWDVJ4.js.map +1 -0
  46. package/dist/chunk-R5CS7UZG.mjs +2 -0
  47. package/dist/chunk-R5CS7UZG.mjs.map +1 -0
  48. package/dist/chunk-REETNY2Z.js +3 -0
  49. package/dist/chunk-REETNY2Z.js.map +1 -0
  50. package/dist/chunk-ROYFUJN5.js +3 -0
  51. package/dist/chunk-ROYFUJN5.js.map +1 -0
  52. package/dist/chunk-U6C6VDVZ.js +2 -0
  53. package/dist/chunk-U6C6VDVZ.js.map +1 -0
  54. package/dist/chunk-V4K6WOXN.js +3 -0
  55. package/dist/chunk-V4K6WOXN.js.map +1 -0
  56. package/dist/chunk-WQFQO5LK.js +2 -0
  57. package/dist/chunk-WQFQO5LK.js.map +1 -0
  58. package/dist/chunk-WVEJT7HD.mjs +2 -0
  59. package/dist/chunk-WVEJT7HD.mjs.map +1 -0
  60. package/dist/chunk-ZNPYN2TZ.mjs +2 -0
  61. package/dist/chunk-ZNPYN2TZ.mjs.map +1 -0
  62. package/dist/core.d.cts +24 -0
  63. package/dist/core.d.ts +24 -0
  64. package/dist/core.js +2 -0
  65. package/dist/core.js.map +1 -0
  66. package/dist/core.mjs +2 -0
  67. package/dist/core.mjs.map +1 -0
  68. package/dist/dom.d.cts +36 -0
  69. package/dist/dom.d.ts +36 -0
  70. package/dist/dom.js +2 -0
  71. package/dist/dom.js.map +1 -0
  72. package/dist/dom.mjs +2 -0
  73. package/dist/dom.mjs.map +1 -0
  74. package/dist/index.d.cts +26 -0
  75. package/dist/index.d.ts +26 -0
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/index.mjs +2 -0
  79. package/dist/index.mjs.map +1 -0
  80. package/dist/interactive.d.cts +161 -0
  81. package/dist/interactive.d.ts +161 -0
  82. package/dist/interactive.js +2 -0
  83. package/dist/interactive.js.map +1 -0
  84. package/dist/interactive.mjs +2 -0
  85. package/dist/interactive.mjs.map +1 -0
  86. package/dist/jsx-dev-runtime.d.cts +2 -0
  87. package/dist/jsx-dev-runtime.d.ts +2 -0
  88. package/dist/jsx-dev-runtime.js +2 -0
  89. package/dist/jsx-dev-runtime.js.map +1 -0
  90. package/dist/jsx-dev-runtime.mjs +2 -0
  91. package/dist/jsx-dev-runtime.mjs.map +1 -0
  92. package/dist/jsx-runtime.d.cts +78 -0
  93. package/dist/jsx-runtime.d.ts +78 -0
  94. package/dist/jsx-runtime.js +2 -0
  95. package/dist/jsx-runtime.js.map +1 -0
  96. package/dist/jsx-runtime.mjs +2 -0
  97. package/dist/jsx-runtime.mjs.map +1 -0
  98. package/dist/metafile-cjs.json +1 -0
  99. package/dist/metafile-esm.json +1 -0
  100. package/dist/portal-BpcIlK9y.d.cts +206 -0
  101. package/dist/portal-DBwz7gD0.d.ts +206 -0
  102. package/dist/primitives/layout.d.cts +295 -0
  103. package/dist/primitives/layout.d.ts +295 -0
  104. package/dist/primitives/layout.js +2 -0
  105. package/dist/primitives/layout.js.map +1 -0
  106. package/dist/primitives/layout.mjs +2 -0
  107. package/dist/primitives/layout.mjs.map +1 -0
  108. package/dist/primitives/motion.d.cts +230 -0
  109. package/dist/primitives/motion.d.ts +230 -0
  110. package/dist/primitives/motion.js +2 -0
  111. package/dist/primitives/motion.js.map +1 -0
  112. package/dist/primitives/motion.mjs +2 -0
  113. package/dist/primitives/motion.mjs.map +1 -0
  114. package/dist/primitives/ui.d.cts +81 -0
  115. package/dist/primitives/ui.d.ts +81 -0
  116. package/dist/primitives/ui.js +2 -0
  117. package/dist/primitives/ui.js.map +1 -0
  118. package/dist/primitives/ui.mjs +2 -0
  119. package/dist/primitives/ui.mjs.map +1 -0
  120. package/dist/primitives.d.cts +92 -0
  121. package/dist/primitives.d.ts +92 -0
  122. package/dist/primitives.js +2 -0
  123. package/dist/primitives.js.map +1 -0
  124. package/dist/primitives.mjs +2 -0
  125. package/dist/primitives.mjs.map +1 -0
  126. package/dist/renderer-DSLb-FGg.d.cts +135 -0
  127. package/dist/renderer-DSLb-FGg.d.ts +135 -0
  128. package/dist/router.d.cts +126 -0
  129. package/dist/router.d.ts +126 -0
  130. package/dist/router.js +2 -0
  131. package/dist/router.js.map +1 -0
  132. package/dist/router.mjs +2 -0
  133. package/dist/router.mjs.map +1 -0
  134. package/dist/server.d.cts +3 -0
  135. package/dist/server.d.ts +3 -0
  136. package/dist/server.js +2 -0
  137. package/dist/server.js.map +1 -0
  138. package/dist/server.mjs +2 -0
  139. package/dist/server.mjs.map +1 -0
  140. package/dist/signal-PWBIM6JV.mjs +2 -0
  141. package/dist/signal-PWBIM6JV.mjs.map +1 -0
  142. package/dist/signal-XZXQ4VYQ.js +2 -0
  143. package/dist/signal-XZXQ4VYQ.js.map +1 -0
  144. package/dist/signal-mNtlF8-v.d.cts +158 -0
  145. package/dist/signal-mNtlF8-v.d.ts +158 -0
  146. package/dist/state-kK9sQh9s.d.cts +73 -0
  147. package/dist/state-kK9sQh9s.d.ts +73 -0
  148. package/dist/test-exports.d.cts +17 -0
  149. package/dist/test-exports.d.ts +17 -0
  150. package/dist/test-exports.js +2 -0
  151. package/dist/test-exports.js.map +1 -0
  152. package/dist/test-exports.mjs +2 -0
  153. package/dist/test-exports.mjs.map +1 -0
  154. package/package.json +173 -0
package/README.md ADDED
@@ -0,0 +1,219 @@
1
+ # Flexium
2
+
3
+ [![npm version](https://img.shields.io/npm/v/flexium.svg)](https://www.npmjs.com/package/flexium)
4
+ [![npm downloads](https://img.shields.io/npm/dm/flexium.svg)](https://www.npmjs.com/package/flexium)
5
+ [![license](https://img.shields.io/npm/l/flexium.svg)](https://github.com/Wick-Lim/flexium.js/blob/main/LICENSE)
6
+
7
+ **Simpler, Faster, Unified.**
8
+
9
+ Flexium is a next-generation UI framework that unifies state management, async data fetching, and global state into a single, powerful API: `state()`.
10
+
11
+ ## Key Features
12
+
13
+ - **Unified State API** - No more `useState`, `useRecoil`, `useQuery` separation. Just `state()`.
14
+ - **No Virtual DOM** - Direct DOM updates for maximum performance and minimal memory usage.
15
+ - **Tiny Bundle** - ~8KB (min+gzip) including Router and Motion.
16
+ - **Cross-Platform** - DOM, Canvas, and SSR renderers included.
17
+ - **TypeScript First** - Full type inference out of the box.
18
+ - **Zero-Config JSX** - Works with standard tooling.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ npm install flexium
24
+ ```
25
+
26
+ ## Quick Start
27
+
28
+ ```bash
29
+ npm create flexium@latest my-app
30
+ cd my-app
31
+ npm install
32
+ npm run dev
33
+ ```
34
+
35
+ ## The Only API You Need: `state()`
36
+
37
+ Flexium unifies all state concepts into one function.
38
+
39
+ ### Local State
40
+
41
+ ```tsx
42
+ import { state } from 'flexium/core';
43
+ import { render } from 'flexium/dom';
44
+
45
+ function Counter() {
46
+ const [count, setCount] = state(0);
47
+
48
+ return (
49
+ <button onclick={() => setCount(c => c + 1)}>
50
+ Count: {count}
51
+ </button>
52
+ );
53
+ }
54
+
55
+ render(<Counter />, document.getElementById('app'));
56
+ ```
57
+
58
+ ### Global State
59
+
60
+ Just add a `key` to share state across components. Keys can be strings or arrays.
61
+
62
+ ```tsx
63
+ // Define global state with array key
64
+ const [theme, setTheme] = state('light', { key: ['app', 'theme'] });
65
+
66
+ function ThemeToggle() {
67
+ const [theme, setTheme] = state(undefined, { key: ['app', 'theme'] });
68
+
69
+ return (
70
+ <button onclick={() => setTheme(t => t === 'light' ? 'dark' : 'light')}>
71
+ Theme: {theme}
72
+ </button>
73
+ );
74
+ }
75
+ ```
76
+
77
+ ### Async Resources
78
+
79
+ Pass an async function to handle data fetching automatically.
80
+
81
+ ```tsx
82
+ function UserProfile({ id }) {
83
+ const [user, refetch, isLoading, error] = state(async () => {
84
+ const res = await fetch(`/api/users/${id}`);
85
+ return res.json();
86
+ });
87
+
88
+ if (isLoading) return <div>Loading...</div>;
89
+ if (error) return <div>Error!</div>;
90
+
91
+ return (
92
+ <div>
93
+ <h1>{user.name}</h1>
94
+ <button onclick={() => refetch()}>Reload</button>
95
+ </div>
96
+ );
97
+ }
98
+ ```
99
+
100
+ ### Derived State
101
+
102
+ ```tsx
103
+ const [count, setCount] = state(1);
104
+ const [double] = state(() => count * 2);
105
+ ```
106
+
107
+ ### Array Keys & Params
108
+
109
+ ```tsx
110
+ // Array keys for dynamic caching (like TanStack Query)
111
+ const [user] = state(fetchUser, { key: ['user', userId] });
112
+
113
+ // Explicit params for better DX
114
+ const [data] = state(
115
+ async ({ userId, postId }) => fetchPost(userId, postId),
116
+ {
117
+ key: ['posts', userId, postId],
118
+ params: { userId, postId }
119
+ }
120
+ );
121
+ ```
122
+
123
+ ## Package Structure
124
+
125
+ ```
126
+ flexium
127
+ ├── /core # Core reactivity: state(), effect(), batch()
128
+ ├── /dom # DOM renderer: render(), Portal
129
+ ├── /canvas # Canvas renderer: Canvas, Rect, Circle, Text
130
+ ├── /primitives # Cross-platform components: Row, Column, Stack
131
+ ├── /router # SPA routing: Router, Route, Link
132
+ └── /server # SSR utilities
133
+ ```
134
+
135
+ ## Control Flow
136
+
137
+ Use native JavaScript for control flow - no special components needed:
138
+
139
+ ```tsx
140
+ // Conditional rendering
141
+ {isLoggedIn ? <Dashboard /> : <Login />}
142
+
143
+ // Short-circuit for simple conditions
144
+ {isAdmin && <AdminPanel />}
145
+
146
+ // List rendering with optimized reconciliation
147
+ {items.map(item => <Item key={item.id} data={item} />)}
148
+
149
+ // Pattern matching with ternary chains
150
+ {status === 'loading' ? <Loading /> :
151
+ status === 'error' ? <Error /> :
152
+ status === 'success' ? <Success /> :
153
+ <Default />}
154
+ ```
155
+
156
+ ## Canvas Rendering
157
+
158
+ ```tsx
159
+ import { Canvas, Rect, Circle, Text } from 'flexium/canvas';
160
+
161
+ function App() {
162
+ const [x, setX] = state(100);
163
+
164
+ return (
165
+ <Canvas width={400} height={300}>
166
+ <Rect x={0} y={0} width={400} height={300} fill="#1a1a2e" />
167
+ <Circle x={x} y={150} radius={30} fill="#e94560" />
168
+ <Text x={200} y={50} text="Hello Canvas!" fill="white" />
169
+ </Canvas>
170
+ );
171
+ }
172
+ ```
173
+
174
+ ## Cross-Platform Primitives
175
+
176
+ ```tsx
177
+ import { Row, Column, Text, Pressable } from 'flexium/primitives';
178
+
179
+ function App() {
180
+ return (
181
+ <Column gap={16} padding={20}>
182
+ <Text size="xl" weight="bold">Welcome</Text>
183
+ <Row gap={8}>
184
+ <Pressable onPress={() => console.log('clicked')}>
185
+ <Text>Click me</Text>
186
+ </Pressable>
187
+ </Row>
188
+ </Column>
189
+ );
190
+ }
191
+ ```
192
+
193
+ ## Routing
194
+
195
+ ```tsx
196
+ import { Router, Route, Link } from 'flexium/router';
197
+
198
+ function App() {
199
+ return (
200
+ <Router>
201
+ <nav>
202
+ <Link href="/">Home</Link>
203
+ <Link href="/about">About</Link>
204
+ </nav>
205
+ <Route path="/" component={Home} />
206
+ <Route path="/about" component={About} />
207
+ <Route path="/users/:id" component={UserProfile} />
208
+ </Router>
209
+ );
210
+ }
211
+ ```
212
+
213
+ ## Documentation
214
+
215
+ Full documentation available at [https://flexium.junhyuk.im](https://flexium.junhyuk.im)
216
+
217
+ ## License
218
+
219
+ MIT
@@ -0,0 +1,309 @@
1
+ import { S as Signal } from './signal-mNtlF8-v.js';
2
+
3
+ /**
4
+ * Core Flexium types
5
+ */
6
+ /**
7
+ * Flexium Node - internal representation of UI elements
8
+ */
9
+ interface FNode {
10
+ type: string;
11
+ props: Record<string, any>;
12
+ children: FNode[];
13
+ }
14
+
15
+ /**
16
+ * Cross-platform Primitives Type Definitions
17
+ *
18
+ * These types work across web (DOM) and React Native
19
+ */
20
+
21
+ /**
22
+ * Common style properties that work on both web and React Native
23
+ * Based on Flexbox layout model
24
+ */
25
+ interface CommonStyle {
26
+ display?: 'flex' | 'none';
27
+ flex?: number;
28
+ flexDirection?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
29
+ flexWrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
30
+ justifyContent?: 'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly';
31
+ alignItems?: 'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline';
32
+ alignSelf?: 'auto' | 'flex-start' | 'center' | 'flex-end' | 'stretch';
33
+ gap?: number;
34
+ padding?: number;
35
+ paddingTop?: number;
36
+ paddingRight?: number;
37
+ paddingBottom?: number;
38
+ paddingLeft?: number;
39
+ paddingHorizontal?: number;
40
+ paddingVertical?: number;
41
+ margin?: number;
42
+ marginTop?: number;
43
+ marginRight?: number;
44
+ marginBottom?: number;
45
+ marginLeft?: number;
46
+ marginHorizontal?: number;
47
+ marginVertical?: number;
48
+ width?: number | string;
49
+ height?: number | string;
50
+ minWidth?: number;
51
+ maxWidth?: number;
52
+ minHeight?: number;
53
+ maxHeight?: number;
54
+ backgroundColor?: string;
55
+ borderRadius?: number;
56
+ borderTopLeftRadius?: number;
57
+ borderTopRightRadius?: number;
58
+ borderBottomLeftRadius?: number;
59
+ borderBottomRightRadius?: number;
60
+ opacity?: number;
61
+ borderWidth?: number;
62
+ borderColor?: string;
63
+ borderTopWidth?: number;
64
+ borderRightWidth?: number;
65
+ borderBottomWidth?: number;
66
+ borderLeftWidth?: number;
67
+ position?: 'relative' | 'absolute';
68
+ top?: number;
69
+ right?: number;
70
+ bottom?: number;
71
+ left?: number;
72
+ zIndex?: number;
73
+ transform?: string;
74
+ }
75
+ /**
76
+ * Text-specific style properties
77
+ */
78
+ interface TextStyle extends CommonStyle {
79
+ color?: string;
80
+ fontSize?: number;
81
+ fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | number;
82
+ fontFamily?: string;
83
+ fontStyle?: 'normal' | 'italic';
84
+ textAlign?: 'left' | 'center' | 'right' | 'justify';
85
+ textDecoration?: 'none' | 'underline' | 'line-through';
86
+ lineHeight?: number;
87
+ letterSpacing?: number;
88
+ }
89
+ /**
90
+ * Text component props
91
+ * Universal text display
92
+ */
93
+ interface TextProps {
94
+ children?: any;
95
+ style?: TextStyle;
96
+ /** Press/click handler (unified API for web and mobile) */
97
+ onPress?: () => void;
98
+ /** CSS class name */
99
+ class?: string;
100
+ }
101
+ /**
102
+ * Image component props
103
+ */
104
+ interface ImageProps {
105
+ src: string;
106
+ alt?: string;
107
+ width?: number;
108
+ height?: number;
109
+ style?: CommonStyle;
110
+ onLoad?: () => void;
111
+ onError?: () => void;
112
+ }
113
+ /**
114
+ * Pressable component props
115
+ * Universal touchable/clickable element
116
+ */
117
+ interface PressableProps {
118
+ children?: any;
119
+ onPress: () => void;
120
+ onPressIn?: () => void;
121
+ onPressOut?: () => void;
122
+ disabled?: boolean;
123
+ style?: CommonStyle;
124
+ activeOpacity?: number;
125
+ }
126
+ /**
127
+ * ScrollView component props
128
+ */
129
+ interface ScrollViewProps {
130
+ children?: any;
131
+ style?: CommonStyle;
132
+ horizontal?: boolean;
133
+ /** Show horizontal scrollbar (default: true) */
134
+ showScrollbarX?: boolean;
135
+ /** Show vertical scrollbar (default: true) */
136
+ showScrollbarY?: boolean;
137
+ }
138
+ /**
139
+ * Canvas container props
140
+ */
141
+ interface CanvasProps {
142
+ width: number;
143
+ height: number;
144
+ children?: any;
145
+ style?: CommonStyle;
146
+ id?: string;
147
+ }
148
+ /**
149
+ * Rectangle drawing props
150
+ */
151
+ interface DrawRectProps {
152
+ x: number | Signal<number>;
153
+ y: number | Signal<number>;
154
+ width: number | Signal<number>;
155
+ height: number | Signal<number>;
156
+ fill?: string | Signal<string>;
157
+ stroke?: string | Signal<string>;
158
+ strokeWidth?: number | Signal<number>;
159
+ opacity?: number | Signal<number>;
160
+ }
161
+ /**
162
+ * Circle drawing props
163
+ */
164
+ interface DrawCircleProps {
165
+ x: number | Signal<number>;
166
+ y: number | Signal<number>;
167
+ radius: number | Signal<number>;
168
+ fill?: string | Signal<string>;
169
+ stroke?: string | Signal<string>;
170
+ strokeWidth?: number | Signal<number>;
171
+ opacity?: number | Signal<number>;
172
+ }
173
+ /**
174
+ * Path drawing props
175
+ */
176
+ interface DrawPathProps {
177
+ d: string | Signal<string>;
178
+ fill?: string | Signal<string>;
179
+ stroke?: string | Signal<string>;
180
+ strokeWidth?: number | Signal<number>;
181
+ opacity?: number | Signal<number>;
182
+ }
183
+ /**
184
+ * Canvas text drawing props
185
+ */
186
+ interface DrawTextProps {
187
+ x: number | Signal<number>;
188
+ y: number | Signal<number>;
189
+ text: string | Signal<string>;
190
+ fill?: string | Signal<string>;
191
+ fontSize?: number | Signal<number>;
192
+ fontFamily?: string;
193
+ fontWeight?: 'normal' | 'bold' | number;
194
+ textAlign?: 'left' | 'center' | 'right';
195
+ textBaseline?: 'top' | 'middle' | 'bottom' | 'alphabetic';
196
+ }
197
+ /**
198
+ * Line drawing props
199
+ */
200
+ interface DrawLineProps {
201
+ x1: number | Signal<number>;
202
+ y1: number | Signal<number>;
203
+ x2: number | Signal<number>;
204
+ y2: number | Signal<number>;
205
+ stroke?: string | Signal<string>;
206
+ strokeWidth?: number | Signal<number>;
207
+ opacity?: number | Signal<number>;
208
+ }
209
+ /**
210
+ * Arc drawing props
211
+ */
212
+ interface DrawArcProps {
213
+ x: number | Signal<number>;
214
+ y: number | Signal<number>;
215
+ radius: number | Signal<number>;
216
+ startAngle: number | Signal<number>;
217
+ endAngle: number | Signal<number>;
218
+ counterclockwise?: boolean;
219
+ fill?: string | Signal<string>;
220
+ stroke?: string | Signal<string>;
221
+ strokeWidth?: number | Signal<number>;
222
+ opacity?: number | Signal<number>;
223
+ }
224
+
225
+ /**
226
+ * Canvas - Declarative canvas container with JSX drawing
227
+ *
228
+ * Supports Signal-based reactive rendering
229
+ *
230
+ * @example
231
+ * ```tsx
232
+ * const x = signal(50)
233
+ *
234
+ * <Canvas width={300} height={200}>
235
+ * <Rect x={x} y={50} width={100} height={50} fill="blue" />
236
+ * <Circle x={150} y={100} radius={30} fill="red" />
237
+ * </Canvas>
238
+ * ```
239
+ */
240
+
241
+ declare function Canvas(props: CanvasProps): FNode;
242
+
243
+ /**
244
+ * DrawRect - Canvas rectangle primitive
245
+ *
246
+ * @example
247
+ * ```tsx
248
+ * <DrawRect x={10} y={10} width={100} height={50} fill="blue" />
249
+ * ```
250
+ */
251
+
252
+ declare function DrawRect(props: DrawRectProps): FNode;
253
+
254
+ /**
255
+ * DrawCircle - Canvas circle primitive
256
+ *
257
+ * @example
258
+ * ```tsx
259
+ * <DrawCircle x={100} y={100} radius={50} fill="red" />
260
+ * ```
261
+ */
262
+
263
+ declare function DrawCircle(props: DrawCircleProps): FNode;
264
+
265
+ /**
266
+ * DrawArc - Canvas arc primitive
267
+ *
268
+ * @example
269
+ * ```tsx
270
+ * <DrawArc x={100} y={100} radius={50} startAngle={0} endAngle={Math.PI} fill="green" />
271
+ * ```
272
+ */
273
+
274
+ declare function DrawArc(props: DrawArcProps): FNode;
275
+
276
+ /**
277
+ * DrawLine - Canvas line primitive
278
+ *
279
+ * @example
280
+ * ```tsx
281
+ * <DrawLine x1={10} y1={10} x2={100} y2={100} stroke="black" strokeWidth={2} />
282
+ * ```
283
+ */
284
+
285
+ declare function DrawLine(props: DrawLineProps): FNode;
286
+
287
+ /**
288
+ * DrawPath - Canvas path primitive
289
+ *
290
+ * @example
291
+ * ```tsx
292
+ * <DrawPath d="M 10 10 L 100 100" stroke="black" strokeWidth={2} />
293
+ * ```
294
+ */
295
+
296
+ declare function DrawPath(props: DrawPathProps): FNode;
297
+
298
+ /**
299
+ * DrawText - Canvas text primitive
300
+ *
301
+ * @example
302
+ * ```tsx
303
+ * <DrawText x={50} y={50} text="Hello Canvas" fontSize={20} fill="black" />
304
+ * ```
305
+ */
306
+
307
+ declare function DrawText(props: DrawTextProps): FNode;
308
+
309
+ export { Canvas as C, DrawRect as D, type FNode as F, type ImageProps as I, type PressableProps as P, type ScrollViewProps as S, type TextProps as T, DrawCircle as a, DrawArc as b, DrawLine as c, DrawPath as d, DrawText as e, type CanvasProps as f, type DrawRectProps as g, type DrawCircleProps as h, type DrawArcProps as i, type DrawLineProps as j, type DrawPathProps as k, type DrawTextProps as l, type CommonStyle as m, type TextStyle as n };