kiru 0.47.1 → 0.48.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/appContext.d.ts.map +1 -1
- package/dist/appContext.js +3 -5
- package/dist/appContext.js.map +1 -1
- package/dist/constants.d.ts +4 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +6 -4
- package/dist/constants.js.map +1 -1
- package/dist/customEvents.d.ts +6 -0
- package/dist/customEvents.d.ts.map +1 -0
- package/dist/customEvents.js +12 -0
- package/dist/customEvents.js.map +1 -0
- package/dist/dom.d.ts +3 -1
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +102 -102
- package/dist/dom.js.map +1 -1
- package/dist/globalContext.d.ts +4 -3
- package/dist/globalContext.d.ts.map +1 -1
- package/dist/globalContext.js +0 -2
- package/dist/globalContext.js.map +1 -1
- package/dist/hooks/useAsync.d.ts +2 -13
- package/dist/hooks/useAsync.d.ts.map +1 -1
- package/dist/hooks/useAsync.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/lazy.d.ts +2 -2
- package/dist/lazy.d.ts.map +1 -1
- package/dist/lazy.js.map +1 -1
- package/dist/portal.d.ts +2 -2
- package/dist/portal.d.ts.map +1 -1
- package/dist/profiling.d.ts +2 -2
- package/dist/profiling.d.ts.map +1 -1
- package/dist/reconciler.d.ts.map +1 -1
- package/dist/reconciler.js +13 -10
- package/dist/reconciler.js.map +1 -1
- package/dist/scheduler.d.ts +1 -0
- package/dist/scheduler.d.ts.map +1 -1
- package/dist/scheduler.js +51 -156
- package/dist/scheduler.js.map +1 -1
- package/dist/swr.d.ts +6 -17
- package/dist/swr.d.ts.map +1 -1
- package/dist/swr.js +26 -18
- package/dist/swr.js.map +1 -1
- package/dist/transition.d.ts +2 -2
- package/dist/transition.d.ts.map +1 -1
- package/dist/types.d.ts +20 -18
- package/dist/types.d.ts.map +1 -1
- package/dist/types.dom.d.ts +57 -38
- package/dist/types.dom.d.ts.map +1 -1
- package/dist/types.utils.d.ts +31 -19
- package/dist/types.utils.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -10
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +9 -56
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/src/appContext.ts +3 -5
- package/src/constants.ts +9 -4
- package/src/customEvents.ts +22 -0
- package/src/dom.ts +124 -113
- package/src/globalContext.ts +4 -6
- package/src/hooks/useAsync.ts +7 -24
- package/src/index.ts +7 -4
- package/src/lazy.ts +6 -2
- package/src/portal.ts +1 -1
- package/src/profiling.ts +1 -1
- package/src/reconciler.ts +13 -16
- package/src/scheduler.ts +69 -158
- package/src/swr.ts +28 -37
- package/src/transition.ts +1 -1
- package/src/types.dom.ts +98 -36
- package/src/types.ts +12 -10
- package/src/types.utils.ts +43 -14
- package/src/utils.ts +7 -74
package/src/types.dom.ts
CHANGED
|
@@ -164,7 +164,7 @@ type ListOfUrlsOrPaths = string
|
|
|
164
164
|
type FileName = string
|
|
165
165
|
|
|
166
166
|
type MediaPreload = "none" | "metadata" | "auto" | ""
|
|
167
|
-
|
|
167
|
+
interface HTMLMediaElementAttrs {
|
|
168
168
|
autoplay?: boolean
|
|
169
169
|
controls?: boolean
|
|
170
170
|
crossOrigin?: string
|
|
@@ -298,7 +298,7 @@ type FormMethod = "get" | "post" | "dialog"
|
|
|
298
298
|
|
|
299
299
|
type Direction = "ltr" | "rtl" | "auto"
|
|
300
300
|
|
|
301
|
-
|
|
301
|
+
interface GlobalAttributes {
|
|
302
302
|
accessKey?: string
|
|
303
303
|
autocapitalize?: "on" | "off" | "none" | "sentences" | "words" | "characters"
|
|
304
304
|
className?: string
|
|
@@ -364,41 +364,103 @@ declare global {
|
|
|
364
364
|
bivarianceHack(event: E): void
|
|
365
365
|
}["bivarianceHack"]
|
|
366
366
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
367
|
+
interface BaseEventHandler<T extends Element = Element>
|
|
368
|
+
extends DOMEvent<Event, T> {}
|
|
369
|
+
|
|
370
|
+
interface AnimationEvent<T extends Element = Element>
|
|
371
|
+
extends DOMEvent<NativeAnimationEvent, T> {}
|
|
372
|
+
|
|
373
|
+
interface ClipboardEvent<T extends Element = Element>
|
|
374
|
+
extends DOMEvent<NativeClipboardEvent, T> {}
|
|
375
|
+
|
|
376
|
+
interface CompositionEvent<T extends Element = Element>
|
|
377
|
+
extends DOMEvent<NativeCompositionEvent, T> {}
|
|
378
|
+
|
|
379
|
+
interface DragEvent<T extends Element = Element>
|
|
380
|
+
extends DOMEvent<NativeDragEvent, T> {}
|
|
381
|
+
|
|
382
|
+
interface FocusEvent<T extends Element = Element>
|
|
383
|
+
extends DOMEvent<NativeFocusEvent, T> {}
|
|
384
|
+
|
|
385
|
+
interface FormEvent<T extends Element = Element>
|
|
386
|
+
extends DOMEvent<Event, T> {}
|
|
387
|
+
|
|
388
|
+
interface KeyboardEvent<T extends Element = Element>
|
|
389
|
+
extends DOMEvent<NativeKeyboardEvent, T> {}
|
|
390
|
+
|
|
391
|
+
interface MouseEvent<T extends Element = Element>
|
|
392
|
+
extends DOMEvent<NativeMouseEvent, T> {}
|
|
393
|
+
|
|
394
|
+
interface PointerEvent<T extends Element = Element>
|
|
395
|
+
extends DOMEvent<NativePointerEvent, T> {}
|
|
396
|
+
|
|
397
|
+
interface SubmitEvent<T extends Element = Element>
|
|
398
|
+
extends DOMEvent<NativeSubmitEvent, T> {}
|
|
399
|
+
|
|
400
|
+
interface TouchEvent<T extends Element = Element>
|
|
401
|
+
extends DOMEvent<NativeTouchEvent, T> {}
|
|
402
|
+
|
|
403
|
+
interface ToggleEvent<T extends Element = Element>
|
|
404
|
+
extends DOMEvent<NativeToggleEvent, T> {}
|
|
405
|
+
|
|
406
|
+
interface TransitionEvent<T extends Element = Element>
|
|
407
|
+
extends DOMEvent<NativeTransitionEvent, T> {}
|
|
408
|
+
|
|
409
|
+
interface UIEvent<T extends Element = Element>
|
|
410
|
+
extends DOMEvent<NativeUIEvent, T> {}
|
|
411
|
+
|
|
412
|
+
interface WheelEvent<T extends Element = Element>
|
|
413
|
+
extends DOMEvent<NativeWheelEvent, T> {}
|
|
414
|
+
|
|
415
|
+
type ClipboardEventHandler<T extends Element = Element> = EventHandler<
|
|
416
|
+
ClipboardEvent<T>
|
|
417
|
+
>
|
|
418
|
+
type CompositionEventHandler<T extends Element = Element> = EventHandler<
|
|
386
419
|
CompositionEvent<T>
|
|
387
420
|
>
|
|
388
|
-
type DragEventHandler<T = Element> = EventHandler<
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
type
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
type
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
type
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
421
|
+
type DragEventHandler<T extends Element = Element> = EventHandler<
|
|
422
|
+
DragEvent<T>
|
|
423
|
+
>
|
|
424
|
+
type FocusEventHandler<T extends Element = Element> = EventHandler<
|
|
425
|
+
FocusEvent<T>
|
|
426
|
+
>
|
|
427
|
+
type FormEventHandler<T extends Element = Element> = EventHandler<
|
|
428
|
+
FormEvent<T>
|
|
429
|
+
>
|
|
430
|
+
type KeyboardEventHandler<T extends Element = Element> = EventHandler<
|
|
431
|
+
KeyboardEvent<T>
|
|
432
|
+
>
|
|
433
|
+
type MouseEventHandler<T extends Element = Element> = EventHandler<
|
|
434
|
+
MouseEvent<T>
|
|
435
|
+
>
|
|
436
|
+
type TouchEventHandler<T extends Element = Element> = EventHandler<
|
|
437
|
+
TouchEvent<T>
|
|
438
|
+
>
|
|
439
|
+
type PointerEventHandler<T extends Element = Element> = EventHandler<
|
|
440
|
+
PointerEvent<T>
|
|
441
|
+
>
|
|
442
|
+
type UIEventHandler<T extends Element = Element> = EventHandler<UIEvent<T>>
|
|
443
|
+
type WheelEventHandler<T extends Element = Element> = EventHandler<
|
|
444
|
+
WheelEvent<T>
|
|
445
|
+
>
|
|
446
|
+
type AnimationEventHandler<T extends Element = Element> = EventHandler<
|
|
447
|
+
AnimationEvent<T>
|
|
448
|
+
>
|
|
449
|
+
type ToggleEventHandler<T extends Element = Element> = EventHandler<
|
|
450
|
+
ToggleEvent<T>
|
|
451
|
+
>
|
|
452
|
+
type TransitionEventHandler<T extends Element = Element> = EventHandler<
|
|
453
|
+
TransitionEvent<T>
|
|
454
|
+
>
|
|
455
|
+
|
|
456
|
+
type CustomEventAttributes = {
|
|
457
|
+
[Key in keyof Kiru.CustomEvents as `on:${Key}`]?: (
|
|
458
|
+
event: CustomEvent<Kiru.CustomEvents[Key]>
|
|
459
|
+
) => void
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
interface EventAttributes<T extends Element = Element>
|
|
463
|
+
extends CustomEventAttributes {
|
|
402
464
|
// Clipboard Events
|
|
403
465
|
oncopy?: ClipboardEventHandler<T> | undefined
|
|
404
466
|
oncut?: ClipboardEventHandler<T> | undefined
|
|
@@ -524,7 +586,7 @@ declare global {
|
|
|
524
586
|
|
|
525
587
|
type ElementReference<T extends HTMLElement> = T | null | string
|
|
526
588
|
|
|
527
|
-
|
|
589
|
+
interface PopoverControlAttributes {
|
|
528
590
|
popoverTarget?: string
|
|
529
591
|
popoverTargetAction?: "show" | "hide" | "toggle"
|
|
530
592
|
}
|
package/src/types.ts
CHANGED
|
@@ -16,10 +16,10 @@ import type {
|
|
|
16
16
|
HTMLTagToElement,
|
|
17
17
|
SVGTagToElement,
|
|
18
18
|
} from "./types.dom"
|
|
19
|
-
import { Signalable, SomeDom } from "./types.utils"
|
|
19
|
+
import { AsyncTaskState, Prettify, Signalable, SomeDom } from "./types.utils"
|
|
20
20
|
import type { AppContext } from "./appContext"
|
|
21
21
|
|
|
22
|
-
export type { ElementProps, StyleObject }
|
|
22
|
+
export type { AsyncTaskState, ElementProps, Prettify, Signalable, StyleObject }
|
|
23
23
|
|
|
24
24
|
type ElementProps<T extends keyof JSX.IntrinsicElements> =
|
|
25
25
|
JSX.IntrinsicElements[T]
|
|
@@ -102,7 +102,7 @@ declare global {
|
|
|
102
102
|
| PrimitiveChild
|
|
103
103
|
| Kiru.Signal<PrimitiveChild>
|
|
104
104
|
|
|
105
|
-
|
|
105
|
+
interface ElementAttributes {
|
|
106
106
|
key?: JSX.ElementKey
|
|
107
107
|
children?: JSX.Children
|
|
108
108
|
innerHTML?:
|
|
@@ -112,11 +112,13 @@ declare global {
|
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
namespace Kiru {
|
|
115
|
-
|
|
115
|
+
interface CustomEvents {}
|
|
116
|
+
|
|
117
|
+
interface ProviderProps<T> {
|
|
116
118
|
value: T
|
|
117
119
|
children?: JSX.Children | ((value: T) => JSX.Element)
|
|
118
120
|
}
|
|
119
|
-
|
|
121
|
+
interface Context<T> {
|
|
120
122
|
[$CONTEXT]: true
|
|
121
123
|
Provider: (({ value, children }: ProviderProps<T>) => JSX.Element) & {
|
|
122
124
|
displayName?: string
|
|
@@ -133,7 +135,7 @@ declare global {
|
|
|
133
135
|
type FCProps<T = {}> = T & { children?: JSX.Children }
|
|
134
136
|
type InferProps<T> = T extends Kiru.FC<infer P> ? P : never
|
|
135
137
|
|
|
136
|
-
|
|
138
|
+
interface HookDevtoolsProvisions<T extends Record<string, any>> {
|
|
137
139
|
get: () => T
|
|
138
140
|
set?: (value: T) => void
|
|
139
141
|
}
|
|
@@ -146,10 +148,10 @@ declare global {
|
|
|
146
148
|
devtools?: HookDevtoolsProvisions<any>
|
|
147
149
|
}
|
|
148
150
|
}
|
|
149
|
-
|
|
151
|
+
interface RefObject<T> {
|
|
150
152
|
readonly current: T | null
|
|
151
153
|
}
|
|
152
|
-
|
|
154
|
+
interface MutableRefObject<T> {
|
|
153
155
|
current: T
|
|
154
156
|
}
|
|
155
157
|
type RefCallback<T> = {
|
|
@@ -169,7 +171,7 @@ declare global {
|
|
|
169
171
|
| typeof $CONTEXT_PROVIDER
|
|
170
172
|
| typeof $HYDRATION_BOUNDARY
|
|
171
173
|
|
|
172
|
-
|
|
174
|
+
interface VNode {
|
|
173
175
|
app?: AppContext
|
|
174
176
|
dom?: SomeDom
|
|
175
177
|
lastChildDom?: SomeDom
|
|
@@ -203,7 +205,7 @@ declare global {
|
|
|
203
205
|
hmrUpdated?: boolean
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
|
-
|
|
208
|
+
interface VNodeSnapshot {
|
|
207
209
|
props: Kiru.VNode["props"]
|
|
208
210
|
memoizedProps: Kiru.VNode["memoizedProps"]
|
|
209
211
|
index: number
|
package/src/types.utils.ts
CHANGED
|
@@ -1,35 +1,47 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
$CONTEXT_PROVIDER,
|
|
3
|
+
$FRAGMENT,
|
|
4
|
+
$HYDRATION_BOUNDARY,
|
|
5
|
+
} from "./constants"
|
|
2
6
|
import type { HydrationBoundaryMode } from "./ssr/hydrationBoundary"
|
|
3
7
|
import type { Signal } from "./signals"
|
|
4
8
|
|
|
5
9
|
export type SomeElement = HTMLElement | SVGElement
|
|
6
10
|
export type SomeDom = HTMLElement | SVGElement | Text
|
|
11
|
+
export type MaybeElement = SomeElement | undefined
|
|
7
12
|
export type MaybeDom = SomeDom | undefined
|
|
8
13
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export type FunctionVNode = Omit<VNode, "type"> & {
|
|
12
|
-
type: (...args: any) => any
|
|
13
|
-
}
|
|
14
|
-
export type ExoticVNode = Omit<VNode, "type"> & {
|
|
15
|
-
type: Kiru.ExoticSymbol
|
|
14
|
+
export interface FunctionVNode extends Kiru.VNode {
|
|
15
|
+
type: (...args: any) => JSX.Element
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
|
|
18
|
+
export interface ElementVNode extends Kiru.VNode {
|
|
18
19
|
dom: SomeElement
|
|
19
20
|
type: string
|
|
20
21
|
}
|
|
21
|
-
export
|
|
22
|
+
export interface DomVNode extends Kiru.VNode {
|
|
22
23
|
dom: SomeDom
|
|
23
24
|
type: "#text" | (string & {})
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
export
|
|
27
|
+
export interface ContextProviderNode<T> extends Kiru.VNode {
|
|
27
28
|
type: typeof $CONTEXT_PROVIDER
|
|
28
|
-
props:
|
|
29
|
+
props: Kiru.VNode["props"] & {
|
|
30
|
+
value: T
|
|
31
|
+
ctx: Kiru.Context<T>
|
|
32
|
+
dependents: Set<Kiru.VNode>
|
|
33
|
+
}
|
|
29
34
|
}
|
|
30
|
-
|
|
35
|
+
|
|
36
|
+
export interface HydrationBoundaryNode extends Kiru.VNode {
|
|
31
37
|
type: typeof $HYDRATION_BOUNDARY
|
|
32
|
-
props:
|
|
38
|
+
props: Kiru.VNode["props"] & {
|
|
39
|
+
mode: HydrationBoundaryMode
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface FragmentNode extends Kiru.VNode {
|
|
44
|
+
type: typeof $FRAGMENT
|
|
33
45
|
}
|
|
34
46
|
|
|
35
47
|
export type Prettify<T> = {
|
|
@@ -37,3 +49,20 @@ export type Prettify<T> = {
|
|
|
37
49
|
} & {}
|
|
38
50
|
|
|
39
51
|
export type Signalable<T> = T | Signal<T>
|
|
52
|
+
|
|
53
|
+
export type AsyncTaskState<T, E extends Error = Error> =
|
|
54
|
+
| {
|
|
55
|
+
data: null
|
|
56
|
+
error: null
|
|
57
|
+
loading: true
|
|
58
|
+
}
|
|
59
|
+
| {
|
|
60
|
+
data: T
|
|
61
|
+
error: null
|
|
62
|
+
loading: false
|
|
63
|
+
}
|
|
64
|
+
| {
|
|
65
|
+
data: null
|
|
66
|
+
error: E
|
|
67
|
+
loading: false
|
|
68
|
+
}
|
package/src/utils.ts
CHANGED
|
@@ -5,10 +5,8 @@ import {
|
|
|
5
5
|
$HYDRATION_BOUNDARY,
|
|
6
6
|
booleanAttributes,
|
|
7
7
|
FLAG_DELETION,
|
|
8
|
-
FLAG_HAS_MEMO_ANCESTOR,
|
|
9
8
|
FLAG_PLACEMENT,
|
|
10
9
|
FLAG_UPDATE,
|
|
11
|
-
FLAG_MEMO,
|
|
12
10
|
REGEX_UNIT,
|
|
13
11
|
} from "./constants.js"
|
|
14
12
|
import { unwrap } from "./signals/utils.js"
|
|
@@ -25,12 +23,10 @@ export {
|
|
|
25
23
|
isExoticType,
|
|
26
24
|
isVNodeDeleted,
|
|
27
25
|
vNodeContains,
|
|
28
|
-
willMemoBlockUpdate,
|
|
29
26
|
getCurrentVNode,
|
|
30
27
|
getVNodeAppContext,
|
|
31
28
|
commitSnapshot,
|
|
32
29
|
traverseApply,
|
|
33
|
-
postOrderApply,
|
|
34
30
|
findParent,
|
|
35
31
|
propToHtmlAttr,
|
|
36
32
|
propValueToHtmlAttrValue,
|
|
@@ -158,79 +154,16 @@ function vNodeContains(haystack: VNode, needle: VNode): boolean {
|
|
|
158
154
|
return false
|
|
159
155
|
}
|
|
160
156
|
|
|
161
|
-
function willMemoBlockUpdate(root: VNode, target: VNode): boolean {
|
|
162
|
-
let node: VNode | null = target
|
|
163
|
-
|
|
164
|
-
while (node && node !== root && node.flags & FLAG_HAS_MEMO_ANCESTOR) {
|
|
165
|
-
const parent = node.parent
|
|
166
|
-
if (!parent) return false
|
|
167
|
-
if (
|
|
168
|
-
parent.flags & FLAG_MEMO &&
|
|
169
|
-
parent.prev?.memoizedProps &&
|
|
170
|
-
parent.arePropsEqual!(parent.prev.memoizedProps, parent.props)
|
|
171
|
-
) {
|
|
172
|
-
return true
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
node = node.parent
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return false
|
|
179
|
-
}
|
|
180
|
-
|
|
181
157
|
function traverseApply(vNode: VNode, func: (node: VNode) => void): void {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
func(
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
applyToSiblings = true
|
|
189
|
-
}
|
|
190
|
-
while (nodes.length) apply(nodes.shift()!)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
function postOrderApply(
|
|
194
|
-
tree: VNode,
|
|
195
|
-
callbacks: {
|
|
196
|
-
/** called upon traversing to the next parent, and on the root */
|
|
197
|
-
onAscent: (vNode: VNode) => void
|
|
198
|
-
/** called before traversing to the next parent */
|
|
199
|
-
onBeforeAscent?: (vNode: VNode) => void
|
|
200
|
-
/** called before traversing to the next child */
|
|
201
|
-
onDescent?: (vNode: VNode) => void
|
|
202
|
-
}
|
|
203
|
-
): void {
|
|
204
|
-
const root = tree
|
|
205
|
-
const rootChild = root.child
|
|
206
|
-
if (!rootChild) {
|
|
207
|
-
callbacks.onAscent(root)
|
|
208
|
-
return
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
callbacks.onDescent?.(root)
|
|
212
|
-
let branch = rootChild
|
|
213
|
-
while (branch) {
|
|
214
|
-
let c = branch
|
|
215
|
-
while (c) {
|
|
216
|
-
if (!c.child) break
|
|
217
|
-
callbacks.onDescent?.(c)
|
|
218
|
-
c = c.child
|
|
158
|
+
func(vNode)
|
|
159
|
+
let child = vNode.child
|
|
160
|
+
while (child) {
|
|
161
|
+
func(child)
|
|
162
|
+
if (child.child) {
|
|
163
|
+
traverseApply(child, func)
|
|
219
164
|
}
|
|
220
|
-
|
|
221
|
-
while (c && c !== root) {
|
|
222
|
-
callbacks.onAscent(c)
|
|
223
|
-
if (c.sibling) {
|
|
224
|
-
branch = c.sibling
|
|
225
|
-
break
|
|
226
|
-
}
|
|
227
|
-
callbacks.onBeforeAscent?.(c)
|
|
228
|
-
c = c.parent!
|
|
229
|
-
}
|
|
230
|
-
if (c === root) break
|
|
165
|
+
child = child.sibling
|
|
231
166
|
}
|
|
232
|
-
|
|
233
|
-
callbacks.onAscent(root)
|
|
234
167
|
}
|
|
235
168
|
|
|
236
169
|
function findParent(vNode: Kiru.VNode, predicate: (n: Kiru.VNode) => boolean) {
|