@react-three/fiber 8.1.0 → 8.2.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.
@@ -1,9 +1,9 @@
1
- import * as React from 'react';
2
- import type { Options as ResizeOptions } from 'react-use-measure';
3
- import { RenderProps } from '../core';
4
- export interface Props extends Omit<RenderProps<HTMLCanvasElement>, 'size'>, React.HTMLAttributes<HTMLDivElement> {
5
- children: React.ReactNode;
6
- fallback?: React.ReactNode;
7
- resize?: ResizeOptions;
8
- }
9
- export declare const Canvas: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLCanvasElement>>;
1
+ import * as React from 'react';
2
+ import type { Options as ResizeOptions } from 'react-use-measure';
3
+ import { RenderProps } from '../core';
4
+ export interface Props extends Omit<RenderProps<HTMLCanvasElement>, 'size'>, React.HTMLAttributes<HTMLDivElement> {
5
+ children: React.ReactNode;
6
+ fallback?: React.ReactNode;
7
+ resize?: ResizeOptions;
8
+ }
9
+ export declare const Canvas: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLCanvasElement>>;
@@ -1,4 +1,4 @@
1
- import { UseBoundStore } from 'zustand';
2
- import { RootState } from '../core/store';
3
- import { EventManager } from '../core/events';
4
- export declare function createPointerEvents(store: UseBoundStore<RootState>): EventManager<HTMLElement>;
1
+ import { UseBoundStore } from 'zustand';
2
+ import { RootState } from '../core/store';
3
+ import { EventManager } from '../core/events';
4
+ export declare function createPointerEvents(store: UseBoundStore<RootState>): EventManager<HTMLElement>;
@@ -855,7 +855,7 @@ let extend = objects => void (catalogue = { ...catalogue,
855
855
  ...objects
856
856
  });
857
857
 
858
- function createRenderer(roots, getEventPriority) {
858
+ function createRenderer(_roots, _getEventPriority) {
859
859
  function createInstance(type, {
860
860
  args = [],
861
861
  attach,
@@ -1071,10 +1071,10 @@ function createRenderer(roots, getEventPriority) {
1071
1071
  appendChild,
1072
1072
  appendInitialChild: appendChild,
1073
1073
  insertBefore,
1074
- supportsMicrotask: true,
1075
- warnsIfNotActing: true,
1076
1074
  supportsMutation: true,
1077
1075
  isPrimaryRenderer: false,
1076
+ supportsPersistence: false,
1077
+ supportsHydration: false,
1078
1078
  noTimeout: -1,
1079
1079
  appendChildToContainer: (container, child) => {
1080
1080
  const scene = container.getState().scene; // Link current root to the default scene
@@ -1093,10 +1093,10 @@ function createRenderer(roots, getEventPriority) {
1093
1093
  const localState = (_instance$__r3f2 = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f2 : {}; // https://github.com/facebook/react/issues/20271
1094
1094
  // Returning true will trigger commitMount
1095
1095
 
1096
- return !!localState.handlers;
1096
+ return Boolean(localState.handlers);
1097
1097
  },
1098
1098
 
1099
- prepareUpdate(instance, type, oldProps, newProps) {
1099
+ prepareUpdate(instance, _type, oldProps, newProps) {
1100
1100
  // Create diff-sets
1101
1101
  if (instance.__r3f.primitive && newProps.object && newProps.object !== instance) {
1102
1102
  return [true];
@@ -1113,7 +1113,7 @@ function createRenderer(roots, getEventPriority) {
1113
1113
  ...restOld
1114
1114
  } = oldProps; // Throw if an object or literal was passed for args
1115
1115
 
1116
- if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instanciated
1116
+ if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instantiated
1117
1117
 
1118
1118
  if (argsNew.some((value, index) => value !== argsOld[index])) return [true]; // Create a diff-set, flag if there are any changes
1119
1119
 
@@ -1124,13 +1124,13 @@ function createRenderer(roots, getEventPriority) {
1124
1124
  }
1125
1125
  },
1126
1126
 
1127
- commitUpdate(instance, [reconstruct, diff], type, oldProps, newProps, fiber) {
1127
+ commitUpdate(instance, [reconstruct, diff], type, _oldProps, newProps, fiber) {
1128
1128
  // Reconstruct when args or <primitive object={...} have changes
1129
1129
  if (reconstruct) switchInstance(instance, type, newProps, fiber); // Otherwise just overwrite props
1130
1130
  else applyProps$1(instance, diff);
1131
1131
  },
1132
1132
 
1133
- commitMount(instance, type, props, int) {
1133
+ commitMount(instance, _type, _props, _int) {
1134
1134
  var _instance$__r3f3;
1135
1135
 
1136
1136
  // https://github.com/facebook/react/issues/20271
@@ -1143,13 +1143,11 @@ function createRenderer(roots, getEventPriority) {
1143
1143
  },
1144
1144
 
1145
1145
  getPublicInstance: instance => instance,
1146
- shouldDeprioritizeSubtree: () => false,
1147
1146
  prepareForCommit: () => null,
1148
1147
  preparePortalMount: container => prepare(container.getState().scene),
1149
1148
  resetAfterCommit: () => {},
1150
1149
  shouldSetTextContent: () => false,
1151
1150
  clearContainer: () => false,
1152
- detachDeletedInstance: () => {},
1153
1151
 
1154
1152
  hideInstance(instance) {
1155
1153
  var _instance$__r3f4;
@@ -1177,20 +1175,23 @@ function createRenderer(roots, getEventPriority) {
1177
1175
  invalidateInstance(instance);
1178
1176
  },
1179
1177
 
1180
- createTextInstance: () => {},
1178
+ createTextInstance: () => {
1179
+ throw new Error('Text is not allowed in the R3F tree.');
1180
+ },
1181
1181
  hideTextInstance: () => {
1182
1182
  throw new Error('Text is not allowed in the R3F tree.');
1183
1183
  },
1184
1184
  unhideTextInstance: () => {},
1185
- getCurrentEventPriority: () => getEventPriority ? getEventPriority() : constants.DefaultEventPriority,
1186
- // @ts-ignore
1187
- now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : undefined,
1185
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874
1188
1186
  // @ts-ignore
1187
+ getCurrentEventPriority: () => _getEventPriority ? _getEventPriority() : constants.DefaultEventPriority,
1188
+ beforeActiveInstanceBlur: () => {},
1189
+ afterActiveInstanceBlur: () => {},
1190
+ detachDeletedInstance: () => {},
1191
+ now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : () => 0,
1192
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r920883503
1189
1193
  scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1190
- // @ts-ignore
1191
- cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined,
1192
- setTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1193
- clearTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1194
+ cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1194
1195
  });
1195
1196
  return {
1196
1197
  reconciler,
@@ -828,7 +828,7 @@ let extend = objects => void (catalogue = { ...catalogue,
828
828
  ...objects
829
829
  });
830
830
 
831
- function createRenderer(roots, getEventPriority) {
831
+ function createRenderer(_roots, _getEventPriority) {
832
832
  function createInstance(type, {
833
833
  args = [],
834
834
  attach,
@@ -1044,10 +1044,10 @@ function createRenderer(roots, getEventPriority) {
1044
1044
  appendChild,
1045
1045
  appendInitialChild: appendChild,
1046
1046
  insertBefore,
1047
- supportsMicrotask: true,
1048
- warnsIfNotActing: true,
1049
1047
  supportsMutation: true,
1050
1048
  isPrimaryRenderer: false,
1049
+ supportsPersistence: false,
1050
+ supportsHydration: false,
1051
1051
  noTimeout: -1,
1052
1052
  appendChildToContainer: (container, child) => {
1053
1053
  const scene = container.getState().scene; // Link current root to the default scene
@@ -1066,10 +1066,10 @@ function createRenderer(roots, getEventPriority) {
1066
1066
  const localState = (_instance$__r3f2 = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f2 : {}; // https://github.com/facebook/react/issues/20271
1067
1067
  // Returning true will trigger commitMount
1068
1068
 
1069
- return !!localState.handlers;
1069
+ return Boolean(localState.handlers);
1070
1070
  },
1071
1071
 
1072
- prepareUpdate(instance, type, oldProps, newProps) {
1072
+ prepareUpdate(instance, _type, oldProps, newProps) {
1073
1073
  // Create diff-sets
1074
1074
  if (instance.__r3f.primitive && newProps.object && newProps.object !== instance) {
1075
1075
  return [true];
@@ -1086,7 +1086,7 @@ function createRenderer(roots, getEventPriority) {
1086
1086
  ...restOld
1087
1087
  } = oldProps; // Throw if an object or literal was passed for args
1088
1088
 
1089
- if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instanciated
1089
+ if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instantiated
1090
1090
 
1091
1091
  if (argsNew.some((value, index) => value !== argsOld[index])) return [true]; // Create a diff-set, flag if there are any changes
1092
1092
 
@@ -1097,13 +1097,13 @@ function createRenderer(roots, getEventPriority) {
1097
1097
  }
1098
1098
  },
1099
1099
 
1100
- commitUpdate(instance, [reconstruct, diff], type, oldProps, newProps, fiber) {
1100
+ commitUpdate(instance, [reconstruct, diff], type, _oldProps, newProps, fiber) {
1101
1101
  // Reconstruct when args or <primitive object={...} have changes
1102
1102
  if (reconstruct) switchInstance(instance, type, newProps, fiber); // Otherwise just overwrite props
1103
1103
  else applyProps$1(instance, diff);
1104
1104
  },
1105
1105
 
1106
- commitMount(instance, type, props, int) {
1106
+ commitMount(instance, _type, _props, _int) {
1107
1107
  var _instance$__r3f3;
1108
1108
 
1109
1109
  // https://github.com/facebook/react/issues/20271
@@ -1116,13 +1116,11 @@ function createRenderer(roots, getEventPriority) {
1116
1116
  },
1117
1117
 
1118
1118
  getPublicInstance: instance => instance,
1119
- shouldDeprioritizeSubtree: () => false,
1120
1119
  prepareForCommit: () => null,
1121
1120
  preparePortalMount: container => prepare(container.getState().scene),
1122
1121
  resetAfterCommit: () => {},
1123
1122
  shouldSetTextContent: () => false,
1124
1123
  clearContainer: () => false,
1125
- detachDeletedInstance: () => {},
1126
1124
 
1127
1125
  hideInstance(instance) {
1128
1126
  var _instance$__r3f4;
@@ -1150,20 +1148,23 @@ function createRenderer(roots, getEventPriority) {
1150
1148
  invalidateInstance(instance);
1151
1149
  },
1152
1150
 
1153
- createTextInstance: () => {},
1151
+ createTextInstance: () => {
1152
+ throw new Error('Text is not allowed in the R3F tree.');
1153
+ },
1154
1154
  hideTextInstance: () => {
1155
1155
  throw new Error('Text is not allowed in the R3F tree.');
1156
1156
  },
1157
1157
  unhideTextInstance: () => {},
1158
- getCurrentEventPriority: () => getEventPriority ? getEventPriority() : DefaultEventPriority,
1159
- // @ts-ignore
1160
- now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : undefined,
1158
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874
1161
1159
  // @ts-ignore
1160
+ getCurrentEventPriority: () => _getEventPriority ? _getEventPriority() : DefaultEventPriority,
1161
+ beforeActiveInstanceBlur: () => {},
1162
+ afterActiveInstanceBlur: () => {},
1163
+ detachDeletedInstance: () => {},
1164
+ now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : () => 0,
1165
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r920883503
1162
1166
  scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1163
- // @ts-ignore
1164
- cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined,
1165
- setTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1166
- clearTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1167
+ cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1167
1168
  });
1168
1169
  return {
1169
1170
  reconciler,
@@ -855,7 +855,7 @@ let extend = objects => void (catalogue = { ...catalogue,
855
855
  ...objects
856
856
  });
857
857
 
858
- function createRenderer(roots, getEventPriority) {
858
+ function createRenderer(_roots, _getEventPriority) {
859
859
  function createInstance(type, {
860
860
  args = [],
861
861
  attach,
@@ -1071,10 +1071,10 @@ function createRenderer(roots, getEventPriority) {
1071
1071
  appendChild,
1072
1072
  appendInitialChild: appendChild,
1073
1073
  insertBefore,
1074
- supportsMicrotask: true,
1075
- warnsIfNotActing: true,
1076
1074
  supportsMutation: true,
1077
1075
  isPrimaryRenderer: false,
1076
+ supportsPersistence: false,
1077
+ supportsHydration: false,
1078
1078
  noTimeout: -1,
1079
1079
  appendChildToContainer: (container, child) => {
1080
1080
  const scene = container.getState().scene; // Link current root to the default scene
@@ -1093,10 +1093,10 @@ function createRenderer(roots, getEventPriority) {
1093
1093
  const localState = (_instance$__r3f2 = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f2 : {}; // https://github.com/facebook/react/issues/20271
1094
1094
  // Returning true will trigger commitMount
1095
1095
 
1096
- return !!localState.handlers;
1096
+ return Boolean(localState.handlers);
1097
1097
  },
1098
1098
 
1099
- prepareUpdate(instance, type, oldProps, newProps) {
1099
+ prepareUpdate(instance, _type, oldProps, newProps) {
1100
1100
  // Create diff-sets
1101
1101
  if (instance.__r3f.primitive && newProps.object && newProps.object !== instance) {
1102
1102
  return [true];
@@ -1113,7 +1113,7 @@ function createRenderer(roots, getEventPriority) {
1113
1113
  ...restOld
1114
1114
  } = oldProps; // Throw if an object or literal was passed for args
1115
1115
 
1116
- if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instanciated
1116
+ if (!Array.isArray(argsNew)) throw 'The args prop must be an array!'; // If it has new props or arguments, then it needs to be re-instantiated
1117
1117
 
1118
1118
  if (argsNew.some((value, index) => value !== argsOld[index])) return [true]; // Create a diff-set, flag if there are any changes
1119
1119
 
@@ -1124,13 +1124,13 @@ function createRenderer(roots, getEventPriority) {
1124
1124
  }
1125
1125
  },
1126
1126
 
1127
- commitUpdate(instance, [reconstruct, diff], type, oldProps, newProps, fiber) {
1127
+ commitUpdate(instance, [reconstruct, diff], type, _oldProps, newProps, fiber) {
1128
1128
  // Reconstruct when args or <primitive object={...} have changes
1129
1129
  if (reconstruct) switchInstance(instance, type, newProps, fiber); // Otherwise just overwrite props
1130
1130
  else applyProps$1(instance, diff);
1131
1131
  },
1132
1132
 
1133
- commitMount(instance, type, props, int) {
1133
+ commitMount(instance, _type, _props, _int) {
1134
1134
  var _instance$__r3f3;
1135
1135
 
1136
1136
  // https://github.com/facebook/react/issues/20271
@@ -1143,13 +1143,11 @@ function createRenderer(roots, getEventPriority) {
1143
1143
  },
1144
1144
 
1145
1145
  getPublicInstance: instance => instance,
1146
- shouldDeprioritizeSubtree: () => false,
1147
1146
  prepareForCommit: () => null,
1148
1147
  preparePortalMount: container => prepare(container.getState().scene),
1149
1148
  resetAfterCommit: () => {},
1150
1149
  shouldSetTextContent: () => false,
1151
1150
  clearContainer: () => false,
1152
- detachDeletedInstance: () => {},
1153
1151
 
1154
1152
  hideInstance(instance) {
1155
1153
  var _instance$__r3f4;
@@ -1177,20 +1175,23 @@ function createRenderer(roots, getEventPriority) {
1177
1175
  invalidateInstance(instance);
1178
1176
  },
1179
1177
 
1180
- createTextInstance: () => {},
1178
+ createTextInstance: () => {
1179
+ throw new Error('Text is not allowed in the R3F tree.');
1180
+ },
1181
1181
  hideTextInstance: () => {
1182
1182
  throw new Error('Text is not allowed in the R3F tree.');
1183
1183
  },
1184
1184
  unhideTextInstance: () => {},
1185
- getCurrentEventPriority: () => getEventPriority ? getEventPriority() : constants.DefaultEventPriority,
1186
- // @ts-ignore
1187
- now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : undefined,
1185
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874
1188
1186
  // @ts-ignore
1187
+ getCurrentEventPriority: () => _getEventPriority ? _getEventPriority() : constants.DefaultEventPriority,
1188
+ beforeActiveInstanceBlur: () => {},
1189
+ afterActiveInstanceBlur: () => {},
1190
+ detachDeletedInstance: () => {},
1191
+ now: typeof performance !== 'undefined' && is.fun(performance.now) ? performance.now : is.fun(Date.now) ? Date.now : () => 0,
1192
+ // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r920883503
1189
1193
  scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1190
- // @ts-ignore
1191
- cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined,
1192
- setTimeout: is.fun(setTimeout) ? setTimeout : undefined,
1193
- clearTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1194
+ cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined
1194
1195
  });
1195
1196
  return {
1196
1197
  reconciler,
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-c13c7c31.cjs.dev.js');
5
+ var index = require('./index-0499a96a.cjs.dev.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-ab905875.cjs.prod.js');
5
+ var index = require('./index-ca47b633.cjs.prod.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -1,5 +1,5 @@
1
- import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, b as useIsomorphicLayoutEffect, d as unmountComponentAtNode } from './index-9b4af973.esm.js';
2
- export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, c as createEvents, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from './index-9b4af973.esm.js';
1
+ import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, b as useIsomorphicLayoutEffect, d as unmountComponentAtNode } from './index-6279214a.esm.js';
2
+ export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, c as createEvents, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from './index-6279214a.esm.js';
3
3
  import _extends from '@babel/runtime/helpers/esm/extends';
4
4
  import * as React from 'react';
5
5
  import * as THREE from 'three';
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('../../dist/index-c13c7c31.cjs.dev.js');
5
+ var index = require('../../dist/index-0499a96a.cjs.dev.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('../../dist/index-ab905875.cjs.prod.js');
5
+ var index = require('../../dist/index-ca47b633.cjs.prod.js');
6
6
  var _extends = require('@babel/runtime/helpers/extends');
7
7
  var React = require('react');
8
8
  var THREE = require('three');
@@ -1,5 +1,5 @@
1
- import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from '../../dist/index-9b4af973.esm.js';
2
- export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from '../../dist/index-9b4af973.esm.js';
1
+ import { c as createEvents, e as extend, u as useMutableCallback, a as createRoot, E as ErrorBoundary, B as Block, d as unmountComponentAtNode } from '../../dist/index-6279214a.esm.js';
2
+ export { t as ReactThreeFiber, s as _roots, q as act, n as addAfterEffect, m as addEffect, o as addTail, l as advance, i as applyProps, f as context, g as createPortal, a as createRoot, j as dispose, e as extend, p as getRootState, k as invalidate, h as reconciler, r as render, d as unmountComponentAtNode, x as useFrame, y as useGraph, z as useLoader, v as useStore, w as useThree } from '../../dist/index-6279214a.esm.js';
3
3
  import _extends from '@babel/runtime/helpers/esm/extends';
4
4
  import * as React from 'react';
5
5
  import * as THREE from 'three';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-three/fiber",
3
- "version": "8.1.0",
3
+ "version": "8.2.0",
4
4
  "description": "A React renderer for Threejs",
5
5
  "keywords": [
6
6
  "react",