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
@@ -0,0 +1,309 @@
1
+ import { S as Signal } from './signal-mNtlF8-v.cjs';
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 };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Motion Component - Declarative animations using Web Animations API
3
+ *
4
+ * Provides smooth, performant animations without JavaScript RAF
5
+ * Supports transforms, opacity, spring physics, and layout animations
6
+ */
7
+ /**
8
+ * Animation properties that can be animated
9
+ */
10
+ interface AnimatableProps {
11
+ x?: number;
12
+ y?: number;
13
+ scale?: number;
14
+ scaleX?: number;
15
+ scaleY?: number;
16
+ rotate?: number;
17
+ opacity?: number;
18
+ width?: number | string;
19
+ height?: number | string;
20
+ }
21
+ /**
22
+ * Spring physics configuration
23
+ */
24
+ interface SpringConfig {
25
+ tension?: number;
26
+ friction?: number;
27
+ mass?: number;
28
+ }
29
+ /**
30
+ * Motion component props
31
+ */
32
+ interface MotionProps {
33
+ element?: HTMLElement | null;
34
+ initial?: AnimatableProps;
35
+ animate?: AnimatableProps;
36
+ exit?: AnimatableProps;
37
+ duration?: number;
38
+ spring?: SpringConfig;
39
+ easing?: string;
40
+ delay?: number;
41
+ onAnimationStart?: () => void;
42
+ onAnimationComplete?: () => void;
43
+ }
44
+ /**
45
+ * Cleanup motion module state (useful for testing and SSR)
46
+ */
47
+ declare function cleanupMotionState(): void;
48
+ /**
49
+ * Motion controller class
50
+ * Manages animations for a single element using Web Animations API
51
+ * Respects prefers-reduced-motion accessibility setting
52
+ */
53
+ declare class MotionController {
54
+ private element;
55
+ private animation;
56
+ private resizeObserver;
57
+ private previousSize;
58
+ constructor(element: HTMLElement);
59
+ /**
60
+ * Animate from initial to animate props
61
+ * Respects prefers-reduced-motion: applies end state instantly if enabled
62
+ */
63
+ animate(props: MotionProps): void;
64
+ /**
65
+ * Animate exit (used when element is being removed)
66
+ * Respects prefers-reduced-motion: applies end state instantly if enabled
67
+ */
68
+ animateExit(exitProps: AnimatableProps, duration?: number, easing?: string): Promise<void>;
69
+ /**
70
+ * Enable layout animations (animate size changes automatically)
71
+ */
72
+ enableLayoutAnimation(duration?: number, easing?: string): void;
73
+ /**
74
+ * Disable layout animations
75
+ */
76
+ disableLayoutAnimation(): void;
77
+ /**
78
+ * Cancel current animation
79
+ */
80
+ cancel(): void;
81
+ /**
82
+ * Cleanup all animations and observers
83
+ */
84
+ dispose(): void;
85
+ }
86
+
87
+ export { type AnimatableProps as A, MotionController as M, type SpringConfig as S, type MotionProps as a, cleanupMotionState as c };
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Motion Component - Declarative animations using Web Animations API
3
+ *
4
+ * Provides smooth, performant animations without JavaScript RAF
5
+ * Supports transforms, opacity, spring physics, and layout animations
6
+ */
7
+ /**
8
+ * Animation properties that can be animated
9
+ */
10
+ interface AnimatableProps {
11
+ x?: number;
12
+ y?: number;
13
+ scale?: number;
14
+ scaleX?: number;
15
+ scaleY?: number;
16
+ rotate?: number;
17
+ opacity?: number;
18
+ width?: number | string;
19
+ height?: number | string;
20
+ }
21
+ /**
22
+ * Spring physics configuration
23
+ */
24
+ interface SpringConfig {
25
+ tension?: number;
26
+ friction?: number;
27
+ mass?: number;
28
+ }
29
+ /**
30
+ * Motion component props
31
+ */
32
+ interface MotionProps {
33
+ element?: HTMLElement | null;
34
+ initial?: AnimatableProps;
35
+ animate?: AnimatableProps;
36
+ exit?: AnimatableProps;
37
+ duration?: number;
38
+ spring?: SpringConfig;
39
+ easing?: string;
40
+ delay?: number;
41
+ onAnimationStart?: () => void;
42
+ onAnimationComplete?: () => void;
43
+ }
44
+ /**
45
+ * Cleanup motion module state (useful for testing and SSR)
46
+ */
47
+ declare function cleanupMotionState(): void;
48
+ /**
49
+ * Motion controller class
50
+ * Manages animations for a single element using Web Animations API
51
+ * Respects prefers-reduced-motion accessibility setting
52
+ */
53
+ declare class MotionController {
54
+ private element;
55
+ private animation;
56
+ private resizeObserver;
57
+ private previousSize;
58
+ constructor(element: HTMLElement);
59
+ /**
60
+ * Animate from initial to animate props
61
+ * Respects prefers-reduced-motion: applies end state instantly if enabled
62
+ */
63
+ animate(props: MotionProps): void;
64
+ /**
65
+ * Animate exit (used when element is being removed)
66
+ * Respects prefers-reduced-motion: applies end state instantly if enabled
67
+ */
68
+ animateExit(exitProps: AnimatableProps, duration?: number, easing?: string): Promise<void>;
69
+ /**
70
+ * Enable layout animations (animate size changes automatically)
71
+ */
72
+ enableLayoutAnimation(duration?: number, easing?: string): void;
73
+ /**
74
+ * Disable layout animations
75
+ */
76
+ disableLayoutAnimation(): void;
77
+ /**
78
+ * Cancel current animation
79
+ */
80
+ cancel(): void;
81
+ /**
82
+ * Cleanup all animations and observers
83
+ */
84
+ dispose(): void;
85
+ }
86
+
87
+ export { type AnimatableProps as A, MotionController as M, type SpringConfig as S, type MotionProps as a, cleanupMotionState as c };
@@ -0,0 +1,30 @@
1
+ export { C as Computed, S as Signal, o as onCleanup, r as root, s as signal, u as untrack } from './signal-mNtlF8-v.cjs';
2
+
3
+ /**
4
+ * Flexium DevTools Integration
5
+ *
6
+ * Provides hooks for browser devtools extension to inspect signals,
7
+ * effects, and component trees.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { enableDevTools, getDevToolsState } from 'flexium/devtools';
12
+ *
13
+ * // Enable devtools in development
14
+ * if (process.env.NODE_ENV !== 'production') {
15
+ * enableDevTools();
16
+ * }
17
+ * ```
18
+ */
19
+
20
+ /**
21
+ * Enable devtools integration
22
+ * Call this in development mode to enable signal/effect inspection
23
+ */
24
+ declare function enableDevTools(): void;
25
+ /**
26
+ * Disable devtools integration
27
+ */
28
+ declare function disableDevTools(): void;
29
+
30
+ export { disableDevTools, enableDevTools };
@@ -0,0 +1,30 @@
1
+ export { C as Computed, S as Signal, o as onCleanup, r as root, s as signal, u as untrack } from './signal-mNtlF8-v.js';
2
+
3
+ /**
4
+ * Flexium DevTools Integration
5
+ *
6
+ * Provides hooks for browser devtools extension to inspect signals,
7
+ * effects, and component trees.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { enableDevTools, getDevToolsState } from 'flexium/devtools';
12
+ *
13
+ * // Enable devtools in development
14
+ * if (process.env.NODE_ENV !== 'production') {
15
+ * enableDevTools();
16
+ * }
17
+ * ```
18
+ */
19
+
20
+ /**
21
+ * Enable devtools integration
22
+ * Call this in development mode to enable signal/effect inspection
23
+ */
24
+ declare function enableDevTools(): void;
25
+ /**
26
+ * Disable devtools integration
27
+ */
28
+ declare function disableDevTools(): void;
29
+
30
+ export { disableDevTools, enableDevTools };
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkROYFUJN5_js=require('./chunk-ROYFUJN5.js');var o={enabled:false,signals:new Map,effects:new Map,components:new Map},m=0,g=0;var s=[];function b(){o.enabled=true,chunkROYFUJN5_js.d({onSignalCreate:(e,n)=>w(e,n),onSignalUpdate:(e,n)=>D(e,n),onEffectCreate:e=>E(e),onEffectRun:(e,n,t)=>S(e,n,t)}),typeof window<"u"&&(window.__FLEXIUM_DEVTOOLS__={getState:T,getSignals:()=>Array.from(o.signals.values()),getEffects:()=>Array.from(o.effects.values()),getComponents:()=>Array.from(o.components.values()),subscribe:e=>(s.push(e),()=>{let n=s.indexOf(e);n>-1&&s.splice(n,1);})},console.log("%c[Flexium DevTools] Enabled","color: #10b981; font-weight: bold;"));}function v(){o.enabled=false,o.signals.clear(),o.effects.clear(),o.components.clear(),chunkROYFUJN5_js.d(null),typeof window<"u"&&delete window.__FLEXIUM_DEVTOOLS__;}function T(){return {...o}}function a(e,n){for(let t of s)try{t(e,n);}catch(r){chunkROYFUJN5_js.b(chunkROYFUJN5_js.a.DEVTOOLS_LISTENER_ERROR,{event:e},r);}}function w(e,n){if(!o.enabled)return -1;let t=m++,r=Date.now();return o.signals.set(t,{id:t,name:n,value:e.peek(),subscribers:0,createdAt:r,lastUpdated:r,updateCount:0}),a("signal-create",{id:t,name:n}),t}function D(e,n){if(!o.enabled)return;let t=o.signals.get(e);t&&(t.value=n,t.lastUpdated=Date.now(),t.updateCount++,a("signal-update",{id:e,value:n}));}function E(e){if(!o.enabled)return -1;let n=g++;return o.effects.set(n,{id:n,name:e,dependencies:[],lastRun:Date.now(),runCount:0,status:"idle"}),a("effect-create",{id:n,name:e}),n}function S(e,n,t){if(!o.enabled)return;let r=o.effects.get(e);r&&(r.status=n,r.lastRun=Date.now(),r.runCount++,t&&(r.error=t),a("effect-run",{id:e,status:n,error:t}));}Object.defineProperty(exports,"onCleanup",{enumerable:true,get:function(){return chunkROYFUJN5_js.o}});Object.defineProperty(exports,"root",{enumerable:true,get:function(){return chunkROYFUJN5_js.m}});Object.defineProperty(exports,"signal",{enumerable:true,get:function(){return chunkROYFUJN5_js.h}});Object.defineProperty(exports,"untrack",{enumerable:true,get:function(){return chunkROYFUJN5_js.k}});exports.disableDevTools=v;exports.enableDevTools=b;//# sourceMappingURL=advanced.js.map
2
+ //# sourceMappingURL=advanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/devtools/index.ts"],"names":["devToolsState","signalIdCounter","effectIdCounter","listeners","enableDevTools","setDevToolsHooks","signal","name","registerSignal","id","value","updateSignalInfo","registerEffect","status","error","updateEffectInfo","getDevToolsState","listener","index","disableDevTools","emit","event","data","e","logError","ErrorCodes","now","info"],"mappings":"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","file":"advanced.js","sourcesContent":["/**\n * Flexium DevTools Integration\n *\n * Provides hooks for browser devtools extension to inspect signals,\n * effects, and component trees.\n *\n * @example\n * ```tsx\n * import { enableDevTools, getDevToolsState } from 'flexium/devtools';\n *\n * // Enable devtools in development\n * if (process.env.NODE_ENV !== 'production') {\n * enableDevTools();\n * }\n * ```\n */\n\nimport { Signal, Computed, setDevToolsHooks } from '../core/signal'\nimport { ErrorCodes, logError } from '../core/errors'\n\nexport interface DevToolsState {\n enabled: boolean\n signals: Map<number, SignalInfo>\n effects: Map<number, EffectInfo>\n components: Map<number, ComponentInfo>\n}\n\nexport interface SignalInfo {\n id: number\n name?: string\n value: unknown\n subscribers: number\n createdAt: number\n lastUpdated: number\n updateCount: number\n}\n\nexport interface EffectInfo {\n id: number\n name?: string\n dependencies: number[]\n lastRun: number\n runCount: number\n status: 'idle' | 'running' | 'error'\n error?: Error\n}\n\nexport interface ComponentInfo {\n id: number\n name: string\n props: Record<string, unknown>\n signals: number[]\n effects: number[]\n children: number[]\n parent?: number\n mountedAt: number\n}\n\n// Global devtools state\nconst devToolsState: DevToolsState = {\n enabled: false,\n signals: new Map(),\n effects: new Map(),\n components: new Map(),\n}\n\nlet signalIdCounter = 0\nlet effectIdCounter = 0\nlet componentIdCounter = 0\n\n// Event listeners for devtools\ntype DevToolsEventType =\n | 'signal-create'\n | 'signal-update'\n | 'effect-create'\n | 'effect-run'\n | 'component-mount'\n | 'component-unmount'\ntype DevToolsListener = (event: DevToolsEventType, data: unknown) => void\nconst listeners: DevToolsListener[] = []\n\n/**\n * Enable devtools integration\n * Call this in development mode to enable signal/effect inspection\n */\nexport function enableDevTools(): void {\n devToolsState.enabled = true\n\n // Register hooks with signal system for automatic tracking\n setDevToolsHooks({\n onSignalCreate: (signal, name) => registerSignal(signal, name),\n onSignalUpdate: (id, value) => updateSignalInfo(id, value),\n onEffectCreate: (name) => registerEffect(name),\n onEffectRun: (id, status, error) => updateEffectInfo(id, status, error),\n })\n\n // Expose to window for browser extension\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(window as any).__FLEXIUM_DEVTOOLS__ = {\n getState: getDevToolsState,\n getSignals: () => Array.from(devToolsState.signals.values()),\n getEffects: () => Array.from(devToolsState.effects.values()),\n getComponents: () => Array.from(devToolsState.components.values()),\n subscribe: (listener: DevToolsListener) => {\n listeners.push(listener)\n return () => {\n const index = listeners.indexOf(listener)\n if (index > -1) listeners.splice(index, 1)\n }\n },\n }\n\n console.log(\n '%c[Flexium DevTools] Enabled',\n 'color: #10b981; font-weight: bold;'\n )\n }\n}\n\n/**\n * Disable devtools integration\n */\nexport function disableDevTools(): void {\n devToolsState.enabled = false\n devToolsState.signals.clear()\n devToolsState.effects.clear()\n devToolsState.components.clear()\n\n // Unregister hooks\n setDevToolsHooks(null)\n\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delete (window as any).__FLEXIUM_DEVTOOLS__\n }\n}\n\n/**\n * Get current devtools state\n */\nexport function getDevToolsState(): DevToolsState {\n return { ...devToolsState }\n}\n\n/**\n * Check if devtools are enabled\n */\nexport function isDevToolsEnabled(): boolean {\n return devToolsState.enabled\n}\n\n// Internal: emit event to listeners\nfunction emit(event: DevToolsEventType, data: unknown): void {\n for (const listener of listeners) {\n try {\n listener(event, data)\n } catch (e) {\n logError(ErrorCodes.DEVTOOLS_LISTENER_ERROR, { event }, e)\n }\n }\n}\n\n/**\n * Register a signal with devtools\n * @internal\n */\nexport function registerSignal(\n signal: Signal<unknown> | Computed<unknown>,\n name?: string\n): number {\n if (!devToolsState.enabled) return -1\n\n const id = signalIdCounter++\n const now = Date.now()\n\n devToolsState.signals.set(id, {\n id,\n name,\n value: signal.peek(),\n subscribers: 0,\n createdAt: now,\n lastUpdated: now,\n updateCount: 0,\n })\n\n emit('signal-create', { id, name })\n return id\n}\n\n/**\n * Update signal info in devtools\n * @internal\n */\nexport function updateSignalInfo(id: number, value: unknown): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.signals.get(id)\n if (info) {\n info.value = value\n info.lastUpdated = Date.now()\n info.updateCount++\n emit('signal-update', { id, value })\n }\n}\n\n/**\n * Register an effect with devtools\n * @internal\n */\nexport function registerEffect(name?: string): number {\n if (!devToolsState.enabled) return -1\n\n const id = effectIdCounter++\n\n devToolsState.effects.set(id, {\n id,\n name,\n dependencies: [],\n lastRun: Date.now(),\n runCount: 0,\n status: 'idle',\n })\n\n emit('effect-create', { id, name })\n return id\n}\n\n/**\n * Update effect info in devtools\n * @internal\n */\nexport function updateEffectInfo(\n id: number,\n status: 'idle' | 'running' | 'error',\n error?: Error\n): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.effects.get(id)\n if (info) {\n info.status = status\n info.lastRun = Date.now()\n info.runCount++\n if (error) info.error = error\n emit('effect-run', { id, status, error })\n }\n}\n\n/**\n * Register a component with devtools\n * @internal\n */\nexport function registerComponent(\n name: string,\n props: Record<string, unknown>\n): number {\n if (!devToolsState.enabled) return -1\n\n const id = componentIdCounter++\n\n devToolsState.components.set(id, {\n id,\n name,\n props,\n signals: [],\n effects: [],\n children: [],\n mountedAt: Date.now(),\n })\n\n emit('component-mount', { id, name })\n return id\n}\n\n/**\n * Unregister a component from devtools\n * @internal\n */\nexport function unregisterComponent(id: number): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.components.get(id)\n if (info) {\n devToolsState.components.delete(id)\n emit('component-unmount', { id, name: info.name })\n }\n}\n\n/**\n * Create a named signal for better devtools visibility\n *\n * @example\n * ```tsx\n * import { createNamedSignal } from 'flexium/devtools';\n * import { signal } from 'flexium/core';\n *\n * // Shows as \"count\" in devtools\n * const count = createNamedSignal('count', 0, signal);\n * ```\n */\nexport function createNamedSignal<T>(\n name: string,\n initialValue: T,\n signalFn: (v: T) => Signal<T>\n): Signal<T> {\n const s = signalFn(initialValue)\n\n if (devToolsState.enabled) {\n registerSignal(s, name)\n }\n\n return s\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import {d,b as b$1,a as a$1}from'./chunk-5S3ZQ2LB.mjs';export{o as onCleanup,m as root,h as signal,k as untrack}from'./chunk-5S3ZQ2LB.mjs';var o={enabled:false,signals:new Map,effects:new Map,components:new Map},m=0,g=0;var s=[];function b(){o.enabled=true,d({onSignalCreate:(e,n)=>w(e,n),onSignalUpdate:(e,n)=>D(e,n),onEffectCreate:e=>E(e),onEffectRun:(e,n,t)=>S(e,n,t)}),typeof window<"u"&&(window.__FLEXIUM_DEVTOOLS__={getState:T,getSignals:()=>Array.from(o.signals.values()),getEffects:()=>Array.from(o.effects.values()),getComponents:()=>Array.from(o.components.values()),subscribe:e=>(s.push(e),()=>{let n=s.indexOf(e);n>-1&&s.splice(n,1);})},console.log("%c[Flexium DevTools] Enabled","color: #10b981; font-weight: bold;"));}function v(){o.enabled=false,o.signals.clear(),o.effects.clear(),o.components.clear(),d(null),typeof window<"u"&&delete window.__FLEXIUM_DEVTOOLS__;}function T(){return {...o}}function a(e,n){for(let t of s)try{t(e,n);}catch(r){b$1(a$1.DEVTOOLS_LISTENER_ERROR,{event:e},r);}}function w(e,n){if(!o.enabled)return -1;let t=m++,r=Date.now();return o.signals.set(t,{id:t,name:n,value:e.peek(),subscribers:0,createdAt:r,lastUpdated:r,updateCount:0}),a("signal-create",{id:t,name:n}),t}function D(e,n){if(!o.enabled)return;let t=o.signals.get(e);t&&(t.value=n,t.lastUpdated=Date.now(),t.updateCount++,a("signal-update",{id:e,value:n}));}function E(e){if(!o.enabled)return -1;let n=g++;return o.effects.set(n,{id:n,name:e,dependencies:[],lastRun:Date.now(),runCount:0,status:"idle"}),a("effect-create",{id:n,name:e}),n}function S(e,n,t){if(!o.enabled)return;let r=o.effects.get(e);r&&(r.status=n,r.lastRun=Date.now(),r.runCount++,t&&(r.error=t),a("effect-run",{id:e,status:n,error:t}));}export{v as disableDevTools,b as enableDevTools};//# sourceMappingURL=advanced.mjs.map
2
+ //# sourceMappingURL=advanced.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/devtools/index.ts"],"names":["devToolsState","signalIdCounter","effectIdCounter","listeners","enableDevTools","setDevToolsHooks","signal","name","registerSignal","id","value","updateSignalInfo","registerEffect","status","error","updateEffectInfo","getDevToolsState","listener","index","disableDevTools","emit","event","data","e","logError","ErrorCodes","now","info"],"mappings":"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","file":"advanced.mjs","sourcesContent":["/**\n * Flexium DevTools Integration\n *\n * Provides hooks for browser devtools extension to inspect signals,\n * effects, and component trees.\n *\n * @example\n * ```tsx\n * import { enableDevTools, getDevToolsState } from 'flexium/devtools';\n *\n * // Enable devtools in development\n * if (process.env.NODE_ENV !== 'production') {\n * enableDevTools();\n * }\n * ```\n */\n\nimport { Signal, Computed, setDevToolsHooks } from '../core/signal'\nimport { ErrorCodes, logError } from '../core/errors'\n\nexport interface DevToolsState {\n enabled: boolean\n signals: Map<number, SignalInfo>\n effects: Map<number, EffectInfo>\n components: Map<number, ComponentInfo>\n}\n\nexport interface SignalInfo {\n id: number\n name?: string\n value: unknown\n subscribers: number\n createdAt: number\n lastUpdated: number\n updateCount: number\n}\n\nexport interface EffectInfo {\n id: number\n name?: string\n dependencies: number[]\n lastRun: number\n runCount: number\n status: 'idle' | 'running' | 'error'\n error?: Error\n}\n\nexport interface ComponentInfo {\n id: number\n name: string\n props: Record<string, unknown>\n signals: number[]\n effects: number[]\n children: number[]\n parent?: number\n mountedAt: number\n}\n\n// Global devtools state\nconst devToolsState: DevToolsState = {\n enabled: false,\n signals: new Map(),\n effects: new Map(),\n components: new Map(),\n}\n\nlet signalIdCounter = 0\nlet effectIdCounter = 0\nlet componentIdCounter = 0\n\n// Event listeners for devtools\ntype DevToolsEventType =\n | 'signal-create'\n | 'signal-update'\n | 'effect-create'\n | 'effect-run'\n | 'component-mount'\n | 'component-unmount'\ntype DevToolsListener = (event: DevToolsEventType, data: unknown) => void\nconst listeners: DevToolsListener[] = []\n\n/**\n * Enable devtools integration\n * Call this in development mode to enable signal/effect inspection\n */\nexport function enableDevTools(): void {\n devToolsState.enabled = true\n\n // Register hooks with signal system for automatic tracking\n setDevToolsHooks({\n onSignalCreate: (signal, name) => registerSignal(signal, name),\n onSignalUpdate: (id, value) => updateSignalInfo(id, value),\n onEffectCreate: (name) => registerEffect(name),\n onEffectRun: (id, status, error) => updateEffectInfo(id, status, error),\n })\n\n // Expose to window for browser extension\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ;(window as any).__FLEXIUM_DEVTOOLS__ = {\n getState: getDevToolsState,\n getSignals: () => Array.from(devToolsState.signals.values()),\n getEffects: () => Array.from(devToolsState.effects.values()),\n getComponents: () => Array.from(devToolsState.components.values()),\n subscribe: (listener: DevToolsListener) => {\n listeners.push(listener)\n return () => {\n const index = listeners.indexOf(listener)\n if (index > -1) listeners.splice(index, 1)\n }\n },\n }\n\n console.log(\n '%c[Flexium DevTools] Enabled',\n 'color: #10b981; font-weight: bold;'\n )\n }\n}\n\n/**\n * Disable devtools integration\n */\nexport function disableDevTools(): void {\n devToolsState.enabled = false\n devToolsState.signals.clear()\n devToolsState.effects.clear()\n devToolsState.components.clear()\n\n // Unregister hooks\n setDevToolsHooks(null)\n\n if (typeof window !== 'undefined') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delete (window as any).__FLEXIUM_DEVTOOLS__\n }\n}\n\n/**\n * Get current devtools state\n */\nexport function getDevToolsState(): DevToolsState {\n return { ...devToolsState }\n}\n\n/**\n * Check if devtools are enabled\n */\nexport function isDevToolsEnabled(): boolean {\n return devToolsState.enabled\n}\n\n// Internal: emit event to listeners\nfunction emit(event: DevToolsEventType, data: unknown): void {\n for (const listener of listeners) {\n try {\n listener(event, data)\n } catch (e) {\n logError(ErrorCodes.DEVTOOLS_LISTENER_ERROR, { event }, e)\n }\n }\n}\n\n/**\n * Register a signal with devtools\n * @internal\n */\nexport function registerSignal(\n signal: Signal<unknown> | Computed<unknown>,\n name?: string\n): number {\n if (!devToolsState.enabled) return -1\n\n const id = signalIdCounter++\n const now = Date.now()\n\n devToolsState.signals.set(id, {\n id,\n name,\n value: signal.peek(),\n subscribers: 0,\n createdAt: now,\n lastUpdated: now,\n updateCount: 0,\n })\n\n emit('signal-create', { id, name })\n return id\n}\n\n/**\n * Update signal info in devtools\n * @internal\n */\nexport function updateSignalInfo(id: number, value: unknown): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.signals.get(id)\n if (info) {\n info.value = value\n info.lastUpdated = Date.now()\n info.updateCount++\n emit('signal-update', { id, value })\n }\n}\n\n/**\n * Register an effect with devtools\n * @internal\n */\nexport function registerEffect(name?: string): number {\n if (!devToolsState.enabled) return -1\n\n const id = effectIdCounter++\n\n devToolsState.effects.set(id, {\n id,\n name,\n dependencies: [],\n lastRun: Date.now(),\n runCount: 0,\n status: 'idle',\n })\n\n emit('effect-create', { id, name })\n return id\n}\n\n/**\n * Update effect info in devtools\n * @internal\n */\nexport function updateEffectInfo(\n id: number,\n status: 'idle' | 'running' | 'error',\n error?: Error\n): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.effects.get(id)\n if (info) {\n info.status = status\n info.lastRun = Date.now()\n info.runCount++\n if (error) info.error = error\n emit('effect-run', { id, status, error })\n }\n}\n\n/**\n * Register a component with devtools\n * @internal\n */\nexport function registerComponent(\n name: string,\n props: Record<string, unknown>\n): number {\n if (!devToolsState.enabled) return -1\n\n const id = componentIdCounter++\n\n devToolsState.components.set(id, {\n id,\n name,\n props,\n signals: [],\n effects: [],\n children: [],\n mountedAt: Date.now(),\n })\n\n emit('component-mount', { id, name })\n return id\n}\n\n/**\n * Unregister a component from devtools\n * @internal\n */\nexport function unregisterComponent(id: number): void {\n if (!devToolsState.enabled) return\n\n const info = devToolsState.components.get(id)\n if (info) {\n devToolsState.components.delete(id)\n emit('component-unmount', { id, name: info.name })\n }\n}\n\n/**\n * Create a named signal for better devtools visibility\n *\n * @example\n * ```tsx\n * import { createNamedSignal } from 'flexium/devtools';\n * import { signal } from 'flexium/core';\n *\n * // Shows as \"count\" in devtools\n * const count = createNamedSignal('count', 0, signal);\n * ```\n */\nexport function createNamedSignal<T>(\n name: string,\n initialValue: T,\n signalFn: (v: T) => Signal<T>\n): Signal<T> {\n const s = signalFn(initialValue)\n\n if (devToolsState.enabled) {\n registerSignal(s, name)\n }\n\n return s\n}\n"]}
@@ -0,0 +1,22 @@
1
+ import { S as Signal } from './signal-mNtlF8-v.cjs';
2
+ export { C as Computed, c as computed, e as effect, r as root, s as signal } from './signal-mNtlF8-v.cjs';
3
+ export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-JB58mpQT.cjs';
4
+
5
+ /**
6
+ * Canvas renderer - renders canvas primitives to canvas context
7
+ */
8
+ /**
9
+ * Render canvas children to context
10
+ */
11
+ declare function renderCanvasChildren(ctx: CanvasRenderingContext2D, children: any, _width: number, _height: number): void;
12
+
13
+ /**
14
+ * Canvas utilities
15
+ */
16
+
17
+ /**
18
+ * Unwrap a value that might be a Signal
19
+ */
20
+ declare function unwrapSignal<T>(value: T | Signal<T>): T;
21
+
22
+ export { Signal, renderCanvasChildren, unwrapSignal };
@@ -0,0 +1,22 @@
1
+ import { S as Signal } from './signal-mNtlF8-v.js';
2
+ export { C as Computed, c as computed, e as effect, r as root, s as signal } from './signal-mNtlF8-v.js';
3
+ export { C as Canvas, f as CanvasProps, b as DrawArc, i as DrawArcProps, a as DrawCircle, h as DrawCircleProps, c as DrawLine, j as DrawLineProps, d as DrawPath, k as DrawPathProps, D as DrawRect, g as DrawRectProps, e as DrawText, l as DrawTextProps } from './DrawText-CeXBL8Ev.js';
4
+
5
+ /**
6
+ * Canvas renderer - renders canvas primitives to canvas context
7
+ */
8
+ /**
9
+ * Render canvas children to context
10
+ */
11
+ declare function renderCanvasChildren(ctx: CanvasRenderingContext2D, children: any, _width: number, _height: number): void;
12
+
13
+ /**
14
+ * Canvas utilities
15
+ */
16
+
17
+ /**
18
+ * Unwrap a value that might be a Signal
19
+ */
20
+ declare function unwrapSignal<T>(value: T | Signal<T>): T;
21
+
22
+ export { Signal, renderCanvasChildren, unwrapSignal };
package/dist/canvas.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkGDBJ322I_js=require('./chunk-GDBJ322I.js'),chunkROYFUJN5_js=require('./chunk-ROYFUJN5.js');Object.defineProperty(exports,"Canvas",{enumerable:true,get:function(){return chunkGDBJ322I_js.d}});Object.defineProperty(exports,"DrawArc",{enumerable:true,get:function(){return chunkGDBJ322I_js.g}});Object.defineProperty(exports,"DrawCircle",{enumerable:true,get:function(){return chunkGDBJ322I_js.f}});Object.defineProperty(exports,"DrawLine",{enumerable:true,get:function(){return chunkGDBJ322I_js.h}});Object.defineProperty(exports,"DrawPath",{enumerable:true,get:function(){return chunkGDBJ322I_js.i}});Object.defineProperty(exports,"DrawRect",{enumerable:true,get:function(){return chunkGDBJ322I_js.e}});Object.defineProperty(exports,"DrawText",{enumerable:true,get:function(){return chunkGDBJ322I_js.j}});Object.defineProperty(exports,"renderCanvasChildren",{enumerable:true,get:function(){return chunkGDBJ322I_js.c}});Object.defineProperty(exports,"unwrapSignal",{enumerable:true,get:function(){return chunkGDBJ322I_js.b}});Object.defineProperty(exports,"computed",{enumerable:true,get:function(){return chunkROYFUJN5_js.i}});Object.defineProperty(exports,"effect",{enumerable:true,get:function(){return chunkROYFUJN5_js.j}});Object.defineProperty(exports,"root",{enumerable:true,get:function(){return chunkROYFUJN5_js.m}});Object.defineProperty(exports,"signal",{enumerable:true,get:function(){return chunkROYFUJN5_js.h}});//# sourceMappingURL=canvas.js.map
2
+ //# sourceMappingURL=canvas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"canvas.js"}
@@ -0,0 +1,2 @@
1
+ export{d as Canvas,g as DrawArc,f as DrawCircle,h as DrawLine,i as DrawPath,e as DrawRect,j as DrawText,c as renderCanvasChildren,b as unwrapSignal}from'./chunk-ZNPYN2TZ.mjs';export{i as computed,j as effect,m as root,h as signal}from'./chunk-5S3ZQ2LB.mjs';//# sourceMappingURL=canvas.mjs.map
2
+ //# sourceMappingURL=canvas.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"canvas.mjs"}