@solidjs/signals 2.0.0-rc.18 → 2.0.0-rc.19
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/dev-shared.js +168 -88
- package/dist/dev.attribution.js +16 -13
- package/dist/dev.js +272 -129
- package/dist/observe/boundaries.js +88 -67
- package/dist/observe/core/action.js +8 -0
- package/dist/observe/core/async.js +46 -34
- package/dist/observe/core/attribution.js +30 -28
- package/dist/observe/core/constants.js +21 -1
- package/dist/observe/core/core.js +164 -136
- package/dist/observe/core/effect.js +6 -6
- package/dist/observe/core/graph.js +3 -3
- package/dist/observe/core/heap.js +5 -5
- package/dist/observe/core/lanes.js +104 -84
- package/dist/observe/core/owner.js +10 -9
- package/dist/observe/core/scheduler.js +38 -35
- package/dist/observe/core/truth.js +6 -6
- package/dist/observe/core/verdict.js +13 -13
- package/dist/observe/deferred.js +39 -40
- package/dist/observe/index.js +2 -2
- package/dist/observe/map.js +22 -22
- package/dist/observe/reveal.js +5 -5
- package/dist/observe/signals.js +57 -15
- package/dist/observe/store/affects.js +1 -1
- package/dist/observe/store/hooks.js +3 -0
- package/dist/observe/store/optimistic.js +11 -11
- package/dist/observe/store/projection.js +34 -21
- package/dist/observe/store/reconcile.js +2 -2
- package/dist/observe/store/store.js +63 -53
- package/dist/observe/store/utils.js +7 -2
- package/dist/prod/boundaries.js +153 -132
- package/dist/prod/core/action.js +8 -0
- package/dist/prod/core/async.js +55 -43
- package/dist/prod/core/constants.js +14 -1
- package/dist/prod/core/core.js +162 -134
- package/dist/prod/core/effect.js +9 -9
- package/dist/prod/core/graph.js +3 -3
- package/dist/prod/core/heap.js +12 -12
- package/dist/prod/core/lanes.js +98 -78
- package/dist/prod/core/owner.js +15 -14
- package/dist/prod/core/scheduler.js +43 -40
- package/dist/prod/core/truth.js +6 -6
- package/dist/prod/core/verdict.js +17 -17
- package/dist/prod/deferred.js +39 -40
- package/dist/prod/index.js +2 -2
- package/dist/prod/map.js +14 -14
- package/dist/prod/reveal.js +8 -8
- package/dist/prod/signals.js +46 -4
- package/dist/prod/store/affects.js +1 -1
- package/dist/prod/store/hooks.js +3 -0
- package/dist/prod/store/optimistic.js +16 -16
- package/dist/prod/store/projection.js +22 -9
- package/dist/prod/store/reconcile.js +2 -2
- package/dist/prod/store/store.js +262 -262
- package/dist/prod/store/utils.js +2 -0
- package/dist/types/core/action.d.ts +8 -0
- package/dist/types/core/constants.d.ts +20 -0
- package/dist/types/core/core.d.ts +14 -1
- package/dist/types/core/dev.d.ts +1 -1
- package/dist/types/core/index.d.ts +1 -1
- package/dist/types/core/lanes.d.ts +5 -1
- package/dist/types/core/scheduler.d.ts +2 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/signals.d.ts +37 -0
- package/dist/types/store/target.d.ts +2 -0
- package/package.json +1 -1
package/dist/prod/store/utils.js
CHANGED
|
@@ -921,6 +921,8 @@ const omitTraps = {
|
|
|
921
921
|
f++;
|
|
922
922
|
i = o;
|
|
923
923
|
if (typeof o === "function") {
|
|
924
|
+
// Observe tiers name it and exempt it from UNSTABLE_MEMO_OUTPUT (see
|
|
925
|
+
// CONFIG_KEY_BAG); prod passes no options.
|
|
924
926
|
n[r] = createMemo(o);
|
|
925
927
|
t[r++] = SOURCE_MEMO;
|
|
926
928
|
continue;
|
|
@@ -40,6 +40,14 @@
|
|
|
40
40
|
* yield until(() => todos.some(t => t.id === saved.id));
|
|
41
41
|
* ```
|
|
42
42
|
*
|
|
43
|
+
* The same holds inside an async helper the action yields
|
|
44
|
+
* (`yield (async () => { ... })()`): everything after its first `await` runs
|
|
45
|
+
* outside the transaction. An `await refresh(x)` or `await until(...)` there
|
|
46
|
+
* waits for this action's commit, which waits on the helper, so it hangs
|
|
47
|
+
* whenever `x` re-ran during the action (#4263) and works otherwise. Call
|
|
48
|
+
* `refresh(x)` in the generator once the helper returns; `yield` it only when
|
|
49
|
+
* the action needs the fresh value.
|
|
50
|
+
*
|
|
43
51
|
* (For the same reason, don't call `flush()` inside an action body — it
|
|
44
52
|
* cannot reveal the held writes and is refused.)
|
|
45
53
|
*
|
|
@@ -185,10 +185,30 @@ export declare const CONFIG_WIDE: number;
|
|
|
185
185
|
* creation by dev builds only (the observe artifact mangles the option name,
|
|
186
186
|
* as it does `_wide`). */
|
|
187
187
|
export declare const CONFIG_SUPERSEDES: number;
|
|
188
|
+
/** Observe tiers only: the memo `merge()` creates for a function source — a
|
|
189
|
+
* key bag readers consume key by key, built by the framework (a compiled
|
|
190
|
+
* component spread) with options no user can reach. The attribution engine's
|
|
191
|
+
* UNSTABLE_MEMO_OUTPUT skips it: a fresh-but-equal bag is the idiom
|
|
192
|
+
* (`{...(on() ? { a } : {})}`), and the advice (`equals`) cannot be applied
|
|
193
|
+
* (#4256). Set through `_extraConfig` by observe builds only. */
|
|
194
|
+
export declare const CONFIG_KEY_BAG: number;
|
|
195
|
+
/** The frame (rule 3, D-3): a render effect (set at creation, as
|
|
196
|
+
* `EFFECT_RENDER << 23` — keep the two in step), and a boundary's tree and
|
|
197
|
+
* output (boundaries.ts) — structure between the content and the render
|
|
198
|
+
* effect that shows it, not a user derivation of the content. Outside a
|
|
199
|
+
* hold's own flush it reads that hold's values as committed and is
|
|
200
|
+
* re-derived at its landing, and a re-pass of it publishes mainline: it
|
|
201
|
+
* joins nothing, so two mounts under one boundary made in separate flushes
|
|
202
|
+
* keep their holds apart (D-4, S-5 rows 1′–3′, #4283). */
|
|
203
|
+
export declare const CONFIG_FRAME: number;
|
|
188
204
|
export declare const STATUS_NONE = 0;
|
|
189
205
|
export declare const STATUS_PENDING: number;
|
|
190
206
|
export declare const STATUS_ERROR: number;
|
|
191
207
|
export declare const STATUS_UNINITIALIZED: number;
|
|
208
|
+
/** An error that answered a node's first read (no value has ever landed):
|
|
209
|
+
* the error, not UNINITIALIZED, is its status while shown, but a re-ask
|
|
210
|
+
* makes it uninitialized-pending again — it still has no value (#4244). */
|
|
211
|
+
export declare const STATUS_NO_VALUE: number;
|
|
192
212
|
/** `catchHook`'s answer when the catcher is a boundary re-armed by
|
|
193
213
|
* `on` (truthy, as any catch): what it collects is its own, not the hold's. */
|
|
194
214
|
export declare const CAUGHT_REARMED = 2;
|
|
@@ -20,7 +20,20 @@ export declare let context: Owner | null;
|
|
|
20
20
|
export declare let snapshotCaptureActive: boolean;
|
|
21
21
|
export declare let snapshotSources: Set<any> | null;
|
|
22
22
|
export declare function setSnapshotCapture(active: boolean): void;
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Marks `owner` a snapshot scope: while capture is on, the readers created
|
|
25
|
+
* under it serve each source's snapshot (the value it had when hydration
|
|
26
|
+
* began) and replay at `releaseSnapshotScope`.
|
|
27
|
+
*
|
|
28
|
+
* With `served` (hydration), `owner` is instead a hydrated computed and
|
|
29
|
+
* `served` its server answer — what the server rendered every reader of the
|
|
30
|
+
* node with — landing after the node was created pending (so the creation
|
|
31
|
+
* arm skipped it). It becomes the node's snapshot when it has none, whether
|
|
32
|
+
* the node committed the answer or a client write had already taken its
|
|
33
|
+
* compute over. A claim made later reads the value its markup shows, and
|
|
34
|
+
* replays the node's own value at its release, as for a written signal.
|
|
35
|
+
*/
|
|
36
|
+
export declare function markSnapshotScope(owner: Owner, served?: unknown): void;
|
|
24
37
|
export declare function releaseSnapshotScope(owner: Owner): void;
|
|
25
38
|
export declare function clearSnapshots(): void;
|
|
26
39
|
export declare function recompute(el: Computed<any>, create?: boolean): void;
|
package/dist/types/core/dev.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export interface DevHooks {
|
|
|
16
16
|
* `warn`/`error` as failures unless they opt in to `info`.
|
|
17
17
|
*/
|
|
18
18
|
export type DiagnosticSeverity = "info" | "warn" | "error";
|
|
19
|
-
export type DiagnosticCode = "STRICT_READ_UNTRACKED" | "PENDING_ASYNC_UNTRACKED_READ" | "PENDING_ASYNC_FORBIDDEN_SCOPE" | "REACTIVE_WRITE_IN_OWNED_SCOPE" | "ASYNC_STORE_SETTER" | "STORE_WRITE_OUTSIDE_SETTER" | "ACTION_CALLED_IN_OWNED_SCOPE" | "RUN_WITH_DISPOSED_OWNER" | "NO_OWNER_CLEANUP" | "CLEANUP_IN_FORBIDDEN_SCOPE" | "SETTLED_CLEANUP_UNOWNED" | "SETTLE_WALK_UNINITIALIZED_SOURCE" | "FLUSH_IN_EFFECT_CALLBACK" | "PRIMITIVE_IN_FORBIDDEN_SCOPE" | "PRIMITIVE_IN_EFFECT_CALLBACK" | "NO_OWNER_EFFECT" | "NO_OWNER_BOUNDARY" | "ASYNC_OUTSIDE_LOADING_BOUNDARY" | "LOADING_ON_OUTSIDE_HOLD" | "INVALID_REFRESH_TARGET" | "INVALID_AFFECTS_TARGET" | "MISSING_EFFECT_FN" | "SYNC_NODE_RECEIVED_ASYNC" | "UNTRACKED_READ_AFTER_AWAIT" | "REACTIVITY_HALTED" | "INVARIANT_VIOLATION" | "HUGE_FAN_OUT" | "HUGE_FAN_IN" | "GRAPH_GROWTH" | "HOT_SCOPE_RERUNS" | "HOT_SCOPE_TIME" | "WIDE_SCOPE_DEPS" | "UNSTABLE_MEMO_OUTPUT" | "WASTED_RECOMPUTE" | "ASYNC_WATERFALL" | "HOT_SCOPE_FANOUT" | "SILENT_HOLD" | "LONG_HOLD" | "UNTRACKED_ASYNC_HANDLER" | "ABANDONED_FLIGHTS" | "FALLBACK_FLASH" | "STACKED_HOLDS" | "OPTIMISTIC_REVERTED" | "EFFECT_WRITES_OWN_SOURCE" | "EFFECT_RELAY_TEAR" | "IMMUTABLE_UPDATE_IN_STORE" | "UNSTABLE_LIST_IDENTITY" | "SSR_RENDER_ERROR_CONTAINED" | "SSR_SUBTREE_ABANDONED" | "SSR_STREAM_ABANDONED" | "SSR_CLIENT_CONTENT_MASKED" | "LATE_HEADER_WRITE" | "SERVER_ERROR_SANITIZED" | "SSR_BOUNDARY_WATERFALL" | "SSR_UNDECLARED_LIVE_SOURCE" | "SSR_LIVE_HOLE_LATCHED" | "SERVER_WRITE" | "REVEAL_IN_RENDER_TO_STRING" | "LAZY_ASSET_UNMAPPED" | "PRELOAD_DESCRIPTOR_INVALID" | "HEAD_TAG_INVALID" | "UNRECOGNIZED_INSERT_VALUE" | "UNSCOPED_HOLE_ALLOCATED_IDS" | "LOWERCASE_EVENT_ATTRIBUTE" | "UNCOMMITTED_INPUT_OVERWRITTEN" | "FRAME_MARKER_CORRUPTED" | "DYNAMIC_ASYNC_COMPONENT";
|
|
19
|
+
export type DiagnosticCode = "STRICT_READ_UNTRACKED" | "PENDING_ASYNC_UNTRACKED_READ" | "PENDING_ASYNC_FORBIDDEN_SCOPE" | "REACTIVE_WRITE_IN_OWNED_SCOPE" | "ASYNC_STORE_SETTER" | "STORE_WRITE_OUTSIDE_SETTER" | "ACTION_CALLED_IN_OWNED_SCOPE" | "RUN_WITH_DISPOSED_OWNER" | "NO_OWNER_CLEANUP" | "CLEANUP_IN_FORBIDDEN_SCOPE" | "SETTLED_CLEANUP_UNOWNED" | "ON_FLUSH_IN_OWNED_SCOPE" | "SETTLE_WALK_UNINITIALIZED_SOURCE" | "FLUSH_IN_EFFECT_CALLBACK" | "PRIMITIVE_IN_FORBIDDEN_SCOPE" | "PRIMITIVE_IN_EFFECT_CALLBACK" | "NO_OWNER_EFFECT" | "NO_OWNER_BOUNDARY" | "ASYNC_OUTSIDE_LOADING_BOUNDARY" | "LOADING_ON_OUTSIDE_HOLD" | "INVALID_REFRESH_TARGET" | "INVALID_AFFECTS_TARGET" | "MISSING_EFFECT_FN" | "SYNC_NODE_RECEIVED_ASYNC" | "UNTRACKED_READ_AFTER_AWAIT" | "REACTIVITY_HALTED" | "INVARIANT_VIOLATION" | "HUGE_FAN_OUT" | "HUGE_FAN_IN" | "GRAPH_GROWTH" | "HOT_SCOPE_RERUNS" | "HOT_SCOPE_TIME" | "WIDE_SCOPE_DEPS" | "UNSTABLE_MEMO_OUTPUT" | "WASTED_RECOMPUTE" | "ASYNC_WATERFALL" | "HOT_SCOPE_FANOUT" | "SILENT_HOLD" | "LONG_HOLD" | "UNTRACKED_ASYNC_HANDLER" | "ABANDONED_FLIGHTS" | "FALLBACK_FLASH" | "STACKED_HOLDS" | "OPTIMISTIC_REVERTED" | "EFFECT_WRITES_OWN_SOURCE" | "EFFECT_RELAY_TEAR" | "IMMUTABLE_UPDATE_IN_STORE" | "UNSTABLE_LIST_IDENTITY" | "SSR_RENDER_ERROR_CONTAINED" | "SSR_SUBTREE_ABANDONED" | "SSR_STREAM_ABANDONED" | "SSR_CLIENT_CONTENT_MASKED" | "LATE_HEADER_WRITE" | "SERVER_ERROR_SANITIZED" | "SSR_BOUNDARY_WATERFALL" | "SSR_UNDECLARED_LIVE_SOURCE" | "SSR_LIVE_HOLE_LATCHED" | "SERVER_WRITE" | "REVEAL_IN_RENDER_TO_STRING" | "LAZY_ASSET_UNMAPPED" | "PRELOAD_DESCRIPTOR_INVALID" | "HEAD_TAG_INVALID" | "UNRECOGNIZED_INSERT_VALUE" | "UNSCOPED_HOLE_ALLOCATED_IDS" | "LOWERCASE_EVENT_ATTRIBUTE" | "UNCOMMITTED_INPUT_OVERWRITTEN" | "FRAME_MARKER_CORRUPTED" | "DYNAMIC_ASYNC_COMPONENT" | "ASYNC_MEMO_ELEMENT";
|
|
20
20
|
export type DiagnosticKind = "strict-read" | "async" | "write" | "lifecycle" | "owner" | "error" | "perf" | "graph"
|
|
21
21
|
/** Perceived responsiveness: the runtime behaved correctly but the user saw no feedback. */
|
|
22
22
|
| "responsiveness"
|
|
@@ -11,7 +11,7 @@ export type { Computed, Disposable, Link, Owner, Root, Signal, NodeOptions } fro
|
|
|
11
11
|
export { effect, trackedEffect, type Effect, type TrackedEffect } from "./effect.js";
|
|
12
12
|
export { flush, GlobalQueue, enforceLoadingBoundary, resetErrorHalt, type IQueue, type QueueCallback } from "./scheduler.js";
|
|
13
13
|
export type { InteractionRef, NavigationRef } from "./attribution-hooks.js";
|
|
14
|
-
export { ROOT_ERROR_HOOK } from "./scheduler.js";
|
|
14
|
+
export { ROOT_ERROR_HOOK, clock } from "./scheduler.js";
|
|
15
15
|
export { configureClientErrors, type ClientErrorContext, type ClientErrorHook, type ClientErrorsConfig } from "./error-hooks.js";
|
|
16
16
|
export { DEV, OBSERVE, setConsoleFooter, type AttributionSlot, type Dev, type Observe, type ServerObserve, type Records, type RecordTypes, type HostRecordTypes, type RecordType, type RecordEvent, type RecordLive, type RecordListener, type RecordSubscribeOptions, type DevHooks, type DiagnosticCapture, type DiagnosticCode, type DiagnosticEvent, type DiagnosticKind, type DiagnosticListener, type Diagnostics, type DiagnosticSeverity, type DiagnosticSubject } from "./dev.js";
|
|
17
17
|
export * from "./constants.js";
|
|
@@ -60,5 +60,9 @@ export declare function supersede(n: Signal<any> | Computed<any>, value: unknown
|
|
|
60
60
|
* has shown, or one the seam has not judged yet (its run waits on the
|
|
61
61
|
* verdict: released if the lane shows, held if it blocks) — and sees the
|
|
62
62
|
* lane's latest. NOT_PENDING falls through: lane work's read of a pending
|
|
63
|
-
* member throws like any.
|
|
63
|
+
* member throws like any. A verdict reader entering a lane the seam has
|
|
64
|
+
* not judged reads ahead of it like a staging read: if the seam holds the
|
|
65
|
+
* lane, the pass re-derives on the screen (`entered`, #4284) — `latest()`
|
|
66
|
+
* beside the lane's nodes tears ahead of the hold however the reads are
|
|
67
|
+
* grouped into effects. */
|
|
64
68
|
export declare function laneRead(c: Computed<any> | null, el: Signal<any> | Computed<any>): unknown;
|
|
@@ -327,6 +327,8 @@ export declare function reruns(u: Transaction): unknown;
|
|
|
327
327
|
* pass would have queued them — a shell re-derived at the landing before a
|
|
328
328
|
* boundary swap held since the write (#3540's log order). */
|
|
329
329
|
export declare function releaseQueues(u: Transaction): void;
|
|
330
|
+
/** Nodes staged this flush (`_pendingValue` set), committed at its end. */
|
|
331
|
+
export declare const pendingNodes: Signal<any>[];
|
|
330
332
|
/** Passes that read a staging of this flush as the screen — lane work
|
|
331
333
|
* (core.ts `stagedRead`), a verdict reader before the frame's verdict
|
|
332
334
|
* (verdict.ts): if the frame parks they read a held write — re-derived next
|
package/dist/types/index.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export { $REFRESH, action, ContextNotFoundError, NoOwnerError, NotReadyError, Ti
|
|
|
5
5
|
* outside dev builds.
|
|
6
6
|
*/
|
|
7
7
|
export { setConsoleFooter } from "./core/index.js";
|
|
8
|
+
/** @internal The flush round counter (scheduler.ts): hydration's served pass tells its own round from a later one. */
|
|
9
|
+
export { clock } from "./core/index.js";
|
|
8
10
|
/** @internal The pre-write hook (`setWriteHook` in core/core.ts); the server-components client's deferred hydration. */
|
|
9
11
|
/** @internal Plain-signal identities and the dev read watch (dependency edges; the server-components client). */
|
|
10
12
|
export { setWriteHook, setSignalIdentities, setReadWatch, signalName } from "./core/index.js";
|
|
@@ -20,7 +22,7 @@ export declare const OBSERVE: Observe | undefined;
|
|
|
20
22
|
/** Dev tier (devtools hooks, graph traversal, console reporting): dev builds only. */
|
|
21
23
|
export declare const DEV: Dev | undefined;
|
|
22
24
|
export type { Owner, Context, ContextRecord, IQueue, ExternalSourceFactory, ExternalSource, ExternalSourceConfig, Refreshable, AttributionSlot, ClientErrorContext, ClientErrorHook, ClientErrorsConfig, InteractionRef, NavigationRef, Dev, Observe, ServerObserve, Records, RecordTypes, HostRecordTypes, RecordType, RecordEvent, RecordLive, RecordListener, RecordSubscribeOptions, DevHooks, DiagnosticCapture, DiagnosticCode, DiagnosticEvent, DiagnosticKind, DiagnosticListener, Diagnostics, DiagnosticSeverity, DiagnosticSubject } from "./core/index.js";
|
|
23
|
-
export { createSignal, createOptimistic, createMemo, createEffect, createRenderEffect, createTrackedEffect, createReaction, refresh, resolve, until, onSettled, onCleanup } from "./signals.js";
|
|
25
|
+
export { createSignal, createOptimistic, createMemo, createEffect, createRenderEffect, createTrackedEffect, createReaction, refresh, resolve, until, onSettled, onFlush, onCleanup } from "./signals.js";
|
|
24
26
|
export type { Truthy, UntilOptions, Accessor, SourceAccessor, Setter, Signal, ComputeFunction, EffectFunction, EffectBundle, EffectOptions, SignalOptions, MemoOptions, NoInfer } from "./signals.js";
|
|
25
27
|
export { mapArray, repeat, type Maybe } from "./map.js";
|
|
26
28
|
export * from "./store/index.js";
|
package/dist/types/signals.d.ts
CHANGED
|
@@ -735,4 +735,41 @@ export declare function until<T>(fn: () => T, options?: UntilOptions): Promise<T
|
|
|
735
735
|
* on owner disposal
|
|
736
736
|
*/
|
|
737
737
|
export declare function onSettled(callback: () => void | (() => void)): void;
|
|
738
|
+
/**
|
|
739
|
+
* Schedules `callback` to run **once**, right after the pending flush
|
|
740
|
+
* finishes, in the same microtask checkpoint (before the browser paints).
|
|
741
|
+
* Unlike `onSettled`, it never waits on async work: if that flush is held by
|
|
742
|
+
* a pending transition, the callback still runs.
|
|
743
|
+
*
|
|
744
|
+
* Its main use is keeping a write out of another update's hold. Writes made
|
|
745
|
+
* in the same synchronous frame are applied together, so when one of them
|
|
746
|
+
* starts async work (a route change, a fetch), the others are held with it
|
|
747
|
+
* until it resolves. A write made in `onFlush` happens after that flush, so
|
|
748
|
+
* it is its own update: it commits on its own unless something it changes
|
|
749
|
+
* also derives from the held work (a memo or `createEffect` reading both),
|
|
750
|
+
* in which case it joins that hold as any later write would.
|
|
751
|
+
*
|
|
752
|
+
* Call it from event handlers and effect callbacks (including
|
|
753
|
+
* `createTrackedEffect` and `onSettled` bodies). In an owned scope such as a
|
|
754
|
+
* component body or a computation it warns in dev: use `onSettled` there.
|
|
755
|
+
*
|
|
756
|
+
* - A write in the callback lands after any write made inline in the same
|
|
757
|
+
* frame. Don't write the same signal both inside and outside it; use a
|
|
758
|
+
* functional setter if the order matters.
|
|
759
|
+
* - Several `onFlush` callbacks run in call order and batch into one flush.
|
|
760
|
+
* - `queueMicrotask` is not a substitute: called before the frame's first
|
|
761
|
+
* write, it runs before that flush and its write joins it.
|
|
762
|
+
*
|
|
763
|
+
* @example
|
|
764
|
+
* ```tsx
|
|
765
|
+
* // A menu closes now even when the consumer's onSelect starts async work.
|
|
766
|
+
* const select = (id: string) => {
|
|
767
|
+
* onFlush(() => setOpen(false));
|
|
768
|
+
* props.onSelect?.(id);
|
|
769
|
+
* };
|
|
770
|
+
* ```
|
|
771
|
+
*
|
|
772
|
+
* @param callback Function to run once after the pending flush
|
|
773
|
+
*/
|
|
774
|
+
export declare function onFlush(callback: () => void): void;
|
|
738
775
|
export {};
|
|
@@ -34,6 +34,8 @@ export interface StoreFamily {
|
|
|
34
34
|
* their readers (A9) — the family's enumerable index, in place of a
|
|
35
35
|
* per-leaf chain; a target leaves it with its last node. */
|
|
36
36
|
live: Set<StoreTarget>;
|
|
37
|
+
/** A source's status reaching the derive by propagation (`familyStatus`). */
|
|
38
|
+
st?: (status: number) => void;
|
|
37
39
|
shallow?: boolean;
|
|
38
40
|
/** Derive run counter (proj R37): the run whose draft is live. */
|
|
39
41
|
run?: number;
|
package/package.json
CHANGED