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.
- package/LICENSE +21 -0
- package/dist/elementdrawing.min.js +3 -0
- package/dist/elementdrawing.min.js.LICENSE.txt +8 -0
- package/dist/elementdrawing.min.js.map +1 -0
- package/dist/index.html +1 -0
- package/package.json +127 -0
- package/src/core/bridge.h +855 -0
- package/src/core/diff.c +900 -0
- package/src/core/element.c +1078 -0
- package/src/core/event.c +813 -0
- package/src/core/fiber.c +1027 -0
- package/src/core/hooks.c +919 -0
- package/src/core/renderer.c +963 -0
- package/src/core/scheduler.c +702 -0
- package/src/core/state.c +803 -0
- package/src/css/animations.css +779 -0
- package/src/css/base.css +615 -0
- package/src/css/components.css +1311 -0
- package/src/css/tailwind.css +370 -0
- package/src/css/themes.css +517 -0
- package/src/css/utilities.css +475 -0
- package/src/index.js +746 -0
- package/src/js/animation.js +655 -0
- package/src/js/dom.js +665 -0
- package/src/js/events.js +585 -0
- package/src/js/http.js +446 -0
- package/src/js/index.js +26 -0
- package/src/js/router.js +483 -0
- package/src/js/store.js +539 -0
- package/src/js/utils.js +593 -0
- package/src/js/validator.js +529 -0
- package/src/jsx/components/Accordion.jsx +210 -0
- package/src/jsx/components/Alert.jsx +169 -0
- package/src/jsx/components/Avatar.jsx +214 -0
- package/src/jsx/components/Badge.jsx +136 -0
- package/src/jsx/components/Breadcrumb.jsx +200 -0
- package/src/jsx/components/Button.jsx +188 -0
- package/src/jsx/components/Card.jsx +192 -0
- package/src/jsx/components/Carousel.jsx +278 -0
- package/src/jsx/components/Checkbox.jsx +215 -0
- package/src/jsx/components/Dialog.jsx +242 -0
- package/src/jsx/components/Drawer.jsx +190 -0
- package/src/jsx/components/Dropdown.jsx +268 -0
- package/src/jsx/components/Form.jsx +274 -0
- package/src/jsx/components/Input.jsx +285 -0
- package/src/jsx/components/Menu.jsx +276 -0
- package/src/jsx/components/Modal.jsx +274 -0
- package/src/jsx/components/Navbar.jsx +292 -0
- package/src/jsx/components/Pagination.jsx +268 -0
- package/src/jsx/components/Progress.jsx +252 -0
- package/src/jsx/components/Radio.jsx +208 -0
- package/src/jsx/components/Select.jsx +397 -0
- package/src/jsx/components/Sidebar.jsx +250 -0
- package/src/jsx/components/Slider.jsx +310 -0
- package/src/jsx/components/Spinner.jsx +198 -0
- package/src/jsx/components/Switch.jsx +201 -0
- package/src/jsx/components/Table.jsx +332 -0
- package/src/jsx/components/Tabs.jsx +227 -0
- package/src/jsx/components/Textarea.jsx +212 -0
- package/src/jsx/components/Toast.jsx +270 -0
- package/src/jsx/components/Tooltip.jsx +178 -0
- package/src/jsx/components/Typography.jsx +299 -0
- package/src/jsx/components/index.jsx +70 -0
- package/src/jsx/core/element.js +3 -0
- package/src/jsx/hooks/index.js +356 -0
- package/src/jsx/hooks/useCallback.js +472 -0
- package/src/jsx/hooks/useContext.js +586 -0
- package/src/jsx/hooks/useEffect.js +704 -0
- package/src/jsx/hooks/useLayoutEffect.js +508 -0
- package/src/jsx/hooks/useMemo.js +689 -0
- package/src/jsx/hooks/useReducer.js +729 -0
- package/src/jsx/hooks/useRef.js +542 -0
- package/src/jsx/hooks/useState.js +854 -0
- package/src/jsx/runtime/commit.js +903 -0
- package/src/jsx/runtime/createElement.js +860 -0
- package/src/jsx/runtime/index.js +356 -0
- package/src/jsx/runtime/reconcile.js +687 -0
- package/src/jsx/runtime/render.js +914 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSX Runtime Index
|
|
3
|
+
* ElementDrawing Framework - Re-exports all runtime functions, provides
|
|
4
|
+
* comprehensive runtime initialization, configuration, development tools
|
|
5
|
+
* bridge, and global event system.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
const createElementModule = require('./createElement');
|
|
11
|
+
const renderModule = require('./render');
|
|
12
|
+
const reconcileModule = require('./reconcile');
|
|
13
|
+
const commitModule = require('./commit');
|
|
14
|
+
|
|
15
|
+
// ─── Runtime Configuration ────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
const runtimeConfig = {
|
|
18
|
+
strictMode: false,
|
|
19
|
+
profiling: false,
|
|
20
|
+
concurrentMode: false,
|
|
21
|
+
eventDelegation: true,
|
|
22
|
+
hydration: false,
|
|
23
|
+
devTools: false,
|
|
24
|
+
errorBoundaries: true,
|
|
25
|
+
suspense: true,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Configure the runtime.
|
|
30
|
+
* @param {Object} config - Configuration options
|
|
31
|
+
* @param {boolean} [config.strictMode] - Enable strict mode
|
|
32
|
+
* @param {boolean} [config.profiling] - Enable profiling
|
|
33
|
+
* @param {boolean} [config.concurrentMode] - Enable concurrent features
|
|
34
|
+
* @param {boolean} [config.eventDelegation] - Enable event delegation
|
|
35
|
+
* @param {boolean} [config.devTools] - Enable dev tools bridge
|
|
36
|
+
*/
|
|
37
|
+
function configureRuntime(config) {
|
|
38
|
+
Object.assign(runtimeConfig, config);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Get the current runtime configuration.
|
|
43
|
+
* @returns {Object}
|
|
44
|
+
*/
|
|
45
|
+
function getRuntimeConfig() {
|
|
46
|
+
return Object.assign({}, runtimeConfig);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// ─── Runtime Initialization ───────────────────────────────────────────────────
|
|
50
|
+
|
|
51
|
+
let isInitialized = false;
|
|
52
|
+
const initCallbacks = [];
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Initialize the runtime. Called once before the first render.
|
|
56
|
+
* @param {Object} [config] - Optional initial configuration
|
|
57
|
+
*/
|
|
58
|
+
function initRuntime(config) {
|
|
59
|
+
if (isInitialized) return;
|
|
60
|
+
|
|
61
|
+
if (config) {
|
|
62
|
+
configureRuntime(config);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Set up global error handler for error boundaries
|
|
66
|
+
if (runtimeConfig.errorBoundaries && typeof window !== 'undefined') {
|
|
67
|
+
window.addEventListener('error', function globalErrorHandler(event) {
|
|
68
|
+
// Allow error boundaries to handle uncaught errors
|
|
69
|
+
if (event.error && event.error.__edHandled) {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Initialize dev tools bridge
|
|
76
|
+
if (runtimeConfig.devTools && typeof window !== 'undefined') {
|
|
77
|
+
window.__ED_DEVTOOLS__ = {
|
|
78
|
+
version: '1.0.0',
|
|
79
|
+
getCommitStats: commitModule.getCommitStats,
|
|
80
|
+
getRuntimeConfig: getRuntimeConfig,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
isInitialized = true;
|
|
85
|
+
|
|
86
|
+
// Run initialization callbacks
|
|
87
|
+
initCallbacks.forEach((cb) => {
|
|
88
|
+
try {
|
|
89
|
+
cb();
|
|
90
|
+
} catch (error) {
|
|
91
|
+
console.error('[runtime] Init callback error:', error);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
initCallbacks.length = 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Register a callback to run after runtime initialization.
|
|
99
|
+
* If already initialized, runs immediately.
|
|
100
|
+
* @param {Function} callback
|
|
101
|
+
*/
|
|
102
|
+
function onRuntimeInit(callback) {
|
|
103
|
+
if (isInitialized) {
|
|
104
|
+
callback();
|
|
105
|
+
} else {
|
|
106
|
+
initCallbacks.push(callback);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Check if the runtime is initialized.
|
|
112
|
+
* @returns {boolean}
|
|
113
|
+
*/
|
|
114
|
+
function isRuntimeInitialized() {
|
|
115
|
+
return isInitialized;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ─── Global Render Function ───────────────────────────────────────────────────
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* High-level render function that handles the complete render pipeline:
|
|
122
|
+
* create element -> reconcile -> commit.
|
|
123
|
+
*
|
|
124
|
+
* @param {Object} vnode - Virtual DOM element to render
|
|
125
|
+
* @param {HTMLElement} container - Target DOM container
|
|
126
|
+
* @param {Function} [callback] - Called after render completes
|
|
127
|
+
* @returns {HTMLElement} The rendered DOM node
|
|
128
|
+
*/
|
|
129
|
+
function renderApp(vnode, container, callback) {
|
|
130
|
+
if (!isInitialized) {
|
|
131
|
+
initRuntime();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Get the previous vnode stored on the container
|
|
135
|
+
const prevVNode = container.__ed_vnode || null;
|
|
136
|
+
|
|
137
|
+
// Reconcile old and new trees
|
|
138
|
+
const { operations, context } = reconcileModule.reconcile(prevVNode, vnode);
|
|
139
|
+
|
|
140
|
+
// Commit the changes to the DOM
|
|
141
|
+
commitModule.commitWork(operations, container, {
|
|
142
|
+
onComplete: () => {
|
|
143
|
+
// Store the new vnode for future reconciles
|
|
144
|
+
container.__ed_vnode = vnode;
|
|
145
|
+
|
|
146
|
+
if (typeof callback === 'function') callback();
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
// If no previous vnode, do initial render
|
|
151
|
+
if (!prevVNode) {
|
|
152
|
+
return renderModule.render(vnode, container, callback);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return container;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Unmount the app from a container.
|
|
160
|
+
* @param {HTMLElement} container
|
|
161
|
+
*/
|
|
162
|
+
function unmountApp(container) {
|
|
163
|
+
renderModule.unmountContainer(container);
|
|
164
|
+
delete container.__ed_vnode;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// ─── Component Utilities ──────────────────────────────────────────────────────
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Create a component that wraps children with error boundary behavior.
|
|
171
|
+
* @param {Function} fallback - Fallback renderer receiving (error, retry)
|
|
172
|
+
* @returns {Function} Error boundary component
|
|
173
|
+
*/
|
|
174
|
+
function createErrorBoundary(fallback) {
|
|
175
|
+
return function ErrorBoundaryComponent(props) {
|
|
176
|
+
return createElementModule.createElement(
|
|
177
|
+
createElementModule.ErrorBoundary,
|
|
178
|
+
{ fallback, onError: props.onError },
|
|
179
|
+
props.children
|
|
180
|
+
);
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Create a Suspense wrapper.
|
|
186
|
+
* @param {*} fallback - Fallback UI
|
|
187
|
+
* @returns {Function} Suspense component
|
|
188
|
+
*/
|
|
189
|
+
function createSuspenseWrapper(fallback) {
|
|
190
|
+
return function SuspenseWrapper(props) {
|
|
191
|
+
return createElementModule.createElement(
|
|
192
|
+
createElementModule.Suspense,
|
|
193
|
+
{ fallback },
|
|
194
|
+
props.children
|
|
195
|
+
);
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// ─── Development Tools Bridge ─────────────────────────────────────────────────
|
|
200
|
+
|
|
201
|
+
const devToolsHandlers = new Set();
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Register a dev tools message handler.
|
|
205
|
+
* @param {Function} handler
|
|
206
|
+
* @returns {Function} Unregister function
|
|
207
|
+
*/
|
|
208
|
+
function registerDevToolsHandler(handler) {
|
|
209
|
+
devToolsHandlers.add(handler);
|
|
210
|
+
return function unregister() {
|
|
211
|
+
devToolsHandlers.delete(handler);
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Send a message to dev tools.
|
|
217
|
+
* @param {string} type - Message type
|
|
218
|
+
* @param {*} data - Message data
|
|
219
|
+
*/
|
|
220
|
+
function sendDevToolsMessage(type, data) {
|
|
221
|
+
if (!runtimeConfig.devTools) return;
|
|
222
|
+
|
|
223
|
+
const message = { type, data, timestamp: Date.now() };
|
|
224
|
+
|
|
225
|
+
devToolsHandlers.forEach((handler) => {
|
|
226
|
+
try {
|
|
227
|
+
handler(message);
|
|
228
|
+
} catch (error) {
|
|
229
|
+
// Dev tools errors should not break the app
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Also send to window bridge if available
|
|
234
|
+
if (typeof window !== 'undefined' && window.__ED_DEVTOOLS_BRIDGE__) {
|
|
235
|
+
try {
|
|
236
|
+
window.__ED_DEVTOOLS_BRIDGE__(message);
|
|
237
|
+
} catch (error) {
|
|
238
|
+
// Ignore
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ─── Runtime Statistics ───────────────────────────────────────────────────────
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Get comprehensive runtime statistics.
|
|
247
|
+
* @returns {Object}
|
|
248
|
+
*/
|
|
249
|
+
function getRuntimeStats() {
|
|
250
|
+
return {
|
|
251
|
+
commit: commitModule.getCommitStats(),
|
|
252
|
+
config: getRuntimeConfig(),
|
|
253
|
+
initialized: isInitialized,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// ─── Exports ──────────────────────────────────────────────────────────────────
|
|
258
|
+
|
|
259
|
+
module.exports = {
|
|
260
|
+
// ── createElement exports ──
|
|
261
|
+
createElement: createElementModule.createElement,
|
|
262
|
+
cloneElement: createElementModule.cloneElement,
|
|
263
|
+
mergeProps: createElementModule.mergeProps,
|
|
264
|
+
createTextElement: createElementModule.createTextElement,
|
|
265
|
+
createPortal: createElementModule.createPortal,
|
|
266
|
+
createSuspense: createElementModule.createSuspense,
|
|
267
|
+
createStrictMode: createElementModule.createStrictMode,
|
|
268
|
+
createErrorBoundary: createElementModule.createErrorBoundary,
|
|
269
|
+
Fragment: createElementModule.Fragment,
|
|
270
|
+
Suspense: createElementModule.Suspense,
|
|
271
|
+
StrictMode: createElementModule.StrictMode,
|
|
272
|
+
ErrorBoundary: createElementModule.ErrorBoundary,
|
|
273
|
+
lazy: createElementModule.lazy,
|
|
274
|
+
isValidElement: createElementModule.isValidElement,
|
|
275
|
+
isValidElementType: createElementModule.isValidElementType,
|
|
276
|
+
isFunctionComponent: createElementModule.isFunctionComponent,
|
|
277
|
+
isClassComponent: createElementModule.isClassComponent,
|
|
278
|
+
isHostElement: createElementModule.isHostElement,
|
|
279
|
+
isSuspenseElement: createElementModule.isSuspenseElement,
|
|
280
|
+
isStrictModeElement: createElementModule.isStrictModeElement,
|
|
281
|
+
isErrorBoundaryElement: createElementModule.isErrorBoundaryElement,
|
|
282
|
+
countChildren: createElementModule.countChildren,
|
|
283
|
+
mapChildren: createElementModule.mapChildren,
|
|
284
|
+
forEachChild: createElementModule.forEachChild,
|
|
285
|
+
onlyChild: createElementModule.onlyChild,
|
|
286
|
+
|
|
287
|
+
// ── render exports ──
|
|
288
|
+
render: renderModule.render,
|
|
289
|
+
hydrate: renderModule.hydrate,
|
|
290
|
+
unmountContainer: renderModule.unmountContainer,
|
|
291
|
+
createDOMElement: renderModule.createDOMElement,
|
|
292
|
+
createTextNode: renderModule.createTextNode,
|
|
293
|
+
setAttribute: renderModule.setAttribute,
|
|
294
|
+
removeAttribute: renderModule.removeAttribute,
|
|
295
|
+
applyStyle: renderModule.applyStyle,
|
|
296
|
+
applyClassName: renderModule.applyClassName,
|
|
297
|
+
setEventHandler: renderModule.setEventHandler,
|
|
298
|
+
removeEventHandler: renderModule.removeEventHandler,
|
|
299
|
+
assignRef: renderModule.assignRef,
|
|
300
|
+
detachRef: renderModule.detachRef,
|
|
301
|
+
renderVNode: renderModule.renderVNode,
|
|
302
|
+
hydrateVNode: renderModule.hydrateVNode,
|
|
303
|
+
|
|
304
|
+
// ── reconcile exports ──
|
|
305
|
+
reconcile: reconcileModule.reconcile,
|
|
306
|
+
reconcileChildren: reconcileModule.reconcileChildren,
|
|
307
|
+
reconcileElement: reconcileModule.reconcileElement,
|
|
308
|
+
diffProps: reconcileModule.diffProps,
|
|
309
|
+
diffStyle: reconcileModule.diffStyle,
|
|
310
|
+
diffEventHandlers: reconcileModule.diffEventHandlers,
|
|
311
|
+
diffRef: reconcileModule.diffRef,
|
|
312
|
+
memo: reconcileModule.memo,
|
|
313
|
+
shallowEqual: reconcileModule.shallowEqual,
|
|
314
|
+
isSameType: reconcileModule.isSameType,
|
|
315
|
+
createFiber: reconcileModule.createFiber,
|
|
316
|
+
longestIncreasingSubsequence: reconcileModule.longestIncreasingSubsequence,
|
|
317
|
+
|
|
318
|
+
// ── commit exports ──
|
|
319
|
+
commitWork: commitModule.commitWork,
|
|
320
|
+
batchCommitWork: commitModule.batchCommitWork,
|
|
321
|
+
processInsertions: commitModule.processInsertions,
|
|
322
|
+
processDeletions: commitModule.processDeletions,
|
|
323
|
+
processUpdates: commitModule.processUpdates,
|
|
324
|
+
processMoves: commitModule.processMoves,
|
|
325
|
+
processReplacements: commitModule.processReplacements,
|
|
326
|
+
flushPendingLayoutEffects: commitModule.flushPendingLayoutEffects,
|
|
327
|
+
schedulePassiveEffects: commitModule.schedulePassiveEffects,
|
|
328
|
+
handleErrorDuringCommit: commitModule.handleErrorDuringCommit,
|
|
329
|
+
captureSnapshot: commitModule.captureSnapshot,
|
|
330
|
+
getSnapshot: commitModule.getSnapshot,
|
|
331
|
+
findDOMNodeForVNode: commitModule.findDOMNodeForVNode,
|
|
332
|
+
getCommitStats: commitModule.getCommitStats,
|
|
333
|
+
|
|
334
|
+
// ── Runtime management ──
|
|
335
|
+
renderApp,
|
|
336
|
+
unmountApp,
|
|
337
|
+
initRuntime,
|
|
338
|
+
onRuntimeInit,
|
|
339
|
+
isRuntimeInitialized,
|
|
340
|
+
configureRuntime,
|
|
341
|
+
getRuntimeConfig,
|
|
342
|
+
getRuntimeStats,
|
|
343
|
+
createErrorBoundary,
|
|
344
|
+
createSuspenseWrapper,
|
|
345
|
+
registerDevToolsHandler,
|
|
346
|
+
sendDevToolsMessage,
|
|
347
|
+
|
|
348
|
+
// ── Internal types ──
|
|
349
|
+
REACT_ELEMENT_TYPE: createElementModule.REACT_ELEMENT_TYPE,
|
|
350
|
+
REACT_FRAGMENT_TYPE: createElementModule.REACT_FRAGMENT_TYPE,
|
|
351
|
+
REACT_PORTAL_TYPE: createElementModule.REACT_PORTAL_TYPE,
|
|
352
|
+
REACT_SUSPENSE_TYPE: createElementModule.REACT_SUSPENSE_TYPE,
|
|
353
|
+
REACT_LAZY_TYPE: createElementModule.REACT_LAZY_TYPE,
|
|
354
|
+
REACT_STRICT_MODE_TYPE: createElementModule.REACT_STRICT_MODE_TYPE,
|
|
355
|
+
REACT_ERROR_BOUNDARY_TYPE: createElementModule.REACT_ERROR_BOUNDARY_TYPE,
|
|
356
|
+
};
|