kiru 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +8 -7
- package/dist/components/derive.d.ts.map +1 -1
- package/dist/components/derive.js +10 -11
- package/dist/components/derive.js.map +1 -1
- package/dist/components/errorBoundary.d.ts +2 -2
- package/dist/components/errorBoundary.d.ts.map +1 -1
- package/dist/components/errorBoundary.js +1 -1
- package/dist/components/errorBoundary.js.map +1 -1
- package/dist/components/for.d.ts +1 -1
- package/dist/components/for.d.ts.map +1 -1
- package/dist/components/for.js +1 -1
- package/dist/components/lazy.d.ts +1 -1
- package/dist/components/lazy.js +1 -1
- package/dist/components/portal.d.ts +1 -1
- package/dist/components/portal.js +1 -1
- package/dist/components/show.d.ts +1 -1
- package/dist/components/show.js +1 -1
- package/dist/components/transition.d.ts +1 -1
- package/dist/components/transition.d.ts.map +1 -1
- package/dist/components/transition.js +15 -12
- 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/error.d.ts +0 -2
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +11 -14
- package/dist/error.js.map +1 -1
- package/dist/headlessRender.d.ts +2 -2
- package/dist/headlessRender.d.ts.map +1 -1
- package/dist/headlessRender.js +2 -3
- package/dist/headlessRender.js.map +1 -1
- package/dist/hmr.d.ts +1 -0
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +6 -2
- package/dist/hmr.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 +110 -6
- package/dist/hooks/setup.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/renderToString.js +1 -1
- package/dist/renderToString.js.map +1 -1
- package/dist/resource.d.ts +19 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/resource.js +167 -0
- package/dist/resource.js.map +1 -0
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +15 -11
- package/dist/scheduler.js.map +1 -1
- package/dist/signals/base.d.ts +3 -5
- package/dist/signals/base.d.ts.map +1 -1
- package/dist/signals/base.js +24 -47
- package/dist/signals/base.js.map +1 -1
- package/dist/signals/computed.d.ts.map +1 -1
- package/dist/signals/computed.js +14 -12
- package/dist/signals/computed.js.map +1 -1
- package/dist/signals/globals.d.ts +0 -2
- package/dist/signals/globals.d.ts.map +1 -1
- package/dist/signals/globals.js +0 -1
- package/dist/signals/globals.js.map +1 -1
- package/dist/signals/types.d.ts +1 -1
- package/dist/signals/types.d.ts.map +1 -1
- package/dist/ssr/server.d.ts +4 -4
- package/dist/ssr/server.d.ts.map +1 -1
- package/dist/ssr/server.js +11 -7
- package/dist/ssr/server.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/stream.d.ts +12 -0
- package/dist/utils/stream.d.ts.map +1 -0
- package/dist/utils/stream.js +8 -0
- package/dist/utils/stream.js.map +1 -0
- 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 -13
- package/src/appHandle.ts +6 -7
- package/src/components/derive.ts +34 -40
- package/src/components/errorBoundary.ts +4 -2
- package/src/components/for.ts +34 -34
- package/src/components/lazy.ts +1 -1
- package/src/components/portal.ts +1 -1
- package/src/components/show.ts +32 -32
- package/src/components/transition.ts +16 -11
- package/src/dom/nodes.ts +5 -2
- package/src/dom/props.ts +28 -3
- package/src/error.ts +11 -19
- package/src/headlessRender.ts +5 -5
- package/src/hmr.ts +13 -3
- package/src/hooks/setup.ts +143 -9
- package/src/index.ts +1 -1
- package/src/renderToString.ts +1 -1
- package/src/resource.ts +207 -0
- package/src/scheduler.ts +16 -11
- package/src/signals/base.ts +29 -52
- package/src/signals/computed.ts +13 -9
- package/src/signals/globals.ts +0 -3
- package/src/signals/types.ts +1 -1
- package/src/ssr/server.ts +18 -11
- package/src/types.ts +4 -4
- package/src/utils/index.ts +2 -1
- package/src/utils/stream.ts +17 -0
- package/src/utils/vdom.ts +5 -0
- package/dist/statefulPromise.d.ts +0 -22
- package/dist/statefulPromise.d.ts.map +0 -1
- package/dist/statefulPromise.js +0 -94
- package/dist/statefulPromise.js.map +0 -1
- package/src/statefulPromise.ts +0 -136
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,oBAAoB;IACnC,CAAC,YAAY,CAAC,EAAE;QACd,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;QACtB,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAA;KACtC,CAAA;CACF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,oBAAoB,CAE/B"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { $STREAM_DATA } from "../constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Returns true if the value is a {@link StreamDataThrowValue}
|
|
4
|
+
*/
|
|
5
|
+
export function isStreamDataThrowValue(value) {
|
|
6
|
+
return typeof value === "object" && !!value && $STREAM_DATA in value;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAS9C;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAc;IAEd,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,YAAY,IAAI,KAAK,CAAA;AACtE,CAAC"}
|
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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiru",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A batteries-included, easy-to-use rendering library with a tiny footprint",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -10,14 +10,6 @@
|
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"default": "./dist/index.js"
|
|
12
12
|
},
|
|
13
|
-
"./form": {
|
|
14
|
-
"types": "./dist/form/index.d.ts",
|
|
15
|
-
"default": "./dist/form/index.js"
|
|
16
|
-
},
|
|
17
|
-
"./swr": {
|
|
18
|
-
"types": "./dist/swr.d.ts",
|
|
19
|
-
"default": "./dist/swr.js"
|
|
20
|
-
},
|
|
21
13
|
"./utils": {
|
|
22
14
|
"types": "./dist/utils/index.d.ts",
|
|
23
15
|
"default": "./dist/utils/index.js"
|
|
@@ -26,10 +18,6 @@
|
|
|
26
18
|
"types": "./dist/router/index.d.ts",
|
|
27
19
|
"default": "./dist/router/index.js"
|
|
28
20
|
},
|
|
29
|
-
"./router/dev": {
|
|
30
|
-
"types": "./dist/router/dev/index.d.ts",
|
|
31
|
-
"default": "./dist/router/dev/index.js"
|
|
32
|
-
},
|
|
33
21
|
"./router/client": {
|
|
34
22
|
"types": "./dist/router/client/index.d.ts",
|
|
35
23
|
"default": "./dist/router/client/index.js"
|
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,32 +1,28 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
sideEffectsEnabled,
|
|
3
|
+
type StreamDataThrowValue,
|
|
4
|
+
} from "../utils/index.js"
|
|
2
5
|
import { Signal } from "../signals/index.js"
|
|
3
6
|
import { $STREAM_DATA } from "../constants.js"
|
|
4
7
|
import { node } from "../globals.js"
|
|
5
|
-
import { ref } from "../ref.js"
|
|
6
8
|
import { requestUpdate } from "../scheduler.js"
|
|
7
|
-
import {
|
|
9
|
+
import { isResource, Resource } from "../resource.js"
|
|
8
10
|
import type { RecordHas } from "../types.utils"
|
|
9
11
|
|
|
10
12
|
export type Derivable =
|
|
11
13
|
| Kiru.Signal<unknown>
|
|
12
|
-
| Kiru.
|
|
13
|
-
| Record<string, Kiru.Signal<unknown> | Kiru.StatefulPromiseBase<unknown>>
|
|
14
|
+
| Record<string, Kiru.Signal<unknown>>
|
|
14
15
|
|
|
15
|
-
type InnerOf<T> = T extends Kiru.Signal<infer V>
|
|
16
|
-
? V
|
|
17
|
-
: T extends Kiru.StatefulPromiseBase<infer P>
|
|
18
|
-
? P
|
|
19
|
-
: never
|
|
16
|
+
type InnerOf<T> = T extends Kiru.Signal<infer V> ? V : never
|
|
20
17
|
|
|
21
|
-
type
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
: { [K in keyof T]: InnerOf<T[K]> }
|
|
18
|
+
type UnwrapDerivable<T extends Derivable> =
|
|
19
|
+
T extends Kiru.Signal<unknown>
|
|
20
|
+
? InnerOf<T>
|
|
21
|
+
: { [K in keyof T]: InnerOf<T[K]> }
|
|
26
22
|
|
|
27
|
-
type
|
|
23
|
+
type RecordHasResource<T extends Record<string, any>> = RecordHas<
|
|
28
24
|
T,
|
|
29
|
-
|
|
25
|
+
Resource<any>
|
|
30
26
|
>
|
|
31
27
|
|
|
32
28
|
type ChildFn<T> = (value: T) => JSX.Children
|
|
@@ -36,28 +32,28 @@ export type DeriveFallbackMode = "swr" | "fallback"
|
|
|
36
32
|
|
|
37
33
|
export interface DeriveProps<
|
|
38
34
|
T extends Derivable,
|
|
39
|
-
Mode extends DeriveFallbackMode = "fallback"
|
|
35
|
+
Mode extends DeriveFallbackMode = "fallback",
|
|
40
36
|
> {
|
|
41
37
|
from: T
|
|
42
38
|
mode?: Mode
|
|
43
|
-
children: T extends
|
|
39
|
+
children: T extends Resource<infer U>
|
|
44
40
|
? Mode extends "swr"
|
|
45
41
|
? ChildFnWithStale<U>
|
|
46
42
|
: ChildFn<U>
|
|
47
43
|
: T extends Record<string, any>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
fallback?: T extends
|
|
44
|
+
? RecordHasResource<T> extends true
|
|
45
|
+
? Mode extends "swr"
|
|
46
|
+
? ChildFnWithStale<UnwrapDerivable<T>>
|
|
47
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
48
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
49
|
+
: ChildFn<UnwrapDerivable<T>>
|
|
50
|
+
fallback?: T extends Resource<any>
|
|
55
51
|
? JSX.Element
|
|
56
52
|
: T extends Record<string, any>
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
? RecordHasResource<T> extends true
|
|
54
|
+
? JSX.Element
|
|
55
|
+
: never
|
|
59
56
|
: never
|
|
60
|
-
: never
|
|
61
57
|
}
|
|
62
58
|
|
|
63
59
|
type Derive = {
|
|
@@ -68,18 +64,18 @@ type Derive = {
|
|
|
68
64
|
|
|
69
65
|
/**
|
|
70
66
|
* Derives a value from a signal or stateful promise and renders a child component.
|
|
71
|
-
* @see https://kirujs.dev/docs/
|
|
67
|
+
* @see https://kirujs.dev/docs/components/derive
|
|
72
68
|
*/
|
|
73
69
|
export const Derive: Derive = () => {
|
|
70
|
+
let prevSuccess: unknown
|
|
74
71
|
return (props) => {
|
|
75
72
|
const { from, children, fallback, mode } = props
|
|
76
|
-
const prevSuccess = ref<unknown>(null)
|
|
77
73
|
|
|
78
|
-
const promises = new Set<Kiru.
|
|
74
|
+
const promises = new Set<Kiru.StatefulPromise<any>>()
|
|
79
75
|
let value: unknown
|
|
80
76
|
|
|
81
|
-
if (
|
|
82
|
-
promises.add(from)
|
|
77
|
+
if (isResource(from)) {
|
|
78
|
+
promises.add(from.promise)
|
|
83
79
|
value = from.value as unknown
|
|
84
80
|
} else if (Signal.isSignal(from)) {
|
|
85
81
|
value = from.value as unknown
|
|
@@ -87,10 +83,8 @@ export const Derive: Derive = () => {
|
|
|
87
83
|
const out: Record<string, any> = {}
|
|
88
84
|
for (const key in from) {
|
|
89
85
|
const v = from[key]
|
|
90
|
-
if (
|
|
91
|
-
out[key] = (
|
|
92
|
-
v as Signal<unknown> | Kiru.StatefulPromiseBase<unknown>
|
|
93
|
-
).value
|
|
86
|
+
if (isResource(v)) promises.add(v.promise)
|
|
87
|
+
out[key] = (v as Signal<unknown> | Kiru.StatefulPromise<unknown>).value
|
|
94
88
|
}
|
|
95
89
|
value = out as unknown
|
|
96
90
|
}
|
|
@@ -115,7 +109,7 @@ export const Derive: Derive = () => {
|
|
|
115
109
|
const nodeRef = node.current!
|
|
116
110
|
Promise.allSettled(promises).then(() => requestUpdate(nodeRef))
|
|
117
111
|
|
|
118
|
-
const prev = prevSuccess
|
|
112
|
+
const prev = prevSuccess
|
|
119
113
|
if (mode !== "fallback" && prev) {
|
|
120
114
|
return (children as ChildFnWithStale<unknown>)(prev, true)
|
|
121
115
|
}
|
|
@@ -123,7 +117,7 @@ export const Derive: Derive = () => {
|
|
|
123
117
|
}
|
|
124
118
|
}
|
|
125
119
|
|
|
126
|
-
prevSuccess
|
|
120
|
+
prevSuccess = value
|
|
127
121
|
return (children as ChildFnWithStale<unknown>)(value, false)
|
|
128
122
|
}
|
|
129
123
|
}
|
|
@@ -3,13 +3,15 @@ import { createElement } from "../index.js"
|
|
|
3
3
|
|
|
4
4
|
export interface ErrorBoundaryProps {
|
|
5
5
|
children?: JSX.Children
|
|
6
|
-
fallback?:
|
|
6
|
+
fallback?:
|
|
7
|
+
| Exclude<JSX.Element, (props: any) => JSX.Element>
|
|
8
|
+
| ((error: Error) => JSX.Element)
|
|
7
9
|
onError?: (error: Error) => void
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
/**
|
|
11
13
|
* Catches errors in the children and renders a fallback component.
|
|
12
|
-
* @see https://kirujs.dev/docs/
|
|
14
|
+
* @see https://kirujs.dev/docs/components/error-boundary
|
|
13
15
|
*/
|
|
14
16
|
export function ErrorBoundary({
|
|
15
17
|
children,
|
package/src/components/for.ts
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import { unwrap, type Signal } from "../signals/index.js"
|
|
2
|
-
|
|
3
|
-
type InferArraySignalItemType<T extends Signal<any[]> | readonly unknown[]> =
|
|
4
|
-
T extends Signal<infer V>
|
|
5
|
-
? V extends Array<infer W>
|
|
6
|
-
? W
|
|
7
|
-
: never
|
|
8
|
-
: T extends unknown[]
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
type ForProps<
|
|
13
|
-
T extends Signal<any[]> | readonly unknown[],
|
|
14
|
-
U = InferArraySignalItemType<T
|
|
15
|
-
> = {
|
|
16
|
-
each: T
|
|
17
|
-
fallback?: JSX.Element
|
|
18
|
-
children: (value: U, index: number, array: U[]) => JSX.Element
|
|
19
|
-
}
|
|
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/
|
|
25
|
-
*/
|
|
26
|
-
export function For<T extends Signal<any[]> | unknown[]>({
|
|
27
|
-
each,
|
|
28
|
-
fallback,
|
|
29
|
-
children,
|
|
30
|
-
}: ForProps<T>) {
|
|
31
|
-
const items = unwrap(each, true)
|
|
32
|
-
if (items.length === 0) return fallback
|
|
33
|
-
return items.map(children)
|
|
34
|
-
}
|
|
1
|
+
import { unwrap, type Signal } from "../signals/index.js"
|
|
2
|
+
|
|
3
|
+
type InferArraySignalItemType<T extends Signal<any[]> | readonly unknown[]> =
|
|
4
|
+
T extends Signal<infer V>
|
|
5
|
+
? V extends Array<infer W>
|
|
6
|
+
? W
|
|
7
|
+
: never
|
|
8
|
+
: T extends unknown[]
|
|
9
|
+
? T[number]
|
|
10
|
+
: never
|
|
11
|
+
|
|
12
|
+
type ForProps<
|
|
13
|
+
T extends Signal<any[]> | readonly unknown[],
|
|
14
|
+
U = InferArraySignalItemType<T>,
|
|
15
|
+
> = {
|
|
16
|
+
each: T
|
|
17
|
+
fallback?: JSX.Element
|
|
18
|
+
children: (value: U, index: number, array: U[]) => JSX.Element
|
|
19
|
+
}
|
|
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
|
+
*/
|
|
26
|
+
export function For<T extends Signal<any[]> | unknown[]>({
|
|
27
|
+
each,
|
|
28
|
+
fallback,
|
|
29
|
+
children,
|
|
30
|
+
}: ForProps<T>) {
|
|
31
|
+
const items = unwrap(each, true)
|
|
32
|
+
if (items.length === 0) return fallback
|
|
33
|
+
return items.map(children)
|
|
34
|
+
}
|
package/src/components/lazy.ts
CHANGED
|
@@ -30,7 +30,7 @@ const lazyCache: Map<string, LazyState> = isBrowser
|
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Lazy loads a component and renders it when it is ready.
|
|
33
|
-
* @see https://kirujs.dev/docs/
|
|
33
|
+
* @see https://kirujs.dev/docs/components/lazy
|
|
34
34
|
*/
|
|
35
35
|
export function lazy<T extends LazyImportValue>(
|
|
36
36
|
componentPromiseFn: () => Promise<T>
|
package/src/components/portal.ts
CHANGED
|
@@ -11,7 +11,7 @@ interface PortalProps {
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Escapes the application DOM tree and renders a child component in the given container.
|
|
14
|
-
* @see https://kirujs.dev/docs/
|
|
14
|
+
* @see https://kirujs.dev/docs/components/portal
|
|
15
15
|
*/
|
|
16
16
|
export function Portal({ children, container }: PortalProps) {
|
|
17
17
|
const vNode = node.current!
|
package/src/components/show.ts
CHANGED
|
@@ -1,32 +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/
|
|
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
|
-
}
|
|
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
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { onCleanup } from "../hooks/onCleanup.js"
|
|
2
|
-
import {
|
|
3
|
-
import { effect } from "../signals/effect.js"
|
|
2
|
+
import { Signal } from "../signals/base.js"
|
|
4
3
|
import { unwrap } from "../signals/utils.js"
|
|
4
|
+
import { setup } from "../hooks/setup.js"
|
|
5
5
|
|
|
6
6
|
export type TransitionState = "entering" | "entered" | "exiting" | "exited"
|
|
7
7
|
interface TransitionProps {
|
|
@@ -23,29 +23,32 @@ interface TransitionProps {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Animates the DOM in a procedural/coroutine-like fashion. Useful for modals, drawers, dialogs and more.
|
|
26
|
-
* @see https://kirujs.dev/docs/
|
|
26
|
+
* @see https://kirujs.dev/docs/components/transition
|
|
27
27
|
*/
|
|
28
28
|
export const Transition: Kiru.FC<TransitionProps> = (props) => {
|
|
29
|
-
const
|
|
29
|
+
const $ = setup<typeof Transition>()
|
|
30
|
+
const tState = $.derive<TransitionState>((p) => p.initialState || "exited")
|
|
31
|
+
const inState = $.derive((p) => unwrap(p.in, true))
|
|
30
32
|
let timeoutRef: number | undefined
|
|
33
|
+
let onTransitionEnd = props.onTransitionEnd
|
|
34
|
+
let duration = props.duration
|
|
31
35
|
|
|
32
36
|
const setTransitionState = (transitionState: TransitionState) => {
|
|
33
37
|
clearTimeout(timeoutRef)
|
|
34
38
|
tState.value = transitionState
|
|
35
39
|
if (transitionState === "entered" || transitionState === "exited") {
|
|
36
|
-
|
|
40
|
+
onTransitionEnd?.(transitionState)
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
43
|
|
|
40
44
|
const queueStateChange = (transitionState: "entered" | "exited") => {
|
|
41
45
|
timeoutRef = window.setTimeout(
|
|
42
46
|
() => setTransitionState(transitionState),
|
|
43
|
-
getTiming(transitionState,
|
|
47
|
+
getTiming(transitionState, duration)
|
|
44
48
|
)
|
|
45
49
|
}
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
const newIn = unwrap(props.in, true)
|
|
51
|
+
const unsub = inState.subscribe((newIn) => {
|
|
49
52
|
const current = tState.peek()
|
|
50
53
|
if (newIn && current !== "entered" && current !== "entering") {
|
|
51
54
|
setTransitionState("entering")
|
|
@@ -56,10 +59,12 @@ export const Transition: Kiru.FC<TransitionProps> = (props) => {
|
|
|
56
59
|
}
|
|
57
60
|
})
|
|
58
61
|
|
|
59
|
-
onCleanup(() => clearTimeout(timeoutRef))
|
|
62
|
+
onCleanup(() => (unsub(), clearTimeout(timeoutRef)))
|
|
60
63
|
|
|
61
|
-
return (
|
|
62
|
-
|
|
64
|
+
return (props) => {
|
|
65
|
+
duration = props.duration
|
|
66
|
+
onTransitionEnd = props.onTransitionEnd
|
|
67
|
+
return props.element(tState.value)
|
|
63
68
|
}
|
|
64
69
|
}
|
|
65
70
|
|
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
|
}
|