@vibecook/ice 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-5OU3OWDH.js → chunk-4BOR42FZ.js} +3 -3
- package/dist/{chunk-55QCOE74.js → chunk-M5SFRVMH.js} +2 -2
- package/dist/{chunk-LATXYFMO.js → chunk-VITC7U3J.js} +149 -38
- package/dist/{chunk-LATXYFMO.js.map → chunk-VITC7U3J.js.map} +1 -1
- package/dist/devtools.js +1 -1
- package/dist/dom.js +2 -2
- package/dist/ground.js +1 -1
- package/dist/index.js +1 -1
- package/dist/r3f.js +3 -3
- package/dist/react.js +3 -3
- package/dist/types/packages/core/src/facade/create-canvas-engine.d.ts +28 -6
- package/dist/types/packages/core/src/index.d.ts +1 -1
- package/dist/types/packages/core/src/interaction/install.d.ts +1 -1
- package/dist/types/packages/core/src/nav/nested-canvas.d.ts +1 -1
- package/dist/types/packages/core/src/ops/point-pick.d.ts +1 -1
- package/dist/types/packages/core/src/ops/port-geometry.d.ts +1 -1
- package/dist/types/packages/core/src/presence/presence-kit.d.ts +11 -0
- package/dist/types/packages/core/src/presence/remote-cursors.d.ts +10 -7
- package/dist/types/packages/core/src/systems/l1-pick.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l1-wires.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l3-connect.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l3-drop.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l3-marquee.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l3-ports.d.ts +1 -1
- package/dist/types/packages/core/src/systems/l3-snap.d.ts +1 -1
- package/dist/types/packages/core/src/systems/nav-flight.d.ts +1 -1
- package/dist/types/packages/devtools/src/attach.d.ts +1 -1
- package/dist/types/packages/dom/src/loop.d.ts +1 -1
- package/dist/types/packages/dom/src/measure-adapter.d.ts +1 -1
- package/dist/types/packages/dom/src/measure-wiring.d.ts +1 -1
- package/dist/types/packages/dom/src/pointer-adapter.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/chrome.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/cursor.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/dom-widgets.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/graybox.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/plane-transform.d.ts +1 -1
- package/dist/types/packages/dom/src/reflectors/remote-cursors.d.ts +1 -1
- package/dist/types/packages/dom/src/widget-focus.d.ts +1 -1
- package/dist/types/packages/ground/src/index.d.ts +2 -2
- package/dist/types/packages/ground/src/layer.d.ts +1 -1
- package/dist/types/packages/ground/src/pass.d.ts +1 -1
- package/dist/types/packages/ground/src/passes/grid.d.ts +1 -1
- package/dist/types/packages/ground/src/passes/guides-collect.d.ts +1 -1
- package/dist/types/packages/ground/src/passes/guides.d.ts +1 -1
- package/dist/types/packages/ground/src/passes/wires-collect.d.ts +1 -1
- package/dist/types/packages/ground/src/passes/wires.d.ts +1 -1
- package/dist/types/packages/r3f/src/bridge.d.ts +1 -1
- package/dist/types/packages/r3f/src/compositor-pass.d.ts +1 -1
- package/dist/types/packages/r3f/src/dev-write-trap.d.ts +1 -1
- package/dist/types/packages/r3f/src/gl-root.d.ts +1 -1
- package/dist/types/packages/r3f/src/gl-router.d.ts +2 -2
- package/dist/types/packages/r3f/src/island-state.d.ts +1 -1
- package/dist/types/packages/r3f/src/island.d.ts +1 -1
- package/dist/types/packages/r3f/src/use-island-frame.d.ts +1 -1
- package/dist/types/packages/react/src/engine-context.d.ts +1 -1
- package/dist/types/packages/react/src/hooks.d.ts +1 -1
- package/dist/types/packages/react/src/infinite-canvas.d.ts +2 -2
- package/dist/types/packages/react/src/keymap.d.ts +1 -1
- package/dist/types/packages/react/src/use-commit.d.ts +1 -1
- package/dist/types/packages/react/src/use-presence.d.ts +1 -1
- package/dist/types/packages/react/src/widget-root.d.ts +1 -1
- package/package.json +3 -3
- /package/dist/{chunk-5OU3OWDH.js.map → chunk-4BOR42FZ.js.map} +0 -0
- /package/dist/{chunk-55QCOE74.js.map → chunk-M5SFRVMH.js.map} +0 -0
package/dist/devtools.js
CHANGED
package/dist/dom.js
CHANGED
|
@@ -19,8 +19,8 @@ import {
|
|
|
19
19
|
startRafLoop,
|
|
20
20
|
wheelCede,
|
|
21
21
|
wireMeasurement
|
|
22
|
-
} from "./chunk-
|
|
23
|
-
import "./chunk-
|
|
22
|
+
} from "./chunk-M5SFRVMH.js";
|
|
23
|
+
import "./chunk-VITC7U3J.js";
|
|
24
24
|
import "./chunk-OR5FNVUE.js";
|
|
25
25
|
export {
|
|
26
26
|
CLAIM_OWNS_ESCAPE,
|
package/dist/ground.js
CHANGED
package/dist/index.js
CHANGED
package/dist/r3f.js
CHANGED
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
EngineProvider,
|
|
3
3
|
hasPreviewSnapshot,
|
|
4
4
|
setPreviewSnapshot
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-4BOR42FZ.js";
|
|
6
|
+
import "./chunk-M5SFRVMH.js";
|
|
7
7
|
import {
|
|
8
8
|
Active,
|
|
9
9
|
Camera,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
navFlightActive,
|
|
27
27
|
pickTopAt,
|
|
28
28
|
widgets
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-VITC7U3J.js";
|
|
30
30
|
import {
|
|
31
31
|
compositeCameraFrustum,
|
|
32
32
|
computeIslandPhase,
|
package/dist/react.js
CHANGED
|
@@ -25,9 +25,9 @@ import {
|
|
|
25
25
|
useWidgetProps,
|
|
26
26
|
useWorld,
|
|
27
27
|
useWorldComponent
|
|
28
|
-
} from "./chunk-
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-
|
|
28
|
+
} from "./chunk-4BOR42FZ.js";
|
|
29
|
+
import "./chunk-M5SFRVMH.js";
|
|
30
|
+
import "./chunk-VITC7U3J.js";
|
|
31
31
|
import "./chunk-OR5FNVUE.js";
|
|
32
32
|
export {
|
|
33
33
|
EngineProvider,
|
|
@@ -34,7 +34,7 @@ import { type DocSession, type DocSessionOpts, type OpenDocResult } from "../doc
|
|
|
34
34
|
import { type JoinDocOpts, type JoinResult } from "../doc/bootstrap";
|
|
35
35
|
import type { ByteChannel } from "../doc/channels";
|
|
36
36
|
import { type Autosave, type AutosaveOpts, type AutosaveStorageWrite } from "../doc/autosave";
|
|
37
|
-
import { type PresenceSession } from "../presence/presence-kit";
|
|
37
|
+
import { type PresenceOpts, type PresenceSession } from "../presence/presence-kit";
|
|
38
38
|
import type { MeasureQueue } from "../input/measure-queue";
|
|
39
39
|
import { GESTURE_DEFAULTS, POINTER_DEFAULTS } from "../settings/defaults";
|
|
40
40
|
export interface CanvasEngineOpts {
|
|
@@ -156,11 +156,33 @@ export interface CanvasDocs {
|
|
|
156
156
|
}): Promise<JoinResult>;
|
|
157
157
|
current(): DocSession | undefined;
|
|
158
158
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
159
|
+
* Attach facade presence to an ALREADY-live document (petition I18) — for
|
|
160
|
+
* hosts that own their document lifecycle (`create()`/`open()` + their own
|
|
161
|
+
* transport) and therefore never call `join({presence})`. Creates the
|
|
162
|
+
* session with the public `attachPresence(world, opts)`, installs the
|
|
163
|
+
* presence publish + remote-cursor systems, and exposes it through
|
|
164
|
+
* `docs.presence()` — which is also the seam the behavior runtime reads, so
|
|
165
|
+
* a registered ephemeral behavior leaves dormancy on the next publish step.
|
|
166
|
+
* The caller wires the transport itself: `presence().wire.apply(bytes)`
|
|
167
|
+
* inbound, `presence().onOutbound(send)` outbound (transport-free core —
|
|
168
|
+
* the standing `PresenceSession` contract). Refuses without a live document
|
|
169
|
+
* and refuses while a presence session is already live (either sugar's).
|
|
170
|
+
* Returns an idempotent, IDENTITY-BOUND inverse: it detaches THIS
|
|
171
|
+
* attachment — leave tombstones flush through still-subscribed outbound
|
|
172
|
+
* before wiring tears down (best-effort per subscriber: one that THROWS,
|
|
173
|
+
* e.g. `ws.send` on a closing socket, forfeits its own delivery and those
|
|
174
|
+
* peers fall back to TTL expiry; route `PresenceOpts.onFault` to observe) —
|
|
175
|
+
* and cannot touch a replacement; `docs.close()` and engine disposal run
|
|
176
|
+
* the same teardown automatically.
|
|
177
|
+
*/
|
|
178
|
+
attachPresence(opts: PresenceOpts): () => void;
|
|
179
|
+
/**
|
|
180
|
+
* The live presence session (the `join({presence})` sugar's or
|
|
181
|
+
* `attachPresence`'s), or undefined when doc-less / presence-less. An
|
|
182
|
+
* INSPECTION seam — the devtools dock's ephemeral tab reads
|
|
183
|
+
* `presence().eph` (DevtoolsOpts.presence) — never a sync path; same
|
|
184
|
+
* contract as `DocSession.attachment`. Swaps with the doc lifecycle exactly
|
|
185
|
+
* like `current()`: set by join/attach, cleared by close.
|
|
164
186
|
*/
|
|
165
187
|
presence(): PresenceSession | undefined;
|
|
166
188
|
close(): void;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* scene systems · doc kit · publish step · engine facade · reflector registry.
|
|
4
4
|
* Import wall: strata-ecs + @ice/kernel ONLY — never react/dom/three (enforced).
|
|
5
5
|
*/
|
|
6
|
-
export declare const CORE_VERSION = "0.
|
|
6
|
+
export declare const CORE_VERSION = "0.8.1";
|
|
7
7
|
export { defineSchemaOnce, hmrInvalidateOnSchemaChange } from "./boot/hmr";
|
|
8
8
|
export { All, Any, Not, Related, createWorld, defineQuery, defineSystem, defineTickSystem, enumOf, field, Local, } from "@vibecook/strata-ecs";
|
|
9
9
|
export type { Batch, Component, Condition, Entity, OrderPlace, Pipeline, Query, Relation, Resource, System, SystemCtx, Tag, TickSystem, World, } from "@vibecook/strata-ecs";
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* always resolves to SOMETHING; L0 ingest schedules on it).
|
|
14
14
|
*/
|
|
15
15
|
import type { Entity, World } from "@vibecook/strata-ecs";
|
|
16
|
-
import { SpatialIndex } from "
|
|
16
|
+
import { SpatialIndex } from "../../../kernel/src/index";
|
|
17
17
|
import { type CommitSink } from "../engine/commit-sink";
|
|
18
18
|
import type { Engine } from "../engine/engine";
|
|
19
19
|
import type { InputQueue } from "../input/queue";
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
* calls snap, preserving the pre-T1 behavior exactly.
|
|
55
55
|
*/
|
|
56
56
|
import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
|
|
57
|
-
import type { SpatialIndex } from "
|
|
57
|
+
import type { SpatialIndex } from "../../../kernel/src/index";
|
|
58
58
|
/** Deepest live nav entry, or undefined at root. */
|
|
59
59
|
export declare function currentNavEntry(world: World): Entity | undefined;
|
|
60
60
|
/** The container the user is inside, or undefined at root. */
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* mixed-overlap consequence and accepts it; do not "fix" it here.
|
|
16
16
|
*/
|
|
17
17
|
import type { Component, Entity } from "@vibecook/strata-ecs";
|
|
18
|
-
import type { Cubic, SpatialIndex } from "
|
|
18
|
+
import type { Cubic, SpatialIndex } from "../../../kernel/src/index";
|
|
19
19
|
/** Structural reads both `World` and `SystemCtx` provide. */
|
|
20
20
|
export interface PickReader {
|
|
21
21
|
isAlive(e: Entity): boolean;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* numbered by their declared `index` when given, else by declaration order; the
|
|
10
10
|
* side's `count` drives the even spacing.
|
|
11
11
|
*/
|
|
12
|
-
import type { PortSlot } from "
|
|
12
|
+
import type { PortSlot } from "../../../kernel/src/index";
|
|
13
13
|
import type { WidgetPortDecl } from "../widget/define-widget";
|
|
14
14
|
/** Map every declared port id → its `PortSlot` (side/index/count for even spacing). */
|
|
15
15
|
export declare function portSlots(decls: readonly WidgetPortDecl[]): Map<string, PortSlot>;
|
|
@@ -11,6 +11,17 @@ export interface PresenceOpts {
|
|
|
11
11
|
readonly color: string;
|
|
12
12
|
/** Per-entry TTL (design §15.3), default {@link DEFAULT_PRESENCE_TTL_MS}. */
|
|
13
13
|
readonly ttlMs?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Contained presence faults, host-routable (0.8.0 review): `"outbound"` — a
|
|
16
|
+
* subscriber (canonically `ws.send` on a closing socket) threw and its bytes
|
|
17
|
+
* were dropped for that subscriber; `"leave"` — the leave flush failed
|
|
18
|
+
* during detach and remote peers will drop this peer at TTL instead of
|
|
19
|
+
* immediately; `"heal"` — the reset-heal's leave failed and stale keys age
|
|
20
|
+
* out at TTL. Every fault is contained either way — this is observability
|
|
21
|
+
* (telemetry, a "presence degraded" UI state), never control flow. Default:
|
|
22
|
+
* `console.error`.
|
|
23
|
+
*/
|
|
24
|
+
readonly onFault?: (where: "outbound" | "leave" | "heal", error: unknown) => void;
|
|
14
25
|
}
|
|
15
26
|
export interface PresenceSession {
|
|
16
27
|
/** This session's peer id (the ephemeral partition prefix). */
|
|
@@ -3,16 +3,19 @@ import type { Engine } from "../engine/engine";
|
|
|
3
3
|
import { type PresencePublishOpts } from "./publish";
|
|
4
4
|
import type { PresenceSession } from "./presence-kit";
|
|
5
5
|
/**
|
|
6
|
-
* The
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* The tick system that pools + reaps remote cursor entities — standalone
|
|
7
|
+
* export for imperative rigs, which choose their own phase (`installPresence`
|
|
8
|
+
* registers its own copy in `present`, and builds it through a rig so its
|
|
9
|
+
* uninstall can reap the pool too).
|
|
9
10
|
*/
|
|
10
|
-
export declare function createRemoteCursorsSystem(
|
|
11
|
+
export declare function createRemoteCursorsSystem(world: World): TickSystem;
|
|
11
12
|
export type InstallPresenceOpts = PresencePublishOpts;
|
|
12
13
|
/**
|
|
13
14
|
* Wire a presence session into an engine: the publish hook (outbound facet
|
|
14
|
-
* derivation) + the remote-cursor
|
|
15
|
-
* removes both
|
|
16
|
-
*
|
|
15
|
+
* derivation) + the remote-cursor system (`present` phase). Returns an
|
|
16
|
+
* uninstall that removes both AND destroys the system's pooled cursor
|
|
17
|
+
* entities — uninstalling on a live document must not leave ghost cursors
|
|
18
|
+
* (a between-frames call, like every teardown here). Does NOT own the
|
|
19
|
+
* session's lifecycle — call `session.detach()` separately.
|
|
17
20
|
*/
|
|
18
21
|
export declare function installPresence(engine: Engine, session: PresenceSession, opts?: InstallPresenceOpts): () => void;
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
* change-only (design-002 §4 hygiene). Wires/ports are M8 — skipped.
|
|
45
45
|
*/
|
|
46
46
|
import type { Entity, System, TickSystem, World } from "@vibecook/strata-ecs";
|
|
47
|
-
import { SpatialIndex } from "
|
|
47
|
+
import { SpatialIndex } from "../../../kernel/src/index";
|
|
48
48
|
import { type WirePickSource } from "../ops/point-pick";
|
|
49
49
|
export interface PickingSystems {
|
|
50
50
|
spatialSync: TickSystem;
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* screen-constant pick slop as `slopWorld = wirePickSlopPx / zoom`.
|
|
21
21
|
*/
|
|
22
22
|
import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
|
|
23
|
-
import { type SpatialIndex } from "
|
|
23
|
+
import { type SpatialIndex } from "../../../kernel/src/index";
|
|
24
24
|
import type { WirePickSource } from "../ops/point-pick";
|
|
25
25
|
export interface WireSyncSystem {
|
|
26
26
|
wireSync: TickSystem;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* is polish deferred; the one-frame gap is invisible in practice.
|
|
26
26
|
*/
|
|
27
27
|
import type { Entity, System, TickSystem, World } from "@vibecook/strata-ecs";
|
|
28
|
-
import { type SpatialIndex } from "
|
|
28
|
+
import { type SpatialIndex } from "../../../kernel/src/index";
|
|
29
29
|
import type { CommitSink } from "../engine/commit-sink";
|
|
30
30
|
import type { WirePickSource } from "../ops/point-pick";
|
|
31
31
|
/**
|
|
@@ -19,5 +19,5 @@
|
|
|
19
19
|
* behavior clears them on every terminal path.
|
|
20
20
|
*/
|
|
21
21
|
import type { Entity, System, World } from "@vibecook/strata-ecs";
|
|
22
|
-
import type { SpatialIndex } from "
|
|
22
|
+
import type { SpatialIndex } from "../../../kernel/src/index";
|
|
23
23
|
export declare function createDropSystem(world: World, index: SpatialIndex<Entity>): System;
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* marquee camera move re-projects the rect (accepted — design-002 §2).
|
|
20
20
|
*/
|
|
21
21
|
import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
|
|
22
|
-
import { type SpatialIndex } from "
|
|
22
|
+
import { type SpatialIndex } from "../../../kernel/src/index";
|
|
23
23
|
/** The out-of-ECS marquee preview (design-003 §5.7): rect + hit set, recomputed each frame. */
|
|
24
24
|
export interface MarqueeBuffer {
|
|
25
25
|
rect: {
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
* churns nothing). `SpatialVersion` bumps only on a real index change.
|
|
27
27
|
*/
|
|
28
28
|
import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
|
|
29
|
-
import { type SpatialIndex } from "
|
|
29
|
+
import { type SpatialIndex } from "../../../kernel/src/index";
|
|
30
30
|
export declare function createPortMaterialize(world: World, index: SpatialIndex<Entity>): TickSystem;
|
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
* MAX_GUIDES=16 truncation is banned).
|
|
34
34
|
*/
|
|
35
35
|
import type { Entity, TickSystem, World } from "@vibecook/strata-ecs";
|
|
36
|
-
import { type SpatialIndex } from "
|
|
36
|
+
import { type SpatialIndex } from "../../../kernel/src/index";
|
|
37
37
|
export declare function createSnapSystem(world: World, index: SpatialIndex<Entity>): TickSystem;
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* math only needs c0/c1.
|
|
26
26
|
*/
|
|
27
27
|
import type { TickSystem, World } from "@vibecook/strata-ecs";
|
|
28
|
-
import type { CameraState, PortalAffine } from "
|
|
28
|
+
import type { CameraState, PortalAffine } from "../../../kernel/src/index";
|
|
29
29
|
/** The one in-flight nav transition (design-006 §3.1). Inactive = at rest. */
|
|
30
30
|
export declare const NavTransition: import("@vibecook/strata-ecs").Resource<import("@vibecook/strata-ecs").ValueOf<{
|
|
31
31
|
readonly active: import("@vibecook/strata-ecs").FieldSpec<"bool", true>;
|
|
@@ -31,7 +31,7 @@ import type { Entity, World } from "@vibecook/strata-ecs";
|
|
|
31
31
|
import { type DescribeFn, type EntityDescription, type ObserverHandle, type ObserverOptions, type ProfilerHandle, type ProfilerOptions } from "@vibecook/strata-ecs/tools";
|
|
32
32
|
import { type DockOptions } from "./dock";
|
|
33
33
|
import { type GlPanelOptions, type GlPanelStats } from "./gl-panel";
|
|
34
|
-
import { type CanvasEngine, type Engine, type PresenceSession } from "
|
|
34
|
+
import { type CanvasEngine, type Engine, type PresenceSession } from "../../core/src/index";
|
|
35
35
|
export interface DevtoolsOpts {
|
|
36
36
|
/** Where the dock (or, with `dock: false`, each panel) mounts (default: document.body). */
|
|
37
37
|
readonly container?: HTMLElement;
|
|
@@ -27,5 +27,5 @@
|
|
|
27
27
|
* scheduled in a `finally`, so a faulting frame is loud but survivable — the
|
|
28
28
|
* throw still reaches the browser's error handler; only the death is gone.
|
|
29
29
|
*/
|
|
30
|
-
import type { Engine } from "
|
|
30
|
+
import type { Engine } from "../../core/src/index";
|
|
31
31
|
export declare function startRafLoop(engine: Engine): () => void;
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* identical semantics to one-per-element); `element → entity` maps a callback
|
|
20
20
|
* entry back to its widget.
|
|
21
21
|
*/
|
|
22
|
-
import type { Entity, MeasureQueue } from "
|
|
22
|
+
import type { Entity, MeasureQueue } from "../../core/src/index";
|
|
23
23
|
export interface MeasureAdapter {
|
|
24
24
|
/** Begin observing the entity's content element (no-op if `hostFor` yields none). */
|
|
25
25
|
observe(entity: Entity): void;
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
* Law 2 holds: everything here only enqueues (through the adapter or the forced
|
|
27
27
|
* sample) — no world writes, no ECS reads.
|
|
28
28
|
*/
|
|
29
|
-
import type { Entity, MeasureQueue, WidgetMountStore } from "
|
|
29
|
+
import type { Entity, MeasureQueue, WidgetMountStore } from "../../core/src/index";
|
|
30
30
|
/** The element source (the `domWidgets` reflector supplies this via `hostFor`). */
|
|
31
31
|
export interface MeasureWiringHosts {
|
|
32
32
|
hostFor(entity: Entity): HTMLElement | undefined;
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
* `overInteractive` reads false mid-gesture — correct: the gesture owns the
|
|
52
52
|
* pointer, not the widget under it.
|
|
53
53
|
*/
|
|
54
|
-
import { type InputQueue } from "
|
|
54
|
+
import { type InputQueue } from "../../core/src/index";
|
|
55
55
|
import type { CanvasHost } from "./host";
|
|
56
56
|
/**
|
|
57
57
|
* The router GL path's adapter seam (design-004 §4). The GL plane is
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* Law 10: reflectors write output only, never read layout or write ECS — this
|
|
26
26
|
* flush touches only the overlay plane's node styles.
|
|
27
27
|
*/
|
|
28
|
-
import { type MarqueeBuffer, type ReflectorDef, type World } from "
|
|
28
|
+
import { type MarqueeBuffer, type ReflectorDef, type World } from "../../../core/src/index";
|
|
29
29
|
import type { CanvasHost } from "../host";
|
|
30
30
|
export declare function createChromeReflector(host: CanvasHost, _world: World, marqueeBuffer: MarqueeBuffer): ReflectorDef & {
|
|
31
31
|
writes(): number;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* Law 10: reflectors run post-notify, write output only, never read layout
|
|
15
15
|
* or write ECS — this flush touches only `host.container.style`.
|
|
16
16
|
*/
|
|
17
|
-
import type { ReflectorDef } from "
|
|
17
|
+
import type { ReflectorDef } from "../../../core/src/index";
|
|
18
18
|
import type { CanvasHost } from "../host";
|
|
19
19
|
export declare function createCursorReflector(host: CanvasHost, readCursor: () => string): ReflectorDef & {
|
|
20
20
|
writes(): number;
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* Law 10: reflectors run post-notify, write output only, never read layout or
|
|
41
41
|
* write ECS — this flush touches only host `<div>` style/attributes/parentage.
|
|
42
42
|
*/
|
|
43
|
-
import { type Entity, type ReflectorDef, type WidgetMountStore, type World } from "
|
|
43
|
+
import { type Entity, type ReflectorDef, type WidgetMountStore, type World } from "../../../core/src/index";
|
|
44
44
|
/** The two planes a host can live in (design-004 §1: P1 content, P3 lifted). */
|
|
45
45
|
export interface DomWidgetsHost {
|
|
46
46
|
readonly contentPlane: HTMLElement;
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
* is the live div count. Because the reflector is dirty-driven, a static frame
|
|
24
24
|
* does not flush at all, so neither counter moves.
|
|
25
25
|
*/
|
|
26
|
-
import { type ReflectorDef } from "
|
|
26
|
+
import { type ReflectorDef } from "../../../core/src/index";
|
|
27
27
|
import type { CanvasHost } from "../host";
|
|
28
28
|
export declare function createGrayboxReflector(host: CanvasHost): ReflectorDef & {
|
|
29
29
|
styleWrites(): number;
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* Law 10: reflectors run post-notify, write output only, and NEVER read layout
|
|
25
25
|
* or write ECS — this flush touches only `host.contentPlane.style`.
|
|
26
26
|
*/
|
|
27
|
-
import { type ReflectorDef } from "
|
|
27
|
+
import { type ReflectorDef } from "../../../core/src/index";
|
|
28
28
|
/**
|
|
29
29
|
* The camera-transformed DOM plane(s). A `CanvasHost` satisfies this
|
|
30
30
|
* structurally (M3 backward compat); M6 passes `liftedPlane` too so P3 tracks P1.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* cursor dirt only. The plane mounts LAST in the container, above chrome;
|
|
11
11
|
* `pointer-events: none` throughout — cursors are never hit-testable.
|
|
12
12
|
*/
|
|
13
|
-
import { type ReflectorDef, type World } from "
|
|
13
|
+
import { type ReflectorDef, type World } from "../../../core/src/index";
|
|
14
14
|
import type { CanvasHost } from "../host";
|
|
15
15
|
export interface RemoteCursorsReflector {
|
|
16
16
|
readonly reflector: ReflectorDef;
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* via node removal, window blur deliberately does NOT force-blur (the browser
|
|
35
35
|
* restores focus on refocus — adapter's cancelAllInput keeps its hands off).
|
|
36
36
|
*/
|
|
37
|
-
import type { Entity } from "
|
|
37
|
+
import type { Entity } from "../../core/src/index";
|
|
38
38
|
import type { CanvasHost } from "./host";
|
|
39
39
|
/** The widget-declared focus target (a proxy descendant): `<div data-canvas-focus tabIndex={-1}>`. */
|
|
40
40
|
export declare const FOCUS_PROXY_ATTR = "data-canvas-focus";
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* (Selection chrome moved OFF the ground 2026-07-17: rings live with the
|
|
9
9
|
* cards, the multi-select union box is P4 dom chrome — always on top.)
|
|
10
10
|
*/
|
|
11
|
-
import type { GridConfig, SnapGuidesConfig, WirePreviewBuffer, WiresConfig, World } from "
|
|
11
|
+
import type { GridConfig, SnapGuidesConfig, WirePreviewBuffer, WiresConfig, World } from "../../core/src/index";
|
|
12
12
|
import { type GroundLayerHost, type GroundReflector } from "./layer";
|
|
13
13
|
import type { GroundPass } from "./pass";
|
|
14
14
|
import { type GroundRendererLike } from "./renderer";
|
|
@@ -18,7 +18,7 @@ export type { GroundRendererLike } from "./renderer";
|
|
|
18
18
|
export { SoupBuilder, parseCssColor, type Rgba, type TriSoup } from "./passes/soup-collect";
|
|
19
19
|
export { collectGuides } from "./passes/guides-collect";
|
|
20
20
|
export { collectWires } from "./passes/wires-collect";
|
|
21
|
-
export { DEFAULT_GRID_CONFIG, DEFAULT_SNAP_GUIDES_CONFIG, DEFAULT_WIRES_CONFIG, type GridConfig, type SnapGuidesConfig, type WiresConfig, } from "
|
|
21
|
+
export { DEFAULT_GRID_CONFIG, DEFAULT_SNAP_GUIDES_CONFIG, DEFAULT_WIRES_CONFIG, type GridConfig, type SnapGuidesConfig, type WiresConfig, } from "../../core/src/index";
|
|
22
22
|
export interface GroundContext {
|
|
23
23
|
readonly host: GroundLayerHost;
|
|
24
24
|
readonly world: World;
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* class as a pan frame under the old grid). WebGPU init is async: flushes
|
|
19
19
|
* before ready are deferred (flags stay armed), the first ready flush paints.
|
|
20
20
|
*/
|
|
21
|
-
import { type ReflectorDef, type World } from "
|
|
21
|
+
import { type ReflectorDef, type World } from "../../core/src/index";
|
|
22
22
|
import type { GroundPass } from "./pass";
|
|
23
23
|
import type { GroundRendererLike } from "./renderer";
|
|
24
24
|
export interface GroundLayerHost {
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* sibling `*-collect.ts` modules that import ONLY core/kernel, so collectors
|
|
11
11
|
* unit-test under happy-dom with no GPU and no three import.
|
|
12
12
|
*/
|
|
13
|
-
import type { World } from "
|
|
13
|
+
import type { World } from "../../core/src/index";
|
|
14
14
|
import type { Object3D } from "three/webgpu";
|
|
15
15
|
/** Per-flush frame facts every pass collects against. */
|
|
16
16
|
export interface GroundFrame {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* branching. Everything else (fract-distance dots, 0.5-device-px AA,
|
|
13
13
|
* max-composited levels) matches term for term.
|
|
14
14
|
*/
|
|
15
|
-
import { type GridConfig } from "
|
|
15
|
+
import { type GridConfig } from "../../../core/src/index";
|
|
16
16
|
import type { GroundPass } from "../pass";
|
|
17
17
|
export interface GridPass extends GroundPass {
|
|
18
18
|
/** Live re-tune (the react `grid` prop seam) — partial merge over current values. */
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* end ticks. Screen-px output via the kernel `worldToScreen` seam. NO guide
|
|
7
7
|
* count caps (the pool grows; so does the soup).
|
|
8
8
|
*/
|
|
9
|
-
import { type SnapGuidesConfig, type World } from "
|
|
9
|
+
import { type SnapGuidesConfig, type World } from "../../../core/src/index";
|
|
10
10
|
import type { GroundFrame } from "../pass";
|
|
11
11
|
import { type TriSoup } from "./soup-collect";
|
|
12
12
|
export declare const guideQ: import("@vibecook/strata-ecs").Query;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* - Materialized port dots: triangle-fan discs, active color while any
|
|
16
16
|
* connect drag is routed.
|
|
17
17
|
*/
|
|
18
|
-
import { type WirePreviewBuffer, type WiresConfig, type World } from "
|
|
18
|
+
import { type WirePreviewBuffer, type WiresConfig, type World } from "../../../core/src/index";
|
|
19
19
|
import type { GroundFrame } from "../pass";
|
|
20
20
|
import { type TriSoup } from "./soup-collect";
|
|
21
21
|
export declare const wireQ: import("@vibecook/strata-ecs").Query;
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
* `[RoutedConnect, Drag]` value dirt (the buffer updates exactly when the
|
|
6
6
|
* connect recognizer's Drag advances) instead of a per-frame value diff.
|
|
7
7
|
*/
|
|
8
|
-
import { type WirePreviewBuffer, type WiresConfig } from "
|
|
8
|
+
import { type WirePreviewBuffer, type WiresConfig } from "../../../core/src/index";
|
|
9
9
|
import type { GroundPass } from "../pass";
|
|
10
10
|
export declare function createWiresPass(initial?: Partial<WiresConfig>, readPreview?: () => WirePreviewBuffer): GroundPass;
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
* real world and fake scene/camera handles, no GL context.
|
|
43
43
|
*/
|
|
44
44
|
import type { OrthographicCamera, Scene } from "three";
|
|
45
|
-
import { type Engine, type Entity, type SiblingOrderIndex } from "
|
|
45
|
+
import { type Engine, type Entity, type SiblingOrderIndex } from "../../core/src/index";
|
|
46
46
|
import { type IslandStateStore } from "./island-state";
|
|
47
47
|
import { type RenderWriteTrap } from "./dev-write-trap";
|
|
48
48
|
export interface IslandHandle {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* un-shimmed browser production bundle strata's own DEV flag can evaluate
|
|
18
18
|
* true, so registration is gated HERE (default off; demos/traces opt in).
|
|
19
19
|
*/
|
|
20
|
-
import type { World } from "
|
|
20
|
+
import type { World } from "../../core/src/index";
|
|
21
21
|
export interface RenderWriteTrap {
|
|
22
22
|
/** Arm the trap (begin twice without end is a bug — throws). */
|
|
23
23
|
begin(): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import { type Texture } from "three";
|
|
3
|
-
import { type Engine, type WidgetMountStore } from "
|
|
3
|
+
import { type Engine, type WidgetMountStore } from "../../core/src/index";
|
|
4
4
|
import type { GLBridge } from "./bridge";
|
|
5
5
|
export interface GLViewsProps {
|
|
6
6
|
readonly engine: Engine;
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
* facts land next tick via the queue.
|
|
32
32
|
*/
|
|
33
33
|
import { type Intersection, type Object3D } from "three";
|
|
34
|
-
import type { SpatialIndex } from "
|
|
35
|
-
import { type Entity, type World } from "
|
|
34
|
+
import type { SpatialIndex } from "../../kernel/src/index";
|
|
35
|
+
import { type Entity, type World } from "../../core/src/index";
|
|
36
36
|
import type { GLBridge } from "./bridge";
|
|
37
37
|
/** The synthetic event island handlers receive (R3F-handler-compatible core). */
|
|
38
38
|
export interface IslandPointerEvent {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Pure state + counters; no three.js, no ECS, no timing — the GLViews frame
|
|
14
14
|
* pass reads/writes it synchronously.
|
|
15
15
|
*/
|
|
16
|
-
import type { IslandPhase } from "
|
|
16
|
+
import type { IslandPhase } from "../../kernel/src/index";
|
|
17
17
|
/** Resolution + band an island's FBO was last painted at (v1 `paintedAt`). */
|
|
18
18
|
export interface PaintedAt {
|
|
19
19
|
readonly w: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
2
|
import { type Texture } from "three";
|
|
3
|
-
import type { Entity, WidgetType, World } from "
|
|
3
|
+
import type { Entity, WidgetType, World } from "../../core/src/index";
|
|
4
4
|
import type { GLBridge } from "./bridge";
|
|
5
5
|
export interface IslandProps {
|
|
6
6
|
readonly bridge: GLBridge;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* hatch. `<InfiniteCanvas>` provides this automatically; apps that mount
|
|
11
11
|
* WidgetRoot themselves wrap it in `<EngineProvider>`.
|
|
12
12
|
*/
|
|
13
|
-
import { type CanvasEngine, type CanvasOps, type World } from "
|
|
13
|
+
import { type CanvasEngine, type CanvasOps, type World } from "../../core/src/index";
|
|
14
14
|
import { type ReactElement, type ReactNode } from "react";
|
|
15
15
|
export interface EngineProviderProps {
|
|
16
16
|
readonly engine: CanvasEngine;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* (provided per-portal by WidgetRoot) and suspends its subscription while
|
|
14
14
|
* hidden, serving the last snapshot; on show it resubscribes and refreshes.
|
|
15
15
|
*/
|
|
16
|
-
import { type AnyBehaviorDef, type Component, type Entity, type World } from "
|
|
16
|
+
import { type AnyBehaviorDef, type Component, type Entity, type World } from "../../core/src/index";
|
|
17
17
|
/** Per-portal hidden flag (WidgetRoot provides it; defaults to live). */
|
|
18
18
|
export declare const WidgetHiddenContext: import("react").Context<boolean>;
|
|
19
19
|
/**
|