@jamesyong42/infinite-canvas 1.2.0 → 1.4.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.
Files changed (56) hide show
  1. package/README.md +65 -0
  2. package/dist/advanced.cjs +61 -24
  3. package/dist/advanced.cjs.map +1 -1
  4. package/dist/advanced.d.cts +180 -64
  5. package/dist/advanced.d.cts.map +1 -1
  6. package/dist/advanced.d.mts +180 -64
  7. package/dist/advanced.d.mts.map +1 -1
  8. package/dist/advanced.mjs +29 -12
  9. package/dist/advanced.mjs.map +1 -1
  10. package/dist/devtools.cjs +22 -22
  11. package/dist/devtools.cjs.map +1 -1
  12. package/dist/devtools.d.cts +2 -2
  13. package/dist/devtools.d.cts.map +1 -1
  14. package/dist/devtools.d.mts +2 -2
  15. package/dist/devtools.d.mts.map +1 -1
  16. package/dist/devtools.mjs +2 -2
  17. package/dist/devtools.mjs.map +1 -1
  18. package/dist/{hooks-BwY7rRHg.mjs → ecs-3kimUV5Z.mjs} +238 -74
  19. package/dist/ecs-3kimUV5Z.mjs.map +1 -0
  20. package/dist/{hooks-DHShH86C.cjs → ecs-B4QrqfvQ.cjs} +320 -108
  21. package/dist/ecs-B4QrqfvQ.cjs.map +1 -0
  22. package/dist/hooks-CtP02JNt.cjs +3762 -0
  23. package/dist/hooks-CtP02JNt.cjs.map +1 -0
  24. package/dist/hooks-gsQDDE56.mjs +3494 -0
  25. package/dist/hooks-gsQDDE56.mjs.map +1 -0
  26. package/dist/index-3GY7T8JM.d.mts +480 -0
  27. package/dist/index-3GY7T8JM.d.mts.map +1 -0
  28. package/dist/index-B7B1tRPl.d.cts +480 -0
  29. package/dist/index-B7B1tRPl.d.cts.map +1 -0
  30. package/dist/index-DSdbSQ_t.d.cts +1451 -0
  31. package/dist/index-DSdbSQ_t.d.cts.map +1 -0
  32. package/dist/index-Dj9odADH.d.mts +1451 -0
  33. package/dist/index-Dj9odADH.d.mts.map +1 -0
  34. package/dist/index.cjs +3901 -643
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +315 -138
  37. package/dist/index.d.cts.map +1 -1
  38. package/dist/index.d.mts +315 -138
  39. package/dist/index.d.mts.map +1 -1
  40. package/dist/index.mjs +3803 -571
  41. package/dist/index.mjs.map +1 -1
  42. package/package.json +2 -2
  43. package/dist/SelectionRenderer-CR2PBQwx.d.cts +0 -105
  44. package/dist/SelectionRenderer-CR2PBQwx.d.cts.map +0 -1
  45. package/dist/SelectionRenderer-DlsBstAq.d.mts +0 -105
  46. package/dist/SelectionRenderer-DlsBstAq.d.mts.map +0 -1
  47. package/dist/WebGLWidgetLayer-BBMuwzHq.cjs +0 -3560
  48. package/dist/WebGLWidgetLayer-BBMuwzHq.cjs.map +0 -1
  49. package/dist/WebGLWidgetLayer-C3p1tnpm.mjs +0 -3375
  50. package/dist/WebGLWidgetLayer-C3p1tnpm.mjs.map +0 -1
  51. package/dist/engine-BfbvWXSk.d.mts +0 -982
  52. package/dist/engine-BfbvWXSk.d.mts.map +0 -1
  53. package/dist/engine-CCjuFMC-.d.cts +0 -982
  54. package/dist/engine-CCjuFMC-.d.cts.map +0 -1
  55. package/dist/hooks-BwY7rRHg.mjs.map +0 -1
  56. package/dist/hooks-DHShH86C.cjs.map +0 -1
package/dist/index.d.mts CHANGED
@@ -1,113 +1,25 @@
1
- import { $ as Active, A as NavigationFrame, At as CommandBuffer, B as WidgetSurface, Ct as Visible, D as CardPresetsResource, Dt as WorldBounds, E as CameraResource, Et as WidgetData, F as DomWidgetProps, Ft as ArchetypeRegistry, G as FrameTimeStats, H as isR3FWidget, I as R3FWidget, It as SpawnOptions, J as R3FSample, L as R3FWidgetProps, Lt as createArchetypeRegistry, M as ViewportResource, Mt as ResizeCommand, N as ZoomConfigResource, Nt as SetComponentCommand, O as CursorResource, Ot as ZIndex, P as DomWidget, Pt as Archetype, Q as WebGLStats, R as Widget$1, S as SnapResult, St as Transform2D, T as BreakpointConfigResource, Tt as WidgetBreakpoint, U as StandardSchemaV1, V as createWidgetRegistry, W as EcsStats, X as TickSample, Y as R3FStats, Z as WebGLPass, _ as worldBoundsToAABB, _t as Resizable, a as PointerDirective, at as CursorHint, b as EqualSpacingIndicator, bt as Selected, c as createLayoutEngine, ct as Dragging, d as Rect, dt as Hitbox, et as CSSCursor, f as Vec2, ft as InteractionRole, g as screenToWorld, gt as Parent, h as pointInAABB, ht as Locked, i as Modifiers, it as Container, j as NavigationStackResource, jt as MoveCommand, k as CursorResourceData, kt as Command, lt as HandleSet, m as intersectsAABB, mt as InteractionRoleType, n as LayoutEngine, nt as CardPreset, ot as CursorHintData, p as clamp, pt as InteractionRoleData, q as ProfilerStats, r as LayoutEngineConfig, rt as Children, s as VisibleEntity, st as Draggable, t as FrameChanges, tt as Card, u as AABB, ut as HandleSetData, v as worldToScreen, vt as ResizeHandlePos, w as Breakpoint, wt as Widget, x as SnapGuide, xt as SelectionFrame, y as EntityBounds, yt as Selectable, z as WidgetRegistry } from "./engine-BfbvWXSk.mjs";
2
- import { a as DEFAULT_GRID_CONFIG, d as WidgetResolverProvider, f as useContainerRef, m as useWidgetResolver, n as SelectionBounds, o as GridConfig, p as useLayoutEngine, r as SelectionConfig, t as DEFAULT_SELECTION_CONFIG, u as ResolvedWidget } from "./SelectionRenderer-DlsBstAq.mjs";
3
- import { ComponentInit, ComponentType, ComponentType as ComponentType$1, EntityId, EntityId as EntityId$1, ResourceType, ResourceType as ResourceType$1, TagType, TagType as TagType$1, Unsubscribe } from "@jamesyong42/reactive-ecs";
1
+ import { $ as FrameCameraState, $t as Visible, A as createWidgetRegistry, At as CursorHintData, B as WebGLPass, Bt as OverlapCandidate, C as R3FWidget, Ct as CardPreset, D as WidgetInteractionHandlers, Dt as ContainerChildren, E as isR3FWidget, Et as ContainerCamera, F as ProfilerStats, Ft as InteractionRoleType, G as SnapResult, Gt as Selectable, H as EntityBounds, Ht as ParentFrame, I as R3FPhaseHistogram, It as Layer, J as BreakpointConfigResource, Jt as SnapSource, Kt as Selected, L as R3FSample, Lt as LayerData, M as EcsStats, Mt as Dragging, N as FrameTimeStats, Nt as InteractionRole, O as WidgetRegistry, Ot as Culled, Pt as InteractionRoleData, Q as CursorResourceData, Qt as TweenEasing, R as R3FStats, Rt as LayerName, S as DomWidgetProps, St as CardOverlapHotPoint, T as Widget$1, Tt as Container, U as EqualSpacingIndicator, Ut as Resizable, V as WebGLStats, Vt as OverlapTarget, W as SnapGuide, Wt as ResizeHandlePos, X as CardPresetsResource, Xt as Transform2D, Y as CameraResource, Yt as SnapTarget, Z as CursorResource, Zt as TransformTween, _ as Archetype, _t as screenToWorld, a as Modifiers, b as createArchetypeRegistry, bt as CSSCursor, c as Command, d as EntitySnapshot, dt as Vec2, en as Widget, et as LayerOrderData, f as MoveCommand, ft as aabbToRect, g as snapshotEntity, gt as rectToAABB, h as rehydrateEntity, ht as pointInAABB, i as LayoutEngineConfig, it as RootCameraResource, j as StandardSchemaV1, jt as Draggable, k as WidgetSurface, kt as CursorHint, l as CommandBuffer, lt as AABB, m as SetComponentCommand, mt as intersectsAABB, n as FrameChanges, nn as WidgetData, nt as NavigationFrame, o as PointerDirective, ot as ViewportResource, p as ResizeCommand, pt as clamp, q as Breakpoint, qt as SelectionFrame, r as LayoutEngine, rn as ZIndex, rt as NavigationStackResource, s as VisibleEntity, st as ZoomConfigResource, t as createLayoutEngine, tn as WidgetBreakpoint, tt as LayerOrderResource, u as ConsumeCommand, ut as Rect, v as ArchetypeRegistry, vt as worldToScreen, w as R3FWidgetProps, wt as Children, x as DomWidget, xt as Card, y as SpawnOptions, yt as Active, z as TickSample, zt as Locked } from "./index-Dj9odADH.mjs";
2
+ import { A as SelectionConfig, D as SnapGuideConfig, E as DEFAULT_SNAP_GUIDE_CONFIG, F as ResolvedWidget, I as WidgetResolverProvider, L as useWidgetResolver, M as DEFAULT_GRID_CONFIG, N as GridConfig, O as DEFAULT_SELECTION_CONFIG, V as useContainerRef, c as useSharedTexture, d as useWidgetPhase, k as SelectionBounds, l as useWidgetAnimation, m as R3FPhase, n as isOutOfBand, o as useSharedGeometry, r as selectBand, s as useSharedMaterial, t as ZOOM_BANDS, u as useWidgetInvalidate, z as useLayoutEngine } from "./index-3GY7T8JM.mjs";
3
+ import { ComponentInit, ComponentType, ComponentType as ComponentType$1, EntityId, EntityId as EntityId$1, ResourceType, ResourceType as ResourceType$1, TagType, TagType as TagType$1, Unsubscribe, World, World as World$1 } from "@jamesyong42/reactive-ecs";
4
4
  import * as React$1 from "react";
5
5
  import React, { ReactNode } from "react";
6
6
  import * as _$react_jsx_runtime0 from "react/jsx-runtime";
7
7
 
8
- //#region src/react/card.d.ts
9
- /** Props accepted by `<CardFrame>`. */
10
- interface CardFrameProps {
11
- entityId: EntityId$1;
12
- children?: React$1.ReactNode;
13
- className?: string;
14
- /** Merged into the frame div's style (wins over defaults). */
15
- style?: React$1.CSSProperties;
16
- }
8
+ //#region src/ecs/hierarchy.d.ts
17
9
  /**
18
- * Visual chrome for an iOS-style card: rounded corners, hairline ring,
19
- * soft drop shadow, and a subtle lift (scale + stronger shadow) while
20
- * the entity carries the `Dragging` tag.
10
+ * Walks the `ParentFrame` chain from `descendant` upward and returns
11
+ * true iff `candidate` appears on that chain (inclusive check excluded:
12
+ * an entity is not considered its own ancestor).
21
13
  *
22
- * Uses CSS transitions no animation library dependency.
14
+ * Used by `CardContainer`'s default `canAccept` as a cycle-guard so
15
+ * dragging a container onto one of its own descendants is rejected
16
+ * before any mutation fires (RFC-004 § Phase 5). Cheap — the chain is
17
+ * typically 0–3 deep. Capped at a sane depth to defend against
18
+ * pathological / malformed worlds.
23
19
  */
24
- declare function CardFrame({
25
- entityId,
26
- children,
27
- className,
28
- style
29
- }: CardFrameProps): _$react_jsx_runtime0.JSX.Element;
30
- /** Options passed to `createCardWidget`. */
31
- interface CreateCardWidgetOptions<T> {
32
- /** Unique widget type id. Doubles as the archetype id. */
33
- type: string;
34
- /** Which iOS preset the card sits at. Fixed for the widget's lifetime (change via `engine.set(id, Card, { preset })`). */
35
- size: CardPreset;
36
- /** Standard Schema v1-compatible validator for the widget's data. */
37
- schema: StandardSchemaV1<any, T>;
38
- /** Default data for new instances; merged with user-supplied data at spawn. */
39
- defaultData: T;
40
- /** The card's rendered content. Receives entityId + typed data. */
41
- render: React$1.ComponentType<{
42
- entityId: EntityId$1;
43
- data: T;
44
- }>;
45
- }
46
- /**
47
- * Returns a paired widget + archetype for an iOS-style card. Register both
48
- * with `createLayoutEngine({ widgets: [card.widget], archetypes: [card.archetype] })`
49
- * (or via `engine.registerWidget` / `engine.registerArchetype`) and spawn with
50
- * `engine.spawn('your-card-type', { at, data })`.
51
- *
52
- * The produced widget is non-resizable (Selectable + Draggable only), wrapped
53
- * in `<CardFrame>`, and spawns with a `Card` component so `cardSystem` enforces
54
- * the preset size each tick.
55
- */
56
- declare function createCardWidget<T>(opts: CreateCardWidgetOptions<T>): {
57
- widget: DomWidget<T>;
58
- archetype: Archetype;
59
- };
20
+ declare function isFrameAncestorOf(world: World$1, candidate: EntityId$1, descendant: EntityId$1): boolean;
60
21
  //#endregion
61
- //#region src/react/geometry-card.d.ts
62
- /** Background options for a geometry card widget. */
63
- type GeometryCardBackground = 'card' | 'transparent' | {
64
- /** Hex color for the card back (e.g. '#1C1C1E' dark, '#F2F2F7' light). */color: string; /** PBR roughness. Default 0.55. */
65
- roughness?: number; /** PBR metalness. Default 0. */
66
- metalness?: number;
67
- };
68
- /** Props passed to the user's geometry component. */
69
- interface GeometryCardRenderProps<T> {
70
- entityId: EntityId$1;
71
- data: T;
72
- /** Widget width in world units. */
73
- width: number;
74
- /** Widget height in world units. */
75
- height: number;
76
- }
77
- /** Options for `createGeometryCardWidget`. */
78
- interface CreateGeometryCardWidgetOptions<T> {
79
- /** Unique widget type id. Doubles as the archetype id. */
80
- type: string;
81
- /** iOS card preset size. */
82
- size: CardPreset;
83
- /** Standard Schema v1-compatible validator for the widget's data. */
84
- schema: StandardSchemaV1<any, T>;
85
- /** Default data for new instances. */
86
- defaultData: T;
87
- /**
88
- * `'card'` (default) renders a dark iOS-style card back behind the geometry.
89
- * `'transparent'` skips the card so the geometry floats over the canvas.
90
- * Object form customises the back's color and PBR parameters.
91
- */
92
- background?: GeometryCardBackground;
93
- /** The 3D content rendered in local space (origin at centre). */
94
- geometry: React$1.ComponentType<GeometryCardRenderProps<T>>;
95
- }
96
- /**
97
- * Returns a paired R3F widget + archetype for a card-shaped 3D widget.
98
- * Behaves like {@link createCardWidget} — fixed preset size, non-resizable,
99
- * no engine-drawn selection frame, and lifts on drag (scale + z) — but
100
- * renders a three.js scene instead of DOM content.
101
- *
102
- * Lighting: this helper adds no lights. Declare your own in the `geometry`
103
- * component (typically a local `pointLight` scoped with `distance`).
104
- */
105
- declare function createGeometryCardWidget<T>(opts: CreateGeometryCardWidgetOptions<T>): {
106
- widget: R3FWidget<T>;
107
- archetype: Archetype;
108
- };
109
- //#endregion
110
- //#region src/react/hooks.d.ts
22
+ //#region src/react/hooks/ecs.d.ts
111
23
  /**
112
24
  * Reactively reads an ECS component from an entity.
113
25
  * Returns undefined if the entity doesn't have the component. Re-renders when the component changes.
@@ -166,93 +78,358 @@ declare function useRegisteredComponents(): ComponentType$1[];
166
78
  */
167
79
  declare function useRegisteredTags(): TagType$1[];
168
80
  //#endregion
81
+ //#region src/react/hooks/widget.d.ts
82
+ /**
83
+ * Returns the custom data attached to a widget entity.
84
+ * Use the generic parameter for type safety: `useWidgetData<MyData>(entityId)`. Re-renders when data changes.
85
+ */
86
+ declare function useWidgetData<T = Record<string, unknown>>(entityId: EntityId$1): T;
87
+ /**
88
+ * Returns the current responsive breakpoint for a widget based on its screen-space size.
89
+ * Re-renders when the breakpoint changes.
90
+ */
91
+ declare function useBreakpoint(entityId: EntityId$1): Breakpoint;
92
+ /**
93
+ * Returns child entity IDs of a container entity.
94
+ * Re-renders when children are added or removed.
95
+ */
96
+ declare function useChildren(entityId: EntityId$1): EntityId$1[];
97
+ /**
98
+ * Returns whether the entity is currently selected.
99
+ * Re-renders when the entity's selection state changes.
100
+ */
101
+ declare function useIsSelected(entityId: EntityId$1): boolean;
102
+ /**
103
+ * Returns a function to update the widget's custom data.
104
+ * Merges the patch into existing data via shallow spread.
105
+ */
106
+ declare function useUpdateWidget(entityId: EntityId$1): (patch: Record<string, unknown>) => void;
107
+ //#endregion
108
+ //#region src/react/widgets/overlap-glow.d.ts
109
+ /**
110
+ * Overlap glow — visual config for the drag-over highlight applied to
111
+ * cards (DOM `CardChrome` + R3F `CompositionMaterial`).
112
+ *
113
+ * Single-layer design: a soft radial gradient at the hot point in a
114
+ * neutral color, blended normally over the card content. Deliberately
115
+ * simple — no backdrop-filter, no saturation/contrast tricks, no rim,
116
+ * no bloom. Three tunables: color, alpha (per state), falloff radius.
117
+ *
118
+ * Flows two ways from `<InfiniteCanvas overlapGlow={...} />`:
119
+ * 1. CSS custom properties on the canvas container — read by
120
+ * `CardChrome` via `var(--ic-glow-…, fallback)` for DOM widgets.
121
+ * 2. Shared shader uniforms — every `CompositionMaterial` instance
122
+ * references the same uniform objects, so mutating
123
+ * {@link sharedGlowUniforms} updates all R3F cards at once.
124
+ *
125
+ * Each `[candidate, target]` pair holds the value used while the card
126
+ * is just an overlap candidate vs. when the drop will actually consume.
127
+ */
128
+ interface OverlapGlowConfig {
129
+ /** Inner glow RGB color in 0-1 range. */
130
+ glowColor: [number, number, number];
131
+ /** Inner-glow alpha, [candidate, target]. */
132
+ glowAlpha: [number, number];
133
+ /**
134
+ * Inner-glow blur radius in CSS px — the blur arg of the inset
135
+ * box-shadow that paints the glow. Matches `--glow-size` in the
136
+ * reference (card-light.html). [candidate, target].
137
+ */
138
+ glowSize: [number, number];
139
+ /** Rim RGB color in 0-1 range (independent of glowColor). */
140
+ rimColor: [number, number, number];
141
+ /** Rim width in CSS px (DOM only — shader rim thickness is fixed). */
142
+ rimWidth: number;
143
+ /** Rim alpha at the bright (hot-point-side) end, [candidate, target]. */
144
+ rimAlpha: [number, number];
145
+ /**
146
+ * Rim radial-gradient circle radius in CSS px. Matches `600px circle`
147
+ * in the reference. Larger = more uniform rim (less pooling toward
148
+ * hot point); smaller = tighter pooling.
149
+ */
150
+ rimRadius: number;
151
+ }
152
+ declare const DEFAULT_OVERLAP_GLOW_CONFIG: OverlapGlowConfig;
153
+ //#endregion
169
154
  //#region src/react/InfiniteCanvas.d.ts
170
155
  /** Imperative handle exposed via `ref` on InfiniteCanvas for programmatic control. */
171
156
  interface InfiniteCanvasHandle {
172
- /** Moves the camera to the specified world coordinates. */
173
157
  panTo(worldX: number, worldY: number): void;
174
- /** Sets the zoom level directly. */
175
158
  zoomTo(zoom: number): void;
176
- /** Adjusts camera to fit all entities in the viewport. */
177
159
  zoomToFit(padding?: number): void;
178
- /** Undoes the last command or command group. */
179
160
  undo(): void;
180
- /** Redoes the last undone command. */
181
161
  redo(): void;
182
- /** Returns the underlying LayoutEngine instance. */
183
162
  getEngine(): LayoutEngine;
184
163
  }
185
- /** Props for the InfiniteCanvas component. */
186
164
  interface InfiniteCanvasProps {
187
165
  /**
188
166
  * The LayoutEngine instance powering this canvas. Create with `createLayoutEngine()`.
189
- * Widgets and archetypes must be registered on the engine — via config or
190
- * `engine.registerWidget` / `engine.registerArchetype`.
191
167
  */
192
168
  engine: LayoutEngine;
193
169
  /** Grid configuration. Pass `false` to disable the grid entirely. */
194
170
  grid?: Partial<GridConfig> | false;
171
+ /**
172
+ * Drag-over glow configuration — controls every visual parameter of
173
+ * the highlight applied to a card while another card is being dragged
174
+ * over it. Drives both the DOM `CardChrome` (via CSS custom
175
+ * properties on the canvas container) and the R3F compositor shader
176
+ * (via shared uniforms) so the look stays in sync across widget
177
+ * surfaces.
178
+ */
179
+ overlapGlow?: Partial<OverlapGlowConfig>;
195
180
  /** Selection highlight style configuration. */
196
181
  selection?: Partial<SelectionConfig>;
197
- /** Called when the set of selected entities changes. */
182
+ /** Snap guide overlay style (color, line width, alpha). */
183
+ snapGuides?: Partial<SnapGuideConfig>;
198
184
  onSelectionChange?: (entityIds: EntityId$1[]) => void;
199
- /** Called when the camera (pan/zoom) changes. */
200
185
  onCameraChange?: (camera: {
201
186
  x: number;
202
187
  y: number;
203
188
  zoom: number;
204
189
  }) => void;
205
- /** Called when navigation depth changes (entering/exiting containers). */
206
190
  onNavigationChange?: (depth: number, containerId: EntityId$1 | null) => void;
207
- /** CSS class name applied to the root container div. */
208
191
  className?: string;
209
- /** Inline styles applied to the root container div. */
210
192
  style?: React.CSSProperties;
211
- /** Overlay children (toolbars, panels) rendered on top of the canvas. */
212
193
  children?: React.ReactNode;
194
+ /**
195
+ * R3F nodes mounted at the root of the internal `<Canvas>`, as siblings
196
+ * of the widget compositor. Use this for canvas-level Three.js state
197
+ * that must survive widget lifecycle — drei's `<Environment>` is the
198
+ * canonical case: mounting it in a widget ties global IBL to that
199
+ * widget's `Active` state, so consuming it into a folder or
200
+ * navigating away kills lighting for every other widget. A root-level
201
+ * `<Environment>` stays mounted as long as the canvas itself is, and
202
+ * the compositor propagates its texture to every per-widget scene.
203
+ */
204
+ r3fRoot?: React.ReactNode;
213
205
  }
214
206
  declare const InfiniteCanvas: React.ForwardRefExoticComponent<InfiniteCanvasProps & React.RefAttributes<InfiniteCanvasHandle>>;
215
207
  //#endregion
216
- //#region src/react/WidgetProvider.d.ts
208
+ //#region src/react/widgets/WidgetProvider.d.ts
217
209
  interface WidgetProviderProps {
218
210
  engine: LayoutEngine;
219
211
  children?: ReactNode;
220
212
  }
221
213
  /**
222
214
  * Bridges the engine's widget registry to React context so WidgetSlot /
223
- * WebGLWidgetLayer can resolve components by type.
215
+ * R3FManager can resolve components by type.
224
216
  */
225
217
  declare function WidgetProvider({
226
218
  engine,
227
219
  children
228
220
  }: WidgetProviderProps): _$react_jsx_runtime0.JSX.Element;
229
221
  //#endregion
230
- //#region src/react/widget-hooks.d.ts
231
- /**
232
- * Returns the custom data attached to a widget entity.
233
- * Use the generic parameter for type safety: `useWidgetData<MyData>(entityId)`. Re-renders when data changes.
234
- */
235
- declare function useWidgetData<T = Record<string, unknown>>(entityId: EntityId$1): T;
222
+ //#region src/react/widgets/CardChrome.d.ts
223
+ /** Visual variants for the card chrome — matches the iOS card aesthetics. */
224
+ interface CardChromeProps {
225
+ /**
226
+ * True while the user is actively dragging this card. Triggers a CSS
227
+ * transition: scale up slightly and deepen the drop shadow.
228
+ */
229
+ lifted?: boolean;
230
+ /** Border radius in CSS pixels. Default 21.67 — the iOS card spec. */
231
+ radius?: number;
232
+ /**
233
+ * Background color (any valid CSS background value). Skip / pass
234
+ * `'transparent'` if the children paint their own background.
235
+ */
236
+ background?: string;
237
+ /** Extra class name appended to the chrome div. */
238
+ className?: string;
239
+ /** Style overrides — merged after the chrome's defaults. */
240
+ style?: React$1.CSSProperties;
241
+ /**
242
+ * Drag-over highlight state. When `overlapCandidate` is true, a single
243
+ * radial gradient glow renders at `(hotX, hotY)` in [0,1] local coords
244
+ * with intensity scaled by `hotStrength`. `overlapTarget` swaps between
245
+ * the candidate / target alpha + falloff CSS vars (configured via
246
+ * `OverlapGlowConfig`). All five props default to a no-op.
247
+ */
248
+ overlapCandidate?: boolean;
249
+ overlapTarget?: boolean;
250
+ hotX?: number;
251
+ hotY?: number;
252
+ hotStrength?: number;
253
+ /** Children render *inside* the chrome (clipped to its rounded shape). */
254
+ children?: React$1.ReactNode;
255
+ }
236
256
  /**
237
- * Returns the current responsive breakpoint for a widget based on its screen-space size.
238
- * Re-renders when the breakpoint changes.
257
+ * iOS-style card chrome rounded background, hairline ring, soft drop
258
+ * shadow, and a smooth lift (scale + stronger shadow) when `lifted` is
259
+ * true. A single soft radial-gradient glow renders at the hot point
260
+ * during overlap (no rim, no bloom, no backdrop-filter). Glow color,
261
+ * alpha, and falloff are tunable via the `--ic-glow-*` CSS vars set by
262
+ * `<InfiniteCanvas overlapGlow={…}>`.
263
+ *
264
+ * Pure presentational component with no ECS or compositor coupling. Used
265
+ * by both the DOM `createCardWidget` (wrapping inner content) and the R3F
266
+ * `createGeometryCardWidget` (rendered via a DOM slot beneath the WebGL
267
+ * canvas, with the 3D content floating on top).
239
268
  */
240
- declare function useBreakpoint(entityId: EntityId$1): Breakpoint;
269
+ declare function CardChrome({
270
+ lifted,
271
+ radius,
272
+ background,
273
+ className,
274
+ style,
275
+ overlapCandidate,
276
+ overlapTarget,
277
+ hotX,
278
+ hotY,
279
+ hotStrength,
280
+ children
281
+ }: CardChromeProps): _$react_jsx_runtime0.JSX.Element;
282
+ //#endregion
283
+ //#region src/react/widgets/card.d.ts
284
+ /** Props accepted by `<CardFrame>`. */
285
+ interface CardFrameProps {
286
+ entityId: EntityId$1;
287
+ children?: React$1.ReactNode;
288
+ className?: string;
289
+ /** Merged into the frame div's style (wins over defaults). */
290
+ style?: React$1.CSSProperties;
291
+ }
241
292
  /**
242
- * Returns child entity IDs of a container entity.
243
- * Re-renders when children are added or removed.
293
+ * Visual chrome for an iOS-style card. Reads the entity's `Dragging` tag
294
+ * and forwards `lifted` to {@link CardChrome}, which owns the actual
295
+ * appearance (rounded corners, hairline ring, soft drop shadow, lift
296
+ * transition). Same chrome is used by R3F geometry cards via a DOM slot
297
+ * beneath the WebGL canvas, so DOM and 3D cards stay visually identical.
244
298
  */
245
- declare function useChildren(entityId: EntityId$1): EntityId$1[];
299
+ declare function CardFrame({
300
+ entityId,
301
+ children,
302
+ className,
303
+ style
304
+ }: CardFrameProps): _$react_jsx_runtime0.JSX.Element;
305
+ /** Options passed to `createCardWidget`. */
306
+ interface CreateCardWidgetOptions<T> {
307
+ /** Unique widget type id. Doubles as the archetype id. */
308
+ type: string;
309
+ /** Which iOS preset the card sits at. Fixed for the widget's lifetime (change via `engine.set(id, Card, { preset })`). */
310
+ size: CardPreset;
311
+ /** Standard Schema v1-compatible validator for the widget's data. */
312
+ schema: StandardSchemaV1<any, T>;
313
+ /** Default data for new instances; merged with user-supplied data at spawn. */
314
+ defaultData: T;
315
+ /** The card's rendered content. Receives entityId + typed data. */
316
+ render: React$1.ComponentType<{
317
+ entityId: EntityId$1;
318
+ data: T;
319
+ }>;
320
+ /**
321
+ * Drop-to-consume contract — what this card accepts as a parent
322
+ * (RFC-004 § Phase 1). Stamped onto the archetype's `Card`
323
+ * component so every spawned instance carries it. Defaults to `[]`.
324
+ */
325
+ accepts?: readonly string[];
326
+ /**
327
+ * Drop-to-consume contract — what this card provides when dropped
328
+ * as a child. Stamped onto the archetype's `Card` component.
329
+ * Defaults to `[]`.
330
+ */
331
+ provides?: readonly string[];
332
+ /**
333
+ * Optional widget-type interaction handlers — `onReceiveChild` /
334
+ * `canAccept` / `applyMutation` / `revertMutation` (RFC-004 § Phase 1).
335
+ * Handlers live on the widget binding so every instance of this
336
+ * type shares them.
337
+ */
338
+ interaction?: WidgetInteractionHandlers;
339
+ }
246
340
  /**
247
- * Returns whether the entity is currently selected.
248
- * Re-renders when the entity's selection state changes.
341
+ * Returns a paired widget + archetype for an iOS-style card. Register both
342
+ * with `createLayoutEngine({ widgets: [card.widget], archetypes: [card.archetype] })`
343
+ * (or via `engine.registerWidget` / `engine.registerArchetype`) and spawn with
344
+ * `engine.spawn('your-card-type', { at, data })`.
345
+ *
346
+ * The produced widget is non-resizable (Selectable + Draggable only), wrapped
347
+ * in `<CardFrame>`, and spawns with a `Card` component so `cardSystem` enforces
348
+ * the preset size each tick.
249
349
  */
250
- declare function useIsSelected(entityId: EntityId$1): boolean;
350
+ declare function createCardWidget<T>(opts: CreateCardWidgetOptions<T>): {
351
+ widget: DomWidget<T>;
352
+ archetype: Archetype;
353
+ };
354
+ //#endregion
355
+ //#region src/r3f/widgets/geometry-card.d.ts
356
+ /** Props passed to the user's geometry component. */
357
+ interface GeometryCardRenderProps<T> {
358
+ entityId: EntityId$1;
359
+ data: T;
360
+ /** Widget width in world units. */
361
+ width: number;
362
+ /** Widget height in world units. */
363
+ height: number;
364
+ }
365
+ /** Options for `createGeometryCardWidget`. */
366
+ interface CreateGeometryCardWidgetOptions<T> {
367
+ /** Unique widget type id. Doubles as the archetype id. */
368
+ type: string;
369
+ /** iOS card preset size. */
370
+ size: CardPreset;
371
+ /** Standard Schema v1-compatible validator for the widget's data. */
372
+ schema: StandardSchemaV1<any, T>;
373
+ /** Default data for new instances. */
374
+ defaultData: T;
375
+ /**
376
+ * If false, the widget skips the `Card` component entirely — no DOM
377
+ * `<CardChrome>` (no rounded background, no drop shadow), no
378
+ * lift-on-drag CSS transition, no compositor discard rect for
379
+ * neighbours. The widget's 3D content floats over the canvas
380
+ * background and just stacks on top of overlapping R3F content
381
+ * during drag (via the compositor's renderOrder bump).
382
+ *
383
+ * Default true.
384
+ */
385
+ withCard?: boolean;
386
+ /**
387
+ * CSS background for the chrome's surface — only meaningful when
388
+ * `withCard` is true. Stored on the `Card` component so the chrome
389
+ * + any future tooling can read it. Defaults to the dark iOS card.
390
+ */
391
+ background?: string;
392
+ /** The 3D content rendered in local space (origin at centre). */
393
+ geometry: React$1.ComponentType<GeometryCardRenderProps<T>>;
394
+ /**
395
+ * Drop-to-consume contract — what this card accepts as a parent
396
+ * (RFC-004 § Phase 1). Only meaningful when `withCard` is true,
397
+ * since non-card widgets don't participate in the consume mechanic.
398
+ */
399
+ accepts?: readonly string[];
400
+ /**
401
+ * Drop-to-consume contract — what this card provides as a child.
402
+ * Only meaningful when `withCard` is true.
403
+ */
404
+ provides?: readonly string[];
405
+ /**
406
+ * Optional widget-type interaction handlers. Only meaningful when
407
+ * `withCard` is true; dispatch logic skips non-card widgets.
408
+ */
409
+ interaction?: WidgetInteractionHandlers;
410
+ }
251
411
  /**
252
- * Returns a function to update the widget's custom data.
253
- * Merges the patch into existing data via shallow spread.
412
+ * Returns a paired R3F widget + archetype for a card-shaped 3D widget.
413
+ * Behaves like {@link createCardWidget} fixed preset size, non-resizable,
414
+ * no engine-drawn selection frame, and lifts on drag (scale + z) — but
415
+ * renders a three.js scene instead of DOM content.
416
+ *
417
+ * The card body and drop shadow are rendered as DOM `<CardChrome>`
418
+ * beneath the WebGL canvas, not inside the FBO. The user's `geometry`
419
+ * component renders ONLY the 3D content; chrome is provided by the
420
+ * `Card` ECS component (the source of truth for all card-shaped
421
+ * behavior — chrome, lift, drag-promote, compositor discard).
422
+ *
423
+ * Pass `withCard: false` to skip card behavior entirely (bare 3D
424
+ * widget — no chrome, no lift, no discard).
425
+ *
426
+ * Lighting: this helper adds no lights. Declare your own in the `geometry`
427
+ * component (typically a local `pointLight` scoped with `distance`).
254
428
  */
255
- declare function useUpdateWidget(entityId: EntityId$1): (patch: Record<string, unknown>) => void;
429
+ declare function createGeometryCardWidget<T>(opts: CreateGeometryCardWidgetOptions<T>): {
430
+ widget: R3FWidget<T>;
431
+ archetype: Archetype;
432
+ };
256
433
  //#endregion
257
- export { type AABB, Active, type Archetype, type ArchetypeRegistry, type Breakpoint, BreakpointConfigResource, type CSSCursor, CameraResource, Card, CardFrame, type CardFrameProps, type CardPreset, CardPresetsResource, Children, type Command, CommandBuffer, type ComponentInit, type ComponentType, Container, type CreateCardWidgetOptions, type CreateGeometryCardWidgetOptions, CursorHint, type CursorHintData, CursorResource, type CursorResourceData, DEFAULT_GRID_CONFIG, DEFAULT_SELECTION_CONFIG, type DomWidget, type DomWidgetProps, Draggable, Dragging, type EcsStats, type EntityBounds, type EntityId, type EqualSpacingIndicator, type FrameChanges, type FrameTimeStats, type GeometryCardBackground, type GeometryCardRenderProps, type GridConfig, HandleSet, type HandleSetData, Hitbox, InfiniteCanvas, type InfiniteCanvasHandle, InteractionRole, type InteractionRoleData, type InteractionRoleType, type LayoutEngine, type LayoutEngineConfig, Locked, type Modifiers, MoveCommand, type NavigationFrame, NavigationStackResource, Parent, type PointerDirective, type ProfilerStats, type R3FSample, type R3FStats, type R3FWidget, type R3FWidgetProps, type Rect, Resizable, ResizeCommand, type ResizeHandlePos, type ResolvedWidget, type ResourceType, Selectable, Selected, type SelectionBounds, type SelectionConfig, SelectionFrame, SetComponentCommand, type SnapGuide, type SnapResult, type SpawnOptions, type StandardSchemaV1, type TagType, type TickSample, Transform2D, type Unsubscribe, type Vec2, ViewportResource, Visible, type VisibleEntity, type WebGLPass, type WebGLStats, Widget, WidgetBreakpoint, WidgetData, type Widget$1 as WidgetDef, WidgetProvider, type WidgetRegistry, WidgetResolverProvider, type WidgetSurface, WorldBounds, ZIndex, ZoomConfigResource, clamp, createArchetypeRegistry, createCardWidget, createGeometryCardWidget, createLayoutEngine, createWidgetRegistry, intersectsAABB, isR3FWidget, pointInAABB, screenToWorld, useAllEntities, useBreakpoint, useCamera, useChildren, useComponent, useContainerRef, useEntityComponents, useEntityTags, useIsSelected, useLayoutEngine, useQuery, useRegisteredComponents, useRegisteredTags, useResource, useTag, useTaggedEntities, useUpdateWidget, useWidgetData, useWidgetResolver, worldBoundsToAABB, worldToScreen };
434
+ export { type AABB, Active, type Archetype, type ArchetypeRegistry, type Breakpoint, BreakpointConfigResource, type CSSCursor, CameraResource, Card, CardChrome, type CardChromeProps, CardFrame, type CardFrameProps, CardOverlapHotPoint, type CardPreset, CardPresetsResource, Children, type Command, CommandBuffer, type ComponentInit, type ComponentType, ConsumeCommand, Container, ContainerCamera, ContainerChildren, type CreateCardWidgetOptions, type CreateGeometryCardWidgetOptions, Culled, CursorHint, type CursorHintData, CursorResource, type CursorResourceData, DEFAULT_GRID_CONFIG, DEFAULT_OVERLAP_GLOW_CONFIG, DEFAULT_SELECTION_CONFIG, DEFAULT_SNAP_GUIDE_CONFIG, type DomWidget, type DomWidgetProps, Draggable, Dragging, type EcsStats, type EntityBounds, type EntityId, type EntitySnapshot, type EqualSpacingIndicator, type FrameCameraState, type FrameChanges, type FrameTimeStats, type GeometryCardRenderProps, type GridConfig, InfiniteCanvas, type InfiniteCanvasHandle, InteractionRole, type InteractionRoleData, type InteractionRoleType, Layer, type LayerData, type LayerName, type LayerOrderData, LayerOrderResource, type LayoutEngine, type LayoutEngineConfig, Locked, type Modifiers, MoveCommand, type NavigationFrame, NavigationStackResource, OverlapCandidate, type OverlapGlowConfig, OverlapTarget, ParentFrame, type PointerDirective, type ProfilerStats, type R3FPhase, type R3FPhaseHistogram, type R3FSample, type R3FStats, type R3FWidget, type R3FWidgetProps, type Rect, Resizable, ResizeCommand, type ResizeHandlePos, type ResolvedWidget, type ResourceType, RootCameraResource, Selectable, Selected, type SelectionBounds, type SelectionConfig, SelectionFrame, SetComponentCommand, type SnapGuide, type SnapGuideConfig, type SnapResult, SnapSource, SnapTarget, type SpawnOptions, type StandardSchemaV1, type TagType, type TickSample, Transform2D, TransformTween, type TweenEasing, type Unsubscribe, type Vec2, ViewportResource, Visible, type VisibleEntity, type WebGLPass, type WebGLStats, Widget, WidgetBreakpoint, WidgetData, type Widget$1 as WidgetDef, type WidgetInteractionHandlers, WidgetProvider, type WidgetRegistry, WidgetResolverProvider, type WidgetSurface, type World, ZIndex, ZOOM_BANDS, ZoomConfigResource, aabbToRect, clamp, createArchetypeRegistry, createCardWidget, createGeometryCardWidget, createLayoutEngine, createWidgetRegistry, intersectsAABB, isFrameAncestorOf, isOutOfBand, isR3FWidget, pointInAABB, rectToAABB, rehydrateEntity, screenToWorld, selectBand, snapshotEntity, useAllEntities, useBreakpoint, useCamera, useChildren, useComponent, useContainerRef, useEntityComponents, useEntityTags, useIsSelected, useLayoutEngine, useQuery, useRegisteredComponents, useRegisteredTags, useResource, useSharedGeometry, useSharedMaterial, useSharedTexture, useTag, useTaggedEntities, useUpdateWidget, useWidgetAnimation, useWidgetData, useWidgetInvalidate, useWidgetPhase, useWidgetResolver, worldToScreen };
258
435
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/react/card.tsx","../src/react/geometry-card.tsx","../src/react/hooks.ts","../src/react/InfiniteCanvas.tsx","../src/react/WidgetProvider.tsx","../src/react/widget-hooks.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/ecs/hierarchy.ts","../src/react/hooks/ecs.ts","../src/react/hooks/widget.ts","../src/react/widgets/overlap-glow.ts","../src/react/InfiniteCanvas.tsx","../src/react/widgets/WidgetProvider.tsx","../src/react/widgets/CardChrome.tsx","../src/react/widgets/card.tsx","../src/r3f/widgets/geometry-card.tsx"],"mappings":"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"}