@praxisjs/runtime 0.7.1 → 0.8.1
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/CHANGELOG.md +39 -0
- package/dist/children.d.ts.map +1 -1
- package/dist/children.js +2 -1
- package/dist/children.js.map +1 -1
- package/dist/component.d.ts +2 -3
- package/dist/component.d.ts.map +1 -1
- package/dist/component.js +133 -60
- package/dist/component.js.map +1 -1
- package/dist/context.d.ts +13 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +24 -2
- package/dist/context.js.map +1 -1
- package/dist/dom/constants.d.ts +1 -1
- package/dist/dom/constants.d.ts.map +1 -1
- package/dist/dom/constants.js +24 -83
- package/dist/dom/constants.js.map +1 -1
- package/dist/dom/create.d.ts +1 -1
- package/dist/dom/create.d.ts.map +1 -1
- package/dist/dom/create.js +3 -3
- package/dist/dom/create.js.map +1 -1
- package/dist/dom/events.d.ts +28 -0
- package/dist/dom/events.d.ts.map +1 -1
- package/dist/dom/events.js +163 -17
- package/dist/dom/events.js.map +1 -1
- package/dist/dom/props.d.ts +4 -0
- package/dist/dom/props.d.ts.map +1 -1
- package/dist/dom/props.js +61 -8
- package/dist/dom/props.js.map +1 -1
- package/dist/dom/range.d.ts +4 -0
- package/dist/dom/range.d.ts.map +1 -0
- package/dist/dom/range.js +43 -0
- package/dist/dom/range.js.map +1 -0
- package/dist/dom/remove.d.ts.map +1 -1
- package/dist/dom/remove.js +2 -8
- package/dist/dom/remove.js.map +1 -1
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js +7 -5
- package/dist/element.js.map +1 -1
- package/dist/hmr.d.ts +35 -0
- package/dist/hmr.d.ts.map +1 -0
- package/dist/hmr.js +85 -0
- package/dist/hmr.js.map +1 -0
- package/dist/hydration-context.d.ts +9 -1
- package/dist/hydration-context.d.ts.map +1 -1
- package/dist/hydration-context.js +34 -13
- package/dist/hydration-context.js.map +1 -1
- package/dist/hydration.d.ts.map +1 -1
- package/dist/hydration.js +4 -11
- package/dist/hydration.js.map +1 -1
- package/dist/index.d.ts +16 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -7
- package/dist/index.js.map +1 -1
- package/dist/list.d.ts +72 -0
- package/dist/list.d.ts.map +1 -0
- package/dist/list.js +786 -0
- package/dist/list.js.map +1 -0
- package/dist/portal.d.ts.map +1 -1
- package/dist/portal.js +3 -0
- package/dist/portal.js.map +1 -1
- package/dist/reactive.d.ts +2 -2
- package/dist/reactive.d.ts.map +1 -1
- package/dist/reactive.js +109 -34
- package/dist/reactive.js.map +1 -1
- package/dist/scope.d.ts +14 -4
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +55 -15
- package/dist/scope.js.map +1 -1
- package/dist/template.d.ts +48 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +270 -0
- package/dist/template.js.map +1 -0
- package/package.json +15 -6
- package/src/children.ts +2 -1
- package/src/component.ts +135 -63
- package/src/context.ts +35 -4
- package/src/dom/constants.ts +25 -82
- package/src/dom/create.ts +3 -3
- package/src/dom/events.ts +184 -16
- package/src/dom/props.ts +70 -9
- package/src/dom/range.ts +45 -0
- package/src/dom/remove.ts +3 -7
- package/src/element.ts +8 -6
- package/src/hmr.ts +110 -0
- package/src/hydration-context.ts +34 -13
- package/src/hydration.ts +4 -9
- package/src/index.ts +54 -7
- package/src/list.ts +886 -0
- package/src/portal.ts +3 -0
- package/src/reactive.ts +147 -40
- package/src/scope.ts +63 -16
- package/src/template.ts +271 -0
- package/dist/__tests__/children.test.d.ts +0 -2
- package/dist/__tests__/children.test.d.ts.map +0 -1
- package/dist/__tests__/children.test.js +0 -241
- package/dist/__tests__/children.test.js.map +0 -1
- package/dist/__tests__/component.test.d.ts +0 -2
- package/dist/__tests__/component.test.d.ts.map +0 -1
- package/dist/__tests__/component.test.js +0 -347
- package/dist/__tests__/component.test.js.map +0 -1
- package/dist/__tests__/context.test.d.ts +0 -2
- package/dist/__tests__/context.test.d.ts.map +0 -1
- package/dist/__tests__/context.test.js +0 -111
- package/dist/__tests__/context.test.js.map +0 -1
- package/dist/__tests__/dom.test.d.ts +0 -2
- package/dist/__tests__/dom.test.d.ts.map +0 -1
- package/dist/__tests__/dom.test.js +0 -429
- package/dist/__tests__/dom.test.js.map +0 -1
- package/dist/__tests__/hydration.test.d.ts +0 -2
- package/dist/__tests__/hydration.test.d.ts.map +0 -1
- package/dist/__tests__/hydration.test.js +0 -299
- package/dist/__tests__/hydration.test.js.map +0 -1
- package/dist/__tests__/portal.test.d.ts +0 -2
- package/dist/__tests__/portal.test.d.ts.map +0 -1
- package/dist/__tests__/portal.test.js +0 -157
- package/dist/__tests__/portal.test.js.map +0 -1
- package/dist/__tests__/remove.test.d.ts +0 -2
- package/dist/__tests__/remove.test.d.ts.map +0 -1
- package/dist/__tests__/remove.test.js +0 -45
- package/dist/__tests__/remove.test.js.map +0 -1
- package/dist/__tests__/render.test.d.ts +0 -2
- package/dist/__tests__/render.test.d.ts.map +0 -1
- package/dist/__tests__/render.test.js +0 -97
- package/dist/__tests__/render.test.js.map +0 -1
- package/dist/__tests__/scope.test.d.ts +0 -2
- package/dist/__tests__/scope.test.d.ts.map +0 -1
- package/dist/__tests__/scope.test.js +0 -110
- package/dist/__tests__/scope.test.js.map +0 -1
- package/src/__tests__/children.test.ts +0 -276
- package/src/__tests__/component.test.ts +0 -381
- package/src/__tests__/context.test.ts +0 -128
- package/src/__tests__/dom.test.ts +0 -483
- package/src/__tests__/hydration.test.ts +0 -360
- package/src/__tests__/portal.test.ts +0 -177
- package/src/__tests__/remove.test.ts +0 -51
- package/src/__tests__/render.test.ts +0 -119
- package/src/__tests__/scope.test.ts +0 -120
- package/tsconfig.json +0 -8
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { Scope } from "./scope";
|
|
2
|
+
/**
|
|
3
|
+
* True during a hydration build pass (see runInRecording). Exported as a live binding so the hot
|
|
4
|
+
* render paths read a variable instead of calling isRecording() for every binding.
|
|
5
|
+
*/
|
|
6
|
+
export declare let recording: boolean;
|
|
2
7
|
/**
|
|
3
8
|
* Marks the synchronous "build" pass of a hydration attempt: `factory()` runs
|
|
4
9
|
* completely normally (same create-mode code as a plain client render), but
|
|
@@ -14,8 +19,11 @@ interface PropRecord {
|
|
|
14
19
|
scope: Scope;
|
|
15
20
|
}
|
|
16
21
|
export declare function recordProps(el: Element, props: Record<string, unknown>, scope: Scope): void;
|
|
22
|
+
/** Adds one prop to an element's record, for elements whose props are applied one at a time. */
|
|
23
|
+
export declare function recordProp(el: Element, key: string, value: unknown, scope: Scope): void;
|
|
17
24
|
export declare function getRecordedProps(el: Element): PropRecord | undefined;
|
|
25
|
+
export declare function onHydrationReplace(node: Node, replace: (real: Node) => void): void;
|
|
26
|
+
export declare function getHydrationReplacer(node: Node): ((real: Node) => void) | undefined;
|
|
18
27
|
export declare function registerReactiveNode(node: Node, owner: Node[]): void;
|
|
19
|
-
export declare function getReactiveOwner(node: Node): Node[] | undefined;
|
|
20
28
|
export {};
|
|
21
29
|
//# sourceMappingURL=hydration-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration-context.d.ts","sourceRoot":"","sources":["../src/hydration-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"hydration-context.d.ts","sourceRoot":"","sources":["../src/hydration-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;;GAGG;AAEH,eAAO,IAAI,SAAS,SAAQ,CAAC;AAE7B;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQhD;AAED,wBAAgB,WAAW,IAAI,OAAO,CAErC;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;CACd;AAID,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAE3F;AAED,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAIvF;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAEpE;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,IAAI,CAGlF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEnF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAKpE"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* True during a hydration build pass (see runInRecording). Exported as a live binding so the hot
|
|
3
|
+
* render paths read a variable instead of calling isRecording() for every binding.
|
|
4
|
+
*/
|
|
5
|
+
export let recording = false;
|
|
2
6
|
/**
|
|
3
7
|
* Marks the synchronous "build" pass of a hydration attempt: `factory()` runs
|
|
4
8
|
* completely normally (same create-mode code as a plain client render), but
|
|
@@ -8,33 +12,50 @@ let _recording = false;
|
|
|
8
12
|
* element instead of the fresh one. No-op / zero cost outside a build pass.
|
|
9
13
|
*/
|
|
10
14
|
export function runInRecording(fn) {
|
|
11
|
-
const prev =
|
|
12
|
-
|
|
15
|
+
const prev = recording;
|
|
16
|
+
recording = true;
|
|
13
17
|
try {
|
|
14
18
|
return fn();
|
|
15
19
|
}
|
|
16
20
|
finally {
|
|
17
|
-
|
|
21
|
+
recording = prev;
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
24
|
export function isRecording() {
|
|
21
|
-
return
|
|
25
|
+
return recording;
|
|
22
26
|
}
|
|
23
27
|
const _propRecords = new WeakMap();
|
|
24
28
|
export function recordProps(el, props, scope) {
|
|
25
29
|
_propRecords.set(el, { props, scope });
|
|
26
30
|
}
|
|
31
|
+
/** Adds one prop to an element's record, for elements whose props are applied one at a time. */
|
|
32
|
+
export function recordProp(el, key, value, scope) {
|
|
33
|
+
const record = _propRecords.get(el);
|
|
34
|
+
if (record === undefined)
|
|
35
|
+
_propRecords.set(el, { props: { [key]: value }, scope });
|
|
36
|
+
else
|
|
37
|
+
record.props[key] = value;
|
|
38
|
+
}
|
|
27
39
|
export function getRecordedProps(el) {
|
|
28
40
|
return _propRecords.get(el);
|
|
29
41
|
}
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
// Code that keeps references to fresh nodes for its *next* update (mountReactive's
|
|
43
|
+
// `currentNodes`, a list row's boundaries) registers how to repoint them, so reconcile()
|
|
44
|
+
// can tell it when it keeps a real element in place of a fresh one. One node can have several
|
|
45
|
+
// owners (a list row's element is also part of the nodes an enclosing reactive child returned).
|
|
46
|
+
const _replacers = new WeakMap();
|
|
47
|
+
export function onHydrationReplace(node, replace) {
|
|
48
|
+
const prev = _replacers.get(node);
|
|
49
|
+
_replacers.set(node, prev === undefined ? replace : (real) => { prev(real); replace(real); });
|
|
50
|
+
}
|
|
51
|
+
export function getHydrationReplacer(node) {
|
|
52
|
+
return _replacers.get(node);
|
|
36
53
|
}
|
|
37
|
-
export function
|
|
38
|
-
|
|
54
|
+
export function registerReactiveNode(node, owner) {
|
|
55
|
+
onHydrationReplace(node, (real) => {
|
|
56
|
+
const idx = owner.indexOf(node);
|
|
57
|
+
if (idx !== -1)
|
|
58
|
+
owner[idx] = real;
|
|
59
|
+
});
|
|
39
60
|
}
|
|
40
61
|
//# sourceMappingURL=hydration-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration-context.js","sourceRoot":"","sources":["../src/hydration-context.ts"],"names":[],"mappings":"AAEA,IAAI,
|
|
1
|
+
{"version":3,"file":"hydration-context.js","sourceRoot":"","sources":["../src/hydration-context.ts"],"names":[],"mappings":"AAEA;;;GAGG;AAEH,MAAM,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAI,EAAW;IAC3C,MAAM,IAAI,GAAG,SAAS,CAAC;IACvB,SAAS,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,SAAS,CAAC;AACnB,CAAC;AAOD,MAAM,YAAY,GAAG,IAAI,OAAO,EAAuB,CAAC;AAExD,MAAM,UAAU,WAAW,CAAC,EAAW,EAAE,KAA8B,EAAE,KAAY;IACnF,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,UAAU,CAAC,EAAW,EAAE,GAAW,EAAE,KAAc,EAAE,KAAY;IAC/E,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS;QAAE,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;;QAC9E,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAW;IAC1C,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,mFAAmF;AACnF,yFAAyF;AACzF,8FAA8F;AAC9F,gGAAgG;AAChG,MAAM,UAAU,GAAG,IAAI,OAAO,EAA8B,CAAC;AAE7D,MAAM,UAAU,kBAAkB,CAAC,IAAU,EAAE,OAA6B;IAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChG,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAU;IAC7C,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAU,EAAE,KAAa;IAC5D,kBAAkB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAChC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/hydration.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hydration.d.ts","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,IAAI,CA8BvE"}
|
package/dist/hydration.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { applyProp } from "./dom/props";
|
|
2
|
-
import {
|
|
2
|
+
import { getHydrationReplacer, getRecordedProps } from "./hydration-context";
|
|
3
3
|
function replayProps(real, fresh) {
|
|
4
4
|
const record = getRecordedProps(fresh);
|
|
5
5
|
if (!record)
|
|
@@ -10,17 +10,10 @@ function replayProps(real, fresh) {
|
|
|
10
10
|
applyProp(real, key, record.props[key], record.scope);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
// mountReactive()'s `currentNodes`
|
|
14
|
-
// *next*
|
|
15
|
-
// needs to see the swap too — it's registered by reference, so this mutation
|
|
16
|
-
// is visible to whichever effect closure owns it.
|
|
13
|
+
// mountReactive()'s `currentNodes` and list rows keep fresh node references for their
|
|
14
|
+
// *next* update. If we're keeping `real` instead of `fresh` here, they need to see the swap.
|
|
17
15
|
function notifyReplacement(fresh, real) {
|
|
18
|
-
|
|
19
|
-
if (!owner)
|
|
20
|
-
return;
|
|
21
|
-
const idx = owner.indexOf(fresh);
|
|
22
|
-
if (idx !== -1)
|
|
23
|
-
owner[idx] = real;
|
|
16
|
+
getHydrationReplacer(fresh)?.(real);
|
|
24
17
|
}
|
|
25
18
|
/**
|
|
26
19
|
* Walks `freshChildren` (the complete, correctly-nested output of a normal
|
package/dist/hydration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.js","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"hydration.js","sourceRoot":"","sources":["../src/hydration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,SAAS,WAAW,CAAC,IAAa,EAAE,KAAc;IAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,UAAU;YAAE,SAAS;QACjC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,6FAA6F;AAC7F,SAAS,iBAAiB,CAAC,KAAW,EAAE,IAAU;IAChD,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,SAAS,CAAC,UAAgB,EAAE,aAAqB;IAC/D,IAAI,UAAU,GAAqB,UAAU,CAAC,UAAU,CAAC;IAEzD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IACE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;YACpC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC,YAAY;YACzC,UAAsB,CAAC,SAAS,KAAM,KAAiB,CAAC,SAAS,EAClE,CAAC;YACD,MAAM,IAAI,GAAG,UAAqB,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9B,WAAW,CAAC,IAAI,EAAE,KAAgB,CAAC,CAAC;YACpC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAE,KAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;YAC3D,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC/B,SAAS;QACX,CAAC;QAED,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,UAAU,CAAC;YACzB,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;YACpC,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;QACD,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,UAAU,CAAC;QACzB,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC;QACpC,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lets render() hydrate the HTML `@praxisjs/ssg` prerendered. `ssgPlugin()` calls it at the start of
|
|
3
|
+
* the client bundle, so apps it builds need nothing more; a page prerendered another way calls it
|
|
4
|
+
* once before render(). Without it, a container carrying the hydration marker is cleared and
|
|
5
|
+
* mounted fresh.
|
|
6
|
+
*/
|
|
7
|
+
export declare function enableHydration(): void;
|
|
1
8
|
/**
|
|
2
9
|
* Renders a component tree into a container element.
|
|
3
10
|
*
|
|
4
11
|
* The factory function is called once inside the root scope,
|
|
5
12
|
* so `jsx()` can access the current scope via `getCurrentScope()`.
|
|
6
13
|
*
|
|
7
|
-
*
|
|
8
|
-
* HTML
|
|
9
|
-
* reconciled against the existing DOM (real elements are kept and have their
|
|
10
|
-
* props/listeners replayed onto them; text/comments and any mismatched nodes
|
|
11
|
-
*
|
|
14
|
+
* Once hydration is enabled (see `enableHydration()`), a `container` carrying the marker
|
|
15
|
+
* `@praxisjs/ssg` stamps onto prerendered HTML has its tree built normally into a detached
|
|
16
|
+
* scratch node and then reconciled against the existing DOM (real elements are kept and have their
|
|
17
|
+
* props/listeners replayed onto them; text/comments and any mismatched nodes are recreated)
|
|
18
|
+
* instead of being cleared and mounted fresh.
|
|
12
19
|
*
|
|
13
20
|
* @example
|
|
14
21
|
* render(() => <App />, document.getElementById('app'));
|
|
@@ -17,6 +24,10 @@ export declare function render(factory: () => Node | Node[] | null, container: H
|
|
|
17
24
|
export { Scope } from "./scope";
|
|
18
25
|
export { runInScope, getCurrentScope } from "./context";
|
|
19
26
|
export { mountElement } from "./element";
|
|
27
|
+
export { mountChildren } from "./children";
|
|
28
|
+
export { template as _$template, html as _$html, element as _$element, prop as _$prop, reactive as _$reactive, insert as _$insert, reactiveOnly as _$reactiveOnly, insertOnly as _$insertOnly, on as _$on, event as _$event, onEvent as _$onEvent, className as _$className, scope as _$scope, } from "./template";
|
|
20
29
|
export { mountComponent } from "./component";
|
|
30
|
+
export { registerHot as _$hmrRegister, acceptsHotUpdate as _$hmrAccepts } from "./hmr";
|
|
21
31
|
export { Portal, type PortalProps } from "./portal";
|
|
32
|
+
export { For, Index, type ForProps, type IndexProps, type ListSource, type ListTransition, } from "./list";
|
|
22
33
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiEA;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EACnC,SAAS,EAAE,WAAW,GACrB,MAAM,IAAI,CAKZ;AAED,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EACL,QAAQ,IAAI,UAAU,EACtB,IAAI,IAAI,MAAM,EACd,OAAO,IAAI,SAAS,EACpB,IAAI,IAAI,MAAM,EACd,QAAQ,IAAI,UAAU,EACtB,MAAM,IAAI,QAAQ,EAClB,YAAY,IAAI,cAAc,EAC9B,UAAU,IAAI,YAAY,EAC1B,EAAE,IAAI,IAAI,EACV,KAAK,IAAI,OAAO,EAChB,OAAO,IAAI,SAAS,EACpB,SAAS,IAAI,WAAW,EACxB,KAAK,IAAI,OAAO,GACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,IAAI,aAAa,EAAE,gBAAgB,IAAI,YAAY,EAAE,MAAM,OAAO,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,GAAG,EACH,KAAK,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { mountChildren } from "./children";
|
|
2
2
|
import { runInScope } from "./context";
|
|
3
|
+
import { addEventRoot } from "./dom/events";
|
|
3
4
|
import { reconcile } from "./hydration";
|
|
4
5
|
import { runInRecording } from "./hydration-context";
|
|
5
6
|
import { Scope } from "./scope";
|
|
7
|
+
import { syncTemplateDocument } from "./template";
|
|
6
8
|
/** Written by `@praxisjs/ssg` onto the mount container in its prerendered HTML. */
|
|
7
9
|
const SSG_MARKER = "data-praxis-ssg";
|
|
8
10
|
function mountCreate(factory, container) {
|
|
11
|
+
syncTemplateDocument();
|
|
9
12
|
const rootScope = new Scope();
|
|
10
13
|
container.innerHTML = "";
|
|
14
|
+
const removeEventRoot = addEventRoot(container);
|
|
11
15
|
runInScope(rootScope, () => {
|
|
12
16
|
const result = factory();
|
|
13
17
|
mountChildren(container, result, rootScope);
|
|
14
18
|
});
|
|
15
19
|
return () => {
|
|
16
20
|
rootScope.dispose();
|
|
21
|
+
removeEventRoot();
|
|
17
22
|
container.innerHTML = "";
|
|
18
23
|
};
|
|
19
24
|
}
|
|
20
25
|
function hydrate(factory, container) {
|
|
26
|
+
syncTemplateDocument();
|
|
21
27
|
const rootScope = new Scope();
|
|
22
28
|
const scratch = document.createDocumentFragment();
|
|
23
29
|
// Build normally — same code as mountCreate, just into a detached scratch
|
|
@@ -31,35 +37,53 @@ function hydrate(factory, container) {
|
|
|
31
37
|
});
|
|
32
38
|
});
|
|
33
39
|
reconcile(container, Array.from(scratch.childNodes));
|
|
40
|
+
const removeEventRoot = addEventRoot(container);
|
|
34
41
|
return () => {
|
|
35
42
|
rootScope.dispose();
|
|
43
|
+
removeEventRoot();
|
|
36
44
|
container.innerHTML = "";
|
|
37
45
|
};
|
|
38
46
|
}
|
|
47
|
+
// Reached only through enableHydration(), so an app that never calls it leaves the reconciliation
|
|
48
|
+
// and every recording branch of the render paths out of its bundle.
|
|
49
|
+
let hydrateRoot = null;
|
|
50
|
+
/**
|
|
51
|
+
* Lets render() hydrate the HTML `@praxisjs/ssg` prerendered. `ssgPlugin()` calls it at the start of
|
|
52
|
+
* the client bundle, so apps it builds need nothing more; a page prerendered another way calls it
|
|
53
|
+
* once before render(). Without it, a container carrying the hydration marker is cleared and
|
|
54
|
+
* mounted fresh.
|
|
55
|
+
*/
|
|
56
|
+
export function enableHydration() {
|
|
57
|
+
hydrateRoot = hydrate;
|
|
58
|
+
}
|
|
39
59
|
/**
|
|
40
60
|
* Renders a component tree into a container element.
|
|
41
61
|
*
|
|
42
62
|
* The factory function is called once inside the root scope,
|
|
43
63
|
* so `jsx()` can access the current scope via `getCurrentScope()`.
|
|
44
64
|
*
|
|
45
|
-
*
|
|
46
|
-
* HTML
|
|
47
|
-
* reconciled against the existing DOM (real elements are kept and have their
|
|
48
|
-
* props/listeners replayed onto them; text/comments and any mismatched nodes
|
|
49
|
-
*
|
|
65
|
+
* Once hydration is enabled (see `enableHydration()`), a `container` carrying the marker
|
|
66
|
+
* `@praxisjs/ssg` stamps onto prerendered HTML has its tree built normally into a detached
|
|
67
|
+
* scratch node and then reconciled against the existing DOM (real elements are kept and have their
|
|
68
|
+
* props/listeners replayed onto them; text/comments and any mismatched nodes are recreated)
|
|
69
|
+
* instead of being cleared and mounted fresh.
|
|
50
70
|
*
|
|
51
71
|
* @example
|
|
52
72
|
* render(() => <App />, document.getElementById('app'));
|
|
53
73
|
*/
|
|
54
74
|
export function render(factory, container) {
|
|
55
|
-
if (container.hasAttribute(SSG_MARKER)) {
|
|
56
|
-
return
|
|
75
|
+
if (hydrateRoot !== null && container.hasAttribute(SSG_MARKER)) {
|
|
76
|
+
return hydrateRoot(factory, container);
|
|
57
77
|
}
|
|
58
78
|
return mountCreate(factory, container);
|
|
59
79
|
}
|
|
60
80
|
export { Scope } from "./scope";
|
|
61
81
|
export { runInScope, getCurrentScope } from "./context";
|
|
62
82
|
export { mountElement } from "./element";
|
|
83
|
+
export { mountChildren } from "./children";
|
|
84
|
+
export { template as _$template, html as _$html, element as _$element, prop as _$prop, reactive as _$reactive, insert as _$insert, reactiveOnly as _$reactiveOnly, insertOnly as _$insertOnly, on as _$on, event as _$event, onEvent as _$onEvent, className as _$className, scope as _$scope, } from "./template";
|
|
63
85
|
export { mountComponent } from "./component";
|
|
86
|
+
export { registerHot as _$hmrRegister, acceptsHotUpdate as _$hmrAccepts } from "./hmr";
|
|
64
87
|
export { Portal } from "./portal";
|
|
88
|
+
export { For, Index, } from "./list";
|
|
65
89
|
//# 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,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/list.d.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { RootComponent } from "@praxisjs/core/internal";
|
|
2
|
+
import type { Children } from "@praxisjs/shared";
|
|
3
|
+
/** Anything with Promise-based `enter`/`leave` hooks, such as `createTransition()` from `@praxisjs/motion`. */
|
|
4
|
+
export interface ListTransition {
|
|
5
|
+
enter?(el: HTMLElement): Promise<void>;
|
|
6
|
+
leave?(el: HTMLElement): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export type ListSource<T> = readonly T[] | Iterable<T> | null | undefined | (() => readonly T[] | Iterable<T> | null | undefined);
|
|
9
|
+
export interface ForProps<T> {
|
|
10
|
+
/** The items, or a function returning them. Only this function is tracked by the list. */
|
|
11
|
+
each: ListSource<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Identifies an item across updates: a function of the item (and its index), or the name of a
|
|
14
|
+
* property holding the key. Defaults to the item itself.
|
|
15
|
+
*/
|
|
16
|
+
by?: ((item: T, index: number) => unknown) | keyof T;
|
|
17
|
+
/** Rendered while the list is empty. A function is mounted (and disposed) each time it shows. */
|
|
18
|
+
fallback?: Children;
|
|
19
|
+
/** Runs `enter` on the elements of added rows and keeps removed rows until `leave` resolves. */
|
|
20
|
+
transition?: ListTransition;
|
|
21
|
+
/** Also run `transition.enter` for the rows of the first render. */
|
|
22
|
+
appear?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Renders one row, once per key. `item()` returns the current item for that key and is reactive
|
|
25
|
+
* when read inside a binding; `index()` returns the row's current position.
|
|
26
|
+
*/
|
|
27
|
+
children: (item: () => T, index: () => number) => Children;
|
|
28
|
+
}
|
|
29
|
+
export interface IndexProps<T> {
|
|
30
|
+
each: ListSource<T>;
|
|
31
|
+
fallback?: Children;
|
|
32
|
+
transition?: ListTransition;
|
|
33
|
+
appear?: boolean;
|
|
34
|
+
/** Renders the row at one position. `item()` is reactive and follows whatever sits at `index`. */
|
|
35
|
+
children: (item: () => T, index: number) => Children;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Longest increasing subsequence of `sources`, ignoring zeros (rows without a previous position).
|
|
39
|
+
* Returns the positions in `sources` that belong to it, in increasing order. O(n log n).
|
|
40
|
+
*/
|
|
41
|
+
export declare function longestIncreasingSubsequence(sources: Int32Array): Int32Array;
|
|
42
|
+
/**
|
|
43
|
+
* Keyed list. Rows are created once per key and kept (with their DOM, state and effects) while the
|
|
44
|
+
* key stays in the list; reorders move the existing nodes with the minimum number of moves.
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* <For each={() => this.todos} by={(todo) => todo.id} fallback={<p>Nothing to do</p>}>
|
|
48
|
+
* {(todo, index) => <li>{() => `${index() + 1}. ${todo().title}`}</li>}
|
|
49
|
+
* </For>
|
|
50
|
+
*/
|
|
51
|
+
export declare class For<T> extends RootComponent<ForProps<T>> {
|
|
52
|
+
static readonly __isComponent: true;
|
|
53
|
+
static readonly __isStateless = true;
|
|
54
|
+
static readonly __jsxRawProps: true;
|
|
55
|
+
render(): Node | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Positional list, for primitives and lists without stable identity. Row `i` is created once and
|
|
59
|
+
* kept; when the value at `i` changes only the bindings reading `item()` update.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* <Index each={() => this.tags}>
|
|
63
|
+
* {(tag, i) => <input value={() => tag()} onInput={(e) => { this.rename(i, e) }} />}
|
|
64
|
+
* </Index>
|
|
65
|
+
*/
|
|
66
|
+
export declare class Index<T> extends RootComponent<IndexProps<T>> {
|
|
67
|
+
static readonly __isComponent: true;
|
|
68
|
+
static readonly __isStateless = true;
|
|
69
|
+
static readonly __jsxRawProps: true;
|
|
70
|
+
render(): Node | null;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAOd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,kBAAkB,CAAC;AAUzD,+GAA+G;AAC/G,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB,SAAS,CAAC,EAAE,GACZ,QAAQ,CAAC,CAAC,CAAC,GACX,IAAI,GACJ,SAAS,GACT,CAAC,MAAM,SAAS,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE1D,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,0FAA0F;IAC1F,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACpB;;;OAGG;IACH,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;IACrD,iGAAiG;IACjG,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gGAAgG;IAChG,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,oEAAoE;IACpE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,MAAM,KAAK,QAAQ,CAAC;CAC5D;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kGAAkG;IAClG,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC;CACtD;AAmGD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CA+B5E;AAynBD;;;;;;;;GAQG;AACH,qBAAa,GAAG,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAG,IAAI,CAAU;IAC9C,MAAM,CAAC,QAAQ,CAAC,aAAa,QAAQ;IACrC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAG,IAAI,CAAU;IAE9C,MAAM,IAAI,IAAI,GAAG,IAAI;CActB;AAED;;;;;;;;GAQG;AACH,qBAAa,KAAK,CAAC,CAAC,CAAE,SAAQ,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAG,IAAI,CAAU;IAC9C,MAAM,CAAC,QAAQ,CAAC,aAAa,QAAQ;IACrC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAG,IAAI,CAAU;IAE9C,MAAM,IAAI,IAAI,GAAG,IAAI;CActB"}
|