@react-three/fiber 9.0.0-beta.1 → 9.0.0-rc.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 (27) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/declarations/src/core/events.d.ts +91 -0
  3. package/dist/declarations/src/core/hooks.d.ts +52 -0
  4. package/dist/declarations/src/core/index.d.ts +13 -0
  5. package/dist/declarations/src/core/loop.d.ts +31 -0
  6. package/dist/declarations/src/core/reconciler.d.ts +55 -0
  7. package/dist/declarations/src/core/renderer.d.ts +87 -0
  8. package/dist/declarations/src/core/store.d.ts +130 -0
  9. package/dist/declarations/src/core/utils.d.ts +138 -0
  10. package/dist/declarations/src/index.d.ts +6 -0
  11. package/dist/declarations/src/native/Canvas.d.ts +14 -0
  12. package/dist/declarations/src/native/events.d.ts +4 -0
  13. package/dist/declarations/src/native.d.ts +6 -0
  14. package/dist/declarations/src/three-types.d.ts +62 -0
  15. package/dist/declarations/src/web/Canvas.d.ts +24 -0
  16. package/dist/declarations/src/web/events.d.ts +4 -0
  17. package/dist/declarations/src/web/use-measure.d.ts +34 -0
  18. package/dist/{loop-b00a3b86.esm.js → events-5a08b43f.esm.js} +91 -5
  19. package/dist/{loop-dfcc9ca9.cjs.prod.js → events-aef54ace.cjs.prod.js} +91 -4
  20. package/dist/{loop-eb3c7218.cjs.dev.js → events-fa0fb3db.cjs.dev.js} +91 -4
  21. package/dist/react-three-fiber.cjs.dev.js +230 -122
  22. package/dist/react-three-fiber.cjs.prod.js +230 -122
  23. package/dist/react-three-fiber.esm.js +193 -84
  24. package/native/dist/react-three-fiber-native.cjs.dev.js +190 -128
  25. package/native/dist/react-three-fiber-native.cjs.prod.js +190 -128
  26. package/native/dist/react-three-fiber-native.esm.js +157 -95
  27. package/package.json +88 -86
@@ -0,0 +1,6 @@
1
+ import * as ReactThreeFiber from "./three-types.js";
2
+ export { ReactThreeFiber };
3
+ export * from "./three-types.js";
4
+ export * from "./core/index.js";
5
+ export * from "./web/Canvas.js";
6
+ export { createPointerEvents as events } from "./web/events.js";
@@ -0,0 +1,14 @@
1
+ import * as React from 'react';
2
+ import { View, type ViewProps, type ViewStyle } from 'react-native';
3
+ import { RenderProps } from "../core/index.js";
4
+ export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size' | 'dpr'>, Omit<ViewProps, 'children'> {
5
+ children: React.ReactNode;
6
+ style?: ViewStyle;
7
+ }
8
+ export interface Props extends CanvasProps {
9
+ }
10
+ /**
11
+ * A native canvas which accepts threejs elements as children.
12
+ * @see https://docs.pmnd.rs/react-three-fiber/api/canvas
13
+ */
14
+ export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<View>>;
@@ -0,0 +1,4 @@
1
+ import { RootStore } from "../core/store.js";
2
+ import { EventManager } from "../core/events.js";
3
+ /** Default R3F event manager for react-native */
4
+ export declare function createTouchEvents(store: RootStore): EventManager<HTMLElement>;
@@ -0,0 +1,6 @@
1
+ import * as ReactThreeFiber from "./three-types.js";
2
+ export { ReactThreeFiber };
3
+ export * from "./three-types.js";
4
+ export * from "./core/index.js";
5
+ export * from "./native/Canvas.js";
6
+ export { createTouchEvents as events } from "./native/events.js";
@@ -0,0 +1,62 @@
1
+ import type * as THREE from 'three';
2
+ import type { Args, EventHandlers, InstanceProps, ConstructorRepresentation } from "./core/index.js";
3
+ import type { Overwrite, Mutable } from "./core/utils.js";
4
+ export interface MathRepresentation {
5
+ set(...args: number[]): any;
6
+ }
7
+ export interface VectorRepresentation extends MathRepresentation {
8
+ setScalar(value: number): any;
9
+ }
10
+ export type MathTypes = MathRepresentation | THREE.Euler | THREE.Color;
11
+ export type MathType<T extends MathTypes> = T extends THREE.Color ? Args<typeof THREE.Color> | THREE.ColorRepresentation : T extends VectorRepresentation | THREE.Layers | THREE.Euler ? T | Parameters<T['set']> | number : T | Parameters<T['set']>;
12
+ export type MathProps<P> = {
13
+ [K in keyof P as P[K] extends MathTypes ? K : never]: P[K] extends MathTypes ? MathType<P[K]> : never;
14
+ };
15
+ export type Vector2 = MathType<THREE.Vector2>;
16
+ export type Vector3 = MathType<THREE.Vector3>;
17
+ export type Vector4 = MathType<THREE.Vector4>;
18
+ export type Color = MathType<THREE.Color>;
19
+ export type Layers = MathType<THREE.Layers>;
20
+ export type Quaternion = MathType<THREE.Quaternion>;
21
+ export type Euler = MathType<THREE.Euler>;
22
+ export type Matrix3 = MathType<THREE.Matrix3>;
23
+ export type Matrix4 = MathType<THREE.Matrix4>;
24
+ export interface RaycastableRepresentation {
25
+ raycast(raycaster: THREE.Raycaster, intersects: THREE.Intersection[]): void;
26
+ }
27
+ export type EventProps<P> = P extends RaycastableRepresentation ? Partial<EventHandlers> : {};
28
+ export interface ReactProps<P> {
29
+ children?: React.ReactNode;
30
+ ref?: React.Ref<P>;
31
+ key?: React.Key;
32
+ }
33
+ export type ElementProps<T extends ConstructorRepresentation, P = InstanceType<T>> = Partial<Overwrite<P, MathProps<P> & ReactProps<P> & EventProps<P>>>;
34
+ export type ThreeElement<T extends ConstructorRepresentation> = Mutable<Overwrite<ElementProps<T>, Omit<InstanceProps<InstanceType<T>, T>, 'object'>>>;
35
+ type ThreeExports = typeof THREE;
36
+ type ThreeElementsImpl = {
37
+ [K in keyof ThreeExports as Uncapitalize<K>]: ThreeExports[K] extends ConstructorRepresentation ? ThreeElement<ThreeExports[K]> : never;
38
+ };
39
+ export interface ThreeElements extends ThreeElementsImpl {
40
+ primitive: Omit<ThreeElement<any>, 'args'> & {
41
+ object: object;
42
+ };
43
+ }
44
+ declare module 'react' {
45
+ namespace JSX {
46
+ interface IntrinsicElements extends ThreeElements {
47
+ }
48
+ }
49
+ }
50
+ declare module 'react/jsx-runtime' {
51
+ namespace JSX {
52
+ interface IntrinsicElements extends ThreeElements {
53
+ }
54
+ }
55
+ }
56
+ declare module 'react/jsx-dev-runtime' {
57
+ namespace JSX {
58
+ interface IntrinsicElements extends ThreeElements {
59
+ }
60
+ }
61
+ }
62
+ export {};
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+ import { Options as ResizeOptions } from "./use-measure.js";
3
+ import { RenderProps } from "../core/index.js";
4
+ export interface CanvasProps extends Omit<RenderProps<HTMLCanvasElement>, 'size'>, React.HTMLAttributes<HTMLDivElement> {
5
+ children: React.ReactNode;
6
+ /** Canvas fallback content, similar to img's alt prop */
7
+ fallback?: React.ReactNode;
8
+ /**
9
+ * Options to pass to useMeasure.
10
+ * @see https://github.com/pmndrs/react-use-measure#api
11
+ */
12
+ resize?: ResizeOptions;
13
+ /** The target where events are being subscribed to, default: the div that wraps canvas */
14
+ eventSource?: HTMLElement | React.RefObject<HTMLElement>;
15
+ /** The event prefix that is cast into canvas pointer x/y events, default: "offset" */
16
+ eventPrefix?: 'offset' | 'client' | 'page' | 'layer' | 'screen';
17
+ }
18
+ export interface Props extends CanvasProps {
19
+ }
20
+ /**
21
+ * A DOM canvas which accepts threejs elements as children.
22
+ * @see https://docs.pmnd.rs/react-three-fiber/api/canvas
23
+ */
24
+ export declare const Canvas: React.ForwardRefExoticComponent<CanvasProps & React.RefAttributes<HTMLCanvasElement>>;
@@ -0,0 +1,4 @@
1
+ import { RootStore } from "../core/store.js";
2
+ import { EventManager } from "../core/events.js";
3
+ /** Default R3F event manager for web */
4
+ export declare function createPointerEvents(store: RootStore): EventManager<HTMLElement>;
@@ -0,0 +1,34 @@
1
+ declare type ResizeObserverCallback = (entries: any[], observer: ResizeObserver) => void;
2
+ declare class ResizeObserver {
3
+ constructor(callback: ResizeObserverCallback);
4
+ observe(target: Element, options?: any): void;
5
+ unobserve(target: Element): void;
6
+ disconnect(): void;
7
+ static toString(): string;
8
+ }
9
+ export interface RectReadOnly {
10
+ readonly x: number;
11
+ readonly y: number;
12
+ readonly width: number;
13
+ readonly height: number;
14
+ readonly top: number;
15
+ readonly right: number;
16
+ readonly bottom: number;
17
+ readonly left: number;
18
+ [key: string]: number;
19
+ }
20
+ type HTMLOrSVGElement = HTMLElement | SVGElement;
21
+ type Result = [(element: HTMLOrSVGElement | null) => void, RectReadOnly, () => void];
22
+ export type Options = {
23
+ debounce?: number | {
24
+ scroll: number;
25
+ resize: number;
26
+ };
27
+ scroll?: boolean;
28
+ polyfill?: {
29
+ new (cb: ResizeObserverCallback): ResizeObserver;
30
+ };
31
+ offsetSize?: boolean;
32
+ };
33
+ export declare function useMeasure({ debounce, scroll, polyfill, offsetSize }?: Options): Result;
34
+ export {};
@@ -2,11 +2,11 @@ import * as THREE from 'three';
2
2
  import * as React from 'react';
3
3
  import { NoEventPriority, DefaultEventPriority, ContinuousEventPriority, DiscreteEventPriority, ConcurrentRoot } from 'react-reconciler/constants';
4
4
  import { createWithEqualityFn } from 'zustand/traditional';
5
+ import { suspend, preload, clear } from 'suspend-react';
6
+ import { jsx, Fragment } from 'react/jsx-runtime';
5
7
  import { useFiber, useContextBridge, traverseFiber } from 'its-fine';
6
8
  import Reconciler from 'react-reconciler';
7
9
  import { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';
8
- import { jsx, Fragment } from 'react/jsx-runtime';
9
- import { suspend, preload, clear } from 'suspend-react';
10
10
 
11
11
  var threeTypes = /*#__PURE__*/Object.freeze({
12
12
  __proto__: null
@@ -289,8 +289,8 @@ function swapInstances() {
289
289
  reconstructed.length = 0;
290
290
  }
291
291
 
292
- // Don't handle text instances, warn on undefined behavior
293
- const handleTextInstance = () => console.warn('R3F: Text is not allowed in JSX! This could be stray whitespace or characters.');
292
+ // Don't handle text instances, make it no-op
293
+ const handleTextInstance = () => {};
294
294
  const NO_CONTEXT = {};
295
295
  let currentUpdatePriority = NoEventPriority;
296
296
 
@@ -2281,4 +2281,90 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
2281
2281
  if (runGlobalEffects) flushGlobalEffects('after', timestamp);
2282
2282
  }
2283
2283
 
2284
- export { useThree as A, Block as B, useFrame as C, useGraph as D, ErrorBoundary as E, useLoader as F, _roots as _, useMutableCallback as a, useIsomorphicLayoutEffect as b, createEvents as c, createRoot as d, extend as e, unmountComponentAtNode as f, flushGlobalEffects as g, addEffect as h, isRef as i, addAfterEffect as j, addTail as k, invalidate as l, advance as m, render as n, createPortal as o, context as p, applyProps as q, reconciler as r, getRootState as s, threeTypes as t, useBridge as u, dispose as v, act as w, buildGraph as x, useInstanceHandle as y, useStore as z };
2284
+ const DOM_EVENTS = {
2285
+ onClick: ['click', false],
2286
+ onContextMenu: ['contextmenu', false],
2287
+ onDoubleClick: ['dblclick', false],
2288
+ onWheel: ['wheel', true],
2289
+ onPointerDown: ['pointerdown', true],
2290
+ onPointerUp: ['pointerup', true],
2291
+ onPointerLeave: ['pointerleave', true],
2292
+ onPointerMove: ['pointermove', true],
2293
+ onPointerCancel: ['pointercancel', true],
2294
+ onLostPointerCapture: ['lostpointercapture', true]
2295
+ };
2296
+
2297
+ /** Default R3F event manager for web */
2298
+ function createPointerEvents(store) {
2299
+ const {
2300
+ handlePointer
2301
+ } = createEvents(store);
2302
+ return {
2303
+ priority: 1,
2304
+ enabled: true,
2305
+ compute(event, state, previous) {
2306
+ // https://github.com/pmndrs/react-three-fiber/pull/782
2307
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
2308
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
2309
+ state.raycaster.setFromCamera(state.pointer, state.camera);
2310
+ },
2311
+ connected: undefined,
2312
+ handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
2313
+ ...acc,
2314
+ [key]: handlePointer(key)
2315
+ }), {}),
2316
+ update: () => {
2317
+ var _internal$lastEvent;
2318
+ const {
2319
+ events,
2320
+ internal
2321
+ } = store.getState();
2322
+ if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
2323
+ },
2324
+ connect: target => {
2325
+ const {
2326
+ set,
2327
+ events
2328
+ } = store.getState();
2329
+ events.disconnect == null ? void 0 : events.disconnect();
2330
+ set(state => ({
2331
+ events: {
2332
+ ...state.events,
2333
+ connected: target
2334
+ }
2335
+ }));
2336
+ if (events.handlers) {
2337
+ for (const name in events.handlers) {
2338
+ const event = events.handlers[name];
2339
+ const [eventName, passive] = DOM_EVENTS[name];
2340
+ target.addEventListener(eventName, event, {
2341
+ passive
2342
+ });
2343
+ }
2344
+ }
2345
+ },
2346
+ disconnect: () => {
2347
+ const {
2348
+ set,
2349
+ events
2350
+ } = store.getState();
2351
+ if (events.connected) {
2352
+ if (events.handlers) {
2353
+ for (const name in events.handlers) {
2354
+ const event = events.handlers[name];
2355
+ const [eventName] = DOM_EVENTS[name];
2356
+ events.connected.removeEventListener(eventName, event);
2357
+ }
2358
+ }
2359
+ set(state => ({
2360
+ events: {
2361
+ ...state.events,
2362
+ connected: undefined
2363
+ }
2364
+ }));
2365
+ }
2366
+ }
2367
+ };
2368
+ }
2369
+
2370
+ export { useStore as A, Block as B, useThree as C, useFrame as D, ErrorBoundary as E, useGraph as F, useLoader as G, _roots as _, useMutableCallback as a, useIsomorphicLayoutEffect as b, createRoot as c, unmountComponentAtNode as d, extend as e, createPointerEvents as f, createEvents as g, flushGlobalEffects as h, isRef as i, addEffect as j, addAfterEffect as k, addTail as l, invalidate as m, advance as n, render as o, createPortal as p, context as q, reconciler as r, applyProps as s, threeTypes as t, useBridge as u, getRootState as v, dispose as w, act as x, buildGraph as y, useInstanceHandle as z };
@@ -4,11 +4,11 @@ var THREE = require('three');
4
4
  var React = require('react');
5
5
  var constants = require('react-reconciler/constants');
6
6
  var traditional = require('zustand/traditional');
7
+ var suspendReact = require('suspend-react');
8
+ var jsxRuntime = require('react/jsx-runtime');
7
9
  var itsFine = require('its-fine');
8
10
  var Reconciler = require('react-reconciler');
9
11
  var scheduler = require('scheduler');
10
- var jsxRuntime = require('react/jsx-runtime');
11
- var suspendReact = require('suspend-react');
12
12
 
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
14
14
 
@@ -315,8 +315,8 @@ function swapInstances() {
315
315
  reconstructed.length = 0;
316
316
  }
317
317
 
318
- // Don't handle text instances, warn on undefined behavior
319
- const handleTextInstance = () => console.warn('R3F: Text is not allowed in JSX! This could be stray whitespace or characters.');
318
+ // Don't handle text instances, make it no-op
319
+ const handleTextInstance = () => {};
320
320
  const NO_CONTEXT = {};
321
321
  let currentUpdatePriority = constants.NoEventPriority;
322
322
 
@@ -2306,6 +2306,92 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
2306
2306
  if (runGlobalEffects) flushGlobalEffects('after', timestamp);
2307
2307
  }
2308
2308
 
2309
+ const DOM_EVENTS = {
2310
+ onClick: ['click', false],
2311
+ onContextMenu: ['contextmenu', false],
2312
+ onDoubleClick: ['dblclick', false],
2313
+ onWheel: ['wheel', true],
2314
+ onPointerDown: ['pointerdown', true],
2315
+ onPointerUp: ['pointerup', true],
2316
+ onPointerLeave: ['pointerleave', true],
2317
+ onPointerMove: ['pointermove', true],
2318
+ onPointerCancel: ['pointercancel', true],
2319
+ onLostPointerCapture: ['lostpointercapture', true]
2320
+ };
2321
+
2322
+ /** Default R3F event manager for web */
2323
+ function createPointerEvents(store) {
2324
+ const {
2325
+ handlePointer
2326
+ } = createEvents(store);
2327
+ return {
2328
+ priority: 1,
2329
+ enabled: true,
2330
+ compute(event, state, previous) {
2331
+ // https://github.com/pmndrs/react-three-fiber/pull/782
2332
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
2333
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
2334
+ state.raycaster.setFromCamera(state.pointer, state.camera);
2335
+ },
2336
+ connected: undefined,
2337
+ handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
2338
+ ...acc,
2339
+ [key]: handlePointer(key)
2340
+ }), {}),
2341
+ update: () => {
2342
+ var _internal$lastEvent;
2343
+ const {
2344
+ events,
2345
+ internal
2346
+ } = store.getState();
2347
+ if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
2348
+ },
2349
+ connect: target => {
2350
+ const {
2351
+ set,
2352
+ events
2353
+ } = store.getState();
2354
+ events.disconnect == null ? void 0 : events.disconnect();
2355
+ set(state => ({
2356
+ events: {
2357
+ ...state.events,
2358
+ connected: target
2359
+ }
2360
+ }));
2361
+ if (events.handlers) {
2362
+ for (const name in events.handlers) {
2363
+ const event = events.handlers[name];
2364
+ const [eventName, passive] = DOM_EVENTS[name];
2365
+ target.addEventListener(eventName, event, {
2366
+ passive
2367
+ });
2368
+ }
2369
+ }
2370
+ },
2371
+ disconnect: () => {
2372
+ const {
2373
+ set,
2374
+ events
2375
+ } = store.getState();
2376
+ if (events.connected) {
2377
+ if (events.handlers) {
2378
+ for (const name in events.handlers) {
2379
+ const event = events.handlers[name];
2380
+ const [eventName] = DOM_EVENTS[name];
2381
+ events.connected.removeEventListener(eventName, event);
2382
+ }
2383
+ }
2384
+ set(state => ({
2385
+ events: {
2386
+ ...state.events,
2387
+ connected: undefined
2388
+ }
2389
+ }));
2390
+ }
2391
+ }
2392
+ };
2393
+ }
2394
+
2309
2395
  exports.Block = Block;
2310
2396
  exports.ErrorBoundary = ErrorBoundary;
2311
2397
  exports._roots = _roots;
@@ -2318,6 +2404,7 @@ exports.applyProps = applyProps;
2318
2404
  exports.buildGraph = buildGraph;
2319
2405
  exports.context = context;
2320
2406
  exports.createEvents = createEvents;
2407
+ exports.createPointerEvents = createPointerEvents;
2321
2408
  exports.createPortal = createPortal;
2322
2409
  exports.createRoot = createRoot;
2323
2410
  exports.dispose = dispose;
@@ -4,11 +4,11 @@ var THREE = require('three');
4
4
  var React = require('react');
5
5
  var constants = require('react-reconciler/constants');
6
6
  var traditional = require('zustand/traditional');
7
+ var suspendReact = require('suspend-react');
8
+ var jsxRuntime = require('react/jsx-runtime');
7
9
  var itsFine = require('its-fine');
8
10
  var Reconciler = require('react-reconciler');
9
11
  var scheduler = require('scheduler');
10
- var jsxRuntime = require('react/jsx-runtime');
11
- var suspendReact = require('suspend-react');
12
12
 
13
13
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
14
14
 
@@ -315,8 +315,8 @@ function swapInstances() {
315
315
  reconstructed.length = 0;
316
316
  }
317
317
 
318
- // Don't handle text instances, warn on undefined behavior
319
- const handleTextInstance = () => console.warn('R3F: Text is not allowed in JSX! This could be stray whitespace or characters.');
318
+ // Don't handle text instances, make it no-op
319
+ const handleTextInstance = () => {};
320
320
  const NO_CONTEXT = {};
321
321
  let currentUpdatePriority = constants.NoEventPriority;
322
322
 
@@ -2307,6 +2307,92 @@ function advance(timestamp, runGlobalEffects = true, state, frame) {
2307
2307
  if (runGlobalEffects) flushGlobalEffects('after', timestamp);
2308
2308
  }
2309
2309
 
2310
+ const DOM_EVENTS = {
2311
+ onClick: ['click', false],
2312
+ onContextMenu: ['contextmenu', false],
2313
+ onDoubleClick: ['dblclick', false],
2314
+ onWheel: ['wheel', true],
2315
+ onPointerDown: ['pointerdown', true],
2316
+ onPointerUp: ['pointerup', true],
2317
+ onPointerLeave: ['pointerleave', true],
2318
+ onPointerMove: ['pointermove', true],
2319
+ onPointerCancel: ['pointercancel', true],
2320
+ onLostPointerCapture: ['lostpointercapture', true]
2321
+ };
2322
+
2323
+ /** Default R3F event manager for web */
2324
+ function createPointerEvents(store) {
2325
+ const {
2326
+ handlePointer
2327
+ } = createEvents(store);
2328
+ return {
2329
+ priority: 1,
2330
+ enabled: true,
2331
+ compute(event, state, previous) {
2332
+ // https://github.com/pmndrs/react-three-fiber/pull/782
2333
+ // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides
2334
+ state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);
2335
+ state.raycaster.setFromCamera(state.pointer, state.camera);
2336
+ },
2337
+ connected: undefined,
2338
+ handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({
2339
+ ...acc,
2340
+ [key]: handlePointer(key)
2341
+ }), {}),
2342
+ update: () => {
2343
+ var _internal$lastEvent;
2344
+ const {
2345
+ events,
2346
+ internal
2347
+ } = store.getState();
2348
+ if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);
2349
+ },
2350
+ connect: target => {
2351
+ const {
2352
+ set,
2353
+ events
2354
+ } = store.getState();
2355
+ events.disconnect == null ? void 0 : events.disconnect();
2356
+ set(state => ({
2357
+ events: {
2358
+ ...state.events,
2359
+ connected: target
2360
+ }
2361
+ }));
2362
+ if (events.handlers) {
2363
+ for (const name in events.handlers) {
2364
+ const event = events.handlers[name];
2365
+ const [eventName, passive] = DOM_EVENTS[name];
2366
+ target.addEventListener(eventName, event, {
2367
+ passive
2368
+ });
2369
+ }
2370
+ }
2371
+ },
2372
+ disconnect: () => {
2373
+ const {
2374
+ set,
2375
+ events
2376
+ } = store.getState();
2377
+ if (events.connected) {
2378
+ if (events.handlers) {
2379
+ for (const name in events.handlers) {
2380
+ const event = events.handlers[name];
2381
+ const [eventName] = DOM_EVENTS[name];
2382
+ events.connected.removeEventListener(eventName, event);
2383
+ }
2384
+ }
2385
+ set(state => ({
2386
+ events: {
2387
+ ...state.events,
2388
+ connected: undefined
2389
+ }
2390
+ }));
2391
+ }
2392
+ }
2393
+ };
2394
+ }
2395
+
2310
2396
  exports.Block = Block;
2311
2397
  exports.ErrorBoundary = ErrorBoundary;
2312
2398
  exports._roots = _roots;
@@ -2319,6 +2405,7 @@ exports.applyProps = applyProps;
2319
2405
  exports.buildGraph = buildGraph;
2320
2406
  exports.context = context;
2321
2407
  exports.createEvents = createEvents;
2408
+ exports.createPointerEvents = createPointerEvents;
2322
2409
  exports.createPortal = createPortal;
2323
2410
  exports.createRoot = createRoot;
2324
2411
  exports.dispose = dispose;