dynim-react 1.0.49 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DynimProvider.d.ts.map +1 -1
- package/dist/DynimProvider.js +46 -9
- package/dist/plugins/vite/index.d.ts +5 -0
- package/dist/plugins/vite/index.d.ts.map +1 -0
- package/dist/plugins/vite/index.js +4 -0
- package/dist/{vite → plugins/vite}/plugin.d.ts +3 -3
- package/dist/plugins/vite/plugin.d.ts.map +1 -0
- package/dist/{vite → plugins/vite}/plugin.js +3 -3
- package/package.json +16 -5
- package/src/README.md +16 -0
- package/src/plugins/vite/virtual-module.d.ts +24 -0
- package/dist/vite/index.d.ts +0 -6
- package/dist/vite/index.d.ts.map +0 -1
- package/dist/vite/index.js +0 -5
- package/dist/vite/plugin.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynimProvider.d.ts","sourceRoot":"","sources":["../src/DynimProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAc,EAQZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"DynimProvider.d.ts","sourceRoot":"","sources":["../src/DynimProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAc,EAQZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAKV,WAAW,EAGZ,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,qBAAqB;IACrB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,yBAAyB;IACzB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,oCAAoC;IACpC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,yDAAyD;IACzD,WAAW,EAAE,WAAW,CAAC;IACzB,2CAA2C;IAC3C,cAAc,EAAE,OAAO,CAAC;IACxB,gCAAgC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAW,GACZ,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA+alC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
|
package/dist/DynimProvider.js
CHANGED
|
@@ -9,7 +9,7 @@ import { jsxs as _jsxs, Fragment as _Fragment, jsx as _jsx } from "react/jsx-run
|
|
|
9
9
|
*/
|
|
10
10
|
import React, { createContext, useContext, useEffect, useRef, useCallback, useMemo, useState, } from 'react';
|
|
11
11
|
import ReactDOM from 'react-dom';
|
|
12
|
-
import { createBuilderClient, createBuilder, createCodeClient, createBundleLoader, BundleNotFoundError, BundleAuthError, } from 'dynim-core';
|
|
12
|
+
import { createBuilderClient, createBuilder, createCodeClient, createBundleLoader, createCSSLoader, BundleNotFoundError, BundleAuthError, } from 'dynim-core';
|
|
13
13
|
import { createSharedContext, updateSharedContext, isSharedContextReady } from './inference/sharedContext';
|
|
14
14
|
import { generateThemeCSS } from './theme';
|
|
15
15
|
const DynimContext = createContext(null);
|
|
@@ -30,6 +30,7 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
30
30
|
const builderRef = useRef(null);
|
|
31
31
|
const codeClientRef = useRef(null);
|
|
32
32
|
const bundleLoaderRef = useRef(null);
|
|
33
|
+
const cssLoaderRef = useRef(null);
|
|
33
34
|
// Track when we're exiting to prevent auto-load from re-triggering
|
|
34
35
|
const isExitingRef = useRef(false);
|
|
35
36
|
const hasAttemptedInitialLoadRef = useRef(false);
|
|
@@ -154,6 +155,8 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
154
155
|
});
|
|
155
156
|
return () => {
|
|
156
157
|
builderRef.current?.destroy();
|
|
158
|
+
// Clean up CSS link element on unmount
|
|
159
|
+
cssLoaderRef.current?.unload();
|
|
157
160
|
};
|
|
158
161
|
}, []);
|
|
159
162
|
// Initialize builder client (only once on mount)
|
|
@@ -181,8 +184,20 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
181
184
|
}
|
|
182
185
|
return bundleLoaderRef.current;
|
|
183
186
|
}, [getAuthToken]);
|
|
184
|
-
//
|
|
185
|
-
const
|
|
187
|
+
// Get CSS loader
|
|
188
|
+
const getCSSLoader = useCallback(() => {
|
|
189
|
+
if (!cssLoaderRef.current) {
|
|
190
|
+
cssLoaderRef.current = createCSSLoader({
|
|
191
|
+
linkId: 'dynim-bundle-css',
|
|
192
|
+
onError: (error) => {
|
|
193
|
+
console.warn('[DynimProvider] CSS load failed:', error);
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
return cssLoaderRef.current;
|
|
198
|
+
}, []);
|
|
199
|
+
// Load bundle (JS + CSS)
|
|
200
|
+
const loadBundle = useCallback(async (bundleUrl, loadCSS = true) => {
|
|
186
201
|
const loader = getBundleLoader();
|
|
187
202
|
if (loader.isLoading())
|
|
188
203
|
return;
|
|
@@ -193,12 +208,28 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
193
208
|
setTenantApp(() => App);
|
|
194
209
|
setIsBundleLoaded(true);
|
|
195
210
|
cleanup();
|
|
211
|
+
// Load CSS alongside JS bundle
|
|
212
|
+
if (loadCSS) {
|
|
213
|
+
const cssLoader = getCSSLoader();
|
|
214
|
+
const isTemp = bundleUrl.includes('temp=true');
|
|
215
|
+
const cssUrl = isTemp ? '/api/code/css?temp=true' : '/api/code/css';
|
|
216
|
+
if (isTemp) {
|
|
217
|
+
// Temp/preview CSS - bust cache to get latest
|
|
218
|
+
cssLoader.loadWithCacheBust(cssUrl);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// Saved CSS - let browser cache
|
|
222
|
+
cssLoader.load(cssUrl);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
196
225
|
}
|
|
197
226
|
catch (error) {
|
|
198
227
|
// 404 = no bundle, 401 = not authenticated - show children
|
|
199
228
|
if (error instanceof BundleNotFoundError || error instanceof BundleAuthError) {
|
|
200
229
|
setTenantApp(null);
|
|
201
230
|
setIsBundleLoaded(false);
|
|
231
|
+
// Also unload any CSS
|
|
232
|
+
getCSSLoader().unload();
|
|
202
233
|
return;
|
|
203
234
|
}
|
|
204
235
|
setBundleError(error);
|
|
@@ -206,7 +237,7 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
206
237
|
finally {
|
|
207
238
|
setIsBundleLoading(false);
|
|
208
239
|
}
|
|
209
|
-
}, [getBundleLoader]);
|
|
240
|
+
}, [getBundleLoader, getCSSLoader]);
|
|
210
241
|
// Keep ref updated
|
|
211
242
|
useEffect(() => {
|
|
212
243
|
loadBundleRef.current = loadBundle;
|
|
@@ -272,7 +303,8 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
272
303
|
}, [fetchTheme]);
|
|
273
304
|
// Load saved bundle
|
|
274
305
|
const loadSavedBundle = useCallback(async () => {
|
|
275
|
-
|
|
306
|
+
// Note: CSS is loaded separately by saveCode/abandonCode with cache busting
|
|
307
|
+
await loadBundle('/api/code/bundle', false);
|
|
276
308
|
}, [loadBundle]);
|
|
277
309
|
// Watch for bundleReady
|
|
278
310
|
useEffect(() => {
|
|
@@ -283,7 +315,7 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
283
315
|
}
|
|
284
316
|
}
|
|
285
317
|
}, [codeMessage.bundleReady, codeMessage.projectId]);
|
|
286
|
-
// Load temp bundle on signal
|
|
318
|
+
// Load temp bundle on signal (JS + CSS with cache busting)
|
|
287
319
|
useEffect(() => {
|
|
288
320
|
if (bundleLoadSignal === 0)
|
|
289
321
|
return;
|
|
@@ -292,8 +324,9 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
292
324
|
pendingBundleProjectIdRef.current = null;
|
|
293
325
|
return;
|
|
294
326
|
}
|
|
327
|
+
// Load JS bundle with cache busting
|
|
295
328
|
const bundleUrl = `/api/code/bundle?temp=true&_t=${Date.now()}`;
|
|
296
|
-
loadBundleRef.current?.(bundleUrl);
|
|
329
|
+
loadBundleRef.current?.(bundleUrl, true); // true = also load CSS
|
|
297
330
|
pendingBundleProjectIdRef.current = null;
|
|
298
331
|
}, [bundleLoadSignal]);
|
|
299
332
|
// Public methods
|
|
@@ -315,11 +348,15 @@ export function DynimProvider({ children, config = {}, }) {
|
|
|
315
348
|
const saveCode = useCallback(async () => {
|
|
316
349
|
await codeClientRef.current?.saveCode();
|
|
317
350
|
await loadSavedBundle();
|
|
318
|
-
|
|
351
|
+
// Force reload CSS with cache bust since saved CSS has changed
|
|
352
|
+
getCSSLoader().loadWithCacheBust('/api/code/css');
|
|
353
|
+
}, [loadSavedBundle, getCSSLoader]);
|
|
319
354
|
const abandonCode = useCallback(async () => {
|
|
320
355
|
await codeClientRef.current?.abandonCode();
|
|
321
356
|
await loadSavedBundle();
|
|
322
|
-
|
|
357
|
+
// Reload saved CSS (may have been showing temp CSS)
|
|
358
|
+
getCSSLoader().loadWithCacheBust('/api/code/css');
|
|
359
|
+
}, [loadSavedBundle, getCSSLoader]);
|
|
323
360
|
const contextValue = useMemo(() => ({
|
|
324
361
|
enterBuilder,
|
|
325
362
|
exitBuilder,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/vite/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vite plugin for
|
|
2
|
+
* Vite plugin for Dynim package exposure
|
|
3
3
|
*
|
|
4
4
|
* Generates a virtual module that exports all specified packages,
|
|
5
5
|
* so you don't have to manually import and map each one.
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
23
|
* Then in your app:
|
|
24
|
-
* ```
|
|
24
|
+
* ```tsx
|
|
25
25
|
* import packages from 'virtual:dynim-packages'
|
|
26
26
|
*
|
|
27
|
-
* <
|
|
27
|
+
* <DynimProvider config={{ packages }}>
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
import type { Plugin } from 'vite';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/vite/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EAAE,GAAG,oBAAoB,GACjD,MAAM,CAwCR;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Vite plugin for
|
|
2
|
+
* Vite plugin for Dynim package exposure
|
|
3
3
|
*
|
|
4
4
|
* Generates a virtual module that exports all specified packages,
|
|
5
5
|
* so you don't have to manually import and map each one.
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
* ```
|
|
22
22
|
*
|
|
23
23
|
* Then in your app:
|
|
24
|
-
* ```
|
|
24
|
+
* ```tsx
|
|
25
25
|
* import packages from 'virtual:dynim-packages'
|
|
26
26
|
*
|
|
27
|
-
* <
|
|
27
|
+
* <DynimProvider config={{ packages }}>
|
|
28
28
|
* ```
|
|
29
29
|
*/
|
|
30
30
|
const VIRTUAL_MODULE_ID = 'virtual:dynim-packages';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dynim-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.51",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -10,12 +10,16 @@
|
|
|
10
10
|
"import": "./dist/index.js"
|
|
11
11
|
},
|
|
12
12
|
"./vite": {
|
|
13
|
-
"types": "./dist/vite/index.d.ts",
|
|
14
|
-
"import": "./dist/vite/index.js"
|
|
13
|
+
"types": "./dist/plugins/vite/index.d.ts",
|
|
14
|
+
"import": "./dist/plugins/vite/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./vite/virtual-module": {
|
|
17
|
+
"types": "./src/plugins/vite/virtual-module.d.ts"
|
|
15
18
|
}
|
|
16
19
|
},
|
|
17
20
|
"files": [
|
|
18
21
|
"dist",
|
|
22
|
+
"src/plugins/vite/virtual-module.d.ts",
|
|
19
23
|
"README.md"
|
|
20
24
|
],
|
|
21
25
|
"scripts": {
|
|
@@ -23,17 +27,24 @@
|
|
|
23
27
|
"dev": "tsc --watch"
|
|
24
28
|
},
|
|
25
29
|
"dependencies": {
|
|
26
|
-
"dynim-core": "^1.0.
|
|
30
|
+
"dynim-core": "^1.0.25"
|
|
27
31
|
},
|
|
28
32
|
"peerDependencies": {
|
|
29
33
|
"react": ">=17.0.0",
|
|
30
|
-
"react-dom": ">=17.0.0"
|
|
34
|
+
"react-dom": ">=17.0.0",
|
|
35
|
+
"vite": ">=4.0.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependenciesMeta": {
|
|
38
|
+
"vite": {
|
|
39
|
+
"optional": true
|
|
40
|
+
}
|
|
31
41
|
},
|
|
32
42
|
"devDependencies": {
|
|
33
43
|
"@types/react": "^18.3.27",
|
|
34
44
|
"@types/react-dom": "^18.3.7",
|
|
35
45
|
"react": "^19.2.3",
|
|
36
46
|
"react-dom": "^19.2.3",
|
|
47
|
+
"vite": "^5.0.11",
|
|
37
48
|
"typescript": "^5.9.3"
|
|
38
49
|
},
|
|
39
50
|
"license": "MIT"
|
package/src/README.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# dynim-react Source
|
|
2
|
+
|
|
3
|
+
React components and hooks.
|
|
4
|
+
|
|
5
|
+
## Modules
|
|
6
|
+
|
|
7
|
+
- [builder](./builder) - Visual page editing
|
|
8
|
+
- [inference](./inference) - Tenant bundle loading
|
|
9
|
+
|
|
10
|
+
## Documentation
|
|
11
|
+
|
|
12
|
+
See [SDK React Documentation](../../../utils/docs/sdk/REACT.md)
|
|
13
|
+
|
|
14
|
+
Related:
|
|
15
|
+
- [UI Builder](../../../utils/docs/ui-builder/README.md)
|
|
16
|
+
- [Inference Server](../../../utils/docs/inference-server/README.md)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type declarations for the virtual:dynim-packages module.
|
|
3
|
+
*
|
|
4
|
+
* To use these types, add to your tsconfig.json:
|
|
5
|
+
* {
|
|
6
|
+
* "compilerOptions": {
|
|
7
|
+
* "types": ["dynim-react/vite/virtual-module"]
|
|
8
|
+
* }
|
|
9
|
+
* }
|
|
10
|
+
*
|
|
11
|
+
* Or add a reference in a .d.ts file:
|
|
12
|
+
* /// <reference types="dynim-react/vite/virtual-module" />
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
declare module 'virtual:dynim-packages' {
|
|
16
|
+
/**
|
|
17
|
+
* Object mapping package names to their exports.
|
|
18
|
+
* The actual shape depends on which packages you configured
|
|
19
|
+
* in the dynimPackages() plugin.
|
|
20
|
+
*/
|
|
21
|
+
const packages: Record<string, unknown>
|
|
22
|
+
export default packages
|
|
23
|
+
export { packages }
|
|
24
|
+
}
|
package/dist/vite/index.d.ts
DELETED
package/dist/vite/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/vite/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAKlC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,iBAAiB,EAAE,MAAM,EAAE,GAAG,oBAAoB,GACjD,MAAM,CAwCR;AAED,eAAe,aAAa,CAAA"}
|