@nexus_js/runtime 0.7.2 → 0.7.5
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/island.d.ts +18 -1
- package/dist/island.d.ts.map +1 -1
- package/dist/island.js +71 -3
- package/dist/island.js.map +1 -1
- package/dist/navigation.d.ts +13 -0
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +204 -34
- package/dist/navigation.js.map +1 -1
- package/dist/pretext.d.ts +14 -0
- package/dist/pretext.d.ts.map +1 -0
- package/dist/pretext.js +33 -0
- package/dist/pretext.js.map +1 -0
- package/dist/runes.d.ts.map +1 -1
- package/dist/runes.js +17 -4
- package/dist/runes.js.map +1 -1
- package/package.json +6 -2
package/dist/index.d.ts
CHANGED
|
@@ -11,4 +11,5 @@ export { navigate, prefetch, initNavigation, navigation } from './navigation.js'
|
|
|
11
11
|
export type { NavigateOptions, NavigationState } from './navigation.js';
|
|
12
12
|
export { useStore, readStore, writeStore, snapshotStore, importStore, exportStore, clearStore, storeDebugInfo } from './store.js';
|
|
13
13
|
export type { StoreOptions, StoreEntry } from './store.js';
|
|
14
|
+
export { initPretextFromDocument, getPretext, $pretext } from './pretext.js';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClI,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5F,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjF,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAClI,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,4 +5,5 @@ export { $sync } from './sync.js';
|
|
|
5
5
|
export { cache, revalidate, revalidatePath, cacheStats, setCacheAdapter } from './cache.js';
|
|
6
6
|
export { navigate, prefetch, initNavigation, navigation } from './navigation.js';
|
|
7
7
|
export { useStore, readStore, writeStore, snapshotStore, importStore, exportStore, clearStore, storeDebugInfo } from './store.js';
|
|
8
|
+
export { initPretextFromDocument, getPretext, $pretext } from './pretext.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE5F,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAElI,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/island.d.ts
CHANGED
|
@@ -4,12 +4,29 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { $state, $derived, $effect, batch } from './runes.js';
|
|
6
6
|
export { $state, $derived, $effect, batch };
|
|
7
|
+
/** Same as `@nexus_js/runtime` — available in island bundles without a second import. */
|
|
8
|
+
export { $pretext, getPretext } from './pretext.js';
|
|
7
9
|
export type HydrationStrategy = 'client:load' | 'client:idle' | 'client:visible' | 'client:media' | 'server:only';
|
|
8
10
|
export interface IslandOptions {
|
|
9
|
-
template
|
|
11
|
+
/** Raw template (legacy) */
|
|
12
|
+
template?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Serialized island HTML. With reactive `__NX_*` placeholders, an `$effect` rewrites the first child’s
|
|
15
|
+
* `outerHTML` on each update. With **no** placeholders, the template is applied **once** at hydrate; the host
|
|
16
|
+
* then dispatches `nexus:island-static-patch` (bubbles) so apps may re-attach listeners if needed.
|
|
17
|
+
*/
|
|
18
|
+
processedTemplate?: string;
|
|
19
|
+
/** One thunk per placeholder, evaluated in an $effect (closes over rune signals) */
|
|
20
|
+
exprFns?: Array<() => unknown>;
|
|
10
21
|
strategy?: HydrationStrategy;
|
|
11
22
|
props?: Record<string, unknown>;
|
|
12
23
|
mediaQuery?: string;
|
|
24
|
+
/** Event delegation target inside the island (survives DOM replacement each tick) */
|
|
25
|
+
delegatedClickSelector?: string;
|
|
26
|
+
onDelegatedClick?: (e: Event) => void;
|
|
27
|
+
/** Capture-phase submit on the island root — survives inner `outerHTML` updates from reactive templates */
|
|
28
|
+
delegatedSubmitFormId?: string;
|
|
29
|
+
onDelegatedSubmit?: (e: Event) => void;
|
|
13
30
|
}
|
|
14
31
|
export interface IslandInstance {
|
|
15
32
|
el: Element;
|
package/dist/island.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAG9D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAC5C,yFAAyF;AACzF,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GACzB,aAAa,GACb,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,aAAa,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qFAAqF;IACrF,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACtC,2GAA2G;IAC3G,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAClD;AAaD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,OAAO,EACX,IAAI,EAAE,aAAa,GAClB,cAAc,CA2FhB;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CA2BjC"}
|
package/dist/island.js
CHANGED
|
@@ -3,9 +3,19 @@
|
|
|
3
3
|
* Activates interactive "islands" on an otherwise static HTML page.
|
|
4
4
|
*/
|
|
5
5
|
import { $state, $derived, $effect, batch } from './runes.js';
|
|
6
|
+
import { initPretextFromDocument } from './pretext.js';
|
|
6
7
|
export { $state, $derived, $effect, batch };
|
|
8
|
+
/** Same as `@nexus_js/runtime` — available in island bundles without a second import. */
|
|
9
|
+
export { $pretext, getPretext } from './pretext.js';
|
|
7
10
|
/** Registry of all mounted islands on the page */
|
|
8
11
|
const islandRegistry = new Map();
|
|
12
|
+
function escapeIslandText(s) {
|
|
13
|
+
return s
|
|
14
|
+
.replace(/&/g, '&')
|
|
15
|
+
.replace(/</g, '<')
|
|
16
|
+
.replace(/>/g, '>')
|
|
17
|
+
.replace(/"/g, '"');
|
|
18
|
+
}
|
|
9
19
|
/**
|
|
10
20
|
* Core island hydration function.
|
|
11
21
|
* Called by the generated client module for each interactive island.
|
|
@@ -13,14 +23,62 @@ const islandRegistry = new Map();
|
|
|
13
23
|
export function createIsland(el, opts) {
|
|
14
24
|
const cleanups = [];
|
|
15
25
|
function hydrate() {
|
|
16
|
-
// Inject props as reactive signals
|
|
17
26
|
const propSignals = {};
|
|
18
27
|
for (const [key, val] of Object.entries(opts.props ?? {})) {
|
|
19
28
|
propSignals[key] = $state(val);
|
|
20
29
|
}
|
|
21
|
-
// Mark element as hydrated
|
|
22
30
|
el.setAttribute('data-nexus-hydrated', 'true');
|
|
23
|
-
|
|
31
|
+
const processed = opts.processedTemplate;
|
|
32
|
+
const exprFns = opts.exprFns;
|
|
33
|
+
if (processed) {
|
|
34
|
+
const inner = el.firstElementChild;
|
|
35
|
+
if (exprFns?.length) {
|
|
36
|
+
const stop = $effect(() => {
|
|
37
|
+
let html = processed;
|
|
38
|
+
for (let i = 0; i < exprFns.length; i++) {
|
|
39
|
+
const thunk = exprFns[i];
|
|
40
|
+
if (!thunk)
|
|
41
|
+
continue;
|
|
42
|
+
const v = thunk();
|
|
43
|
+
html = html.replace(`__NX_${i}__`, escapeIslandText(String(v)));
|
|
44
|
+
}
|
|
45
|
+
const child = el.firstElementChild;
|
|
46
|
+
if (child)
|
|
47
|
+
child.outerHTML = html;
|
|
48
|
+
});
|
|
49
|
+
cleanups.push(stop);
|
|
50
|
+
}
|
|
51
|
+
else if (inner) {
|
|
52
|
+
// Static island (no __NX_ placeholders): still apply client template once so markup matches
|
|
53
|
+
// the compiled bundle; otherwise hydrate-only islands never ran the replacement branch.
|
|
54
|
+
inner.outerHTML = processed;
|
|
55
|
+
el.dispatchEvent(new CustomEvent('nexus:island-static-patch', { bubbles: true, composed: true }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (opts.delegatedClickSelector && opts.onDelegatedClick) {
|
|
59
|
+
const sel = opts.delegatedClickSelector;
|
|
60
|
+
const cb = opts.onDelegatedClick;
|
|
61
|
+
const fn = (e) => {
|
|
62
|
+
const t = e.target;
|
|
63
|
+
if (t?.closest(sel))
|
|
64
|
+
cb(e);
|
|
65
|
+
};
|
|
66
|
+
el.addEventListener('click', fn);
|
|
67
|
+
cleanups.push(() => el.removeEventListener('click', fn));
|
|
68
|
+
}
|
|
69
|
+
if (opts.delegatedSubmitFormId && opts.onDelegatedSubmit) {
|
|
70
|
+
const formId = opts.delegatedSubmitFormId;
|
|
71
|
+
const cb = opts.onDelegatedSubmit;
|
|
72
|
+
const fn = (e) => {
|
|
73
|
+
const t = e.target;
|
|
74
|
+
if (!(t instanceof HTMLFormElement) || t.id !== formId)
|
|
75
|
+
return;
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
cb(e);
|
|
78
|
+
};
|
|
79
|
+
el.addEventListener('submit', fn, true);
|
|
80
|
+
cleanups.push(() => el.removeEventListener('submit', fn, true));
|
|
81
|
+
}
|
|
24
82
|
attachEventListeners(el, propSignals, cleanups);
|
|
25
83
|
}
|
|
26
84
|
function destroy() {
|
|
@@ -52,6 +110,7 @@ export function createIsland(el, opts) {
|
|
|
52
110
|
* Called once on page load by the Nexus bootstrap script.
|
|
53
111
|
*/
|
|
54
112
|
export function hydrateAll() {
|
|
113
|
+
initPretextFromDocument();
|
|
55
114
|
const islands = document.querySelectorAll('[data-nexus-island]');
|
|
56
115
|
for (const el of islands) {
|
|
57
116
|
const strategy = (el.getAttribute('data-nexus-strategy') ??
|
|
@@ -149,6 +208,15 @@ function attachEventListeners(el, _signals, cleanups) {
|
|
|
149
208
|
cleanups.push(() => el.removeEventListener(eventName, handler));
|
|
150
209
|
}
|
|
151
210
|
}
|
|
211
|
+
function refreshPretextAndHydrate() {
|
|
212
|
+
initPretextFromDocument();
|
|
213
|
+
hydrateAll();
|
|
214
|
+
}
|
|
215
|
+
/** After streaming SSR fills a hole, re-read Pretext and hydrate any new islands. */
|
|
216
|
+
if (typeof document !== 'undefined') {
|
|
217
|
+
document.addEventListener('nexus:stream-chunk', refreshPretextAndHydrate);
|
|
218
|
+
document.addEventListener('nexus:stream-complete', refreshPretextAndHydrate);
|
|
219
|
+
}
|
|
152
220
|
/** Bootstrap: auto-runs when the runtime script loads in the browser */
|
|
153
221
|
if (typeof document !== 'undefined') {
|
|
154
222
|
if (document.readyState === 'loading') {
|
package/dist/island.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"island.js","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"island.js","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"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"}
|
package/dist/navigation.d.ts
CHANGED
|
@@ -30,6 +30,10 @@
|
|
|
30
30
|
* d. Removed island → destroy() cleanly
|
|
31
31
|
* 6. Update URL, fire 'nexus:navigate' event, restore scroll
|
|
32
32
|
*
|
|
33
|
+
* View Transitions (optional): when supported and not prefers-reduced-motion,
|
|
34
|
+
* the DOM swap runs inside document.startViewTransition — fetch stays outside,
|
|
35
|
+
* so network cost is unchanged. Pass navigate(url, { viewTransition: false }) to skip.
|
|
36
|
+
*
|
|
33
37
|
* ─── STATE PRESERVATION RULES ─────────────────────────────────────────────
|
|
34
38
|
*
|
|
35
39
|
* Island state is preserved when ALL of these match:
|
|
@@ -56,6 +60,10 @@
|
|
|
56
60
|
* - data-nx-prefetch="load" → prefetch on page load
|
|
57
61
|
* - data-nx-prefetch="visible" → prefetch when link enters viewport
|
|
58
62
|
* - data-nx-prefetch="false" → disable prefetch for this link
|
|
63
|
+
*
|
|
64
|
+
* Hover prefetch never triggers a full-page navigation: only explicit clicks (or
|
|
65
|
+
* `navigate()`) may fall back to `location.assign` when the SPA JSON endpoint
|
|
66
|
+
* returns 404/redirect (e.g. `/logout` handled outside the morph pipeline).
|
|
59
67
|
*/
|
|
60
68
|
export interface NavigateOptions {
|
|
61
69
|
/** Replace current history entry instead of pushing */
|
|
@@ -64,6 +72,11 @@ export interface NavigateOptions {
|
|
|
64
72
|
scroll?: boolean;
|
|
65
73
|
/** Override prefetch cache */
|
|
66
74
|
noCache?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Use the View Transitions API for the DOM swap (fetch still runs before — no extra latency there).
|
|
77
|
+
* Set to `false` to skip animation (e.g. heavy admin pages). Default: on when supported.
|
|
78
|
+
*/
|
|
79
|
+
viewTransition?: boolean;
|
|
67
80
|
}
|
|
68
81
|
export interface NavigationState {
|
|
69
82
|
url: string;
|
package/dist/navigation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAQH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,4EAA4E;AAC5E,eAAO,MAAM,UAAU;;;;;;;;;;CAItB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA0B3C;AAMD,+CAA+C;AAC/C,wBAAgB,cAAc,IAAI,IAAI,CAkBrC"}
|
package/dist/navigation.js
CHANGED
|
@@ -30,6 +30,10 @@
|
|
|
30
30
|
* d. Removed island → destroy() cleanly
|
|
31
31
|
* 6. Update URL, fire 'nexus:navigate' event, restore scroll
|
|
32
32
|
*
|
|
33
|
+
* View Transitions (optional): when supported and not prefers-reduced-motion,
|
|
34
|
+
* the DOM swap runs inside document.startViewTransition — fetch stays outside,
|
|
35
|
+
* so network cost is unchanged. Pass navigate(url, { viewTransition: false }) to skip.
|
|
36
|
+
*
|
|
33
37
|
* ─── STATE PRESERVATION RULES ─────────────────────────────────────────────
|
|
34
38
|
*
|
|
35
39
|
* Island state is preserved when ALL of these match:
|
|
@@ -56,6 +60,10 @@
|
|
|
56
60
|
* - data-nx-prefetch="load" → prefetch on page load
|
|
57
61
|
* - data-nx-prefetch="visible" → prefetch when link enters viewport
|
|
58
62
|
* - data-nx-prefetch="false" → disable prefetch for this link
|
|
63
|
+
*
|
|
64
|
+
* Hover prefetch never triggers a full-page navigation: only explicit clicks (or
|
|
65
|
+
* `navigate()`) may fall back to `location.assign` when the SPA JSON endpoint
|
|
66
|
+
* returns 404/redirect (e.g. `/logout` handled outside the morph pipeline).
|
|
59
67
|
*/
|
|
60
68
|
import { hydrateAll } from './island.js';
|
|
61
69
|
import { $state } from './runes.js';
|
|
@@ -82,24 +90,39 @@ export function prefetch(path) {
|
|
|
82
90
|
return;
|
|
83
91
|
if (prefetchCache.has(path))
|
|
84
92
|
return;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
link
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
93
|
+
if (prefetchInFlight.has(path))
|
|
94
|
+
return;
|
|
95
|
+
prefetchInFlight.add(path);
|
|
96
|
+
// One `<link rel="prefetch">` per path (mouseover can fire many times before the fetch completes).
|
|
97
|
+
if (!prefetchLinkInserted.has(path)) {
|
|
98
|
+
prefetchLinkInserted.add(path);
|
|
99
|
+
const link = document.createElement('link');
|
|
100
|
+
link.rel = 'prefetch';
|
|
101
|
+
link.href = navigateEndpoint(path);
|
|
102
|
+
link.as = 'fetch';
|
|
103
|
+
link.crossOrigin = 'same-origin';
|
|
104
|
+
document.head.appendChild(link);
|
|
105
|
+
}
|
|
106
|
+
fetchRoute(path, { allowFullPageFallback: false })
|
|
107
|
+
.then((data) => {
|
|
108
|
+
if (data.kind === 'ok')
|
|
109
|
+
prefetchCache.set(path, data.payload);
|
|
110
|
+
})
|
|
111
|
+
.catch(() => { })
|
|
112
|
+
.finally(() => {
|
|
113
|
+
prefetchInFlight.delete(path);
|
|
114
|
+
});
|
|
97
115
|
}
|
|
98
116
|
// ── Initialization ────────────────────────────────────────────────────────────
|
|
117
|
+
let navigationBootstrapped = false;
|
|
99
118
|
/** Bootstrap: call once when the page loads */
|
|
100
119
|
export function initNavigation() {
|
|
101
120
|
if (typeof document === 'undefined')
|
|
102
121
|
return;
|
|
122
|
+
if (navigationBootstrapped)
|
|
123
|
+
return;
|
|
124
|
+
navigationBootstrapped = true;
|
|
125
|
+
injectViewTransitionStyles();
|
|
103
126
|
// Intercept all link clicks
|
|
104
127
|
document.addEventListener('click', handleLinkClick, { passive: false });
|
|
105
128
|
// Handle browser back/forward
|
|
@@ -112,6 +135,12 @@ export function initNavigation() {
|
|
|
112
135
|
// ── Internal navigation engine ────────────────────────────────────────────────
|
|
113
136
|
const NAVIGATE_ENDPOINT = '/_nexus/navigate';
|
|
114
137
|
const prefetchCache = new Map();
|
|
138
|
+
/** Avoid duplicate JSON fetches / `<link rel="prefetch">` when `mouseover` fires repeatedly on the same anchor. */
|
|
139
|
+
const prefetchInFlight = new Set();
|
|
140
|
+
const prefetchLinkInserted = new Set();
|
|
141
|
+
/** Last time we started hover-prefetch for a path (mouseover fires very often on the same `<a>`). */
|
|
142
|
+
const prefetchHoverAt = new Map();
|
|
143
|
+
const PREFETCH_HOVER_GAP_MS = 400;
|
|
115
144
|
function navigateEndpoint(path) {
|
|
116
145
|
return `${NAVIGATE_ENDPOINT}?path=${encodeURIComponent(path)}`;
|
|
117
146
|
}
|
|
@@ -125,9 +154,16 @@ async function performNavigation(path, opts) {
|
|
|
125
154
|
snapshotStore();
|
|
126
155
|
// Check prefetch cache first
|
|
127
156
|
const cached = !opts.noCache ? prefetchCache.get(path) : null;
|
|
128
|
-
|
|
157
|
+
let payload = cached ?? null;
|
|
129
158
|
if (!payload) {
|
|
130
|
-
|
|
159
|
+
const fetched = await fetchRoute(path);
|
|
160
|
+
if (fetched.kind === 'not_found' || fetched.kind === 'redirect') {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (fetched.kind === 'fail') {
|
|
164
|
+
throw new Error(`Failed to fetch route: ${path}`);
|
|
165
|
+
}
|
|
166
|
+
payload = fetched.payload;
|
|
131
167
|
}
|
|
132
168
|
// Update history
|
|
133
169
|
if (opts.replace) {
|
|
@@ -150,7 +186,9 @@ async function performNavigation(path, opts) {
|
|
|
150
186
|
navigation.pending.value = false;
|
|
151
187
|
}
|
|
152
188
|
}
|
|
153
|
-
async function fetchRoute(path) {
|
|
189
|
+
async function fetchRoute(path, opts = {}) {
|
|
190
|
+
/** Only true for real navigations (click / `navigate`). Prefetch must never assign. */
|
|
191
|
+
const allowFullPageFallback = opts.allowFullPageFallback !== false;
|
|
154
192
|
try {
|
|
155
193
|
const res = await fetch(navigateEndpoint(path), {
|
|
156
194
|
headers: {
|
|
@@ -158,13 +196,68 @@ async function fetchRoute(path) {
|
|
|
158
196
|
'accept': 'application/json',
|
|
159
197
|
},
|
|
160
198
|
});
|
|
199
|
+
if (res.status === 404) {
|
|
200
|
+
if (allowFullPageFallback)
|
|
201
|
+
window.location.assign(path);
|
|
202
|
+
return { kind: 'not_found' };
|
|
203
|
+
}
|
|
161
204
|
if (!res.ok)
|
|
162
|
-
return
|
|
163
|
-
|
|
205
|
+
return { kind: 'fail' };
|
|
206
|
+
const data = (await res.json());
|
|
207
|
+
if (typeof data.redirect === 'string' && data.redirect.length > 0) {
|
|
208
|
+
if (allowFullPageFallback)
|
|
209
|
+
window.location.assign(data.redirect);
|
|
210
|
+
return { kind: 'redirect' };
|
|
211
|
+
}
|
|
212
|
+
return { kind: 'ok', payload: data };
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return { kind: 'fail' };
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function documentWithViewTransition() {
|
|
219
|
+
return document;
|
|
220
|
+
}
|
|
221
|
+
/** True when we should animate the swap (feature + user preference). */
|
|
222
|
+
function shouldUseViewTransition(opts) {
|
|
223
|
+
if (opts.viewTransition === false)
|
|
224
|
+
return false;
|
|
225
|
+
const doc = documentWithViewTransition();
|
|
226
|
+
if (typeof doc.startViewTransition !== 'function')
|
|
227
|
+
return false;
|
|
228
|
+
try {
|
|
229
|
+
if (globalThis.matchMedia('(prefers-reduced-motion: reduce)').matches)
|
|
230
|
+
return false;
|
|
164
231
|
}
|
|
165
232
|
catch {
|
|
166
|
-
|
|
233
|
+
/* ignore */
|
|
234
|
+
}
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Minimal default styling: short cross-fade on `root` only — no layout thrash, no custom names.
|
|
239
|
+
* Injected once; disabled inside `@media (prefers-reduced-motion: reduce)` via zero-duration feel.
|
|
240
|
+
*/
|
|
241
|
+
function injectViewTransitionStyles() {
|
|
242
|
+
if (typeof document === 'undefined')
|
|
243
|
+
return;
|
|
244
|
+
if (document.getElementById('nexus-vt-styles'))
|
|
245
|
+
return;
|
|
246
|
+
const doc = documentWithViewTransition();
|
|
247
|
+
if (typeof doc.startViewTransition !== 'function')
|
|
248
|
+
return;
|
|
249
|
+
const style = document.createElement('style');
|
|
250
|
+
style.id = 'nexus-vt-styles';
|
|
251
|
+
style.textContent = `@layer nexus-navigation {
|
|
252
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
253
|
+
::view-transition-old(root),
|
|
254
|
+
::view-transition-new(root) {
|
|
255
|
+
animation-duration: 0.16s;
|
|
256
|
+
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
|
|
167
257
|
}
|
|
258
|
+
}
|
|
259
|
+
}`;
|
|
260
|
+
document.head.appendChild(style);
|
|
168
261
|
}
|
|
169
262
|
async function applyNavigation(payload, opts) {
|
|
170
263
|
// 0. Rehydrate global store from server snapshot (Hydration Miss = 0)
|
|
@@ -173,13 +266,28 @@ async function applyNavigation(payload, opts) {
|
|
|
173
266
|
}
|
|
174
267
|
// 1. Take a snapshot of current islands to preserve state
|
|
175
268
|
const preserved = snapshotIslands();
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
269
|
+
const html = payload.html?.trim() ?? '';
|
|
270
|
+
if (!html) {
|
|
271
|
+
console.warn('[Nexus] Navigation skipped: empty body fragment would clear the page.');
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
const runDomUpdate = () => {
|
|
275
|
+
// 2. Update <head> (title, meta, etc.)
|
|
276
|
+
applyHeadUpdate(payload.headHTML);
|
|
277
|
+
// 3. Morph <body> — surgical DOM update (synchronous; required inside VT callback)
|
|
278
|
+
morphBody(html, preserved);
|
|
279
|
+
// 4. Hydrate new islands (skip preserved ones)
|
|
280
|
+
hydrateAll();
|
|
281
|
+
};
|
|
282
|
+
const doc = documentWithViewTransition();
|
|
283
|
+
if (shouldUseViewTransition(opts) && typeof doc.startViewTransition === 'function') {
|
|
284
|
+
const vt = doc.startViewTransition(runDomUpdate);
|
|
285
|
+
await vt.finished.catch(() => { });
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
runDomUpdate();
|
|
289
|
+
}
|
|
290
|
+
// 5. Restore scroll after the transition frame (avoids fighting the animation)
|
|
183
291
|
if (opts.scroll !== false) {
|
|
184
292
|
const hash = location.hash;
|
|
185
293
|
if (hash) {
|
|
@@ -219,6 +327,12 @@ function morphBody(newHTML, preserved) {
|
|
|
219
327
|
const newDoc = parser.parseFromString(newHTML, 'text/html');
|
|
220
328
|
const newBody = newDoc.body;
|
|
221
329
|
const oldBody = document.body;
|
|
330
|
+
// If the new fragment has no children but the live doc does, morphNode would remove all
|
|
331
|
+
// children of <body>—blank page. Skip only this degenerate case.
|
|
332
|
+
if (newBody.childNodes.length === 0 && oldBody.childNodes.length > 0) {
|
|
333
|
+
console.warn('[Nexus] Navigation skipped: parsed body would replace content with a blank document.');
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
222
336
|
morphNode(oldBody, newBody, preserved);
|
|
223
337
|
}
|
|
224
338
|
function morphNode(oldNode, newNode, preserved) {
|
|
@@ -311,21 +425,44 @@ function patchAttributes(oldEl, newEl) {
|
|
|
311
425
|
}
|
|
312
426
|
}
|
|
313
427
|
}
|
|
428
|
+
/**
|
|
429
|
+
* Keeps `#__NEXUS_PRETEXT__` in sync after SPA navigation (it lives in `<head>`, not morphed with `<body>`).
|
|
430
|
+
* Must run before meta injection so we do not duplicate the script via `data-nx-nav` appends.
|
|
431
|
+
*/
|
|
432
|
+
function syncPretextScriptFromHead(headHTML) {
|
|
433
|
+
const parser = new DOMParser();
|
|
434
|
+
const doc = parser.parseFromString(`<head>${headHTML}</head>`, 'text/html');
|
|
435
|
+
const incoming = doc.getElementById('__NEXUS_PRETEXT__');
|
|
436
|
+
const existing = document.getElementById('__NEXUS_PRETEXT__');
|
|
437
|
+
if (incoming) {
|
|
438
|
+
const clone = incoming.cloneNode(true);
|
|
439
|
+
if (existing)
|
|
440
|
+
existing.replaceWith(clone);
|
|
441
|
+
else
|
|
442
|
+
document.head.insertBefore(clone, document.head.firstChild);
|
|
443
|
+
}
|
|
444
|
+
else if (existing) {
|
|
445
|
+
existing.remove();
|
|
446
|
+
}
|
|
447
|
+
}
|
|
314
448
|
function applyHeadUpdate(headHTML) {
|
|
315
449
|
if (!headHTML)
|
|
316
450
|
return;
|
|
451
|
+
syncPretextScriptFromHead(headHTML);
|
|
317
452
|
// Update title
|
|
318
453
|
const titleMatch = /<title>([^<]*)<\/title>/.exec(headHTML);
|
|
319
454
|
if (titleMatch?.[1])
|
|
320
455
|
document.title = titleMatch[1];
|
|
321
456
|
// Remove previous navigation-injected metas (marked with data-nx-nav)
|
|
322
457
|
document.querySelectorAll('[data-nx-nav]').forEach((el) => el.remove());
|
|
323
|
-
// Inject new metas
|
|
458
|
+
// Inject new metas (pretext script is handled above — skip duplicate)
|
|
324
459
|
const parser = new DOMParser();
|
|
325
460
|
const doc = parser.parseFromString(`<head>${headHTML}</head>`, 'text/html');
|
|
326
461
|
for (const el of doc.head.children) {
|
|
327
462
|
if (el.tagName === 'TITLE')
|
|
328
463
|
continue;
|
|
464
|
+
if (el.tagName === 'SCRIPT' && el.id === '__NEXUS_PRETEXT__')
|
|
465
|
+
continue;
|
|
329
466
|
el.setAttribute('data-nx-nav', '');
|
|
330
467
|
document.head.appendChild(el.cloneNode(true));
|
|
331
468
|
}
|
|
@@ -338,11 +475,12 @@ function handleLinkClick(e) {
|
|
|
338
475
|
const href = target.getAttribute('href');
|
|
339
476
|
if (!href)
|
|
340
477
|
return;
|
|
341
|
-
// Skip: external,
|
|
478
|
+
// Skip: external, same-page #fragment (browser scroll — do not fetch /_nexus/navigate?path=%23…
|
|
479
|
+
// which resolves pathname to / and morphs the wrong route), download, target="_blank", …
|
|
342
480
|
if (href.startsWith('http') ||
|
|
343
481
|
href.startsWith('mailto:') ||
|
|
344
482
|
href.startsWith('tel:') ||
|
|
345
|
-
href
|
|
483
|
+
href.startsWith('#') ||
|
|
346
484
|
target.hasAttribute('download') ||
|
|
347
485
|
target.getAttribute('target') === '_blank' ||
|
|
348
486
|
target.getAttribute('data-nx-prefetch') === 'false' ||
|
|
@@ -354,22 +492,39 @@ function handleLinkClick(e) {
|
|
|
354
492
|
}
|
|
355
493
|
function handlePopState(e) {
|
|
356
494
|
if (e.state?.nx) {
|
|
357
|
-
|
|
495
|
+
const path = `${location.pathname}${location.search}${location.hash}`;
|
|
496
|
+
navigate(path, { replace: true, noCache: true }).catch(console.error);
|
|
358
497
|
}
|
|
359
498
|
}
|
|
360
499
|
function setupPrefetchObservers() {
|
|
361
|
-
// Hover prefetch (default)
|
|
500
|
+
// Hover prefetch (default) — throttle: mouseover fires on every child boundary inside `<a>`.
|
|
362
501
|
document.addEventListener('mouseover', (e) => {
|
|
363
502
|
const target = e.target.closest('a[href]');
|
|
364
503
|
if (!target)
|
|
365
504
|
return;
|
|
366
505
|
const href = target.getAttribute('href');
|
|
367
|
-
if (!href
|
|
506
|
+
if (!href)
|
|
507
|
+
return;
|
|
508
|
+
// Keep in sync with `handleLinkClick` skips — avoid prefetching mailto/tel/external.
|
|
509
|
+
if (href.startsWith('http') ||
|
|
510
|
+
href.startsWith('mailto:') ||
|
|
511
|
+
href.startsWith('tel:') ||
|
|
512
|
+
href.startsWith('#') ||
|
|
513
|
+
target.hasAttribute('download') ||
|
|
514
|
+
target.getAttribute('target') === '_blank' ||
|
|
515
|
+
target.getAttribute('data-nx-prefetch') === 'false' ||
|
|
516
|
+
target.getAttribute('data-nx-external') !== null) {
|
|
368
517
|
return;
|
|
369
|
-
const prefetchMode = target.getAttribute('data-nx-prefetch') ?? 'hover';
|
|
370
|
-
if (prefetchMode === 'hover' || prefetchMode === '') {
|
|
371
|
-
prefetch(href);
|
|
372
518
|
}
|
|
519
|
+
const prefetchMode = target.getAttribute('data-nx-prefetch') ?? 'hover';
|
|
520
|
+
if (prefetchMode !== 'hover' && prefetchMode !== '')
|
|
521
|
+
return;
|
|
522
|
+
const now = Date.now();
|
|
523
|
+
const last = prefetchHoverAt.get(href) ?? 0;
|
|
524
|
+
if (now - last < PREFETCH_HOVER_GAP_MS)
|
|
525
|
+
return;
|
|
526
|
+
prefetchHoverAt.set(href, now);
|
|
527
|
+
prefetch(href);
|
|
373
528
|
}, { passive: true });
|
|
374
529
|
// Viewport prefetch
|
|
375
530
|
const visibleObserver = new IntersectionObserver((entries) => {
|
|
@@ -387,4 +542,19 @@ function setupPrefetchObservers() {
|
|
|
387
542
|
visibleObserver.observe(el);
|
|
388
543
|
});
|
|
389
544
|
}
|
|
545
|
+
/**
|
|
546
|
+
* Bootstrap SPA navigation once when the runtime loads (same pattern as `hydrateAll` in island.ts).
|
|
547
|
+
* Without this, link interception and view-transition styles never run.
|
|
548
|
+
*/
|
|
549
|
+
if (typeof document !== 'undefined') {
|
|
550
|
+
const bootNav = () => {
|
|
551
|
+
initNavigation();
|
|
552
|
+
};
|
|
553
|
+
if (document.readyState === 'loading') {
|
|
554
|
+
document.addEventListener('DOMContentLoaded', bootNav);
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
bootNav();
|
|
558
|
+
}
|
|
559
|
+
}
|
|
390
560
|
//# sourceMappingURL=navigation.js.map
|
package/dist/navigation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAwBxD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;IACtB,KAAK,EAAE,MAAM,CAAgB,IAAI,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAwB,EAAE;IAE1B,MAAM,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACpC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IAEvC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE3B,mGAAmG;IACnG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,UAAU,CAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;SAC/C,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACb,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;SACf,OAAO,CAAC,GAAG,EAAE;QACZ,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AAED,iFAAiF;AAEjF,IAAI,sBAAsB,GAAG,KAAK,CAAC;AAEnC,+CAA+C;AAC/C,MAAM,UAAU,cAAc;IAC5B,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,sBAAsB;QAAE,OAAO;IACnC,sBAAsB,GAAG,IAAI,CAAC;IAE9B,0BAA0B,EAAE,CAAC;IAE7B,4BAA4B;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,8BAA8B;IAC9B,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAEpD,2BAA2B;IAC3B,sBAAsB,EAAE,CAAC;IAEzB,+CAA+C;IAC/C,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,iFAAiF;AAEjF,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAC7C,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAC3D,mHAAmH;AACnH,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAC3C,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;AAC/C,qGAAqG;AACrG,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAClD,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAelC,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,GAAG,iBAAiB,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAqB;IAClE,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO;IAErC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAE9B,IAAI,CAAC;QACH,wEAAwE;QACxE,aAAa,EAAE,CAAC;QAEhB,6BAA6B;QAC7B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,IAAI,OAAO,GAA6B,MAAM,IAAI,IAAI,CAAC;QAEvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAChE,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5B,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,uBAAuB;QACvB,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAErC,UAAU,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QAErC,wBAAwB;QACxB,QAAQ,CAAC,aAAa,CACpB,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CACjE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACnC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,IAAY,EACZ,OAA4C,EAAE;IAE9C,uFAAuF;IACvF,MAAM,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,KAAK,KAAK,CAAC;IAEnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;YAC9C,OAAO,EAAE;gBACP,kBAAkB,EAAE,GAAG;gBACvB,QAAQ,EAAE,kBAAkB;aAC7B;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvB,IAAI,qBAAqB;gBAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAErC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAE3D,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,IAAI,qBAAqB;gBAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QAC9B,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAoC,EAAE,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAID,SAAS,0BAA0B;IAGjC,OAAO,QAA6F,CAAC;AACvG,CAAC;AAED,wEAAwE;AACxE,SAAS,uBAAuB,CAAC,IAAqB;IACpD,IAAI,IAAI,CAAC,cAAc,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAChD,MAAM,GAAG,GAAG,0BAA0B,EAAE,CAAC;IACzC,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAS,0BAA0B;IACjC,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,IAAI,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;QAAE,OAAO;IACvD,MAAM,GAAG,GAAG,0BAA0B,EAAE,CAAC;IACzC,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,UAAU;QAAE,OAAO;IAE1D,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,iBAAiB,CAAC;IAC7B,KAAK,CAAC,WAAW,GAAG;;;;;;;;EAQpB,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,OAA0B,EAC1B,IAAqB;IAErB,sEAAsE;IACtE,IAAK,OAA0D,CAAC,aAAa,EAAE,CAAC;QAC9E,WAAW,CAAE,OAAyD,CAAC,aAAa,CAAC,CAAC;IACxF,CAAC;IAED,0DAA0D;IAC1D,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,uCAAuC;QACvC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAClC,mFAAmF;QACnF,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC3B,+CAA+C;QAC/C,UAAU,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,0BAA0B,EAAE,CAAC;IACzC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,OAAO,GAAG,CAAC,mBAAmB,KAAK,UAAU,EAAE,CAAC;QACnF,MAAM,EAAE,GAAG,GAAG,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,YAAY,EAAE,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;AACH,CAAC;AAWD,SAAS,eAAe;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACtD,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC;QAE5D,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,kFAAkF;AAElF;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,OAAe,EAAE,SAAsC;IACxE,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;IAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IAE9B,wFAAwF;IACxF,iEAAiE;IACjE,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IAED,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,SAAS,CAChB,OAAgB,EAChB,OAAgB,EAChB,SAAsC;IAEtC,oBAAoB;IACpB,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,CAAC,QAAQ;YAAE,MAAM;QAErB,gDAAgD;QAChD,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;YAC/D,MAAM,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;YACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,gBAAgB,IAAI,EAAE,CAAC;YAE9E,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,IAAI,gBAAgB,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;gBACpD,iEAAiE;gBACjE,IAAI,QAAQ,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC9B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,CAAC;gBACT,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,sCAAsC;YACtC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC5C,2BAA2B;YAC3B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,CAAC;YACT,SAAS;QACX,CAAC;QAED,IAAI,QAAQ,YAAY,OAAO,IAAI,QAAQ,YAAY,OAAO,EAAE,CAAC;YAC/D,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC1C,yBAAyB;gBACzB,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,2BAA2B;gBAC3B,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAChD,6BAA6B;YAC7B,IAAI,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAClD,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;IACX,CAAC;IAED,4BAA4B;IAC5B,OAAO,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,QAAQ,EAAE,CAAC;YACb,+BAA+B;YAC/B,MAAM,QAAQ,GAAG,QAAQ,YAAY,OAAO;gBAC1C,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC;YACT,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,EAAE,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,KAAc;IACrD,4BAA4B;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACjD,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IACD,2CAA2C;IAC3C,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,yBAAyB,CAAC,QAAgB;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,QAAQ,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,MAAM,QAAQ,GAAG,GAAG,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ;YAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;YACrC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAEpC,eAAe;IACf,MAAM,UAAU,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;QAAE,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAEpD,sEAAsE;IACtE,QAAQ,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IAExE,sEAAsE;IACtE,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,QAAQ,SAAS,EAAE,WAAW,CAAC,CAAC;IAC5E,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,EAAE,CAAC,OAAO,KAAK,OAAO;YAAE,SAAS;QACrC,IAAI,EAAE,CAAC,OAAO,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,mBAAmB;YAAE,SAAS;QACvE,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,kFAAkF;AAElF,SAAS,eAAe,CAAC,CAAa;IACpC,MAAM,MAAM,GAAI,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,gGAAgG;IAChG,yFAAyF;IACzF,IACE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;QAC/B,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAC1C,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,OAAO;QACnD,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAChD,CAAC;QACD,OAAO;IACT,CAAC;IAED,CAAC,CAAC,cAAc,EAAE,CAAC;IACnB,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,cAAc,CAAC,CAAgB;IACtC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtE,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,gBAAgB,CACvB,WAAW,EACX,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,MAAM,GAAI,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,qFAAqF;QACrF,IACE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACpB,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,QAAQ;YAC1C,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,OAAO;YACnD,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAChD,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC;QACxE,IAAI,YAAY,KAAK,OAAO,IAAI,YAAY,KAAK,EAAE;YAAE,OAAO;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,GAAG,GAAG,IAAI,GAAG,qBAAqB;YAAE,OAAO;QAC/C,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;IAEF,oBAAoB;IACpB,MAAM,eAAe,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,cAAc;gBAAE,SAAS;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAiB,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrD,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5B,QAAQ,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACxE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IACF,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretext — merged `nxPretext(ctx)` payloads from layouts + page, embedded in SSR as
|
|
3
|
+
* `<script type="application/json" id="__NEXUS_PRETEXT__">` and read before island hydration.
|
|
4
|
+
*/
|
|
5
|
+
/** Parse `__NEXUS_PRETEXT__` from the document (called automatically before hydrating islands). */
|
|
6
|
+
export declare function initPretextFromDocument(): void;
|
|
7
|
+
/** Read-only merged pretext object (same keys as server `ctx.pretext`). */
|
|
8
|
+
export declare function getPretext(): Readonly<Record<string, unknown>>;
|
|
9
|
+
/**
|
|
10
|
+
* Primary context for islands — zero client fetch; same payload the server used for SSR.
|
|
11
|
+
* Prefer destructuring: `const { flow } = $pretext()`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function $pretext(): Record<string, unknown>;
|
|
14
|
+
//# sourceMappingURL=pretext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretext.d.ts","sourceRoot":"","sources":["../src/pretext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,mGAAmG;AACnG,wBAAgB,uBAAuB,IAAI,IAAI,CAY9C;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAE9D;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAElD"}
|
package/dist/pretext.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pretext — merged `nxPretext(ctx)` payloads from layouts + page, embedded in SSR as
|
|
3
|
+
* `<script type="application/json" id="__NEXUS_PRETEXT__">` and read before island hydration.
|
|
4
|
+
*/
|
|
5
|
+
import { deserialize } from '@nexus_js/serialize';
|
|
6
|
+
let _pretext = {};
|
|
7
|
+
/** Parse `__NEXUS_PRETEXT__` from the document (called automatically before hydrating islands). */
|
|
8
|
+
export function initPretextFromDocument() {
|
|
9
|
+
const el = document.getElementById('__NEXUS_PRETEXT__');
|
|
10
|
+
const raw = el?.textContent?.trim();
|
|
11
|
+
if (!raw) {
|
|
12
|
+
_pretext = {};
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
_pretext = deserialize(raw);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
_pretext = {};
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Read-only merged pretext object (same keys as server `ctx.pretext`). */
|
|
23
|
+
export function getPretext() {
|
|
24
|
+
return _pretext;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Primary context for islands — zero client fetch; same payload the server used for SSR.
|
|
28
|
+
* Prefer destructuring: `const { flow } = $pretext()`.
|
|
29
|
+
*/
|
|
30
|
+
export function $pretext() {
|
|
31
|
+
return _pretext;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=pretext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pretext.js","sourceRoot":"","sources":["../src/pretext.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,IAAI,QAAQ,GAA4B,EAAE,CAAC;AAE3C,mGAAmG;AACnG,MAAM,UAAU,uBAAuB;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,QAAQ,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,QAAQ,GAAG,WAAW,CAAC,GAAG,CAA4B,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/runes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runes.d.ts","sourceRoot":"","sources":["../src/runes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAqB1B;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"runes.d.ts","sourceRoot":"","sources":["../src/runes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,KAAK,OAAO,GAAG,MAAM,IAAI,CAAC;AAqB1B;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CA6BlD;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAgBvE;AAID;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,GAAG,OAAO,CAgCzD;AAID;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,QAAQ,GAAE,OAAO,CAAC,CAAC,CAAM,GACxB,CAAC,CAQH;AAOD;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAkB1C"}
|
package/dist/runes.js
CHANGED
|
@@ -34,8 +34,13 @@ export function $state(initial) {
|
|
|
34
34
|
node.value = next;
|
|
35
35
|
// Notify all subscribers synchronously (microtask queue in practice)
|
|
36
36
|
for (const effect of [...node.subscribers]) {
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
try {
|
|
38
|
+
effect.cleanup?.();
|
|
39
|
+
effect.execute();
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
console.error('[Nexus] $effect error (subscriber):', e);
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
45
|
},
|
|
41
46
|
};
|
|
@@ -91,6 +96,9 @@ export function $effect(fn) {
|
|
|
91
96
|
try {
|
|
92
97
|
node.cleanup = fn();
|
|
93
98
|
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
console.error('[Nexus] $effect error:', e);
|
|
101
|
+
}
|
|
94
102
|
finally {
|
|
95
103
|
currentEffect = prev;
|
|
96
104
|
}
|
|
@@ -145,8 +153,13 @@ export function batch(fn) {
|
|
|
145
153
|
batchDepth--;
|
|
146
154
|
if (batchDepth === 0) {
|
|
147
155
|
for (const effect of pendingEffects) {
|
|
148
|
-
|
|
149
|
-
|
|
156
|
+
try {
|
|
157
|
+
effect.cleanup?.();
|
|
158
|
+
effect.execute();
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
console.error('[Nexus] $effect error (batch):', e);
|
|
162
|
+
}
|
|
150
163
|
}
|
|
151
164
|
pendingEffects.clear();
|
|
152
165
|
}
|
package/dist/runes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runes.js","sourceRoot":"","sources":["../src/runes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,6EAA6E;AAC7E,IAAI,aAAa,GAAsB,IAAI,CAAC;AAc5C,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAI,OAAU;IAClC,MAAM,IAAI,GAAkB;QAC1B,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,IAAI,GAAG,EAAE;QACtB,EAAE,EAAE,SAAS,EAAE;KAChB,CAAC;IAEF,OAAO;QACL,IAAI,KAAK;YACP,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBACpC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,IAA2B,CAAC,CAAC;YACtD,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,KAAK,CAAC,IAAO;YACf,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE,OAAO;YACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,qEAAqE;YACrE,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"runes.js","sourceRoot":"","sources":["../src/runes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nexus_js/runtime",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.5",
|
|
4
4
|
"description": "Nexus Islands runtime — selective hydration with fine-grained reactivity",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
}
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@nexus_js/serialize": "0.7.
|
|
23
|
+
"@nexus_js/serialize": "0.7.5"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"typescript": "^5.5.0",
|
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
"bugs": {
|
|
37
37
|
"url": "https://github.com/bierfor/nexus/issues"
|
|
38
38
|
},
|
|
39
|
+
"funding": {
|
|
40
|
+
"type": "individual",
|
|
41
|
+
"url": "https://buymeacoffee.com/bierfor084"
|
|
42
|
+
},
|
|
39
43
|
"keywords": [
|
|
40
44
|
"nexus",
|
|
41
45
|
"framework",
|