@react-three/fiber 10.0.0-canary.de17310 → 10.0.0-canary.e53bd54

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.
@@ -1,555 +1,13 @@
1
- import * as React from 'react';
2
- import * as THREE from 'three';
3
- import { WebGPURenderer, CanvasTarget } from 'three/webgpu';
4
- import { StoreApi } from 'zustand';
5
- import { UseBoundStoreWithEqualityFn } from 'zustand/traditional';
6
- import { FrameCallback as FrameCallback$1, FrameTimingState, SchedulerApi, UseFrameNextOptions, FrameNextControls } from '@pmndrs/scheduler';
1
+ import { z as FrameNextCallback } from './shared/fiber.Bw8YnGg5.cjs';
2
+ export { A as Act, B as Bridge, C as Camera, i as ComputeFunction, w as Disposable, f as DomEvent, D as Dpr, v as EquConfig, g as EventHandlers, k as EventManager, E as Events, h as FilterFunction, G as FrameCallback, x as FrameNextState, y as FrameState, F as Frameloop, a5 as InternalState, I as Intersection, e as IntersectionEvent, p as IsAllOptional, o as IsOptional, M as Mutable, N as NonFunctionKeys, u as ObjectMap, O as Overwrite, c as Performance, l as PointerCaptureTarget, P as PointerState, n as Properties, a4 as R3FRenderer, b as RenderCallback, R as RootExtension, a6 as RootState, d as RootStore, t as SetBlock, a as Size, S as Subscription, q as ThreeCamera, T as ThreeEvent, U as UnblockProps, V as Viewport, m as VisibilityEntry, X as XRManager, j as XRPointerConfig, a3 as context, r as registerRootExtension, s as setRenderOverride, a2 as useStore, a7 as useThree } from './shared/fiber.Bw8YnGg5.cjs';
3
+ import { UseFrameNextOptions, FrameNextControls } from '@pmndrs/scheduler';
7
4
  export { AddPhaseOptions, FrameControls, FrameNextControls, FrameTimingState, RootOptions, SchedulerApi, UseFrameNextOptions, UseFrameOptions } from '@pmndrs/scheduler';
8
-
9
- //* Utility Types ==============================
10
-
11
- type NonFunctionKeys<P> = { [K in keyof P]-?: P[K] extends Function ? never : K }[keyof P]
12
- type Overwrite<P, O> = Omit<P, NonFunctionKeys<O>> & O
13
- type Properties<T> = Pick<T, NonFunctionKeys<T>>
14
- type Mutable<P> = { -readonly [K in keyof P]: P[K] }
15
- type IsOptional<T> = undefined extends T ? true : false
16
- type IsAllOptional<T extends any[]> = T extends [infer First, ...infer Rest]
17
- ? IsOptional<First> extends true
18
- ? IsAllOptional<Rest>
19
- : false
20
- : true
21
-
22
- //* Camera Types ==============================
23
-
24
- type ThreeCamera = (THREE.OrthographicCamera | THREE.PerspectiveCamera) & { manual?: boolean }
25
-
26
- //* Act Type ==============================
27
-
28
- type Act = <T = any>(cb: () => Promise<T>) => Promise<T>
29
-
30
- //* Bridge & Block Types ==============================
31
-
32
- type Bridge = React.FC<{ children?: React.ReactNode }>
33
-
34
- type SetBlock = false | Promise<null> | null
35
- type UnblockProps = { set: React.Dispatch<React.SetStateAction<SetBlock>>; children: React.ReactNode }
36
-
37
- //* Object Map Type ==============================
38
-
39
- /* Original version
40
- export interface ObjectMap {
41
- nodes: { [name: string]: THREE.Object3D }
42
- materials: { [name: string]: THREE.Material }
43
- meshes: { [name: string]: THREE.Mesh }
44
- }
45
- */
46
- /* This version is an expansion found in a PR by itsdouges that seems abandoned but looks useful.
47
- It allows expansion but falls back to the original shape. (deleted due to stale, but If it doesnt conflict
48
- I will keep the use here)
49
- https://github.com/pmndrs/react-three-fiber/commits/generic-object-map/
50
- His description is:
51
- The object map type is now generic and can optionally declare the available properties for nodes, materials, and meshes.
52
- */
53
- interface ObjectMap<
54
- T extends { nodes?: string; materials?: string; meshes?: string } = {
55
- nodes: string
56
- materials: string
57
- meshes: string
58
- },
59
- > {
60
- nodes: Record<T['nodes'] extends string ? T['nodes'] : string, THREE.Object3D>
61
- materials: Record<T['materials'] extends string ? T['materials'] : string, THREE.Material>
62
- meshes: Record<T['meshes'] extends string ? T['meshes'] : string, THREE.Mesh>
63
- }
64
-
65
- //* Equality Config ==============================
66
-
67
- interface EquConfig {
68
- /** Compare arrays by reference equality a === b (default), or by shallow equality */
69
- arrays?: 'reference' | 'shallow'
70
- /** Compare objects by reference equality a === b (default), or by shallow equality */
71
- objects?: 'reference' | 'shallow'
72
- /** If true the keys in both a and b must match 1:1 (default), if false a's keys must intersect b's */
73
- strict?: boolean
74
- }
75
-
76
- //* Disposable Type ==============================
77
-
78
- interface Disposable {
79
- type?: string
80
- dispose?: () => void
81
- }
82
-
83
- //* Event-related Types =====================================
84
-
85
- interface Intersection extends THREE.Intersection {
86
- /** The event source (the object which registered the handler) */
87
- eventObject: THREE.Object3D
88
- }
89
-
90
- type Camera = THREE.OrthographicCamera | THREE.PerspectiveCamera
91
-
92
- interface IntersectionEvent<TSourceEvent> extends Intersection {
93
- /** The event source (the object which registered the handler) */
94
- eventObject: THREE.Object3D
95
- /** An array of intersections */
96
- intersections: Intersection[]
97
- /** vec3.set(pointer.x, pointer.y, 0).unproject(camera) */
98
- unprojectedPoint: THREE.Vector3
99
- /** Normalized event coordinates */
100
- pointer: THREE.Vector2
101
- /** pointerId of the original event for multiple pointer events */
102
- pointerId: number
103
- /** Delta between first click and this event */
104
- delta: number
105
- /** The ray that pierced it */
106
- ray: THREE.Ray
107
- /** The camera that was used by the raycaster */
108
- camera: Camera
109
- /** stopPropagation will stop underlying handlers from firing */
110
- stopPropagation: () => void
111
- /** The original host event */
112
- nativeEvent: TSourceEvent
113
- /** If the event was stopped by calling stopPropagation */
114
- stopped: boolean
115
- }
116
-
117
- type ThreeEvent<TEvent> = IntersectionEvent<TEvent> & Properties<TEvent>
118
- type DomEvent = PointerEvent | MouseEvent | WheelEvent
119
-
120
- /** DOM event handlers registered on the canvas element */
121
- interface Events {
122
- onClick: EventListener
123
- onContextMenu: EventListener
124
- onDoubleClick: EventListener
125
- onWheel: EventListener
126
- onPointerDown: EventListener
127
- onPointerUp: EventListener
128
- onPointerLeave: EventListener
129
- onPointerMove: EventListener
130
- onPointerCancel: EventListener
131
- onLostPointerCapture: EventListener
132
- onDragEnter: EventListener
133
- onDragLeave: EventListener
134
- onDragOver: EventListener
135
- onDrop: EventListener
136
- }
137
-
138
- /** Event handlers that can be attached to R3F objects (meshes, groups, etc.) */
139
- interface EventHandlers {
140
- onClick?: (event: ThreeEvent<MouseEvent>) => void
141
- onContextMenu?: (event: ThreeEvent<MouseEvent>) => void
142
- onDoubleClick?: (event: ThreeEvent<MouseEvent>) => void
143
- /** Fires continuously while dragging over the object */
144
- onDragOver?: (event: ThreeEvent<DragEvent>) => void
145
- /** Fires once when drag enters the object */
146
- onDragOverEnter?: (event: ThreeEvent<DragEvent>) => void
147
- /** Fires once when drag leaves the object */
148
- onDragOverLeave?: (event: ThreeEvent<DragEvent>) => void
149
- /** Fires when drag misses this object (for objects that have drag handlers) */
150
- onDragOverMissed?: (event: DragEvent) => void
151
- /** Fires when a drop occurs on this object */
152
- onDrop?: (event: ThreeEvent<DragEvent>) => void
153
- /** Fires when a drop misses this object (for objects that have drop handlers) */
154
- onDropMissed?: (event: DragEvent) => void
155
- onPointerUp?: (event: ThreeEvent<PointerEvent>) => void
156
- onPointerDown?: (event: ThreeEvent<PointerEvent>) => void
157
- onPointerOver?: (event: ThreeEvent<PointerEvent>) => void
158
- onPointerOut?: (event: ThreeEvent<PointerEvent>) => void
159
- onPointerEnter?: (event: ThreeEvent<PointerEvent>) => void
160
- onPointerLeave?: (event: ThreeEvent<PointerEvent>) => void
161
- onPointerMove?: (event: ThreeEvent<PointerEvent>) => void
162
- onPointerMissed?: (event: MouseEvent) => void
163
- onPointerCancel?: (event: ThreeEvent<PointerEvent>) => void
164
- onWheel?: (event: ThreeEvent<WheelEvent>) => void
165
- onLostPointerCapture?: (event: ThreeEvent<PointerEvent>) => void
166
-
167
- //* Visibility Events --------------------------------
168
- /** Fires when object enters/exits camera frustum. Receives true when in view, false when out. */
169
- onFramed?: (inView: boolean) => void
170
- /** Fires when object occlusion state changes (WebGPU only, requires occlusionTest=true on object) */
171
- onOccluded?: (occluded: boolean) => void
172
- /** Fires when combined visibility changes (frustum + occlusion + visible prop) */
173
- onVisible?: (visible: boolean) => void
174
- }
175
-
176
- type FilterFunction = (items: THREE.Intersection[], state: RootState) => THREE.Intersection[]
177
- type ComputeFunction = (event: DomEvent, root: RootState, previous?: RootState) => void
178
-
179
- /** Configuration for XR pointer registration (controllers/hands) */
180
- interface XRPointerConfig {
181
- /** Ray origin (updated each frame by XR system) */
182
- ray: THREE.Ray
183
- /** Optional: custom compute function for this pointer */
184
- compute?: (state: RootState) => void
185
- /** Pointer type identifier */
186
- type: 'controller' | 'hand' | 'gaze'
187
- /** Which hand (for controller/hand types) */
188
- handedness?: 'left' | 'right'
189
- }
190
-
191
- interface EventManager<TTarget> {
192
- /** Determines if the event layer is active */
193
- enabled: boolean
194
- /** Event layer priority, higher prioritized layers come first and may stop(-propagate) lower layer */
195
- priority: number
196
- /** The compute function needs to set up the raycaster and an xy- pointer */
197
- compute?: ComputeFunction
198
- /** The filter can re-order or re-structure the intersections */
199
- filter?: FilterFunction
200
- /** The target node the event layer is tied to */
201
- connected?: TTarget
202
- /** All the pointer event handlers through which the host forwards native events */
203
- handlers?: Events
204
- /** Allows re-connecting to another target */
205
- connect?: (target: TTarget) => void
206
- /** Removes all existing events handlers from the target */
207
- disconnect?: () => void
208
- /** Triggers a onPointerMove with the last known event. This can be useful to enable raycasting without
209
- * explicit user interaction, for instance when the camera moves a hoverable object underneath the cursor.
210
- * @param pointerId - Optional pointer ID to update specific pointer only
211
- */
212
- update?: (pointerId?: number) => void
213
- /** Defer pointer move raycasting to frame start (default: true) */
214
- frameTimedRaycasts?: boolean
215
- /** Always fire raycaster immediately on scroll events (default: true) */
216
- alwaysFireOnScroll?: boolean
217
- /** Automatically re-raycast every frame to detect hover changes from moving objects/camera (default: false) */
218
- updateOnFrame?: boolean
219
- /** Flush deferred pointer raycasts. Called by scheduler at frame start (input phase). */
220
- flush?: () => void
221
- /** Register an XR pointer (controller/hand). Returns assigned pointerId */
222
- registerPointer?: (config: XRPointerConfig) => number
223
- /** Unregister an XR pointer */
224
- unregisterPointer?: (pointerId: number) => void
225
- }
226
-
227
- interface PointerCaptureTarget {
228
- intersection: Intersection
229
- target: Element
230
- }
231
-
232
- //* Visibility System Types =====================================
233
-
234
- /** Entry in the visibility registry for tracking object visibility state */
235
- interface VisibilityEntry {
236
- object: THREE.Object3D
237
- handlers: Pick<EventHandlers, 'onFramed' | 'onOccluded' | 'onVisible'>
238
- lastFramedState: boolean | null
239
- lastOccludedState: boolean | null
240
- lastVisibleState: boolean | null
241
- }
242
-
243
- //* Scheduler Types (useFrame) ==============================
244
- //
245
- // The generic, framework-agnostic scheduler types now live in @pmndrs/scheduler.
246
- // This file re-exports them and layers r3f's RootState-aware frame state on top,
247
- // so existing `#types` imports across the codebase keep resolving unchanged.
248
-
249
-
250
-
251
- // Frame State (r3f-specific) --------------------------------
252
-
253
- /**
254
- * State passed to useFrame callbacks (extends RootState with timing).
255
- */
256
- interface FrameNextState extends RootState, FrameTimingState {}
257
-
258
- /** Alias for FrameNextState */
259
- type FrameState = FrameNextState
260
-
261
- // Callback Types (r3f-specific) --------------------------------
262
-
263
- /**
264
- * Callback function for useFrame. Receives the full r3f RootState plus timing.
265
- */
266
- type FrameNextCallback = FrameCallback$1<RootState>
267
-
268
- /** Alias for FrameNextCallback */
269
- type FrameCallback = FrameNextCallback
270
-
271
- //* Renderer Types ========================================
272
-
273
- /** Default renderer type - union of WebGL and WebGPU renderers */
274
- type R3FRenderer = THREE.WebGLRenderer | WebGPURenderer
275
-
276
- //* Core Store Types ========================================
277
-
278
- type Subscription = {
279
- ref: React.RefObject<RenderCallback>
280
- priority: number
281
- store: RootStore
282
- }
283
-
284
- /** Per-pointer state for multi-touch and XR support */
285
- type PointerState = {
286
- /** Objects currently hovered by this pointer */
287
- hovered: Map<string, ThreeEvent<DomEvent>>
288
- /** Objects capturing this pointer */
289
- captured: Map<THREE.Object3D, PointerCaptureTarget>
290
- /** Initial click position [x, y] */
291
- initialClick: [x: number, y: number]
292
- /** Objects hit on initial click */
293
- initialHits: THREE.Object3D[]
294
- }
295
-
296
- type Dpr = number | [min: number, max: number]
297
-
298
- interface Size {
299
- width: number
300
- height: number
301
- top: number
302
- left: number
303
- }
304
-
305
- type Frameloop = 'always' | 'demand' | 'never'
306
-
307
- interface Viewport extends Size {
308
- /** The initial pixel ratio */
309
- initialDpr: number
310
- /** Current pixel ratio */
311
- dpr: number
312
- /** size.width / viewport.width */
313
- factor: number
314
- /** Camera distance */
315
- distance: number
316
- /** Camera aspect ratio: width / height */
317
- aspect: number
318
- }
319
-
320
- type RenderCallback = (state: RootState, delta: number, frame?: XRFrame) => void
321
-
322
- interface Performance {
323
- /** Current performance normal, between min and max */
324
- current: number
325
- /** How low the performance can go, between 0 and max */
326
- min: number
327
- /** How high the performance can go, between min and max */
328
- max: number
329
- /** Time until current returns to max in ms */
330
- debounce: number
331
- /** Sets current to min, puts the system in regression */
332
- regress: () => void
333
- }
334
-
335
- interface InternalState {
336
- interaction: THREE.Object3D[]
337
- subscribers: Subscription[]
338
- /** Per-pointer state (hover, capture, click tracking) - replaces hovered, capturedMap, initialClick, initialHits */
339
- pointerMap: Map<number, PointerState>
340
- /** Pointers needing raycast this frame (used with frameTimedRaycasts) */
341
- pointerDirty: Map<number, DomEvent>
342
- /** Last event received (for events.update() compatibility) */
343
- lastEvent: React.RefObject<DomEvent | null>
344
- /** @deprecated Use pointerMap.get(pointerId).hovered instead */
345
- hovered: Map<string, ThreeEvent<DomEvent>>
346
- /** @deprecated Use pointerMap.get(pointerId).captured instead */
347
- capturedMap: Map<number, Map<THREE.Object3D, PointerCaptureTarget>>
348
- /** @deprecated Use pointerMap.get(pointerId).initialClick instead */
349
- initialClick: [x: number, y: number]
350
- /** @deprecated Use pointerMap.get(pointerId).initialHits instead */
351
- initialHits: THREE.Object3D[]
352
- /** Visibility event registry (onFramed, onOccluded, onVisible) */
353
- visibilityRegistry: Map<string, VisibilityEntry>
354
- /** Whether occlusion queries are enabled (WebGPU only) */
355
- occlusionEnabled: boolean
356
- /** Reference to the invisible occlusion observer mesh */
357
- occlusionObserver: THREE.Mesh | null
358
- /** Cached occlusion results from render pass - keyed by Object3D */
359
- occlusionCache: Map<THREE.Object3D, boolean | null>
360
- /** Internal helper group for R3F system objects (occlusion observer, etc.) */
361
- helperGroup: THREE.Group | null
362
- active: boolean
363
- priority: number
364
- frames: number
365
- subscribe: (callback: React.RefObject<RenderCallback>, priority: number, store: RootStore) => () => void
366
- /** Internal renderer storage - use state.renderer or state.gl to access */
367
- actualRenderer: R3FRenderer
368
- /** Global scheduler reference (for useFrame hook) */
369
- scheduler: SchedulerApi | null
370
- /**
371
- * Replaces `renderer.render(scene, camera)` in the default render job when set. Set it with
372
- * `setRenderOverride(store, fn)`; the job keeps its fps throttle, error handling and user
373
- * render-phase takeover. Used by `useRenderPipeline`.
374
- */
375
- renderOverride?: (() => void) | null
376
- /** This root's unique ID in the global scheduler */
377
- rootId?: string
378
- /** Function to unregister this root from the global scheduler */
379
- unregisterRoot?: () => void
380
- /** Container for child attachment (scene for root, original container for portals) */
381
- container?: THREE.Object3D
382
- /**
383
- * The CanvasTarget this root sizes and renders through.
384
- *
385
- * A primary (`<Canvas id>`) owns the renderer's default target -- the one three itself built
386
- * around the canvas element -- so sizing it is sizing the renderer. A secondary owns a target
387
- * R3F created for its own element. Either way there is exactly one target per canvas element,
388
- * and the canvas-target job makes it the renderer's active one before this root renders.
389
- * Absent on WebGL and on an id-less WebGPU canvas, where the renderer is sized directly.
390
- * @see https://threejs.org/docs/#api/en/renderers/common/CanvasTarget
391
- */
392
- canvasTarget?: CanvasTarget
393
- /**
394
- * Set when this root's canvas target has been resized and the backend's cached render pass
395
- * descriptor (which holds a depth-stencil view built once per canvas) is therefore stale.
396
- *
397
- * Flushed by the canvas-target job in the `start` phase, which is the only place this root's
398
- * target is guaranteed to be the renderer's active one — `backend.updateSize()` operates on
399
- * whatever `getCanvasTarget()` returns, so calling it from the resize subscription would
400
- * invalidate some other canvas's descriptor instead.
401
- *
402
- * @see https://github.com/pmndrs/react-three-fiber/issues/3847
403
- */
404
- canvasTargetSizeDirty?: boolean
405
- /**
406
- * Whether multi-canvas rendering is active.
407
- * True when any canvas uses `renderer={{ primaryCanvas: 'id' }}` to share a renderer.
408
- * When true, setCanvasTarget is called before each render.
409
- */
410
- isMultiCanvas?: boolean
411
- /**
412
- * Whether this canvas is a secondary canvas sharing another's renderer.
413
- * True when `target` prop is used.
414
- */
415
- isSecondary?: boolean
416
- /**
417
- * The id of the primary canvas this secondary canvas targets.
418
- * Only set when isSecondary is true.
419
- */
420
- targetId?: string
421
- /**
422
- * Function to unregister this primary canvas from the registry.
423
- * Only set when this canvas has an `id` prop.
424
- */
425
- unregisterPrimary?: () => void
426
- /** Whether canvas dimensions are forced to even numbers */
427
- forceEven?: boolean
428
- }
429
-
430
- interface XRManager {
431
- connect: () => void
432
- disconnect: () => void
433
- }
434
-
435
- //* Root State Interface ====================================
436
-
437
- interface RootState {
438
- /** Set current state */
439
- set: StoreApi<RootState>['setState']
440
- /** Get current state */
441
- get: StoreApi<RootState>['getState']
442
- /**
443
- * The store of the canvas that owns this root's renderer.
444
- * - For primary/independent canvases: points to its own store (self-reference)
445
- * - For secondary canvases: points to the primary canvas's store
446
- * - Portals copy it from their parent
447
- *
448
- * Anything shared per renderer rather than per canvas (e.g. @react-three/tsl's resources)
449
- * resolves through it.
450
- */
451
- primaryStore: RootStore
452
- /** @deprecated Use `renderer` instead. The instance of the renderer (typed as WebGLRenderer for backwards compat) */
453
- gl: THREE.WebGLRenderer
454
- /** The renderer instance - type depends on entry point (WebGPU, Legacy, or union for default) */
455
- renderer: R3FRenderer
456
- /** Inspector of the webGPU Renderer. Init in the canvas */
457
- inspector: any // Inspector type from three/webgpu
458
-
459
- /** Default camera */
460
- camera: ThreeCamera
461
- /** Camera frustum for visibility checks - auto-updated each frame when autoUpdateFrustum is true */
462
- frustum: THREE.Frustum
463
- /** Whether to automatically update the frustum each frame (default: true) */
464
- autoUpdateFrustum: boolean
465
- /** Default scene (may be overridden in portals to point to the portal container) */
466
- scene: THREE.Scene
467
- /** The actual root THREE.Scene - always points to the true scene, even inside portals */
468
- rootScene: THREE.Scene
469
- /** Default raycaster */
470
- raycaster: THREE.Raycaster
471
- /** Event layer interface, contains the event handler and the node they're connected to */
472
- events: EventManager<any>
473
- /** XR interface */
474
- xr: XRManager
475
- /** Currently used controls */
476
- controls: THREE.EventDispatcher | null
477
- /** Normalized event coordinates */
478
- pointer: THREE.Vector2
479
- /** @deprecated Normalized event coordinates, use "pointer" instead! */
480
- mouse: THREE.Vector2
481
- /** Color space assigned to 8-bit input textures (color maps). Most textures are authored in sRGB. */
482
- textureColorSpace: THREE.ColorSpace
483
- /** Render loop flags */
484
- frameloop: Frameloop
485
- performance: Performance
486
- /** Reactive pixel-size of the canvas */
487
- size: Size
488
- /** Reactive size of the viewport in threejs units */
489
- viewport: Viewport & {
490
- getCurrentViewport: (
491
- camera?: ThreeCamera,
492
- target?: THREE.Vector3 | Parameters<THREE.Vector3['set']>,
493
- size?: Size,
494
- ) => Omit<Viewport, 'dpr' | 'initialDpr'>
495
- }
496
- /** Flags the canvas for render, but doesn't render in itself */
497
- invalidate: (frames?: number, stackFrames?: boolean) => void
498
- /** Advance (render) one step */
499
- advance: (timestamp: number, runGlobalEffects?: boolean) => void
500
- /** Shortcut to setting the event layer */
501
- setEvents: (events: Partial<EventManager<any>>) => void
502
- /** Shortcut to manual sizing. No args resets to props/container. Single arg creates square. */
503
- setSize: (width?: number, height?: number, top?: number, left?: number) => void
504
- /** Shortcut to manual setting the pixel ratio */
505
- setDpr: (dpr: Dpr) => void
506
- /** Shortcut to setting frameloop flags. No args resets to 'always'. */
507
- setFrameloop: (frameloop?: Frameloop) => void
508
- /** Set error state to propagate to error boundary */
509
- setError: (error: Error | null) => void
510
- /** Current error state (null when no error) */
511
- error: Error | null
512
- /** Global Texture registry (key → Texture, usually keyed by URL) - use useTextures() hook for access + lifecycle */
513
- textures: Map<string, THREE.Texture>
514
- /** Internal: refcount per texture key, driven by mounted useTexture consumers (registry enrollment is on by default) */
515
- _textureRefs: Map<string, number>
516
- /** Internal: whether setSize() has taken ownership of canvas dimensions */
517
- _sizeImperative: boolean
518
- /** Internal: stored size props from Canvas for reset functionality */
519
- _sizeProps: { width?: number; height?: number } | null
520
- /** When the canvas was clicked but nothing was hit */
521
- onPointerMissed?: (event: MouseEvent) => void
522
- /** When a dragover event has missed any target */
523
- onDragOverMissed?: (event: DragEvent) => void
524
- /** When a drop event has missed any target */
525
- onDropMissed?: (event: DragEvent) => void
526
- /** If this state model is layered (via createPortal) then this contains the previous layer */
527
- previousRoot?: RootStore
528
- /** Internals */
529
- internal: InternalState
530
- // flags for triggers
531
- // if we are using the webGl renderer, this will be true
532
- isLegacy: boolean
533
- // regardless of renderer, if the system supports webGpu, this will be true
534
- webGPUSupported: boolean
535
- //if we are on native
536
- isNative: boolean
537
- }
538
-
539
- type RootStore = UseBoundStoreWithEqualityFn<StoreApi<RootState>>
540
-
541
- declare const context: React.Context<RootStore>;
542
-
543
- /**
544
- * Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).
545
- * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore
546
- */
547
- declare function useStore(): RootStore;
548
- /**
549
- * Accesses R3F's internal state, containing renderer, canvas, scene, etc.
550
- * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree
551
- */
552
- declare function useThree<T = RootState>(selector?: (state: RootState) => T, equalityFn?: <T>(state: T, newState: T) => boolean): T;
5
+ import 'react';
6
+ import 'three';
7
+ import 'three/webgpu';
8
+ import 'zustand';
9
+ import 'zustand/traditional';
10
+ import 'three/tsl';
553
11
 
554
12
  /**
555
13
  * Frame hook with phase-based ordering, priority, and FPS throttling.
@@ -595,35 +53,4 @@ declare function useThree<T = RootState>(selector?: (state: RootState) => T, equ
595
53
  */
596
54
  declare function useFrame(callback?: FrameNextCallback, priorityOrOptions?: number | UseFrameNextOptions): FrameNextControls;
597
55
 
598
- interface RootExtension {
599
- /** Unique name. Registering the same name again replaces the entry (HMR-safe); roots it already
600
- * set up are not set up a second time, but get the new entry's dispose and hmr. */
601
- name: string;
602
- /**
603
- * Called once per root, after its renderer exists and before `onCreated` and the first frame.
604
- * `isLegacy` and `primaryStore` are known by then, so an extension can skip WebGL roots or defer
605
- * to the primary canvas. Return fields to merge into the root's state, or nothing.
606
- */
607
- setup?(store: RootStore): Partial<RootState> | void;
608
- /** Called when a root this extension set up unmounts. */
609
- dispose?(store: RootStore): void;
610
- /** Called when `<Canvas>` detects hot module replacement (skipped with `hmr={false}`). */
611
- hmr?(store: RootStore): void;
612
- }
613
- /**
614
- * Register an extension. It is set up on every live root immediately, and on every root created
615
- * afterwards. Returns a function that unregisters it: new roots are no longer set up, while roots
616
- * it already set up keep its state and still get its dispose when they unmount.
617
- */
618
- declare function registerRootExtension(extension: RootExtension): () => void;
619
- /**
620
- * Point a root's default render job at a different render function, or back at
621
- * `renderer.render(scene, camera)` with `null`.
622
- *
623
- * The default job keeps everything else: the Canvas `fps` throttle, error propagation to the error
624
- * boundary, and backing off when a user `useFrame(..., { phase: 'render' })` job takes over.
625
- */
626
- declare function setRenderOverride(store: RootStore, render: (() => void) | null): void;
627
-
628
- export { context, registerRootExtension, setRenderOverride, useFrame, useStore, useThree };
629
- export type { Act, Bridge, Camera, ComputeFunction, Disposable, DomEvent, Dpr, EquConfig, EventHandlers, EventManager, Events, FilterFunction, FrameCallback, FrameNextCallback, FrameNextState, FrameState, Frameloop, InternalState, Intersection, IntersectionEvent, IsAllOptional, IsOptional, Mutable, NonFunctionKeys, ObjectMap, Overwrite, Performance, PointerCaptureTarget, PointerState, Properties, R3FRenderer, RenderCallback, RootExtension, RootState, RootStore, SetBlock, Size, Subscription, ThreeCamera, ThreeEvent, UnblockProps, Viewport, VisibilityEntry, XRManager, XRPointerConfig };
56
+ export { FrameNextCallback, useFrame };