@tomorrowevening/theatre-r3f 1.0.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.
Files changed (73) hide show
  1. package/LICENSE +203 -0
  2. package/README.md +104 -0
  3. package/dist/drei/OrthographicCamera.d.ts +17 -0
  4. package/dist/drei/OrthographicCamera.d.ts.map +1 -0
  5. package/dist/drei/PerspectiveCamera.d.ts +17 -0
  6. package/dist/drei/PerspectiveCamera.d.ts.map +1 -0
  7. package/dist/drei/index.d.ts +3 -0
  8. package/dist/drei/index.d.ts.map +1 -0
  9. package/dist/extension/InfiniteGridHelper/index.d.ts +12 -0
  10. package/dist/extension/InfiniteGridHelper/index.d.ts.map +1 -0
  11. package/dist/extension/components/DragDetector.d.ts +8 -0
  12. package/dist/extension/components/DragDetector.d.ts.map +1 -0
  13. package/dist/extension/components/EditableProxy.d.ts +9 -0
  14. package/dist/extension/components/EditableProxy.d.ts.map +1 -0
  15. package/dist/extension/components/OrbitControls/OrbitControlsImpl.d.ts +65 -0
  16. package/dist/extension/components/OrbitControls/OrbitControlsImpl.d.ts.map +1 -0
  17. package/dist/extension/components/OrbitControls/index.d.ts +24 -0
  18. package/dist/extension/components/OrbitControls/index.d.ts.map +1 -0
  19. package/dist/extension/components/ProxyManager.d.ts +9 -0
  20. package/dist/extension/components/ProxyManager.d.ts.map +1 -0
  21. package/dist/extension/components/ReferenceWindow/ReferenceWindow.d.ts +10 -0
  22. package/dist/extension/components/ReferenceWindow/ReferenceWindow.d.ts.map +1 -0
  23. package/dist/extension/components/ReferenceWindow/noiseImage.d.ts +3 -0
  24. package/dist/extension/components/ReferenceWindow/noiseImage.d.ts.map +1 -0
  25. package/dist/extension/components/SnapshotEditor.d.ts +6 -0
  26. package/dist/extension/components/SnapshotEditor.d.ts.map +1 -0
  27. package/dist/extension/components/TransformControls.d.ts +19 -0
  28. package/dist/extension/components/TransformControls.d.ts.map +1 -0
  29. package/dist/extension/components/useRefAndState.d.ts +18 -0
  30. package/dist/extension/components/useRefAndState.d.ts.map +1 -0
  31. package/dist/extension/components/useSelected.d.ts +3 -0
  32. package/dist/extension/components/useSelected.d.ts.map +1 -0
  33. package/dist/extension/components/useSnapshotEditorCamera.d.ts +9 -0
  34. package/dist/extension/components/useSnapshotEditorCamera.d.ts.map +1 -0
  35. package/dist/extension/editorStuff.d.ts +19 -0
  36. package/dist/extension/editorStuff.d.ts.map +1 -0
  37. package/dist/extension/icons.d.ts +13 -0
  38. package/dist/extension/icons.d.ts.map +1 -0
  39. package/dist/extension/index.d.ts +4 -0
  40. package/dist/extension/index.d.ts.map +1 -0
  41. package/dist/extension/index.esm.js +22176 -0
  42. package/dist/extension/index.esm.js.map +7 -0
  43. package/dist/extension/index.js +22142 -0
  44. package/dist/extension/index.js.map +7 -0
  45. package/dist/extension/useExtensionStore.d.ts +3 -0
  46. package/dist/extension/useExtensionStore.d.ts.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.esm.js +780 -0
  50. package/dist/index.esm.js.map +7 -0
  51. package/dist/index.js +778 -0
  52. package/dist/index.js.map +7 -0
  53. package/dist/main/RafDriverProvider.d.ts +10 -0
  54. package/dist/main/RafDriverProvider.d.ts.map +1 -0
  55. package/dist/main/RefreshSnapshot.d.ts +19 -0
  56. package/dist/main/RefreshSnapshot.d.ts.map +1 -0
  57. package/dist/main/SheetProvider.d.ts +10 -0
  58. package/dist/main/SheetProvider.d.ts.map +1 -0
  59. package/dist/main/defaultEditableFactoryConfig.d.ts +579 -0
  60. package/dist/main/defaultEditableFactoryConfig.d.ts.map +1 -0
  61. package/dist/main/editable.d.ts +124 -0
  62. package/dist/main/editable.d.ts.map +1 -0
  63. package/dist/main/editableFactoryConfigUtils.d.ts +58 -0
  64. package/dist/main/editableFactoryConfigUtils.d.ts.map +1 -0
  65. package/dist/main/store.d.ts +46 -0
  66. package/dist/main/store.d.ts.map +1 -0
  67. package/dist/main/useInvalidate.d.ts +2 -0
  68. package/dist/main/useInvalidate.d.ts.map +1 -0
  69. package/dist/main/utils.d.ts +4 -0
  70. package/dist/main/utils.d.ts.map +1 -0
  71. package/dist/types.d.ts +3 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/package.json +87 -0
@@ -0,0 +1,780 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
24
+ var __objRest = (source, exclude) => {
25
+ var target = {};
26
+ for (var prop in source)
27
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
28
+ target[prop] = source[prop];
29
+ if (source != null && __getOwnPropSymbols)
30
+ for (var prop of __getOwnPropSymbols(source)) {
31
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
32
+ target[prop] = source[prop];
33
+ }
34
+ return target;
35
+ };
36
+ var __commonJS = (cb, mod) => function __require() {
37
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
38
+ };
39
+ var __copyProps = (to, from, except, desc) => {
40
+ if (from && typeof from === "object" || typeof from === "function") {
41
+ for (let key of __getOwnPropNames(from))
42
+ if (!__hasOwnProp.call(to, key) && key !== except)
43
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
44
+ }
45
+ return to;
46
+ };
47
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
48
+ // If the importer is in node compatibility mode or this is not an ESM
49
+ // file that has been converted to a CommonJS file using a Babel-
50
+ // compatible transform (i.e. "__esModule" has not been set), then set
51
+ // "default" to the CommonJS "module.exports" for node compatibility.
52
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
53
+ mod
54
+ ));
55
+
56
+ // ../../node_modules/zustand/vanilla.js
57
+ var require_vanilla = __commonJS({
58
+ "../../node_modules/zustand/vanilla.js"(exports) {
59
+ "use strict";
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ function create2(createState) {
62
+ var state;
63
+ var listeners = /* @__PURE__ */ new Set();
64
+ var setState = function setState2(partial, replace) {
65
+ var nextState = typeof partial === "function" ? partial(state) : partial;
66
+ if (nextState !== state) {
67
+ var _previousState = state;
68
+ state = replace ? nextState : Object.assign({}, state, nextState);
69
+ listeners.forEach(function(listener) {
70
+ return listener(state, _previousState);
71
+ });
72
+ }
73
+ };
74
+ var getState = function getState2() {
75
+ return state;
76
+ };
77
+ var subscribeWithSelector = function subscribeWithSelector2(listener, selector, equalityFn) {
78
+ if (selector === void 0) {
79
+ selector = getState;
80
+ }
81
+ if (equalityFn === void 0) {
82
+ equalityFn = Object.is;
83
+ }
84
+ var currentSlice = selector(state);
85
+ function listenerToAdd() {
86
+ var nextSlice = selector(state);
87
+ if (!equalityFn(currentSlice, nextSlice)) {
88
+ var _previousSlice = currentSlice;
89
+ listener(currentSlice = nextSlice, _previousSlice);
90
+ }
91
+ }
92
+ listeners.add(listenerToAdd);
93
+ return function() {
94
+ return listeners.delete(listenerToAdd);
95
+ };
96
+ };
97
+ var subscribe = function subscribe2(listener, selector, equalityFn) {
98
+ if (selector || equalityFn) {
99
+ return subscribeWithSelector(listener, selector, equalityFn);
100
+ }
101
+ listeners.add(listener);
102
+ return function() {
103
+ return listeners.delete(listener);
104
+ };
105
+ };
106
+ var destroy = function destroy2() {
107
+ return listeners.clear();
108
+ };
109
+ var api = {
110
+ setState,
111
+ getState,
112
+ subscribe,
113
+ destroy
114
+ };
115
+ state = createState(setState, getState, api);
116
+ return api;
117
+ }
118
+ exports.default = create2;
119
+ }
120
+ });
121
+
122
+ // src/main/editable.tsx
123
+ import { useMemo, useState } from "react";
124
+ import React3, { forwardRef, useEffect as useEffect3, useLayoutEffect as useLayoutEffect2, useRef } from "react";
125
+
126
+ // src/main/store.ts
127
+ var import_vanilla = __toESM(require_vanilla());
128
+ import { Group } from "three";
129
+ var allRegisteredObjects = /* @__PURE__ */ new WeakSet();
130
+ var config = (set, get) => {
131
+ return {
132
+ sheet: null,
133
+ editorObject: null,
134
+ scene: null,
135
+ gl: null,
136
+ helpersRoot: new Group(),
137
+ editables: {},
138
+ canvasName: "default",
139
+ sceneSnapshot: null,
140
+ editablesSnapshot: null,
141
+ initialEditorCamera: {},
142
+ init: (scene, gl) => {
143
+ set({
144
+ scene,
145
+ gl
146
+ });
147
+ get().createSnapshot();
148
+ },
149
+ addEditable: (theatreKey, editable2) => {
150
+ set((state) => ({
151
+ editables: __spreadProps(__spreadValues({}, state.editables), {
152
+ [theatreKey]: editable2
153
+ })
154
+ }));
155
+ },
156
+ removeEditable: (theatreKey) => {
157
+ set((state) => {
158
+ const editables = __spreadValues({}, state.editables);
159
+ delete editables[theatreKey];
160
+ return {
161
+ editables
162
+ };
163
+ });
164
+ },
165
+ createSnapshot: () => {
166
+ set((state) => {
167
+ var _a, _b;
168
+ return {
169
+ sceneSnapshot: (_b = (_a = state.scene) == null ? void 0 : _a.clone()) != null ? _b : null,
170
+ editablesSnapshot: state.editables
171
+ };
172
+ });
173
+ },
174
+ setSnapshotProxyObject: (proxyObject, theatreKey) => {
175
+ set((state) => ({
176
+ editablesSnapshot: __spreadProps(__spreadValues({}, state.editablesSnapshot), {
177
+ [theatreKey]: __spreadProps(__spreadValues({}, state.editablesSnapshot[theatreKey]), {
178
+ proxyObject
179
+ })
180
+ })
181
+ }));
182
+ }
183
+ };
184
+ };
185
+ var editorStore = (0, import_vanilla.default)(config);
186
+ var bindToCanvas = ({ gl, scene }) => {
187
+ const init = editorStore.getState().init;
188
+ init(scene, gl);
189
+ };
190
+
191
+ // ../../node_modules/react-merge-refs/dist/index.mjs
192
+ function o(f) {
193
+ return (r) => {
194
+ f.forEach((n) => {
195
+ typeof n == "function" ? n(r) : n != null && (n.current = r);
196
+ });
197
+ };
198
+ }
199
+
200
+ // src/main/useInvalidate.ts
201
+ import { useThree } from "@react-three/fiber";
202
+ function useInvalidate() {
203
+ return useThree(({ invalidate }) => invalidate);
204
+ }
205
+
206
+ // src/main/SheetProvider.tsx
207
+ import React, {
208
+ createContext,
209
+ useContext,
210
+ useEffect,
211
+ useLayoutEffect
212
+ } from "react";
213
+ import { useThree as useThree2 } from "@react-three/fiber";
214
+ var ctx = createContext(void 0);
215
+ var useWrapperContext = () => {
216
+ const val = useContext(ctx);
217
+ if (!val) {
218
+ throw new Error(
219
+ `No sheet found. You need to add a <SheetProvider> higher up in the tree. https://docs.theatrejs.com/r3f.html#sheetprovider`
220
+ );
221
+ }
222
+ return val;
223
+ };
224
+ var useCurrentSheet = () => {
225
+ return useWrapperContext().sheet;
226
+ };
227
+ var SheetProvider = ({ sheet, children }) => {
228
+ const { scene, gl } = useThree2((s) => ({ scene: s.scene, gl: s.gl }));
229
+ useEffect(() => {
230
+ if (!sheet || sheet.type !== "Theatre_Sheet_PublicAPI") {
231
+ throw new Error(`sheet in <Wrapper sheet={sheet}> has an invalid value`);
232
+ }
233
+ }, [sheet]);
234
+ useLayoutEffect(() => {
235
+ bindToCanvas({ gl, scene });
236
+ }, [scene, gl]);
237
+ return /* @__PURE__ */ React.createElement(ctx.Provider, { value: { sheet } }, children);
238
+ };
239
+ var SheetProvider_default = SheetProvider;
240
+
241
+ // src/main/editableFactoryConfigUtils.ts
242
+ import { notify } from "@theatre/core";
243
+ import { types } from "@theatre/core";
244
+ import { Color } from "three";
245
+ function isNumber(value) {
246
+ return typeof value === "number" && isFinite(value);
247
+ }
248
+ function isVectorObject(value) {
249
+ return ["x", "y", "z"].every((axis) => isNumber(value[axis]));
250
+ }
251
+ var createVector = (components) => {
252
+ return components ? { x: components[0], y: components[1], z: components[2] } : {
253
+ x: 0,
254
+ y: 0,
255
+ z: 0
256
+ };
257
+ };
258
+ var createVectorPropConfig = (key, defaultValue = createVector(), { nudgeMultiplier = 0.01 } = {}) => ({
259
+ parse: (props) => {
260
+ const propValue = props[key];
261
+ const vector = !propValue ? defaultValue : (
262
+ // if prop is an array
263
+ Array.isArray(propValue) ? createVector(propValue) : (
264
+ // if prop is a scalar
265
+ isNumber(propValue) ? {
266
+ x: propValue,
267
+ y: propValue,
268
+ z: propValue
269
+ } : (
270
+ // if prop is a threejs Vector3
271
+ isVectorObject(propValue) ? {
272
+ x: propValue.x,
273
+ y: propValue.y,
274
+ z: propValue.z
275
+ } : (
276
+ // show a warning and return defaultValue
277
+ (notify.warning(
278
+ `Invalid value for vector prop "${key}"`,
279
+ `Couldn't make sense of \`${key}={${JSON.stringify(
280
+ propValue
281
+ )}}\`, falling back to \`${key}={${JSON.stringify([
282
+ defaultValue.x,
283
+ defaultValue.y,
284
+ defaultValue.z
285
+ ])}}\`.
286
+
287
+ To fix this, make sure the prop is set to either a number, an array of numbers, or a three.js Vector3 object.`
288
+ ), defaultValue)
289
+ )
290
+ )
291
+ )
292
+ );
293
+ ["x", "y", "z"].forEach((axis) => {
294
+ if (props[`${key}-${axis}`])
295
+ vector[axis] = props[`${key}-${axis}`];
296
+ });
297
+ return vector;
298
+ },
299
+ apply: (value, object) => {
300
+ object[key].set(value.x, value.y, value.z);
301
+ },
302
+ type: {
303
+ [key]: {
304
+ x: types.number(defaultValue.x, { nudgeMultiplier }),
305
+ y: types.number(defaultValue.y, { nudgeMultiplier }),
306
+ z: types.number(defaultValue.z, { nudgeMultiplier })
307
+ }
308
+ }
309
+ });
310
+ var createNumberPropConfig = (key, defaultValue = 0, { nudgeMultiplier = 0.01 } = {}) => ({
311
+ parse: (props) => {
312
+ var _a;
313
+ return (_a = props[key]) != null ? _a : defaultValue;
314
+ },
315
+ apply: (value, object) => {
316
+ object[key] = value;
317
+ },
318
+ type: {
319
+ [key]: types.number(defaultValue, { nudgeMultiplier })
320
+ }
321
+ });
322
+ var createColorPropConfig = (key, defaultValue = new Color(0, 0, 0)) => ({
323
+ parse: (props) => {
324
+ var _a;
325
+ return __spreadProps(__spreadValues({}, (_a = props[key]) != null ? _a : defaultValue), { a: 1 });
326
+ },
327
+ apply: (value, object) => {
328
+ object[key].setRGB(value.r, value.g, value.b);
329
+ },
330
+ type: {
331
+ [key]: types.rgba(__spreadProps(__spreadValues({}, defaultValue), { a: 1 }))
332
+ }
333
+ });
334
+ var extendObjectProps = (objectConfig, extension) => __spreadProps(__spreadValues({}, objectConfig), {
335
+ props: __spreadValues(__spreadValues({}, objectConfig.props), extension)
336
+ });
337
+
338
+ // src/main/defaultEditableFactoryConfig.ts
339
+ import {
340
+ BoxHelper,
341
+ CameraHelper,
342
+ Color as Color2,
343
+ DirectionalLightHelper,
344
+ PointLightHelper,
345
+ SpotLightHelper
346
+ } from "three";
347
+ var baseObjectConfig = {
348
+ props: {
349
+ position: createVectorPropConfig("position"),
350
+ rotation: createVectorPropConfig("rotation"),
351
+ scale: createVectorPropConfig("scale", createVector([1, 1, 1]))
352
+ },
353
+ useTransformControls: true,
354
+ icon: "cube",
355
+ createHelper: (object) => new BoxHelper(object, selectionColor)
356
+ };
357
+ var baseLightConfig = __spreadProps(__spreadValues({}, extendObjectProps(baseObjectConfig, {
358
+ intensity: createNumberPropConfig("intensity", 1),
359
+ distance: createNumberPropConfig("distance"),
360
+ decay: createNumberPropConfig("decay"),
361
+ color: createColorPropConfig("color", new Color2("white"))
362
+ })), {
363
+ dimensionless: true
364
+ });
365
+ var baseCameraConfig = __spreadProps(__spreadValues({}, extendObjectProps(baseObjectConfig, {
366
+ near: createNumberPropConfig("near", 0.1, { nudgeMultiplier: 0.1 }),
367
+ far: createNumberPropConfig("far", 2e3, { nudgeMultiplier: 0.1 })
368
+ })), {
369
+ updateObject: (camera) => {
370
+ camera.updateProjectionMatrix();
371
+ },
372
+ icon: "camera",
373
+ dimensionless: true,
374
+ createHelper: (camera) => new CameraHelper(camera)
375
+ });
376
+ var selectionColor = "#40AAA4";
377
+ var defaultEditableFactoryConfig = {
378
+ group: __spreadProps(__spreadValues({}, baseObjectConfig), {
379
+ icon: "collection",
380
+ createHelper: (object) => new BoxHelper(object, selectionColor)
381
+ }),
382
+ mesh: __spreadProps(__spreadValues({}, baseObjectConfig), {
383
+ icon: "cube",
384
+ createHelper: (object) => new BoxHelper(object, selectionColor)
385
+ }),
386
+ spotLight: __spreadProps(__spreadValues({}, extendObjectProps(baseLightConfig, {
387
+ angle: createNumberPropConfig("angle", 0, { nudgeMultiplier: 1e-3 }),
388
+ penumbra: createNumberPropConfig("penumbra", 0, { nudgeMultiplier: 1e-3 })
389
+ })), {
390
+ icon: "spotLight",
391
+ createHelper: (light) => new SpotLightHelper(light, selectionColor)
392
+ }),
393
+ directionalLight: __spreadProps(__spreadValues({}, extendObjectProps(baseObjectConfig, {
394
+ intensity: createNumberPropConfig("intensity", 1),
395
+ color: createColorPropConfig("color", new Color2("white"))
396
+ })), {
397
+ icon: "sun",
398
+ dimensionless: true,
399
+ createHelper: (light) => new DirectionalLightHelper(light, 1, selectionColor)
400
+ }),
401
+ pointLight: __spreadProps(__spreadValues({}, baseLightConfig), {
402
+ icon: "lightBulb",
403
+ createHelper: (light) => new PointLightHelper(light, 1, selectionColor)
404
+ }),
405
+ ambientLight: {
406
+ props: {
407
+ intensity: createNumberPropConfig("intensity", 1),
408
+ color: createColorPropConfig("color", new Color2("white"))
409
+ },
410
+ useTransformControls: false,
411
+ icon: "lightBulb"
412
+ },
413
+ hemisphereLight: {
414
+ props: {
415
+ intensity: createNumberPropConfig("intensity", 1),
416
+ color: createColorPropConfig("color", new Color2("white")),
417
+ groundColor: createColorPropConfig("groundColor", new Color2("white"))
418
+ },
419
+ useTransformControls: false,
420
+ icon: "lightBulb"
421
+ },
422
+ perspectiveCamera: extendObjectProps(baseCameraConfig, {
423
+ fov: createNumberPropConfig("fov", 50, { nudgeMultiplier: 0.1 }),
424
+ zoom: createNumberPropConfig("zoom", 1)
425
+ }),
426
+ orthographicCamera: baseCameraConfig,
427
+ points: baseObjectConfig,
428
+ line: baseObjectConfig,
429
+ lineLoop: baseObjectConfig,
430
+ lineSegments: baseObjectConfig,
431
+ fog: {
432
+ props: {
433
+ color: createColorPropConfig("color"),
434
+ near: createNumberPropConfig("near", 1, { nudgeMultiplier: 0.1 }),
435
+ far: createNumberPropConfig("far", 1e3, { nudgeMultiplier: 0.1 })
436
+ },
437
+ useTransformControls: false,
438
+ icon: "cloud"
439
+ }
440
+ };
441
+ var defaultEditableFactoryConfig_default = defaultEditableFactoryConfig;
442
+
443
+ // src/main/utils.ts
444
+ var refreshSnapshot = editorStore.getState().createSnapshot;
445
+ var makeStoreKey = (sheetObjectAddress) => `${sheetObjectAddress.sheetId}:${sheetObjectAddress.sheetInstanceId}:${sheetObjectAddress.objectKey}`;
446
+
447
+ // src/main/editable.tsx
448
+ import { notify as notify2 } from "@theatre/core";
449
+
450
+ // src/main/RafDriverProvider.tsx
451
+ import React2, { createContext as createContext2, useContext as useContext2, useEffect as useEffect2 } from "react";
452
+ var ctx2 = createContext2(void 0);
453
+ var useCurrentRafDriver = () => {
454
+ var _a;
455
+ return (_a = useContext2(ctx2)) == null ? void 0 : _a.rafDriver;
456
+ };
457
+ var RafDriverProvider = ({ driver, children }) => {
458
+ useEffect2(() => {
459
+ if (!driver || driver.type !== "Theatre_RafDriver_PublicAPI") {
460
+ throw new Error(
461
+ `driver in <RafDriverProvider deriver={driver}> has an invalid value`
462
+ );
463
+ }
464
+ }, [driver]);
465
+ return /* @__PURE__ */ React2.createElement(ctx2.Provider, { value: { rafDriver: driver } }, children);
466
+ };
467
+ var RafDriverProvider_default = RafDriverProvider;
468
+
469
+ // src/main/editable.tsx
470
+ var createEditable = (config2) => {
471
+ const editable2 = (Component, type) => {
472
+ if (Component !== "primitive" && !type) {
473
+ throw new Error(
474
+ `You must provide the type of the component you're creating an editable for. For example: editable(MyComponent, 'mesh').`
475
+ );
476
+ }
477
+ return forwardRef(
478
+ (_a, ref) => {
479
+ var _b = _a, {
480
+ theatreKey,
481
+ visible,
482
+ editableType,
483
+ additionalProps,
484
+ objRef
485
+ } = _b, props = __objRest(_b, [
486
+ "theatreKey",
487
+ "visible",
488
+ "editableType",
489
+ "additionalProps",
490
+ "objRef"
491
+ ]);
492
+ if (typeof theatreKey !== "string") {
493
+ throw new Error(
494
+ `No valid theatreKey was provided to the editable component. theatreKey must be a string. Received: ${theatreKey}`
495
+ );
496
+ }
497
+ if (Component === "primitive" && !editableType) {
498
+ throw new Error(
499
+ `When using the primitive component, you must provide the editableType prop. Received: ${editableType}`
500
+ );
501
+ }
502
+ const actualType = type != null ? type : editableType;
503
+ const objectRef = useRef();
504
+ const sheet = useCurrentSheet();
505
+ const rafDriver = useCurrentRafDriver();
506
+ const [sheetObject, setSheetObject] = useState(void 0);
507
+ const storeKey = useMemo(
508
+ () => makeStoreKey(__spreadProps(__spreadValues({}, sheet.address), {
509
+ objectKey: theatreKey
510
+ })),
511
+ [sheet, theatreKey]
512
+ );
513
+ const invalidate = useInvalidate();
514
+ useEffect3(() => {
515
+ if (Component === "perspectiveCamera" || Component === "orthographicCamera") {
516
+ const dreiComponent = Component.charAt(0).toUpperCase() + Component.slice(1);
517
+ notify2.warning(
518
+ `Possibly incorrect use of <e.${Component} />`,
519
+ `You seem to have declared the camera "${theatreKey}" simply as \`<e.${Component} ... />\`. This alone won't make r3f use it for rendering.
520
+
521
+ The easiest way to create a custom animatable \`${dreiComponent}\` is to import it from \`@react-three/drei\`, and make it editable.
522
+ \`\`\`
523
+ import {${dreiComponent}} from '@react-three/drei'
524
+
525
+ const EditableCamera =
526
+ editable(${dreiComponent}, '${Component}')
527
+ \`\`\`
528
+ Then you can use it in your JSX like any other editable component. Note the makeDefault prop exposed by drei, which makes r3f use it for rendering.
529
+ \`\`\`
530
+ <EditableCamera
531
+ theatreKey="${theatreKey}"
532
+ makeDefault
533
+ >
534
+ \`\`\`
535
+ `
536
+ );
537
+ }
538
+ }, [Component, theatreKey]);
539
+ useLayoutEffect2(() => {
540
+ if (!sheet)
541
+ return;
542
+ if (sheetObject) {
543
+ sheet.object(
544
+ theatreKey,
545
+ Object.assign(
546
+ __spreadValues({}, additionalProps),
547
+ ...Object.values(config2[actualType].props).map(
548
+ // @ts-ignore
549
+ (value) => value.type
550
+ )
551
+ ),
552
+ { reconfigure: true }
553
+ );
554
+ return;
555
+ } else {
556
+ const sheetObject2 = sheet.object(
557
+ theatreKey,
558
+ Object.assign(
559
+ __spreadValues({}, additionalProps),
560
+ ...Object.values(config2[actualType].props).map(
561
+ // @ts-ignore
562
+ (value) => value.type
563
+ )
564
+ )
565
+ );
566
+ allRegisteredObjects.add(sheetObject2);
567
+ setSheetObject(sheetObject2);
568
+ if (objRef)
569
+ typeof objRef === "function" ? objRef(sheetObject2) : objRef.current = sheetObject2;
570
+ editorStore.getState().addEditable(storeKey, {
571
+ type: actualType,
572
+ sheetObject: sheetObject2,
573
+ visibleOnlyInEditor: visible === "editor",
574
+ // @ts-ignore
575
+ objectConfig: config2[actualType]
576
+ });
577
+ }
578
+ }, [sheet, storeKey, additionalProps]);
579
+ useLayoutEffect2(() => {
580
+ if (!sheetObject)
581
+ return;
582
+ sheetObject.initialValue = Object.fromEntries(
583
+ // @ts-ignore
584
+ Object.entries(config2[actualType].props).map(
585
+ // @ts-ignore
586
+ ([key, value]) => [key, value.parse(props)]
587
+ )
588
+ );
589
+ }, [
590
+ sheetObject,
591
+ // @ts-ignore
592
+ ...Object.keys(config2[actualType].props).map(
593
+ // @ts-ignore
594
+ (key) => props[key]
595
+ )
596
+ ]);
597
+ useLayoutEffect2(() => {
598
+ if (!sheetObject)
599
+ return;
600
+ const object = objectRef.current;
601
+ const setFromTheatre = (newValues) => {
602
+ var _a2, _b2;
603
+ Object.entries(config2[actualType].props).forEach(
604
+ // @ts-ignore
605
+ ([key, value]) => value.apply(newValues[key], object)
606
+ );
607
+ (_b2 = (_a2 = config2[actualType]).updateObject) == null ? void 0 : _b2.call(_a2, object);
608
+ invalidate();
609
+ };
610
+ setFromTheatre(sheetObject.value);
611
+ const unsubscribe = sheetObject.onValuesChange(
612
+ setFromTheatre,
613
+ rafDriver
614
+ );
615
+ return () => {
616
+ unsubscribe();
617
+ sheetObject.sheet.detachObject(theatreKey);
618
+ allRegisteredObjects.delete(sheetObject);
619
+ editorStore.getState().removeEditable(storeKey);
620
+ };
621
+ }, [sheetObject, rafDriver]);
622
+ return (
623
+ // @ts-ignore
624
+ /* @__PURE__ */ React3.createElement(
625
+ Component,
626
+ __spreadProps(__spreadValues({
627
+ ref: o([objectRef, ref])
628
+ }, props), {
629
+ visible: visible !== "editor" && visible,
630
+ userData: {
631
+ __editable: true,
632
+ __storeKey: storeKey
633
+ }
634
+ })
635
+ )
636
+ );
637
+ }
638
+ );
639
+ };
640
+ const extensions = __spreadProps(__spreadValues({}, Object.fromEntries(
641
+ Object.keys(config2).map((key) => [
642
+ key,
643
+ // @ts-ignore
644
+ editable2(key, key)
645
+ ])
646
+ )), {
647
+ primitive: editable2("primitive", null)
648
+ });
649
+ return Object.assign(editable2, extensions);
650
+ };
651
+ var editable = createEditable(
652
+ defaultEditableFactoryConfig_default
653
+ );
654
+ var editable_default = editable;
655
+
656
+ // src/main/RefreshSnapshot.tsx
657
+ import React4, { useEffect as useEffect4 } from "react";
658
+ var RefreshSnapshot = () => {
659
+ useEffect4(() => {
660
+ setTimeout(() => {
661
+ refreshSnapshot();
662
+ });
663
+ }, []);
664
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null);
665
+ };
666
+ var RefreshSnapshot_default = RefreshSnapshot;
667
+
668
+ // src/drei/PerspectiveCamera.tsx
669
+ import * as React5 from "react";
670
+ import { useFrame, useThree as useThree3 } from "@react-three/fiber";
671
+ import { Vector3 } from "three";
672
+ var PerspectiveCamera = editable_default(
673
+ React5.forwardRef(
674
+ (_a, ref) => {
675
+ var _b = _a, { makeDefault, lookAt } = _b, props = __objRest(_b, ["makeDefault", "lookAt"]);
676
+ const set = useThree3(({ set: set2 }) => set2);
677
+ const camera = useThree3(({ camera: camera2 }) => camera2);
678
+ const size = useThree3(({ size: size2 }) => size2);
679
+ const cameraRef = React5.useRef(null);
680
+ React5.useLayoutEffect(() => {
681
+ if (!props.manual) {
682
+ cameraRef.current.aspect = size.width / size.height;
683
+ }
684
+ }, [size, props]);
685
+ React5.useLayoutEffect(() => {
686
+ cameraRef.current.updateProjectionMatrix();
687
+ });
688
+ React5.useLayoutEffect(() => {
689
+ if (makeDefault) {
690
+ const oldCam = camera;
691
+ set(() => ({ camera: cameraRef.current }));
692
+ return () => set(() => ({ camera: oldCam }));
693
+ }
694
+ }, [cameraRef, makeDefault, set]);
695
+ useFrame(() => {
696
+ var _a2;
697
+ if (lookAt && cameraRef.current) {
698
+ cameraRef.current.lookAt(
699
+ Array.isArray(lookAt) ? new Vector3(...lookAt) : lookAt.current ? lookAt.current.position : lookAt
700
+ );
701
+ const snapshot = editorStore.getState().editablesSnapshot;
702
+ if (snapshot) {
703
+ (_a2 = snapshot[cameraRef.current.userData.__storeKey].proxyObject) == null ? void 0 : _a2.rotation.copy(cameraRef.current.rotation);
704
+ }
705
+ }
706
+ });
707
+ return /* @__PURE__ */ React5.createElement("perspectiveCamera", __spreadValues({ ref: o([cameraRef, ref]) }, props));
708
+ }
709
+ ),
710
+ "perspectiveCamera"
711
+ );
712
+
713
+ // src/drei/OrthographicCamera.tsx
714
+ import * as React6 from "react";
715
+ import { useFrame as useFrame2, useThree as useThree4 } from "@react-three/fiber";
716
+ import { Vector3 as Vector32 } from "three";
717
+ var OrthographicCamera = editable_default(
718
+ React6.forwardRef(
719
+ (_a, ref) => {
720
+ var _b = _a, { makeDefault, lookAt } = _b, props = __objRest(_b, ["makeDefault", "lookAt"]);
721
+ const set = useThree4(({ set: set2 }) => set2);
722
+ const camera = useThree4(({ camera: camera2 }) => camera2);
723
+ const size = useThree4(({ size: size2 }) => size2);
724
+ const cameraRef = React6.useRef(null);
725
+ React6.useLayoutEffect(() => {
726
+ if (!props.manual) {
727
+ cameraRef.current.updateProjectionMatrix();
728
+ }
729
+ }, [size, props]);
730
+ React6.useLayoutEffect(() => {
731
+ cameraRef.current.updateProjectionMatrix();
732
+ });
733
+ React6.useLayoutEffect(() => {
734
+ if (makeDefault) {
735
+ const oldCam = camera;
736
+ set(() => ({ camera: cameraRef.current }));
737
+ return () => set(() => ({ camera: oldCam }));
738
+ }
739
+ }, [cameraRef, makeDefault, set]);
740
+ useFrame2(() => {
741
+ var _a2;
742
+ if (lookAt && cameraRef.current) {
743
+ cameraRef.current.lookAt(
744
+ Array.isArray(lookAt) ? new Vector32(...lookAt) : lookAt.current ? lookAt.current.position : lookAt
745
+ );
746
+ const snapshot = editorStore.getState().editablesSnapshot;
747
+ if (snapshot) {
748
+ (_a2 = snapshot[cameraRef.current.userData.__storeKey].proxyObject) == null ? void 0 : _a2.rotation.copy(cameraRef.current.rotation);
749
+ }
750
+ }
751
+ });
752
+ return /* @__PURE__ */ React6.createElement(
753
+ "orthographicCamera",
754
+ __spreadValues({
755
+ left: size.width / -2,
756
+ right: size.width / 2,
757
+ top: size.height / 2,
758
+ bottom: size.height / -2,
759
+ ref: o([cameraRef, ref])
760
+ }, props)
761
+ );
762
+ }
763
+ ),
764
+ "orthographicCamera"
765
+ );
766
+ export {
767
+ OrthographicCamera,
768
+ PerspectiveCamera,
769
+ RafDriverProvider_default as RafDriverProvider,
770
+ RefreshSnapshot_default as RefreshSnapshot,
771
+ SheetProvider_default as SheetProvider,
772
+ editorStore as ____private_editorStore,
773
+ allRegisteredObjects as __private_allRegisteredObjects,
774
+ makeStoreKey as __private_makeStoreKey,
775
+ editable_default as editable,
776
+ refreshSnapshot,
777
+ useCurrentRafDriver,
778
+ useCurrentSheet
779
+ };
780
+ //# sourceMappingURL=index.esm.js.map