@ifiwas/standard-view 2.0.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 (134) hide show
  1. package/.prettierignore +67 -0
  2. package/.prettierrc +12 -0
  3. package/CHANGELOG.md +42 -0
  4. package/LICENSE +8 -0
  5. package/README.md +199 -0
  6. package/debug-storybook.log +179 -0
  7. package/declarations.d.ts +17 -0
  8. package/dist/standard-view.es.js +9522 -0
  9. package/dist/standard-view.es.js.map +1 -0
  10. package/dist/standard-view.umd.js +41 -0
  11. package/dist/standard-view.umd.js.map +1 -0
  12. package/fonts/gentilis.bold.typeface.json +1 -0
  13. package/fonts/gentilis.typeface.json +1 -0
  14. package/fonts/helvetiker.bold.typeface.json +1 -0
  15. package/fonts/helvetiker.typeface.json +1 -0
  16. package/fonts/optimer.bold.typeface.json +1 -0
  17. package/fonts/optimer.typeface.json +1 -0
  18. package/images.d.ts +7 -0
  19. package/index.js +10 -0
  20. package/lib/controls/OrbitControls.d.ts +9 -0
  21. package/lib/controls/OrbitControls.js +761 -0
  22. package/lib/controls/index.d.ts +1 -0
  23. package/lib/controls/index.js +18 -0
  24. package/lib/groups/Arrow.d.ts +19 -0
  25. package/lib/groups/Arrow.js +134 -0
  26. package/lib/groups/Axis.d.ts +20 -0
  27. package/lib/groups/Axis.js +147 -0
  28. package/lib/groups/BoundingBox.d.ts +9 -0
  29. package/lib/groups/BoundingBox.js +143 -0
  30. package/lib/groups/Camera.d.ts +32 -0
  31. package/lib/groups/Camera.js +477 -0
  32. package/lib/groups/Capsule.d.ts +9 -0
  33. package/lib/groups/Capsule.js +112 -0
  34. package/lib/groups/FBX.d.ts +9 -0
  35. package/lib/groups/FBX.js +213 -0
  36. package/lib/groups/GLTF.d.ts +9 -0
  37. package/lib/groups/GLTF.js +198 -0
  38. package/lib/groups/Group.d.ts +63 -0
  39. package/lib/groups/Group.js +426 -0
  40. package/lib/groups/OBJ.d.ts +11 -0
  41. package/lib/groups/OBJ.js +252 -0
  42. package/lib/groups/PCD.d.ts +9 -0
  43. package/lib/groups/PCD.js +82 -0
  44. package/lib/groups/Path.d.ts +19 -0
  45. package/lib/groups/Path.js +160 -0
  46. package/lib/groups/index.d.ts +11 -0
  47. package/lib/groups/index.js +91 -0
  48. package/lib/index.d.ts +6 -0
  49. package/lib/index.js +298 -0
  50. package/lib/lights/AmbientLight.d.ts +8 -0
  51. package/lib/lights/AmbientLight.js +37 -0
  52. package/lib/lights/DirectionalLight.d.ts +8 -0
  53. package/lib/lights/DirectionalLight.js +43 -0
  54. package/lib/lights/HemisphereLight.d.ts +13 -0
  55. package/lib/lights/HemisphereLight.js +108 -0
  56. package/lib/lights/LightWithShadows.d.ts +24 -0
  57. package/lib/lights/LightWithShadows.js +188 -0
  58. package/lib/lights/PointLight.d.ts +9 -0
  59. package/lib/lights/PointLight.js +47 -0
  60. package/lib/lights/RectAreaLight.d.ts +13 -0
  61. package/lib/lights/RectAreaLight.js +177 -0
  62. package/lib/lights/SpotLight.d.ts +10 -0
  63. package/lib/lights/SpotLight.js +49 -0
  64. package/lib/lights/index.d.ts +6 -0
  65. package/lib/lights/index.js +48 -0
  66. package/lib/primitives/Box.d.ts +6 -0
  67. package/lib/primitives/Box.js +43 -0
  68. package/lib/primitives/Circle.d.ts +10 -0
  69. package/lib/primitives/Circle.js +85 -0
  70. package/lib/primitives/Cylinder.d.ts +15 -0
  71. package/lib/primitives/Cylinder.js +180 -0
  72. package/lib/primitives/Label.d.ts +18 -0
  73. package/lib/primitives/Label.js +189 -0
  74. package/lib/primitives/Line.d.ts +19 -0
  75. package/lib/primitives/Line.js +173 -0
  76. package/lib/primitives/Mesh.d.ts +72 -0
  77. package/lib/primitives/Mesh.js +642 -0
  78. package/lib/primitives/Plane.d.ts +7 -0
  79. package/lib/primitives/Plane.js +47 -0
  80. package/lib/primitives/Polygon.d.ts +8 -0
  81. package/lib/primitives/Polygon.js +75 -0
  82. package/lib/primitives/Quad.d.ts +9 -0
  83. package/lib/primitives/Quad.js +110 -0
  84. package/lib/primitives/Sphere.d.ts +14 -0
  85. package/lib/primitives/Sphere.js +92 -0
  86. package/lib/primitives/Text.d.ts +20 -0
  87. package/lib/primitives/Text.js +285 -0
  88. package/lib/primitives/Triangle.d.ts +8 -0
  89. package/lib/primitives/Triangle.js +83 -0
  90. package/lib/primitives/index.d.ts +12 -0
  91. package/lib/primitives/index.js +90 -0
  92. package/lib/shaders/index.d.ts +0 -0
  93. package/lib/shaders/index.js +2 -0
  94. package/lib/types/three-jsx.d.js +5 -0
  95. package/lib/utils/constants.js +181 -0
  96. package/lib/utils/events.d.ts +22 -0
  97. package/lib/utils/events.js +98 -0
  98. package/lib/utils/hooks.d.ts +8 -0
  99. package/lib/utils/hooks.js +96 -0
  100. package/lib/utils/index.d.ts +3 -0
  101. package/lib/utils/index.js +110 -0
  102. package/lib/utils/interfaces.d.ts +9 -0
  103. package/lib/utils/interfaces.js +5 -0
  104. package/lib/utils/math.d.ts +12 -0
  105. package/lib/utils/math.js +31 -0
  106. package/lib/utils/performance.d.ts +7 -0
  107. package/lib/utils/performance.js +114 -0
  108. package/lib/utils/styles.js +10 -0
  109. package/lib/utils/util.d.ts +76 -0
  110. package/lib/utils/util.js +290 -0
  111. package/lib/views/ContextBridge.d.ts +23 -0
  112. package/lib/views/ContextBridge.js +98 -0
  113. package/lib/views/SceneCamera.d.ts +7 -0
  114. package/lib/views/SceneCamera.js +52 -0
  115. package/lib/views/SetBackground.d.ts +9 -0
  116. package/lib/views/SetBackground.js +90 -0
  117. package/lib/views/SetControls.d.ts +19 -0
  118. package/lib/views/SetControls.js +173 -0
  119. package/lib/views/SetRenderer.d.ts +25 -0
  120. package/lib/views/SetRenderer.js +66 -0
  121. package/lib/views/SetShadows.d.ts +7 -0
  122. package/lib/views/SetShadows.js +48 -0
  123. package/lib/views/View3D.d.ts +21 -0
  124. package/lib/views/View3D.js +289 -0
  125. package/lib/views/ViewContext.d.ts +23 -0
  126. package/lib/views/ViewContext.js +55 -0
  127. package/lib/views/index.d.ts +2 -0
  128. package/lib/views/index.js +20 -0
  129. package/netlify.toml +15 -0
  130. package/package.json +110 -0
  131. package/tsconfig.json +42 -0
  132. package/tsconfig.prod.json +3 -0
  133. package/tsconfig.test.json +6 -0
  134. package/vite.config.ts +37 -0
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ exports.generateGroupProps = generateGroupProps;
9
+ var React = _interopRequireWildcard(require("react"));
10
+ var THREE = _interopRequireWildcard(require("three"));
11
+ var _constants = require("../utils/constants");
12
+ var _ViewContext = require("../views/ViewContext");
13
+ var _math = require("../utils/math");
14
+ var _events = require("../utils/events");
15
+ var _util = require("../utils/util");
16
+ var _excluded = ["position", "scale", "rotation", "eulerOrder", "roll", "quaternion", "normal", "materialType", "view3DEnvMap", "color", "hoverColor", "opacity", "transparent", "wireframe", "edges", "edgeColor", "edgeThresholdAngle", "side", "groupMember", "castShadow", "receiveShadow", "animation", "state", "onClick", "onDoubleClick", "onWheel", "onPointerUp", "onPointerDown", "onPointerOver", "onPointerOut", "onPointerMove", "hoverable", "mousePropagation", "clickSensitivity", "ignoreMouseEvents", "children"],
17
+ _excluded2 = ["position", "scale", "rotation", "normal", "roll", "quaternion", "animation", "state", "onClick", "onDoubleClick", "onWheel", "onPointerUp", "onPointerDown", "onPointerMove", "onPointerOver", "onPointerOut", "mousePropagation", "clickSensitivity", "ignoreMouseEvents"]; // Group.tsx
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
20
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
23
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
24
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
25
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
26
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
28
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
29
+ function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
30
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
31
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
32
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
33
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
34
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
35
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
36
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
37
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
38
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
39
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
40
+ var useState = React.useState,
41
+ useEffect = React.useEffect,
42
+ useRef = React.useRef,
43
+ useContext = React.useContext,
44
+ useCallback = React.useCallback,
45
+ useMemo = React.useMemo,
46
+ memo = React.memo,
47
+ forwardRef = React.forwardRef;
48
+ /**
49
+ * Group
50
+ *
51
+ * In Standard View, Group is a wrapper of @react-three/fiber/three.js's group.
52
+ * This component allows composing children components into one large
53
+ * manipulatable mesh-like component. This is useful for creating 3D assets
54
+ * comprised of many pieces and then perform transformations and animations
55
+ * on the whole asset.
56
+ *
57
+ * Group will extract away the group properties for the group manipulations
58
+ * at a group level.
59
+ */
60
+ var Group = forwardRef(function Group(_ref, ref) {
61
+ var _ref$position = _ref.position,
62
+ position = _ref$position === void 0 ? [0, 0, 0] : _ref$position,
63
+ _ref$scale = _ref.scale,
64
+ scale = _ref$scale === void 0 ? [1, 1, 1] : _ref$scale,
65
+ _ref$rotation = _ref.rotation,
66
+ rotation = _ref$rotation === void 0 ? [0, 0, 0] : _ref$rotation,
67
+ _ref$eulerOrder = _ref.eulerOrder,
68
+ eulerOrder = _ref$eulerOrder === void 0 ? _constants.EULER_ORDERS.XYZ : _ref$eulerOrder,
69
+ _ref$roll = _ref.roll,
70
+ roll = _ref$roll === void 0 ? 0 : _ref$roll,
71
+ quaternion = _ref.quaternion,
72
+ _ref$normal = _ref.normal,
73
+ normal = _ref$normal === void 0 ? _constants.DEFAULT_NORMAL : _ref$normal,
74
+ materialType = _ref.materialType,
75
+ view3DEnvMap = _ref.view3DEnvMap,
76
+ color = _ref.color,
77
+ hoverColor = _ref.hoverColor,
78
+ opacity = _ref.opacity,
79
+ transparent = _ref.transparent,
80
+ wireframe = _ref.wireframe,
81
+ edges = _ref.edges,
82
+ edgeColor = _ref.edgeColor,
83
+ edgeThresholdAngle = _ref.edgeThresholdAngle,
84
+ side = _ref.side,
85
+ _ref$groupMember = _ref.groupMember,
86
+ groupMember = _ref$groupMember === void 0 ? false : _ref$groupMember,
87
+ castShadow = _ref.castShadow,
88
+ receiveShadow = _ref.receiveShadow,
89
+ animation = _ref.animation,
90
+ state = _ref.state,
91
+ onClick = _ref.onClick,
92
+ onDoubleClick = _ref.onDoubleClick,
93
+ onWheel = _ref.onWheel,
94
+ onPointerUp = _ref.onPointerUp,
95
+ onPointerDown = _ref.onPointerDown,
96
+ onPointerOver = _ref.onPointerOver,
97
+ onPointerOut = _ref.onPointerOut,
98
+ onPointerMove = _ref.onPointerMove,
99
+ _ref$hoverable = _ref.hoverable,
100
+ hoverable = _ref$hoverable === void 0 ? true : _ref$hoverable,
101
+ _ref$mousePropagation = _ref.mousePropagation,
102
+ mousePropagation = _ref$mousePropagation === void 0 ? false : _ref$mousePropagation,
103
+ _ref$clickSensitivity = _ref.clickSensitivity,
104
+ clickSensitivity = _ref$clickSensitivity === void 0 ? 250 : _ref$clickSensitivity,
105
+ _ref$ignoreMouseEvent = _ref.ignoreMouseEvents,
106
+ ignoreMouseEvents = _ref$ignoreMouseEvent === void 0 ? false : _ref$ignoreMouseEvent,
107
+ children = _ref.children,
108
+ otherProps = _objectWithoutProperties(_ref, _excluded);
109
+ // Canvas Properties
110
+ var canvasProps = useContext(_ViewContext.ViewContext);
111
+
112
+ // Rotation
113
+ var _quaternion = useMemo(function updateQuaternion() {
114
+ // Normal
115
+ // @ts-ignore:T2345 // spread
116
+ var normalVec = _construct(THREE.Vector3, _toConsumableArray(normal)).normalize();
117
+ var normalQ = new THREE.Quaternion().setFromUnitVectors(_constants.DEFAULT_NORMAL_VEC3, normalVec);
118
+
119
+ // Rotation / Quaternion
120
+ var rotationQ = new THREE.Quaternion();
121
+ if (quaternion == null) {
122
+ // Convert Euler Rotation to Quaternion
123
+ // @ts-ignore:T2345 // spread
124
+ var _eulerOrder = eulerOrder.toUpperCase();
125
+ _eulerOrder = _constants.EULER_ORDERS[_eulerOrder] ? _eulerOrder : _constants.EULER_ORDERS.XYZ;
126
+ var euler = _construct(THREE.Euler, _toConsumableArray(rotation).concat([_eulerOrder]));
127
+ rotationQ = new THREE.Quaternion().setFromEuler(euler);
128
+ } else {
129
+ rotationQ = (0, _util.toQuaternion)(quaternion);
130
+ }
131
+
132
+ // Roll
133
+ var rollQ = new THREE.Quaternion().setFromAxisAngle(_constants.DEFAULT_NORMAL_VEC3, roll);
134
+
135
+ // q = normalQ * rotationQ * rollQ
136
+ var q = new THREE.Quaternion(); // Identity
137
+ q.premultiply(rollQ);
138
+ q.premultiply(rotationQ);
139
+ q.premultiply(normalQ);
140
+ return q;
141
+ }, [quaternion, rotation, eulerOrder, normal, roll]);
142
+
143
+ // Scale
144
+ var _scale = useMemo(function updateScale() {
145
+ // Invalid Scale Warning
146
+ if (!Array.isArray(scale) || scale.length !== 3) {
147
+ /* eslint-disable-next-line no-console */
148
+ console.warn("[Mesh] scale must be a 3x1 array of numbers! scale: ".concat(scale));
149
+
150
+ // @ts-ignore:T2345 // spread
151
+ return [1, 1, 1];
152
+ }
153
+
154
+ // Handle Zero Scale Input
155
+ if (!scale[0] || !scale[1] || !scale[2] || Math.abs(scale[0]) < _math.EPS || Math.abs(scale[1]) < _math.EPS || Math.abs(scale[2]) < _math.EPS) {
156
+ /* eslint-disable-next-line no-console */
157
+ console.warn("[Mesh] scale elements must be non-zero! scale: ".concat(scale));
158
+ return scale.map(function (value) {
159
+ return Math.max(value, _math.EPS);
160
+ });
161
+ }
162
+ return scale;
163
+ }, [scale]);
164
+
165
+ // Color
166
+ var _useState = useState(color),
167
+ _useState2 = _slicedToArray(_useState, 2),
168
+ _color = _useState2[0],
169
+ setColor = _useState2[1];
170
+ useEffect(function updateColor() {
171
+ setColor(color);
172
+ }, [color]);
173
+
174
+ // Ref
175
+ var groupRef = useRef(null); // Hooks must be deterministic
176
+ var group = ref || groupRef;
177
+
178
+ // State
179
+ var _useState3 = useState(state != null ? _objectSpread({
180
+ lastClickTime: 0
181
+ }, state) : {
182
+ lastClickTime: 0
183
+ }),
184
+ _useState4 = _slicedToArray(_useState3, 2),
185
+ _state = _useState4[0],
186
+ setState = _useState4[1];
187
+
188
+ // ignoreMouseEvents
189
+ var _ignoreMouseEvents = useMemo(function updateIgnoreMouseEvents() {
190
+ return ignoreMouseEvents || groupMember && !hoverColor && !onClick && !onDoubleClick && !onPointerOver && !onPointerOut && !onPointerDown && !onPointerUp && !onPointerMove && !onWheel;
191
+ }, [ignoreMouseEvents, groupMember, hoverColor, onClick, onDoubleClick, onPointerOver, onPointerOut, onPointerDown, onPointerUp, onPointerMove, onWheel]);
192
+
193
+ // ---------------------- //
194
+ // ----- Events ----- //
195
+ // ---------------------- //
196
+ // Event Props
197
+ var eventProps = useMemo(function updateEventProps() {
198
+ return _objectSpread({
199
+ mesh: group,
200
+ group: group,
201
+ state: _state,
202
+ setState: setState
203
+ }, canvasProps);
204
+ }, [group, _state, setState, canvasProps]);
205
+
206
+ // Click Props
207
+ var clickProps = useMemo(function updateClickProps() {
208
+ return {
209
+ mousePropagation: mousePropagation,
210
+ clickSensitivity: clickSensitivity,
211
+ group: group,
212
+ eventProps: eventProps,
213
+ onClick: onClick,
214
+ onDoubleClick: onDoubleClick
215
+ };
216
+ }, [mousePropagation, clickSensitivity, group, eventProps, onClick, onDoubleClick]);
217
+
218
+ // onPointerOver
219
+ var _onPointerOver = useCallback(function onHoverOver(e) {
220
+ // Mouse Propagation
221
+ (0, _events.checkPropagation)(e, mousePropagation);
222
+ if (hoverable) {
223
+ if (hoverColor != null) {
224
+ setColor(hoverColor);
225
+ }
226
+ if (onPointerOver) {
227
+ onPointerOver(eventProps);
228
+ }
229
+ }
230
+ }, [onPointerOver, hoverColor, hoverable, eventProps, mousePropagation]);
231
+
232
+ // onPointerOut
233
+ var _onPointerOut = useCallback(function onHoverOut(e) {
234
+ // Mouse Propagation
235
+ (0, _events.checkPropagation)(e, mousePropagation);
236
+ if (hoverable) {
237
+ if (hoverColor != null) {
238
+ setColor(color);
239
+ }
240
+ if (onPointerOut) {
241
+ onPointerOut(eventProps);
242
+ }
243
+ }
244
+ }, [onPointerOut, color, hoverColor, hoverable, eventProps, mousePropagation]);
245
+
246
+ // onPointerDown
247
+ var _onPointerDown = useCallback(function onMouseDown(e) {
248
+ // Mouse Propagation
249
+ (0, _events.checkPropagation)(e, mousePropagation);
250
+ if (onPointerDown) {
251
+ onPointerDown(eventProps);
252
+ }
253
+ }, [onPointerDown, mousePropagation, eventProps]);
254
+
255
+ // onPointerUp
256
+ var _onPointerUp = useCallback(function onMouseUp(e) {
257
+ // Mouse Propagation
258
+ (0, _events.checkPropagation)(e, mousePropagation);
259
+ if (onPointerUp) {
260
+ onPointerUp(eventProps);
261
+ }
262
+ }, [onPointerUp, mousePropagation, eventProps]);
263
+
264
+ // onPointerMove
265
+ var _onPointerMove = useCallback(function onMouseMove(e) {
266
+ // Mouse Propagation
267
+ (0, _events.checkPropagation)(e, mousePropagation);
268
+ if (onPointerMove) {
269
+ onPointerMove(eventProps);
270
+ }
271
+ }, [onPointerMove, mousePropagation, eventProps]);
272
+
273
+ // onWheel
274
+ var _onWheel = useCallback(function onScroll(e) {
275
+ // Mouse Propagation
276
+ (0, _events.checkPropagation)(e, mousePropagation);
277
+ if (onWheel) {
278
+ onWheel(eventProps);
279
+ }
280
+ }, [onWheel, mousePropagation, eventProps]);
281
+
282
+ // onClick + onDoubleClick
283
+ var _onClick = useCallback((0, _events.handleClick)(clickProps), [clickProps]);
284
+
285
+ // ------------------------- //
286
+ // ----- Animation ----- //
287
+ // ------------------------- //
288
+ // Animation Function
289
+ var _animation = useCallback(function onAnimation() {
290
+ // @ts-ignore:TS2339 current does not exist for group
291
+ if (animation && group.current) {
292
+ animation(eventProps);
293
+ }
294
+ }, [group, animation, eventProps]);
295
+
296
+ // Child Props
297
+ var childProps = useMemo(function updateChildProps() {
298
+ var props = {
299
+ groupMember: true
300
+ };
301
+ var potentialChildProps = {
302
+ color: _color,
303
+ view3DEnvMap: view3DEnvMap,
304
+ materialType: materialType,
305
+ transparent: transparent,
306
+ opacity: opacity,
307
+ side: side,
308
+ wireframe: wireframe,
309
+ castShadow: castShadow,
310
+ receiveShadow: receiveShadow,
311
+ edges: edges,
312
+ edgeColor: edgeColor,
313
+ edgeThresholdAngle: edgeThresholdAngle
314
+ };
315
+ Object.entries(potentialChildProps).map(function (_ref2) {
316
+ var _ref3 = _slicedToArray(_ref2, 2),
317
+ key = _ref3[0],
318
+ value = _ref3[1];
319
+ if (value != null) {
320
+ // check != null to catch 0
321
+ props[key] = value;
322
+ }
323
+ return null;
324
+ });
325
+ return props;
326
+ }, [_color, view3DEnvMap, materialType, side, transparent, opacity, castShadow, receiveShadow, wireframe, edges, edgeColor, edgeThresholdAngle]);
327
+ return (
328
+ /*#__PURE__*/
329
+ // @ts-ignore:TS2322
330
+ React.createElement("group", _extends({
331
+ ref: group
332
+ // Geometry
333
+ ,
334
+ position: position,
335
+ scale: _scale,
336
+ quaternion: _quaternion
337
+ // Event Functions
338
+ ,
339
+ onPointerOver: _ignoreMouseEvents ? undefined : _onPointerOver,
340
+ onPointerOut: _ignoreMouseEvents ? undefined : _onPointerOut,
341
+ onPointerDown: _ignoreMouseEvents ? undefined : _onPointerDown,
342
+ onPointerUp: _ignoreMouseEvents ? undefined : _onPointerUp,
343
+ onPointerMove: _ignoreMouseEvents ? undefined : _onPointerMove,
344
+ onWheel: _ignoreMouseEvents ? undefined : _onWheel,
345
+ onClick: _ignoreMouseEvents ? undefined : _onClick
346
+ }, otherProps), animation && /*#__PURE__*/React.createElement(_events.AnimationComponent, {
347
+ animation: _animation
348
+ }), children && React.Children.map(children, function (child) {
349
+ if (!child) {
350
+ return null;
351
+ }
352
+ return /*#__PURE__*/React.cloneElement(child, childProps);
353
+ }))
354
+ );
355
+ });
356
+ var GroupMemo = memo(Group);
357
+ GroupMemo.displayName = "Group";
358
+ var _default = exports["default"] = GroupMemo;
359
+ /**
360
+ * Generate Group Props
361
+ *
362
+ * For shapes composed of multiple primitives, like the Capsule,
363
+ * the meshes are grouped together. In order to rotate, scale,
364
+ * translate, and animate the entire group rather than each individual primitive,
365
+ * the group properties are extracted out and nulled for the primitives.
366
+ *
367
+ * Other properties, such as material related properties are passed down
368
+ * so the appearance of the group is uniform.
369
+ *
370
+ * @param {any} props
371
+ * @returns {GroupProps}
372
+ */
373
+ function generateGroupProps(/* eslint-disable @typescript-eslint/no-explicit-any */
374
+ props) {
375
+ /* eslint-enable @typescript-eslint/no-explicit-any */
376
+ var _props$position = props.position,
377
+ position = _props$position === void 0 ? [0, 0, 0] : _props$position,
378
+ _props$scale = props.scale,
379
+ scale = _props$scale === void 0 ? [1, 1, 1] : _props$scale,
380
+ _props$rotation = props.rotation,
381
+ rotation = _props$rotation === void 0 ? [0, 0, 0] : _props$rotation,
382
+ _props$normal = props.normal,
383
+ normal = _props$normal === void 0 ? _constants.DEFAULT_NORMAL : _props$normal,
384
+ _props$roll = props.roll,
385
+ roll = _props$roll === void 0 ? 0 : _props$roll,
386
+ quaternion = props.quaternion,
387
+ animation = props.animation,
388
+ state = props.state,
389
+ onClick = props.onClick,
390
+ onDoubleClick = props.onDoubleClick,
391
+ onWheel = props.onWheel,
392
+ onPointerUp = props.onPointerUp,
393
+ onPointerDown = props.onPointerDown,
394
+ onPointerMove = props.onPointerMove,
395
+ onPointerOver = props.onPointerOver,
396
+ onPointerOut = props.onPointerOut,
397
+ mousePropagation = props.mousePropagation,
398
+ clickSensitivity = props.clickSensitivity,
399
+ ignoreMouseEvents = props.ignoreMouseEvents,
400
+ cleanedProps = _objectWithoutProperties(props, _excluded2);
401
+ var groupProps = {
402
+ position: position,
403
+ scale: scale,
404
+ rotation: rotation,
405
+ normal: normal,
406
+ roll: roll,
407
+ quaternion: quaternion,
408
+ animation: animation,
409
+ state: state,
410
+ onClick: onClick,
411
+ onDoubleClick: onDoubleClick,
412
+ onWheel: onWheel,
413
+ onPointerUp: onPointerUp,
414
+ onPointerDown: onPointerDown,
415
+ onPointerMove: onPointerMove,
416
+ onPointerOver: onPointerOver,
417
+ onPointerOut: onPointerOut,
418
+ mousePropagation: mousePropagation,
419
+ clickSensitivity: clickSensitivity,
420
+ ignoreMouseEvents: ignoreMouseEvents
421
+ };
422
+ return {
423
+ cleanedProps: cleanedProps,
424
+ groupProps: groupProps
425
+ };
426
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import { GroupProps } from "./Group";
3
+ interface OBJProps extends GroupProps {
4
+ objPath: string;
5
+ objURL: string;
6
+ mtlPath?: string;
7
+ mtlURL?: string;
8
+ resourcePath?: string;
9
+ }
10
+ declare const OBJMemo: React.NamedExoticComponent<OBJProps>;
11
+ export default OBJMemo;