elementdrawing 1.0.0

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 (78) hide show
  1. package/LICENSE +21 -0
  2. package/dist/elementdrawing.min.js +3 -0
  3. package/dist/elementdrawing.min.js.LICENSE.txt +8 -0
  4. package/dist/elementdrawing.min.js.map +1 -0
  5. package/dist/index.html +1 -0
  6. package/package.json +127 -0
  7. package/src/core/bridge.h +855 -0
  8. package/src/core/diff.c +900 -0
  9. package/src/core/element.c +1078 -0
  10. package/src/core/event.c +813 -0
  11. package/src/core/fiber.c +1027 -0
  12. package/src/core/hooks.c +919 -0
  13. package/src/core/renderer.c +963 -0
  14. package/src/core/scheduler.c +702 -0
  15. package/src/core/state.c +803 -0
  16. package/src/css/animations.css +779 -0
  17. package/src/css/base.css +615 -0
  18. package/src/css/components.css +1311 -0
  19. package/src/css/tailwind.css +370 -0
  20. package/src/css/themes.css +517 -0
  21. package/src/css/utilities.css +475 -0
  22. package/src/index.js +746 -0
  23. package/src/js/animation.js +655 -0
  24. package/src/js/dom.js +665 -0
  25. package/src/js/events.js +585 -0
  26. package/src/js/http.js +446 -0
  27. package/src/js/index.js +26 -0
  28. package/src/js/router.js +483 -0
  29. package/src/js/store.js +539 -0
  30. package/src/js/utils.js +593 -0
  31. package/src/js/validator.js +529 -0
  32. package/src/jsx/components/Accordion.jsx +210 -0
  33. package/src/jsx/components/Alert.jsx +169 -0
  34. package/src/jsx/components/Avatar.jsx +214 -0
  35. package/src/jsx/components/Badge.jsx +136 -0
  36. package/src/jsx/components/Breadcrumb.jsx +200 -0
  37. package/src/jsx/components/Button.jsx +188 -0
  38. package/src/jsx/components/Card.jsx +192 -0
  39. package/src/jsx/components/Carousel.jsx +278 -0
  40. package/src/jsx/components/Checkbox.jsx +215 -0
  41. package/src/jsx/components/Dialog.jsx +242 -0
  42. package/src/jsx/components/Drawer.jsx +190 -0
  43. package/src/jsx/components/Dropdown.jsx +268 -0
  44. package/src/jsx/components/Form.jsx +274 -0
  45. package/src/jsx/components/Input.jsx +285 -0
  46. package/src/jsx/components/Menu.jsx +276 -0
  47. package/src/jsx/components/Modal.jsx +274 -0
  48. package/src/jsx/components/Navbar.jsx +292 -0
  49. package/src/jsx/components/Pagination.jsx +268 -0
  50. package/src/jsx/components/Progress.jsx +252 -0
  51. package/src/jsx/components/Radio.jsx +208 -0
  52. package/src/jsx/components/Select.jsx +397 -0
  53. package/src/jsx/components/Sidebar.jsx +250 -0
  54. package/src/jsx/components/Slider.jsx +310 -0
  55. package/src/jsx/components/Spinner.jsx +198 -0
  56. package/src/jsx/components/Switch.jsx +201 -0
  57. package/src/jsx/components/Table.jsx +332 -0
  58. package/src/jsx/components/Tabs.jsx +227 -0
  59. package/src/jsx/components/Textarea.jsx +212 -0
  60. package/src/jsx/components/Toast.jsx +270 -0
  61. package/src/jsx/components/Tooltip.jsx +178 -0
  62. package/src/jsx/components/Typography.jsx +299 -0
  63. package/src/jsx/components/index.jsx +70 -0
  64. package/src/jsx/core/element.js +3 -0
  65. package/src/jsx/hooks/index.js +356 -0
  66. package/src/jsx/hooks/useCallback.js +472 -0
  67. package/src/jsx/hooks/useContext.js +586 -0
  68. package/src/jsx/hooks/useEffect.js +704 -0
  69. package/src/jsx/hooks/useLayoutEffect.js +508 -0
  70. package/src/jsx/hooks/useMemo.js +689 -0
  71. package/src/jsx/hooks/useReducer.js +729 -0
  72. package/src/jsx/hooks/useRef.js +542 -0
  73. package/src/jsx/hooks/useState.js +854 -0
  74. package/src/jsx/runtime/commit.js +903 -0
  75. package/src/jsx/runtime/createElement.js +860 -0
  76. package/src/jsx/runtime/index.js +356 -0
  77. package/src/jsx/runtime/reconcile.js +687 -0
  78. package/src/jsx/runtime/render.js +914 -0
@@ -0,0 +1,356 @@
1
+ /**
2
+ * JSX Hooks Index
3
+ * ElementDrawing Framework - Re-exports all hooks from a single entry point,
4
+ * provides shared hook context management, component lifecycle coordination,
5
+ * development tools integration, and hook validation.
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ const { useState, useTransition, useDeferredValue, batchedUpdates, configurePersistence, deepEqual, shallowEqual, runWithPriority, startTransition, PRIORITY } = require('./useState');
11
+ const { useEffect, useInsertionEffect, useDeepCompareEffect, useEffectOnce, useUpdateEffect, batchEffects, areDepsEqual, areDepsDeepEqual, cancelEffect, setStrictMode, isInStrictMode, getPendingEffectCounts } = require('./useEffect');
12
+ const { useContext, createContext, useContextSelector, useContextObserver, useMergedContext, composeContexts, getContextVersion } = require('./useContext');
13
+ const { useReducer, batchDispatches, createLoggerMiddleware, createValidationMiddleware, createTransformMiddleware, createThrottleMiddleware, createActionCreators, createAction } = require('./useReducer');
14
+ const { useCallback, useDebouncedCallback, useThrottledCallback, useOnceCallback, useDeepCompareCallback, useComposedCallback, setCallbackProfiling, getCallbackProfile } = require('./useCallback');
15
+ const { useMemo, useMemoWith, useMemoTTL, useDeepCompareMemo, useMemoLRU, invalidateMemo, invalidateAllMemos, setMemoProfiling, getMemoProfile } = require('./useMemo');
16
+ const { useRef, usePrevious, usePreviousWithInit, createRef, useCallbackRef, forwardRef, isForwardRef, useMergedRefs, useMeasureRef, useInViewRef, useFocusRef, useScrollRef, processPendingPrevUpdates } = require('./useRef');
17
+ const { useLayoutEffect, useIsomorphicLayoutEffect, usePriorityLayoutEffect, useMutationObserver, useResizeObserver, useAutoFocus, LAYOUT_PRIORITY } = require('./useLayoutEffect');
18
+
19
+ // ─── Shared Hook Context ──────────────────────────────────────────────────────
20
+
21
+ /**
22
+ * Set the currently rendering component for all hooks.
23
+ * Called by the framework before each component render.
24
+ * @param {Object} component
25
+ */
26
+ function setCurrentComponent(component) {
27
+ // Propagate to all hook modules
28
+ const useStateModule = require('./useState');
29
+ const useEffectModule = require('./useEffect');
30
+ const useContextModule = require('./useContext');
31
+ const useReducerModule = require('./useReducer');
32
+ const useCallbackModule = require('./useCallback');
33
+ const useMemoModule = require('./useMemo');
34
+ const useRefModule = require('./useRef');
35
+ const useLayoutEffectModule = require('./useLayoutEffect');
36
+
37
+ useStateModule.setCurrentComponent(component);
38
+ useEffectModule.setCurrentComponent(component);
39
+ useContextModule.setCurrentComponent(component);
40
+ useReducerModule.setCurrentComponent(component);
41
+ useCallbackModule.setCurrentComponent(component);
42
+ useMemoModule.setCurrentComponent(component);
43
+ useRefModule.setCurrentComponent(component);
44
+ useLayoutEffectModule.setCurrentComponent(component);
45
+ }
46
+
47
+ /**
48
+ * Reset all hook indices after rendering is complete.
49
+ */
50
+ function resetHookIndex() {
51
+ const useStateModule = require('./useState');
52
+ const useEffectModule = require('./useEffect');
53
+ const useContextModule = require('./useContext');
54
+ const useReducerModule = require('./useReducer');
55
+ const useCallbackModule = require('./useCallback');
56
+ const useMemoModule = require('./useMemo');
57
+ const useRefModule = require('./useRef');
58
+ const useLayoutEffectModule = require('./useLayoutEffect');
59
+
60
+ useStateModule.resetHookIndex();
61
+ useEffectModule.resetHookIndex();
62
+ useContextModule.resetHookIndex();
63
+ useReducerModule.resetHookIndex();
64
+ useCallbackModule.resetHookIndex();
65
+ useMemoModule.resetHookIndex();
66
+ useRefModule.resetHookIndex();
67
+ useLayoutEffectModule.resetHookIndex();
68
+ }
69
+
70
+ /**
71
+ * Clean up all hook state for a component on unmount.
72
+ * @param {Object} component
73
+ */
74
+ function cleanupComponent(component) {
75
+ const useStateModule = require('./useState');
76
+ const useEffectModule = require('./useEffect');
77
+ const useContextModule = require('./useContext');
78
+ const useReducerModule = require('./useReducer');
79
+ const useMemoModule = require('./useMemo');
80
+ const useRefModule = require('./useRef');
81
+ const useLayoutEffectModule = require('./useLayoutEffect');
82
+
83
+ useStateModule.cleanupComponentState(component);
84
+ useEffectModule.cleanupComponentEffects(component);
85
+ useContextModule.cleanupContextSubscriptions(component);
86
+ useReducerModule.cleanupReducerState(component);
87
+ useMemoModule.cleanupMemoCache(component);
88
+ useRefModule.cleanupRefs(component);
89
+ useLayoutEffectModule.cleanupLayoutEffects(component);
90
+ }
91
+
92
+ /**
93
+ * Flush all pending effects in the correct order.
94
+ */
95
+ function flushAllEffects() {
96
+ const useEffectModule = require('./useEffect');
97
+ const useLayoutEffectModule = require('./useLayoutEffect');
98
+
99
+ // Flush in correct order: insertion -> layout -> passive
100
+ useLayoutEffectModule.flushLayoutEffects();
101
+ useEffectModule.flushAllEffects();
102
+ }
103
+
104
+ // ─── Hook Validation (Development Mode) ───────────────────────────────────────
105
+
106
+ let hookCallOrder = [];
107
+ let validationEnabled = false;
108
+
109
+ /**
110
+ * Enable hook order validation in development mode.
111
+ * Detects hooks called in different orders across renders.
112
+ * @param {boolean} enabled
113
+ */
114
+ function setHookValidation(enabled) {
115
+ validationEnabled = enabled;
116
+ hookCallOrder = [];
117
+ }
118
+
119
+ /**
120
+ * Record a hook call for validation.
121
+ * @param {string} hookName - Name of the hook
122
+ * @param {Object} component - The component instance
123
+ */
124
+ function recordHookCall(hookName, component) {
125
+ if (!validationEnabled) return;
126
+
127
+ const key = component._componentId || component;
128
+ if (!hookCallOrder[key]) {
129
+ hookCallOrder[key] = [];
130
+ }
131
+ hookCallOrder[key].push(hookName);
132
+ }
133
+
134
+ /**
135
+ * Validate hook call order for a component.
136
+ * Detects if hooks are called in a different order than previous render.
137
+ * @param {Object} component
138
+ * @returns {boolean} True if hook order is valid
139
+ */
140
+ function validateHookOrder(component) {
141
+ if (!validationEnabled) return true;
142
+
143
+ const key = component._componentId || component;
144
+ const currentOrder = hookCallOrder[key];
145
+
146
+ if (!currentOrder || currentOrder.length === 0) return true;
147
+
148
+ if (!component._prevHookOrder) {
149
+ component._prevHookOrder = currentOrder.slice();
150
+ return true;
151
+ }
152
+
153
+ const prevOrder = component._prevHookOrder;
154
+
155
+ if (prevOrder.length !== currentOrder.length) {
156
+ console.error(
157
+ '[Hooks] Hook call order changed! ' +
158
+ `Previous: [${prevOrder.join(', ')}] ` +
159
+ `Current: [${currentOrder.join(', ')}]`
160
+ );
161
+ return false;
162
+ }
163
+
164
+ for (let i = 0; i < prevOrder.length; i++) {
165
+ if (prevOrder[i] !== currentOrder[i]) {
166
+ console.error(
167
+ '[Hooks] Hook call order changed at index ' + i + '! ' +
168
+ `Previous: ${prevOrder[i]} Current: ${currentOrder[i]}`
169
+ );
170
+ return false;
171
+ }
172
+ }
173
+
174
+ component._prevHookOrder = currentOrder.slice();
175
+ return true;
176
+ }
177
+
178
+ // ─── Development Tools Integration ────────────────────────────────────────────
179
+
180
+ let devToolsCallback = null;
181
+
182
+ /**
183
+ * Register a callback for development tools integration.
184
+ * Called with hook state changes for inspection.
185
+ * @param {Function} callback
186
+ */
187
+ function registerDevTools(callback) {
188
+ devToolsCallback = callback;
189
+ }
190
+
191
+ /**
192
+ * Notify dev tools of a hook state change.
193
+ * @param {string} hookName
194
+ * @param {Object} component
195
+ * @param {*} newValue
196
+ * @param {*} oldValue
197
+ */
198
+ function notifyDevTools(hookName, component, newValue, oldValue) {
199
+ if (devToolsCallback) {
200
+ try {
201
+ devToolsCallback({
202
+ type: 'hook-update',
203
+ hookName,
204
+ componentId: component._componentId,
205
+ componentName: component.displayName || component.name || 'Anonymous',
206
+ newValue,
207
+ oldValue,
208
+ timestamp: Date.now(),
209
+ });
210
+ } catch (error) {
211
+ // Dev tools errors should not break the app
212
+ }
213
+ }
214
+ }
215
+
216
+ // ─── Hook Profiling ───────────────────────────────────────────────────────────
217
+
218
+ /**
219
+ * Get comprehensive profiling data for a component.
220
+ * @param {Object} component
221
+ * @returns {Object} Profiling data
222
+ */
223
+ function getComponentProfile(component) {
224
+ return {
225
+ callbacks: getCallbackProfile(component),
226
+ memos: getMemoProfile(component),
227
+ effectCounts: getPendingEffectCounts(),
228
+ };
229
+ }
230
+
231
+ /**
232
+ * Enable all profiling.
233
+ * @param {boolean} enabled
234
+ */
235
+ function setProfiling(enabled) {
236
+ setCallbackProfiling(enabled);
237
+ setMemoProfiling(enabled);
238
+ }
239
+
240
+ // ─── Post-Render Processing ───────────────────────────────────────────────────
241
+
242
+ /**
243
+ * Process any post-render tasks like previous value updates.
244
+ * Called after the render phase completes but before commit.
245
+ * @param {Object} component
246
+ */
247
+ function postRenderProcess(component) {
248
+ processPendingPrevUpdates(component);
249
+ }
250
+
251
+ // ─── Exports ──────────────────────────────────────────────────────────────────
252
+
253
+ module.exports = {
254
+ // ── Core hooks ──
255
+ useState,
256
+ useEffect,
257
+ useContext,
258
+ useReducer,
259
+ useCallback,
260
+ useMemo,
261
+ useRef,
262
+ useLayoutEffect,
263
+
264
+ // ── Extended hooks ──
265
+ useInsertionEffect,
266
+ useIsomorphicLayoutEffect,
267
+ usePriorityLayoutEffect,
268
+ useTransition,
269
+ useDeferredValue,
270
+ useDebouncedCallback,
271
+ useThrottledCallback,
272
+ useOnceCallback,
273
+ useDeepCompareCallback,
274
+ useComposedCallback,
275
+ useMemoWith,
276
+ useMemoTTL,
277
+ useDeepCompareMemo,
278
+ useMemoLRU,
279
+ useDeepCompareEffect,
280
+ useEffectOnce,
281
+ useUpdateEffect,
282
+ usePrevious,
283
+ usePreviousWithInit,
284
+ useMutationObserver,
285
+ useResizeObserver,
286
+ useAutoFocus,
287
+ useContextSelector,
288
+ useContextObserver,
289
+
290
+ // ── Context API ──
291
+ createContext,
292
+ useMergedContext,
293
+ composeContexts,
294
+
295
+ // ── Ref utilities ──
296
+ createRef,
297
+ useCallbackRef,
298
+ forwardRef,
299
+ isForwardRef,
300
+ useMergedRefs,
301
+ useMeasureRef,
302
+ useInViewRef,
303
+ useFocusRef,
304
+ useScrollRef,
305
+
306
+ // ── Batching ──
307
+ batchedUpdates,
308
+ batchDispatches,
309
+ runWithPriority,
310
+ startTransition,
311
+
312
+ // ── Persistence ──
313
+ configurePersistence,
314
+
315
+ // ── Middleware ──
316
+ createLoggerMiddleware,
317
+ createValidationMiddleware,
318
+ createTransformMiddleware,
319
+ createThrottleMiddleware,
320
+ createActionCreators,
321
+ createAction,
322
+
323
+ // ── Memo invalidation ──
324
+ invalidateMemo,
325
+ invalidateAllMemos,
326
+
327
+ // ── State comparison ──
328
+ deepEqual,
329
+ shallowEqual,
330
+ areDepsEqual,
331
+ areDepsDeepEqual,
332
+
333
+ // ── Framework integration ──
334
+ setCurrentComponent,
335
+ resetHookIndex,
336
+ cleanupComponent,
337
+ flushAllEffects,
338
+ postRenderProcess,
339
+
340
+ // ── Development tools ──
341
+ registerDevTools,
342
+ setHookValidation,
343
+ validateHookOrder,
344
+ recordHookCall,
345
+ setProfiling,
346
+ getComponentProfile,
347
+ setStrictMode,
348
+ isInStrictMode,
349
+ cancelEffect,
350
+ getContextVersion,
351
+ getPendingEffectCounts,
352
+
353
+ // ── Constants ──
354
+ PRIORITY,
355
+ LAYOUT_PRIORITY,
356
+ };