kiru 1.1.2 → 1.2.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/dist/appHandle.d.ts.map +1 -1
- package/dist/appHandle.js +4 -5
- package/dist/appHandle.js.map +1 -1
- package/dist/components/derive.d.ts +4 -0
- package/dist/components/derive.d.ts.map +1 -1
- package/dist/components/derive.js +8 -4
- package/dist/components/derive.js.map +1 -1
- package/dist/components/errorBoundary.d.ts +4 -0
- package/dist/components/errorBoundary.d.ts.map +1 -1
- package/dist/components/errorBoundary.js +4 -0
- package/dist/components/errorBoundary.js.map +1 -1
- package/dist/{signals/jsx.d.ts → components/for.d.ts} +7 -9
- package/dist/components/for.d.ts.map +1 -0
- package/dist/components/for.js +13 -0
- package/dist/components/for.js.map +1 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/lazy.d.ts +4 -0
- package/dist/components/lazy.d.ts.map +1 -1
- package/dist/components/lazy.js +4 -0
- package/dist/components/lazy.js.map +1 -1
- package/dist/components/portal.d.ts +4 -0
- package/dist/components/portal.d.ts.map +1 -1
- package/dist/components/portal.js +4 -0
- package/dist/components/portal.js.map +1 -1
- package/dist/components/show.d.ts +18 -0
- package/dist/components/show.d.ts.map +1 -0
- package/dist/components/show.js +18 -0
- package/dist/components/show.js.map +1 -0
- package/dist/components/transition.d.ts +4 -0
- package/dist/components/transition.d.ts.map +1 -1
- package/dist/components/transition.js +4 -0
- package/dist/components/transition.js.map +1 -1
- package/dist/dom/nodes.d.ts.map +1 -1
- package/dist/dom/nodes.js +5 -1
- package/dist/dom/nodes.js.map +1 -1
- package/dist/dom/props.d.ts.map +1 -1
- package/dist/dom/props.js +23 -4
- package/dist/dom/props.js.map +1 -1
- package/dist/hooks/setup.d.ts +1 -1
- package/dist/hooks/setup.d.ts.map +1 -1
- package/dist/hooks/setup.js +111 -7
- package/dist/hooks/setup.js.map +1 -1
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +2 -3
- package/dist/scheduler.js.map +1 -1
- package/dist/signals/base.d.ts.map +1 -1
- package/dist/signals/base.js +23 -4
- package/dist/signals/base.js.map +1 -1
- package/dist/signals/computed.d.ts +1 -1
- package/dist/signals/computed.d.ts.map +1 -1
- package/dist/signals/computed.js +29 -21
- package/dist/signals/computed.js.map +1 -1
- package/dist/signals/index.d.ts +0 -6
- package/dist/signals/index.d.ts.map +1 -1
- package/dist/signals/index.js +0 -6
- package/dist/signals/index.js.map +1 -1
- package/dist/types.utils.d.ts +2 -0
- package/dist/types.utils.d.ts.map +1 -1
- package/dist/utils/vdom.d.ts +2 -1
- package/dist/utils/vdom.d.ts.map +1 -1
- package/dist/utils/vdom.js +4 -1
- package/dist/utils/vdom.js.map +1 -1
- package/package.json +1 -1
- package/src/appHandle.ts +6 -7
- package/src/components/derive.ts +9 -5
- package/src/components/errorBoundary.ts +4 -0
- package/src/{signals/jsx.ts → components/for.ts} +6 -12
- package/src/components/index.ts +2 -0
- package/src/components/lazy.ts +4 -0
- package/src/components/portal.ts +4 -0
- package/src/components/show.ts +32 -0
- package/src/components/transition.ts +4 -0
- package/src/dom/nodes.ts +5 -2
- package/src/dom/props.ts +28 -3
- package/src/hooks/setup.ts +144 -10
- package/src/scheduler.ts +2 -3
- package/src/signals/base.ts +21 -5
- package/src/signals/computed.ts +13 -4
- package/src/signals/index.ts +0 -7
- package/src/types.utils.ts +3 -0
- package/src/utils/vdom.ts +5 -0
- package/dist/signals/jsx.d.ts.map +0 -1
- package/dist/signals/jsx.js +0 -11
- package/dist/signals/jsx.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/signals/computed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,MAAM,OAAO,cAAkB,SAAQ,MAAS;IAI9C,YAAY,MAAuB,EAAE,WAAoB;QACvD,KAAK,CAAC,KAAK,CAAM,EAAE,WAAW,CAAC,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAE,CAAC,MAAO,CAAA;YACzC,mCAAmC;YACnC,IAAI,CAAC,WAAW,CAAC,GAAG;gBAClB,OAAO,EAAE,GAAG,EAAE;oBACZ,OAAO,IAAI,CAAA;gBACb,CAAC;gBACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACf,MAAM,CAAC,IAAI,CAAC,CAAA;oBACZ,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;oBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"computed.js","sourceRoot":"","sources":["../../src/signals/computed.ts"],"names":[],"mappings":"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"}
|
package/dist/signals/index.d.ts
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ISSUES:
|
|
3
|
-
* 1. signal subscription when mixing local and global signals get reversed in hmr for ONLY the first update after HMR is dom
|
|
4
|
-
* 2. global computed will lose its vNode subscription on HMR
|
|
5
|
-
* */
|
|
6
1
|
export { Signal, signal } from "./base.js";
|
|
7
2
|
export { ComputedSignal, computed } from "./computed.js";
|
|
8
3
|
export { Effect, effect } from "./effect.js";
|
|
9
4
|
export { unwrap, tick } from "./utils.js";
|
|
10
|
-
export * from "./jsx.js";
|
|
11
5
|
export * from "./types.js";
|
|
12
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACzC,cAAc,YAAY,CAAA"}
|
package/dist/signals/index.js
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ISSUES:
|
|
3
|
-
* 1. signal subscription when mixing local and global signals get reversed in hmr for ONLY the first update after HMR is dom
|
|
4
|
-
* 2. global computed will lose its vNode subscription on HMR
|
|
5
|
-
* */
|
|
6
1
|
export { Signal, signal } from "./base.js";
|
|
7
2
|
export { ComputedSignal, computed } from "./computed.js";
|
|
8
3
|
export { Effect, effect } from "./effect.js";
|
|
9
4
|
export { unwrap, tick } from "./utils.js";
|
|
10
|
-
export * from "./jsx.js";
|
|
11
5
|
export * from "./types.js";
|
|
12
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signals/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACzC,cAAc,YAAY,CAAA"}
|
package/dist/types.utils.d.ts
CHANGED
|
@@ -55,4 +55,6 @@ export type ArrayHas<T extends any[], U> = Extract<T[number], U> extends never ?
|
|
|
55
55
|
export type RecordHas<T extends Record<string, any>, U> = [
|
|
56
56
|
Extract<T[keyof T], U>
|
|
57
57
|
] extends [never] ? false : true;
|
|
58
|
+
export type Falsy = false | 0 | 0n | "" | null | undefined;
|
|
59
|
+
export type Truthy<T> = Exclude<T, Falsy>;
|
|
58
60
|
//# sourceMappingURL=types.utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.utils.d.ts","sourceRoot":"","sources":["../src/types.utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.utils.d.ts","sourceRoot":"","sources":["../src/types.utils.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/vdom.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $FRAGMENT, $CONTEXT } from "../constants.js";
|
|
2
2
|
import type { AppHandle } from "../appHandle.js";
|
|
3
3
|
import type { ErrorBoundaryNode } from "../types.utils.js";
|
|
4
|
-
export { cloneElement, isVNodeDeleted, isElement, isVNode, isValidTextChild, isExoticType, isFragment, isLazy, isContextProvider, vNodeContains, getCurrentVNode, getVNodeApp, commitSnapshot, traverseApply, findParent, findParentErrorBoundary, assertValidElementProps, normalizeElementKey, createVNodeId, registerVNodeCleanup, propsChanged, };
|
|
4
|
+
export { cloneElement, isVNodeDeleted, isElement, isVNode, isValidTextChild, isExoticType, isFragment, isLazy, isContextProvider, vNodeContains, getCurrentVNode, getVNodeApp, commitSnapshot, traverseApply, findParent, findParentErrorBoundary, assertValidElementProps, normalizeElementKey, createVNodeId, registerVNodeCleanup, propsChanged, depthSort, };
|
|
5
5
|
declare function cloneElement(vNode: Kiru.VNode): Kiru.Element;
|
|
6
6
|
declare function isVNodeDeleted(vNode: Kiru.VNode): boolean;
|
|
7
7
|
declare function isVNode(thing: unknown): thing is Kiru.VNode;
|
|
@@ -27,4 +27,5 @@ declare function normalizeElementKey(thing: unknown): JSX.ElementKey | null;
|
|
|
27
27
|
declare function createVNodeId(vNode: Kiru.VNode): string;
|
|
28
28
|
declare function registerVNodeCleanup(vNode: Kiru.VNode, id: string, callback: () => void): void;
|
|
29
29
|
declare function propsChanged(oldProps: Kiru.VNode["props"], newProps: Kiru.VNode["props"], keysToSkip?: string[]): boolean;
|
|
30
|
+
declare function depthSort(a: Kiru.VNode, b: Kiru.VNode): number;
|
|
30
31
|
//# sourceMappingURL=vdom.d.ts.map
|
package/dist/utils/vdom.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../../src/utils/vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAIT,QAAQ,EACT,MAAM,iBAAiB,CAAA;AAIxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EACL,YAAY,EACZ,cAAc,EACd,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"vdom.d.ts","sourceRoot":"","sources":["../../src/utils/vdom.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/vdom.js
CHANGED
|
@@ -2,7 +2,7 @@ import { FLAG_DELETION, $FRAGMENT, FLAG_PLACEMENT, FLAG_UPDATE, $ERROR_BOUNDARY,
|
|
|
2
2
|
import { createElement } from "../index.js";
|
|
3
3
|
import { KiruError } from "../error.js";
|
|
4
4
|
import { node } from "../globals.js";
|
|
5
|
-
export { cloneElement, isVNodeDeleted, isElement, isVNode, isValidTextChild, isExoticType, isFragment, isLazy, isContextProvider, vNodeContains, getCurrentVNode, getVNodeApp, commitSnapshot, traverseApply, findParent, findParentErrorBoundary, assertValidElementProps, normalizeElementKey, createVNodeId, registerVNodeCleanup, propsChanged, };
|
|
5
|
+
export { cloneElement, isVNodeDeleted, isElement, isVNode, isValidTextChild, isExoticType, isFragment, isLazy, isContextProvider, vNodeContains, getCurrentVNode, getVNodeApp, commitSnapshot, traverseApply, findParent, findParentErrorBoundary, assertValidElementProps, normalizeElementKey, createVNodeId, registerVNodeCleanup, propsChanged, depthSort, };
|
|
6
6
|
function cloneElement(vNode) {
|
|
7
7
|
const children = vNode.props.children;
|
|
8
8
|
let clonedChildren;
|
|
@@ -151,4 +151,7 @@ function propsChanged(oldProps, newProps, keysToSkip) {
|
|
|
151
151
|
}
|
|
152
152
|
return false;
|
|
153
153
|
}
|
|
154
|
+
function depthSort(a, b) {
|
|
155
|
+
return a.depth - b.depth;
|
|
156
|
+
}
|
|
154
157
|
//# sourceMappingURL=vdom.js.map
|
package/dist/utils/vdom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vdom.js","sourceRoot":"","sources":["../../src/utils/vdom.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EACX,eAAe,EACf,QAAQ,GACT,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAIpC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"vdom.js","sourceRoot":"","sources":["../../src/utils/vdom.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/appHandle.ts
CHANGED
|
@@ -28,18 +28,17 @@ export function mount(
|
|
|
28
28
|
container: Kiru.ContainerElement,
|
|
29
29
|
options?: AppHandleOptions
|
|
30
30
|
): AppHandle {
|
|
31
|
-
if (__DEV__) {
|
|
32
|
-
|
|
33
|
-
throw new Error(
|
|
34
|
-
"[kiru]: container in use - call unmount on the previous app first."
|
|
35
|
-
)
|
|
36
|
-
}
|
|
31
|
+
if (__DEV__ && container.__kiruNode) {
|
|
32
|
+
return container.__kiruNode.app!
|
|
37
33
|
}
|
|
34
|
+
|
|
38
35
|
const rootNode = createRootNode(container)
|
|
39
36
|
const id = appId++
|
|
37
|
+
const name = options?.name ?? `App-${id}`
|
|
38
|
+
|
|
40
39
|
const app: AppHandle = {
|
|
41
40
|
id,
|
|
42
|
-
name
|
|
41
|
+
name,
|
|
43
42
|
rootNode,
|
|
44
43
|
render,
|
|
45
44
|
unmount,
|
package/src/components/derive.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { sideEffectsEnabled } from "../utils/index.js"
|
|
2
|
+
import { Signal } from "../signals/index.js"
|
|
2
3
|
import { $STREAM_DATA } from "../constants.js"
|
|
4
|
+
import { node } from "../globals.js"
|
|
5
|
+
import { ref } from "../ref.js"
|
|
3
6
|
import { requestUpdate } from "../scheduler.js"
|
|
4
|
-
import { Signal } from "../signals/index.js"
|
|
5
|
-
import { sideEffectsEnabled } from "../utils/index.js"
|
|
6
|
-
import type { RecordHas } from "../types.utils"
|
|
7
7
|
import { isStatefulPromise, StreamDataThrowValue } from "../statefulPromise.js"
|
|
8
|
-
import {
|
|
8
|
+
import type { RecordHas } from "../types.utils"
|
|
9
9
|
|
|
10
10
|
export type Derivable =
|
|
11
11
|
| Kiru.Signal<unknown>
|
|
@@ -67,6 +67,10 @@ type Derive = {
|
|
|
67
67
|
): (props: DeriveProps<T, U>) => JSX.Element
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Derives a value from a signal or stateful promise and renders a child component.
|
|
72
|
+
* @see https://kirujs.dev/docs/components/derive
|
|
73
|
+
*/
|
|
70
74
|
export const Derive: Derive = () => {
|
|
71
75
|
return (props) => {
|
|
72
76
|
const { from, children, fallback, mode } = props
|
|
@@ -7,6 +7,10 @@ export interface ErrorBoundaryProps {
|
|
|
7
7
|
onError?: (error: Error) => void
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Catches errors in the children and renders a fallback component.
|
|
12
|
+
* @see https://kirujs.dev/docs/components/error-boundary
|
|
13
|
+
*/
|
|
10
14
|
export function ErrorBoundary({
|
|
11
15
|
children,
|
|
12
16
|
fallback,
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Signal } from "./base.js"
|
|
3
|
-
import { unwrap } from "./utils.js"
|
|
1
|
+
import { unwrap, type Signal } from "../signals/index.js"
|
|
4
2
|
|
|
5
3
|
type InferArraySignalItemType<T extends Signal<any[]> | readonly unknown[]> =
|
|
6
4
|
T extends Signal<infer V>
|
|
@@ -20,6 +18,11 @@ type ForProps<
|
|
|
20
18
|
children: (value: U, index: number, array: U[]) => JSX.Element
|
|
21
19
|
}
|
|
22
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Renders a list of items. If the list a Signal, it creates an automatically-updating list with fine-grained reactivity.
|
|
23
|
+
* If the list is empty, the fallback is rendered.
|
|
24
|
+
* @see https://kirujs.dev/docs/components/for
|
|
25
|
+
*/
|
|
23
26
|
export function For<T extends Signal<any[]> | unknown[]>({
|
|
24
27
|
each,
|
|
25
28
|
fallback,
|
|
@@ -29,12 +32,3 @@ export function For<T extends Signal<any[]> | unknown[]>({
|
|
|
29
32
|
if (items.length === 0) return fallback
|
|
30
33
|
return items.map(children)
|
|
31
34
|
}
|
|
32
|
-
|
|
33
|
-
export interface ShowProps {
|
|
34
|
-
children: JSX.Element
|
|
35
|
-
when: Signalable<unknown>
|
|
36
|
-
fallback?: JSX.Element
|
|
37
|
-
}
|
|
38
|
-
export function Show({ children, when, fallback }: ShowProps): JSX.Element {
|
|
39
|
-
return !!unwrap(when, true) ? children : fallback
|
|
40
|
-
}
|
package/src/components/index.ts
CHANGED
package/src/components/lazy.ts
CHANGED
|
@@ -28,6 +28,10 @@ const lazyCache: Map<string, LazyState> = isBrowser
|
|
|
28
28
|
(window.__KIRU_LAZY_CACHE ??= new Map<string, LazyState>())
|
|
29
29
|
: new Map<string, LazyState>()
|
|
30
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Lazy loads a component and renders it when it is ready.
|
|
33
|
+
* @see https://kirujs.dev/docs/components/lazy
|
|
34
|
+
*/
|
|
31
35
|
export function lazy<T extends LazyImportValue>(
|
|
32
36
|
componentPromiseFn: () => Promise<T>
|
|
33
37
|
): Kiru.FC<LazyComponentProps<T>> {
|
package/src/components/portal.ts
CHANGED
|
@@ -9,6 +9,10 @@ interface PortalProps {
|
|
|
9
9
|
container: HTMLElement | (() => HTMLElement)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* Escapes the application DOM tree and renders a child component in the given container.
|
|
14
|
+
* @see https://kirujs.dev/docs/components/portal
|
|
15
|
+
*/
|
|
12
16
|
export function Portal({ children, container }: PortalProps) {
|
|
13
17
|
const vNode = node.current!
|
|
14
18
|
if (!vNode.dom) {
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { unwrap } from "../signals/index.js"
|
|
2
|
+
import type { Truthy } from "../types.utils.js"
|
|
3
|
+
import type { Signalable } from "../types.js"
|
|
4
|
+
|
|
5
|
+
type ShowChildren<T> = (value: Truthy<T>) => JSX.Element
|
|
6
|
+
|
|
7
|
+
export interface ShowProps<T> {
|
|
8
|
+
children: ShowChildren<T> | Exclude<JSX.Element, ShowChildren<T>>
|
|
9
|
+
when: Signalable<T>
|
|
10
|
+
fallback?: JSX.Element
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Conditionally renders a child component based on the 'when' prop.
|
|
15
|
+
* If the 'when' prop is truthy, the child component is rendered.
|
|
16
|
+
* If the 'when' prop is falsy, the fallback component is rendered.
|
|
17
|
+
* If the 'when' prop is a Signal, it creates an automatically-updating component with fine-grained reactivity.
|
|
18
|
+
* @see https://kirujs.dev/docs/components/show
|
|
19
|
+
*/
|
|
20
|
+
export function Show<T>({
|
|
21
|
+
children,
|
|
22
|
+
when,
|
|
23
|
+
fallback,
|
|
24
|
+
}: ShowProps<T>): JSX.Element {
|
|
25
|
+
const value = unwrap(when, true)
|
|
26
|
+
if (!!value) {
|
|
27
|
+
return typeof children === "function"
|
|
28
|
+
? children(value as Truthy<T>)
|
|
29
|
+
: children
|
|
30
|
+
}
|
|
31
|
+
return fallback
|
|
32
|
+
}
|
|
@@ -21,6 +21,10 @@ interface TransitionProps {
|
|
|
21
21
|
onTransitionEnd?: (state: "entered" | "exited") => void
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Animates the DOM in a procedural/coroutine-like fashion. Useful for modals, drawers, dialogs and more.
|
|
26
|
+
* @see https://kirujs.dev/docs/components/transition
|
|
27
|
+
*/
|
|
24
28
|
export const Transition: Kiru.FC<TransitionProps> = (props) => {
|
|
25
29
|
const tState = signal<TransitionState>(props.initialState || "exited")
|
|
26
30
|
let timeoutRef: number | undefined
|
package/src/dom/nodes.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { hydrationStack } from "../hydration.js"
|
|
|
5
5
|
import {
|
|
6
6
|
getVNodeApp,
|
|
7
7
|
isValidTextChild,
|
|
8
|
+
latest,
|
|
8
9
|
registerVNodeCleanup,
|
|
9
10
|
} from "../utils/index.js"
|
|
10
11
|
import { KiruError } from "../error.js"
|
|
@@ -27,8 +28,8 @@ function createDom(vNode: DomVNode): SomeDom {
|
|
|
27
28
|
t == "#text"
|
|
28
29
|
? createTextNode(vNode)
|
|
29
30
|
: svgTags.has(t)
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
? document.createElementNS("http://www.w3.org/2000/svg", t)
|
|
32
|
+
: document.createElement(t)
|
|
32
33
|
|
|
33
34
|
return dom
|
|
34
35
|
}
|
|
@@ -175,6 +176,7 @@ function getOrCreateTextNode(vNode: VNode): MaybeDom {
|
|
|
175
176
|
}
|
|
176
177
|
|
|
177
178
|
function subTextNode(vNode: VNode, textNode: Text, signal: Signal<string>) {
|
|
179
|
+
if (__DEV__) signal = latest(signal)
|
|
178
180
|
const cleanup = signal.subscribe((value, prev) => {
|
|
179
181
|
if (value === prev) return
|
|
180
182
|
textNode.nodeValue = value
|
|
@@ -198,6 +200,7 @@ function createTextNode(vNode: VNode): Text {
|
|
|
198
200
|
}
|
|
199
201
|
|
|
200
202
|
function createSignalTextNode(vNode: VNode, nodeValue: Signal<string>): Text {
|
|
203
|
+
if (__DEV__) nodeValue = latest(nodeValue) as Signal<string>
|
|
201
204
|
const value = nodeValue.peek() ?? ""
|
|
202
205
|
const textNode = document.createTextNode(value)
|
|
203
206
|
subTextNode(vNode, textNode, nodeValue)
|
package/src/dom/props.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
getVNodeApp,
|
|
4
4
|
setRef,
|
|
5
5
|
registerVNodeCleanup,
|
|
6
|
+
latest,
|
|
6
7
|
} from "../utils/index.js"
|
|
7
8
|
import { Signal } from "../signals/base.js"
|
|
8
9
|
import { unwrap } from "../signals/utils.js"
|
|
@@ -47,9 +48,33 @@ function updateDomProps(vNode: DomVNode) {
|
|
|
47
48
|
const nextProps = props ?? {}
|
|
48
49
|
|
|
49
50
|
if (isTextNode(dom)) {
|
|
50
|
-
|
|
51
|
-
if (
|
|
52
|
-
|
|
51
|
+
let nextVal = nextProps.nodeValue
|
|
52
|
+
if (__DEV__ && Signal.isSignal(nextVal)) nextVal = latest(nextVal)
|
|
53
|
+
|
|
54
|
+
if (!Signal.isSignal(nextVal)) {
|
|
55
|
+
if (dom.nodeValue !== nextVal) {
|
|
56
|
+
dom.nodeValue = nextVal
|
|
57
|
+
}
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
if (prevProps.nodeValue === nextVal) return
|
|
61
|
+
dom.nodeValue = String(nextVal.peek() ?? "")
|
|
62
|
+
if (__DEV__) {
|
|
63
|
+
cleanups?.nodeValue?.()
|
|
64
|
+
registerVNodeCleanup(
|
|
65
|
+
vNode,
|
|
66
|
+
"nodeValue",
|
|
67
|
+
nextVal.subscribe((value, prev) => {
|
|
68
|
+
if (value === prev) return
|
|
69
|
+
dom.nodeValue = String(value ?? "")
|
|
70
|
+
if (isBrowser) {
|
|
71
|
+
window.__kiru?.profilingContext?.emit(
|
|
72
|
+
"signalTextUpdate",
|
|
73
|
+
getVNodeApp(vNode)!
|
|
74
|
+
)
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
)
|
|
53
78
|
}
|
|
54
79
|
return
|
|
55
80
|
}
|
package/src/hooks/setup.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { signal } from "../signals/index.js"
|
|
3
|
-
import type { Signal } from "../signals/base.js"
|
|
1
|
+
import { signal, Signal } from "../signals/base.js"
|
|
4
2
|
import { createVNodeId } from "../utils/vdom.js"
|
|
5
3
|
import { __DEV__ } from "../env.js"
|
|
4
|
+
import { node, setups } from "../globals.js"
|
|
5
|
+
import {
|
|
6
|
+
tracking,
|
|
7
|
+
type TrackingStackObservations,
|
|
8
|
+
} from "../signals/tracking.js"
|
|
9
|
+
import { registerVNodeCleanup } from "../utils/index.js"
|
|
6
10
|
|
|
7
11
|
export interface Setup<Props extends {}> {
|
|
8
12
|
readonly derive: <T>(
|
|
@@ -36,7 +40,6 @@ export function setup<Props extends {}>(): Setup<Props> {
|
|
|
36
40
|
setups.set(vNode, setup)
|
|
37
41
|
return setup
|
|
38
42
|
}
|
|
39
|
-
|
|
40
43
|
function createSetup<Props extends {}>(vNode: Kiru.VNode): Setup<Props> {
|
|
41
44
|
let id: Signal<string>
|
|
42
45
|
|
|
@@ -45,12 +48,89 @@ function createSetup<Props extends {}>(vNode: Kiru.VNode): Setup<Props> {
|
|
|
45
48
|
|
|
46
49
|
let prevIndex = -1
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
// Always points at latest props (updated in propSync) so selector and subs see current props
|
|
52
|
+
const currentProps = { current: { ...vNode.props } as InferredProps }
|
|
53
|
+
const deriveCleanups: Array<() => void> = []
|
|
54
|
+
|
|
55
|
+
type DeriveEntry = { run: () => void; accessedPaths: Set<string> }
|
|
56
|
+
const deriveEntries: DeriveEntry[] = []
|
|
57
|
+
|
|
58
|
+
propSyncs.push((p) => {
|
|
59
|
+
const old = currentProps.current as Record<string, unknown>
|
|
60
|
+
const skip = new Set<DeriveEntry>()
|
|
61
|
+
for (const entry of deriveEntries) {
|
|
62
|
+
if (
|
|
63
|
+
entry.accessedPaths.size > 0 &&
|
|
64
|
+
propsUnchangedAtPaths(
|
|
65
|
+
old,
|
|
66
|
+
p as Record<string, unknown>,
|
|
67
|
+
entry.accessedPaths
|
|
68
|
+
)
|
|
69
|
+
) {
|
|
70
|
+
skip.add(entry)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
currentProps.current = p
|
|
74
|
+
for (const entry of deriveEntries) {
|
|
75
|
+
if (!skip.has(entry)) entry.run()
|
|
76
|
+
}
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
registerVNodeCleanup(vNode, "vnode:setup", () => {
|
|
80
|
+
for (const cleanup of deriveCleanups) cleanup()
|
|
81
|
+
setups.delete(vNode)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
const setupResult: Setup<Props> = {
|
|
85
|
+
derive<T>(
|
|
86
|
+
selector: (props: Props extends Kiru.FC<infer P> ? P : Props) => T
|
|
87
|
+
) {
|
|
88
|
+
const resultSig = signal(undefined!) as Signal<T>
|
|
89
|
+
const unsubs = new Map<string, () => void>()
|
|
90
|
+
const accessedPaths = new Set<string>()
|
|
91
|
+
|
|
92
|
+
function sync() {
|
|
93
|
+
accessedPaths.clear()
|
|
94
|
+
const propsProxy = createPropsProxy(
|
|
95
|
+
currentProps.current as Record<string, unknown>,
|
|
96
|
+
accessedPaths
|
|
97
|
+
) as InferredProps
|
|
98
|
+
const observations: TrackingStackObservations = new Map()
|
|
99
|
+
tracking.stack.push(observations)
|
|
100
|
+
const value = selector(propsProxy)
|
|
101
|
+
tracking.stack.pop()
|
|
102
|
+
// Always assign and notify so the component re-renders when the derived value changes
|
|
103
|
+
// (e.g. when parent passes a different signal ref like toggle switching count/double).
|
|
104
|
+
resultSig.value = value
|
|
105
|
+
|
|
106
|
+
for (const [sid, unsub] of unsubs) {
|
|
107
|
+
if (!observations.has(sid)) {
|
|
108
|
+
unsub()
|
|
109
|
+
unsubs.delete(sid)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const [sid, observedSig] of observations) {
|
|
113
|
+
if (!unsubs.has(sid)) {
|
|
114
|
+
try {
|
|
115
|
+
unsubs.set(sid, observedSig.subscribe(sync))
|
|
116
|
+
} catch {
|
|
117
|
+
// Signal may be disposed after HMR; skip subscribing
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
sync()
|
|
124
|
+
const entry: DeriveEntry = { run: sync, accessedPaths }
|
|
125
|
+
deriveEntries.push(entry)
|
|
126
|
+
deriveCleanups.push(() => {
|
|
127
|
+
unsubs.forEach((u) => u())
|
|
128
|
+
unsubs.clear()
|
|
129
|
+
const i = deriveEntries.indexOf(entry)
|
|
130
|
+
if (i !== -1) deriveEntries.splice(i, 1)
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
return resultSig
|
|
54
134
|
},
|
|
55
135
|
get id() {
|
|
56
136
|
if (!id) {
|
|
@@ -67,4 +147,58 @@ function createSetup<Props extends {}>(vNode: Kiru.VNode): Setup<Props> {
|
|
|
67
147
|
return id
|
|
68
148
|
},
|
|
69
149
|
}
|
|
150
|
+
return setupResult
|
|
151
|
+
}
|
|
152
|
+
function propsUnchangedAtPaths(
|
|
153
|
+
oldProps: Record<string, unknown>,
|
|
154
|
+
newProps: Record<string, unknown>,
|
|
155
|
+
paths: Set<string>
|
|
156
|
+
): boolean {
|
|
157
|
+
for (const path of paths) {
|
|
158
|
+
if (!Object.is(getAtPath(oldProps, path), getAtPath(newProps, path))) {
|
|
159
|
+
return false
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return true
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
function getAtPath(obj: Record<string, unknown>, path: string): unknown {
|
|
166
|
+
let cur: unknown = obj
|
|
167
|
+
for (const key of path.split(".")) {
|
|
168
|
+
if (cur == null || typeof cur !== "object") return undefined
|
|
169
|
+
cur = (cur as Record<string, unknown>)[key]
|
|
170
|
+
}
|
|
171
|
+
return cur
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Proxy that records paths and wraps signals. We only add to accessedPaths when
|
|
176
|
+
* we hit a signal (the leaf we subscribe to), so propSync skip only compares
|
|
177
|
+
* signal refs. Container objects (e.g. "data") are new every render and would
|
|
178
|
+
* always fail the skip.
|
|
179
|
+
*/
|
|
180
|
+
function createPropsProxy<P extends Record<string, unknown>>(
|
|
181
|
+
props: P,
|
|
182
|
+
accessedPaths: Set<string>,
|
|
183
|
+
pathPrefix?: string
|
|
184
|
+
): P {
|
|
185
|
+
return new Proxy(props, {
|
|
186
|
+
get(holder, key: string) {
|
|
187
|
+
const path = pathPrefix ? `${pathPrefix}.${key}` : key
|
|
188
|
+
const v = holder[key]
|
|
189
|
+
if (Signal.isSignal(v)) {
|
|
190
|
+
accessedPaths.add(path) // only record path for signal leaves
|
|
191
|
+
return v
|
|
192
|
+
}
|
|
193
|
+
if (v !== null && typeof v === "object" && !Array.isArray(v)) {
|
|
194
|
+
return createPropsProxy(
|
|
195
|
+
v as Record<string, unknown>,
|
|
196
|
+
accessedPaths,
|
|
197
|
+
path
|
|
198
|
+
) as P[keyof P]
|
|
199
|
+
}
|
|
200
|
+
accessedPaths.add(path) // primitive leaf
|
|
201
|
+
return v
|
|
202
|
+
},
|
|
203
|
+
}) as P
|
|
70
204
|
}
|
package/src/scheduler.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
findParentErrorBoundary,
|
|
23
23
|
call,
|
|
24
24
|
propsChanged,
|
|
25
|
+
depthSort,
|
|
25
26
|
} from "./utils/index.js"
|
|
26
27
|
import { __DEV__ } from "./env.js"
|
|
27
28
|
import { KiruError } from "./error.js"
|
|
@@ -129,8 +130,6 @@ function queueDelete(vNode: VNode): void {
|
|
|
129
130
|
deletions.push(vNode)
|
|
130
131
|
}
|
|
131
132
|
|
|
132
|
-
const depthSort = (a: VNode, b: VNode): number => b.depth - a.depth
|
|
133
|
-
|
|
134
133
|
let currentWorkRoot: VNode | null = null
|
|
135
134
|
|
|
136
135
|
function doWork(): void {
|
|
@@ -402,7 +401,7 @@ function renderFunctionComponent(
|
|
|
402
401
|
|
|
403
402
|
let newChild = latest(type)(props)
|
|
404
403
|
if (typeof newChild === "function") {
|
|
405
|
-
vNode.subs?.forEach(call) // unsub from signals
|
|
404
|
+
vNode.subs?.forEach(call) // unsub from signals observed during setup
|
|
406
405
|
vNode.render = newChild
|
|
407
406
|
if (shouldSyncProps) {
|
|
408
407
|
const p = { ...props }
|