mathbox-react 0.0.0-a53eb3e

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 (122) hide show
  1. package/README.md +30 -0
  2. package/build/cjs/components/ContainedMathbox.d.ts +11 -0
  3. package/build/cjs/components/ContainedMathbox.js +59 -0
  4. package/build/cjs/components/ContainedMathbox.js.map +1 -0
  5. package/build/cjs/components/Mathbox.d.ts +9 -0
  6. package/build/cjs/components/Mathbox.js +87 -0
  7. package/build/cjs/components/Mathbox.js.map +1 -0
  8. package/build/cjs/components/MathboxAPIContext.d.ts +9 -0
  9. package/build/cjs/components/MathboxAPIContext.js +18 -0
  10. package/build/cjs/components/MathboxAPIContext.js.map +1 -0
  11. package/build/cjs/components/components.d.ts +267 -0
  12. package/build/cjs/components/components.js +383 -0
  13. package/build/cjs/components/components.js.map +1 -0
  14. package/build/cjs/components/components.spec.d.ts +1 -0
  15. package/build/cjs/components/components.spec.js +332 -0
  16. package/build/cjs/components/components.spec.js.map +1 -0
  17. package/build/cjs/components/index.d.ts +4 -0
  18. package/build/cjs/components/index.js +28 -0
  19. package/build/cjs/components/index.js.map +1 -0
  20. package/build/cjs/components/types.d.ts +7 -0
  21. package/build/cjs/components/types.js +3 -0
  22. package/build/cjs/components/types.js.map +1 -0
  23. package/build/cjs/components/util.d.ts +38 -0
  24. package/build/cjs/components/util.js +107 -0
  25. package/build/cjs/components/util.js.map +1 -0
  26. package/build/cjs/index.d.ts +3 -0
  27. package/build/cjs/index.js +33 -0
  28. package/build/cjs/index.js.map +1 -0
  29. package/build/cjs/stories/Area.stories.d.ts +68 -0
  30. package/build/cjs/stories/Area.stories.js +53 -0
  31. package/build/cjs/stories/Area.stories.js.map +1 -0
  32. package/build/cjs/stories/Cartesian.stories.d.ts +34 -0
  33. package/build/cjs/stories/Cartesian.stories.js +47 -0
  34. package/build/cjs/stories/Cartesian.stories.js.map +1 -0
  35. package/build/cjs/stories/Grid.stories.d.ts +262 -0
  36. package/build/cjs/stories/Grid.stories.js +45 -0
  37. package/build/cjs/stories/Grid.stories.js.map +1 -0
  38. package/build/cjs/stories/Mathbox.stories.d.ts +18 -0
  39. package/build/cjs/stories/Mathbox.stories.js +16 -0
  40. package/build/cjs/stories/Mathbox.stories.js.map +1 -0
  41. package/build/cjs/stories/Play.stories.d.ts +36 -0
  42. package/build/cjs/stories/Play.stories.js +35 -0
  43. package/build/cjs/stories/Play.stories.js.map +1 -0
  44. package/build/cjs/stories/Point.stories.d.ts +101 -0
  45. package/build/cjs/stories/Point.stories.js +103 -0
  46. package/build/cjs/stories/Point.stories.js.map +1 -0
  47. package/build/cjs/stories/Surface.stories.d.ts +68 -0
  48. package/build/cjs/stories/Surface.stories.js +49 -0
  49. package/build/cjs/stories/Surface.stories.js.map +1 -0
  50. package/build/cjs/stories/utils.d.ts +5 -0
  51. package/build/cjs/stories/utils.js +69 -0
  52. package/build/cjs/stories/utils.js.map +1 -0
  53. package/build/cjs/testSetup.d.ts +1 -0
  54. package/build/cjs/testSetup.js +5 -0
  55. package/build/cjs/testSetup.js.map +1 -0
  56. package/build/cjs/testUtils.d.ts +1 -0
  57. package/build/cjs/testUtils.js +47 -0
  58. package/build/cjs/testUtils.js.map +1 -0
  59. package/build/cjs/threestrap/Controls.d.ts +21 -0
  60. package/build/cjs/threestrap/Controls.js +75 -0
  61. package/build/cjs/threestrap/Controls.js.map +1 -0
  62. package/build/cjs/threestrap/Renderer.d.ts +7 -0
  63. package/build/cjs/threestrap/Renderer.js +15 -0
  64. package/build/cjs/threestrap/Renderer.js.map +1 -0
  65. package/build/cjs/threestrap/ThreestrapContext.d.ts +6 -0
  66. package/build/cjs/threestrap/ThreestrapContext.js +15 -0
  67. package/build/cjs/threestrap/ThreestrapContext.js.map +1 -0
  68. package/build/cjs/threestrap/index.d.ts +4 -0
  69. package/build/cjs/threestrap/index.js +13 -0
  70. package/build/cjs/threestrap/index.js.map +1 -0
  71. package/build/cjs/threestrap/threestrap.d.ts +13 -0
  72. package/build/cjs/threestrap/threestrap.js +3 -0
  73. package/build/cjs/threestrap/threestrap.js.map +1 -0
  74. package/build/esm/components/ContainedMathbox.d.ts +11 -0
  75. package/build/esm/components/ContainedMathbox.js +31 -0
  76. package/build/esm/components/ContainedMathbox.js.map +1 -0
  77. package/build/esm/components/Mathbox.d.ts +9 -0
  78. package/build/esm/components/Mathbox.js +59 -0
  79. package/build/esm/components/Mathbox.js.map +1 -0
  80. package/build/esm/components/MathboxAPIContext.d.ts +9 -0
  81. package/build/esm/components/MathboxAPIContext.js +15 -0
  82. package/build/esm/components/MathboxAPIContext.js.map +1 -0
  83. package/build/esm/components/components.d.ts +267 -0
  84. package/build/esm/components/components.js +353 -0
  85. package/build/esm/components/components.js.map +1 -0
  86. package/build/esm/components/components.spec.d.ts +1 -0
  87. package/build/esm/components/components.spec.js +304 -0
  88. package/build/esm/components/components.spec.js.map +1 -0
  89. package/build/esm/components/index.d.ts +4 -0
  90. package/build/esm/components/index.js +5 -0
  91. package/build/esm/components/index.js.map +1 -0
  92. package/build/esm/components/types.d.ts +7 -0
  93. package/build/esm/components/types.js +2 -0
  94. package/build/esm/components/types.js.map +1 -0
  95. package/build/esm/components/util.d.ts +38 -0
  96. package/build/esm/components/util.js +96 -0
  97. package/build/esm/components/util.js.map +1 -0
  98. package/build/esm/index.d.ts +3 -0
  99. package/build/esm/index.js +4 -0
  100. package/build/esm/index.js.map +1 -0
  101. package/build/esm/testSetup.d.ts +1 -0
  102. package/build/esm/testSetup.js +3 -0
  103. package/build/esm/testSetup.js.map +1 -0
  104. package/build/esm/testUtils.d.ts +1 -0
  105. package/build/esm/testUtils.js +43 -0
  106. package/build/esm/testUtils.js.map +1 -0
  107. package/build/esm/threestrap/Controls.d.ts +21 -0
  108. package/build/esm/threestrap/Controls.js +73 -0
  109. package/build/esm/threestrap/Controls.js.map +1 -0
  110. package/build/esm/threestrap/Renderer.d.ts +7 -0
  111. package/build/esm/threestrap/Renderer.js +13 -0
  112. package/build/esm/threestrap/Renderer.js.map +1 -0
  113. package/build/esm/threestrap/ThreestrapContext.d.ts +6 -0
  114. package/build/esm/threestrap/ThreestrapContext.js +12 -0
  115. package/build/esm/threestrap/ThreestrapContext.js.map +1 -0
  116. package/build/esm/threestrap/index.d.ts +4 -0
  117. package/build/esm/threestrap/index.js +4 -0
  118. package/build/esm/threestrap/index.js.map +1 -0
  119. package/build/esm/threestrap/threestrap.d.ts +13 -0
  120. package/build/esm/threestrap/threestrap.js +2 -0
  121. package/build/esm/threestrap/threestrap.js.map +1 -0
  122. package/package.json +74 -0
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ var __generator = (this && this.__generator) || function (thisArg, body) {
46
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
47
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
+ function verb(n) { return function (v) { return step([n, v]); }; }
49
+ function step(op) {
50
+ if (f) throw new TypeError("Generator is already executing.");
51
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
+ if (y = 0, t) op = [op[0] & 2, t.value];
54
+ switch (op[0]) {
55
+ case 0: case 1: t = op; break;
56
+ case 4: _.label++; return { value: op[1], done: false };
57
+ case 5: _.label++; y = op[1]; op = [0]; continue;
58
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
+ default:
60
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
+ if (t[2]) _.ops.pop();
65
+ _.trys.pop(); continue;
66
+ }
67
+ op = body.call(thisArg, _);
68
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
+ }
71
+ };
72
+ var __importDefault = (this && this.__importDefault) || function (mod) {
73
+ return (mod && mod.__esModule) ? mod : { "default": mod };
74
+ };
75
+ Object.defineProperty(exports, "__esModule", { value: true });
76
+ var vitest_1 = require("vitest");
77
+ var react_1 = __importStar(require("react"));
78
+ var react_2 = require("@testing-library/react");
79
+ var ContainedMathbox_1 = __importDefault(require("./ContainedMathbox"));
80
+ var Mathbox_1 = __importDefault(require("./Mathbox"));
81
+ var components_1 = require("./components");
82
+ function assertNotNil(value) {
83
+ if (value === undefined) {
84
+ throw new Error("Unexpected undefined value");
85
+ }
86
+ if (value === null) {
87
+ throw new Error("Unexpected null value");
88
+ }
89
+ }
90
+ /**
91
+ * Assert that two mathbox selections have the same nodes in the same order.
92
+ */
93
+ var assertSelectionsEqual = function (s1, s2) {
94
+ (0, vitest_1.expect)(s1.length).toBe(s2.length);
95
+ Array(s1.length)
96
+ .fill(null)
97
+ .forEach(function (_, i) {
98
+ (0, vitest_1.expect)(s1[i]).toBe(s2[i]);
99
+ });
100
+ };
101
+ (0, vitest_1.describe)("ContainedMathbox", function () {
102
+ (0, vitest_1.it)("makes a new mathbox instance only if the options have changed", function () {
103
+ var mbRef = { current: null };
104
+ var rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { options: {}, ref: mbRef })).rerender;
105
+ var mb0 = mbRef.current;
106
+ assertNotNil(mb0);
107
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { options: {}, ref: mbRef }));
108
+ var mb1 = mbRef.current;
109
+ (0, vitest_1.expect)(mb1).toBe(mb0);
110
+ assertNotNil(mb1);
111
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { options: { plugins: ["core"] }, ref: mbRef }));
112
+ var mb2 = mbRef.current;
113
+ assertNotNil(mb2);
114
+ (0, vitest_1.expect)(mb2).not.toBe(mb1);
115
+ });
116
+ });
117
+ (0, vitest_1.describe)("Cartesian", function () {
118
+ (0, vitest_1.it)("exposes Mathbox instance via ref", function () {
119
+ var _a, _b;
120
+ var mbRef = { current: null };
121
+ var cartesianRef = { current: null };
122
+ (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
123
+ react_1.default.createElement(components_1.Cartesian, { ref: cartesianRef })));
124
+ (0, vitest_1.expect)((_a = mbRef.current) === null || _a === void 0 ? void 0 : _a[0].type).toBe("root");
125
+ (0, vitest_1.expect)((_b = cartesianRef.current) === null || _b === void 0 ? void 0 : _b[0].type).toBe("cartesian");
126
+ });
127
+ (0, vitest_1.it)("creates a cartesian instance as child of root", function () {
128
+ var _a;
129
+ var mbRef = { current: null };
130
+ (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
131
+ react_1.default.createElement(components_1.Cartesian, null)));
132
+ (0, vitest_1.expect)((_a = mbRef.current) === null || _a === void 0 ? void 0 : _a.select("cartesian").length).toBe(1);
133
+ });
134
+ (0, vitest_1.it)("creates mathbox children as children of itself", function () {
135
+ var _a, _b, _c;
136
+ var mbRef = { current: null };
137
+ (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
138
+ react_1.default.createElement(components_1.Cartesian, null,
139
+ react_1.default.createElement(components_1.Grid, null),
140
+ react_1.default.createElement(components_1.Grid, null))));
141
+ (_a = mbRef.current) === null || _a === void 0 ? void 0 : _a.print();
142
+ (0, vitest_1.expect)((_b = mbRef.current) === null || _b === void 0 ? void 0 : _b.select("cartesian").length).toBe(1);
143
+ (0, vitest_1.expect)((_c = mbRef.current) === null || _c === void 0 ? void 0 : _c.select("cartesian grid").length).toBe(2);
144
+ });
145
+ (0, vitest_1.it)("removes its mathbox instance when unmounted", function () {
146
+ var _a, _b;
147
+ var mbRef = { current: null };
148
+ var rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
149
+ react_1.default.createElement(components_1.Cartesian, null))).rerender;
150
+ (0, vitest_1.expect)((_a = mbRef.current) === null || _a === void 0 ? void 0 : _a.select("cartesian").length).toBe(1);
151
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef }));
152
+ (0, vitest_1.expect)((_b = mbRef.current) === null || _b === void 0 ? void 0 : _b.select("cartesian").length).toBe(0);
153
+ });
154
+ vitest_1.it.each([
155
+ { props: { visible: true, scale: [3, 2, 1] } },
156
+ { props: { visible: false, scale: [1, 2, 3] } },
157
+ ])("passes appropriate props to its mathbox instance", function (_a) {
158
+ var _b;
159
+ var props = _a.props;
160
+ var mbRef = { current: null };
161
+ (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
162
+ react_1.default.createElement(components_1.Cartesian, __assign({}, props))));
163
+ var cartesian = (_b = mbRef.current) === null || _b === void 0 ? void 0 : _b.select("cartesian");
164
+ assertNotNil(cartesian);
165
+ (0, vitest_1.expect)(cartesian.get("visible")).toBe(props.visible);
166
+ // Mathbox converts scale to a ThreeJS Vec3
167
+ (0, vitest_1.expect)(cartesian.get("scale").toArray()).toStrictEqual(props.scale);
168
+ });
169
+ (0, vitest_1.it)("updates props on its mathbox instance when rerendered", function () {
170
+ var _a;
171
+ var mbRef = { current: null };
172
+ var rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
173
+ react_1.default.createElement(components_1.Cartesian, null))).rerender;
174
+ var cartesian = (_a = mbRef.current) === null || _a === void 0 ? void 0 : _a.select("cartesian");
175
+ assertNotNil(cartesian);
176
+ (0, vitest_1.expect)(cartesian.get("visible")).toBe(true);
177
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
178
+ react_1.default.createElement(components_1.Cartesian, { visible: false })));
179
+ (0, vitest_1.expect)(cartesian.get("visible")).toBe(false);
180
+ });
181
+ (0, vitest_1.it)("updates liveProps on its mathbox instance when rerendered", function () { return __awaiter(void 0, void 0, void 0, function () {
182
+ var mbRef, rerender, grid, w1, w2;
183
+ var _a;
184
+ return __generator(this, function (_b) {
185
+ switch (_b.label) {
186
+ case 0:
187
+ mbRef = { current: null };
188
+ rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
189
+ react_1.default.createElement(components_1.Cartesian, null,
190
+ react_1.default.createElement(components_1.Grid, { liveProps: {
191
+ width: function (t) { return 1 + t; },
192
+ } })))).rerender;
193
+ grid = (_a = mbRef.current) === null || _a === void 0 ? void 0 : _a.select("grid");
194
+ assertNotNil(grid);
195
+ w1 = grid.get("width");
196
+ return [4 /*yield*/, new Promise(function (resolve) {
197
+ setTimeout(resolve, 500);
198
+ })];
199
+ case 1:
200
+ _b.sent();
201
+ w2 = grid.get("width");
202
+ (0, vitest_1.expect)(w1).toBe(1);
203
+ // Mathbox uses seconds
204
+ (0, vitest_1.expect)(w2 - w1).toBeGreaterThan(0.45);
205
+ (0, vitest_1.expect)(w2 - w1).toBeLessThanOrEqual(0.5);
206
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef },
207
+ react_1.default.createElement(components_1.Cartesian, null,
208
+ react_1.default.createElement(components_1.Grid, { width: 10 }))));
209
+ (0, vitest_1.expect)(grid.get("width")).toBe(10);
210
+ return [2 /*return*/];
211
+ }
212
+ });
213
+ }); });
214
+ (0, vitest_1.it)("re-renders inside new instance when root changes", function () {
215
+ var mbRef = { current: null };
216
+ var cartesianRef = { current: null };
217
+ var gridRef = { current: null };
218
+ var options1 = {};
219
+ var rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef, options: options1 },
220
+ react_1.default.createElement(components_1.Cartesian, { ref: cartesianRef },
221
+ react_1.default.createElement(components_1.Grid, { ref: gridRef })))).rerender;
222
+ var mb1 = mbRef.current;
223
+ var cartesian1 = cartesianRef.current;
224
+ var grid1 = gridRef.current;
225
+ assertNotNil(mb1);
226
+ assertNotNil(cartesian1);
227
+ assertNotNil(grid1);
228
+ (0, vitest_1.expect)(cartesian1).toHaveLength(1);
229
+ assertSelectionsEqual(mb1.select("cartesian"), cartesian1);
230
+ (0, vitest_1.expect)(grid1).toHaveLength(1);
231
+ assertSelectionsEqual(mb1.select("grid"), grid1);
232
+ /**
233
+ * When re-rendered, this will create a new mathBox since the options
234
+ * object prop will have changed.
235
+ */
236
+ var options2 = { plugins: ["core"] };
237
+ (0, vitest_1.expect)(options1).not.toBe(options2);
238
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef, options: options2 },
239
+ react_1.default.createElement(components_1.Cartesian, { ref: cartesianRef },
240
+ react_1.default.createElement(components_1.Grid, { ref: gridRef }))));
241
+ var mb2 = mbRef.current;
242
+ var cartesian2 = cartesianRef.current;
243
+ var grid2 = gridRef.current;
244
+ assertNotNil(mb2);
245
+ assertNotNil(cartesian2);
246
+ assertNotNil(grid2);
247
+ // The options have changed (via deep equal) so a new instance is created
248
+ (0, vitest_1.expect)(mb1).not.toBe(mb2);
249
+ (0, vitest_1.expect)(cartesian2).toHaveLength(1);
250
+ assertSelectionsEqual(mb2.select("cartesian"), cartesian2);
251
+ (0, vitest_1.expect)(grid2).toHaveLength(1);
252
+ assertSelectionsEqual(mb2.select("grid"), grid2);
253
+ });
254
+ (0, vitest_1.it)("Can render a new instance without error", function () { return __awaiter(void 0, void 0, void 0, function () {
255
+ var mbRef, containerDiv, setKey, KeyedMathbox;
256
+ return __generator(this, function (_a) {
257
+ mbRef = { current: null };
258
+ containerDiv = null;
259
+ KeyedMathbox = function () {
260
+ var _a = (0, react_1.useState)(null), container = _a[0], setContainer = _a[1];
261
+ var _b = (0, react_1.useState)("key-0"), key = _b[0], setKeyState = _b[1];
262
+ setKey = setKeyState;
263
+ containerDiv = container;
264
+ return (react_1.default.createElement("div", { ref: setContainer, key: key }, container && (react_1.default.createElement(Mathbox_1.default, { ref: mbRef, container: container },
265
+ react_1.default.createElement(components_1.Cartesian, null)))));
266
+ };
267
+ (0, react_2.render)(react_1.default.createElement(KeyedMathbox, null));
268
+ assertNotNil(mbRef.current);
269
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
270
+ (0, react_2.act)(function () { return setKey("key-2"); });
271
+ assertNotNil(containerDiv);
272
+ (0, vitest_1.expect)(mbRef.current.three.element).toBe(containerDiv);
273
+ (0, vitest_1.expect)(mbRef.current.select("cartesian").length).toBe(1);
274
+ return [2 /*return*/];
275
+ });
276
+ }); });
277
+ (0, vitest_1.it)("Can add and remove children without error", function () { return __awaiter(void 0, void 0, void 0, function () {
278
+ var mbRef, rerender;
279
+ return __generator(this, function (_a) {
280
+ mbRef = { current: null };
281
+ rerender = (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef, options: {} },
282
+ react_1.default.createElement(components_1.Cartesian, null,
283
+ react_1.default.createElement(components_1.Grid, null)))).rerender;
284
+ assertNotNil(mbRef.current);
285
+ (0, vitest_1.expect)(mbRef.current.select("grid").length).toBe(1);
286
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef, options: {} },
287
+ react_1.default.createElement(components_1.Cartesian, null,
288
+ react_1.default.createElement(components_1.Grid, null),
289
+ react_1.default.createElement(components_1.Grid, null))));
290
+ assertNotNil(mbRef.current);
291
+ (0, vitest_1.expect)(mbRef.current.select("grid").length).toBe(2);
292
+ rerender(react_1.default.createElement(ContainedMathbox_1.default, { ref: mbRef, options: {} },
293
+ react_1.default.createElement(components_1.Cartesian, null)));
294
+ assertNotNil(mbRef.current);
295
+ (0, vitest_1.expect)(mbRef.current.select("grid").length).toBe(0);
296
+ return [2 /*return*/];
297
+ });
298
+ }); });
299
+ });
300
+ (0, vitest_1.describe)("<Voxel />", function () {
301
+ (0, vitest_1.it)("throws a runtime error if it has children", function () {
302
+ /**
303
+ * In development React re-dispatches errors thrown during render through a
304
+ * `window` "error" event (invokeGuardedCallbackDev) in addition to
305
+ * rethrowing them to the caller. Vitest's global "error" listener collects
306
+ * that expected error as an unhandled error and fails the run — observed
307
+ * intermittently in CI. Calling preventDefault on the matching event marks
308
+ * it handled, which suppresses Vitest's collection, while `render` still
309
+ * throws so the assertion below holds.
310
+ */
311
+ var suppressExpectedError = function (event) {
312
+ var _a, _b;
313
+ if ((_b = (_a = event.error) === null || _a === void 0 ? void 0 : _a.message) === null || _b === void 0 ? void 0 : _b.includes("cannot have children")) {
314
+ event.preventDefault();
315
+ }
316
+ };
317
+ window.addEventListener("error", suppressExpectedError);
318
+ try {
319
+ var willThrow = function () {
320
+ return (0, react_2.render)(react_1.default.createElement(ContainedMathbox_1.default, null,
321
+ react_1.default.createElement(components_1.Cartesian, null,
322
+ react_1.default.createElement(components_1.Voxel, null,
323
+ react_1.default.createElement(components_1.Grid, null)))));
324
+ };
325
+ (0, vitest_1.expect)(willThrow).toThrow("Component <Voxel /> cannot have children.");
326
+ }
327
+ finally {
328
+ window.removeEventListener("error", suppressExpectedError);
329
+ }
330
+ });
331
+ });
332
+ //# sourceMappingURL=components.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.spec.js","sourceRoot":"","sources":["../../../src/components/components.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./components";
2
+ export { default as Mathbox } from "./Mathbox";
3
+ export { default as ContainedMathbox } from "./ContainedMathbox";
4
+ export { useMathbox } from "./MathboxAPIContext";
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.useMathbox = exports.ContainedMathbox = exports.Mathbox = void 0;
21
+ __exportStar(require("./components"), exports);
22
+ var Mathbox_1 = require("./Mathbox");
23
+ Object.defineProperty(exports, "Mathbox", { enumerable: true, get: function () { return __importDefault(Mathbox_1).default; } });
24
+ var ContainedMathbox_1 = require("./ContainedMathbox");
25
+ Object.defineProperty(exports, "ContainedMathbox", { enumerable: true, get: function () { return __importDefault(ContainedMathbox_1).default; } });
26
+ var MathboxAPIContext_1 = require("./MathboxAPIContext");
27
+ Object.defineProperty(exports, "useMathbox", { enumerable: true, get: function () { return MathboxAPIContext_1.useMathbox; } });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,qCAA8C;AAArC,mHAAA,OAAO,OAAW;AAC3B,uDAAgE;AAAvD,qIAAA,OAAO,OAAoB;AAEpC,yDAAgD;AAAvC,+GAAA,UAAU,OAAA"}
@@ -0,0 +1,7 @@
1
+ import type { ReactNode } from "react";
2
+ import type { MathboxSelection, NodeType } from "mathbox";
3
+ import React from "react";
4
+ export type WithChildren<T> = {
5
+ children?: ReactNode | ReactNode[];
6
+ } & T;
7
+ export type MathboxRef<T extends NodeType> = React.Ref<MathboxSelection<T>>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import { MathboxSelection, NodeType } from "mathbox";
2
+ export declare const isRootDestroyed: (selection: MathboxSelection) => boolean;
3
+ /**
4
+ * Check that parent is actually the selection's parent.
5
+ * The mathbox components occasionally render with a selection value whose
6
+ * parent does not match the parent specified in MathboxContext.
7
+ *
8
+ * I believe this fundamentally this is happening because
9
+ * - we store parent value in context...
10
+ * - we update the context parent value using useEffect hooks..
11
+ * - useEffect hooks are called children before parents.
12
+ *
13
+ * One wonders whether we really need to be using useEffect hooks for the
14
+ * mathbox components, or if we can just put all the node creation/removal stuff
15
+ * in a render function. Hooks seem nice for dependencies, but mathbox is pretty
16
+ * smart about diffing out the actual changes.
17
+ */
18
+ export declare const isSelectionParent: (selection: MathboxSelection, parent: MathboxSelection) => boolean;
19
+ declare const CAN_HAVE_CHILDREN: readonly ["view", "cartesian", "cartesian4", "polar", "spherical", "stereographic", "stereographic4", "transform", "transform4", "vertex", "fragment", "layer", "mask", "group", "inherit", "root", "unit", "rtt", "clock", "now", "move", "present", "reveal", "slide"];
20
+ export type ParentNodeTypes = (typeof CAN_HAVE_CHILDREN)[number];
21
+ export declare const canNodeHaveChildren: (type: NodeType) => boolean;
22
+ export declare const capitalize: (s: string) => string;
23
+ /**
24
+ * Returns the same reference to `value` as long as the the given values are
25
+ * deep equal.
26
+ *
27
+ * This is, in general, not a great idea. See
28
+ * https://github.com/facebook/react/issues/14476#issuecomment-471199055
29
+ *
30
+ * This should work OK for mathbox options because the objects in question are
31
+ * either shallow, or are deep equal at a fairly shallow level.
32
+ * E.g., OrbitControls may not be a shall object, but if it's not, it will at
33
+ * least be deep equal between renders.
34
+ *
35
+ * But should work OK for mathbox options.
36
+ */
37
+ export declare const useDeepCompareMemo: <T>(value: T, initial: T) => T;
38
+ export {};
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useDeepCompareMemo = exports.capitalize = exports.canNodeHaveChildren = exports.isSelectionParent = exports.isRootDestroyed = void 0;
7
+ /* eslint-disable no-underscore-dangle */
8
+ var isEqual_1 = __importDefault(require("lodash/isEqual"));
9
+ var react_1 = require("react");
10
+ /**
11
+ * Get root node given any node in Mathbox tree
12
+ */
13
+ var getRoot = function (selection) {
14
+ var current = selection;
15
+ while (current._up) {
16
+ current = current._up;
17
+ }
18
+ return current;
19
+ };
20
+ var isRootDestroyed = function (selection) {
21
+ var root = getRoot(selection);
22
+ return root.three === undefined;
23
+ };
24
+ exports.isRootDestroyed = isRootDestroyed;
25
+ /**
26
+ * Check that parent is actually the selection's parent.
27
+ * The mathbox components occasionally render with a selection value whose
28
+ * parent does not match the parent specified in MathboxContext.
29
+ *
30
+ * I believe this fundamentally this is happening because
31
+ * - we store parent value in context...
32
+ * - we update the context parent value using useEffect hooks..
33
+ * - useEffect hooks are called children before parents.
34
+ *
35
+ * One wonders whether we really need to be using useEffect hooks for the
36
+ * mathbox components, or if we can just put all the node creation/removal stuff
37
+ * in a render function. Hooks seem nice for dependencies, but mathbox is pretty
38
+ * smart about diffing out the actual changes.
39
+ */
40
+ var isSelectionParent = function (selection, parent) {
41
+ var _a;
42
+ var selectionParentNode = (_a = selection._up) === null || _a === void 0 ? void 0 : _a[0];
43
+ return selectionParentNode === parent[0];
44
+ };
45
+ exports.isSelectionParent = isSelectionParent;
46
+ var CAN_HAVE_CHILDREN = [
47
+ "view",
48
+ "cartesian",
49
+ "cartesian4",
50
+ "polar",
51
+ "spherical",
52
+ "stereographic",
53
+ "stereographic4",
54
+ "transform",
55
+ "transform4",
56
+ "vertex",
57
+ "fragment",
58
+ "layer",
59
+ "mask",
60
+ "group",
61
+ "inherit",
62
+ "root",
63
+ "unit",
64
+ "rtt",
65
+ "clock",
66
+ "now",
67
+ "move",
68
+ "present",
69
+ "reveal",
70
+ "slide",
71
+ ];
72
+ var canNodeHaveChildren = function (type) {
73
+ return CAN_HAVE_CHILDREN.includes(type);
74
+ };
75
+ exports.canNodeHaveChildren = canNodeHaveChildren;
76
+ var capitalize = function (s) {
77
+ if (!s)
78
+ return "";
79
+ return s[0].toLocaleUpperCase() + s.slice(1);
80
+ };
81
+ exports.capitalize = capitalize;
82
+ /**
83
+ * Returns the same reference to `value` as long as the the given values are
84
+ * deep equal.
85
+ *
86
+ * This is, in general, not a great idea. See
87
+ * https://github.com/facebook/react/issues/14476#issuecomment-471199055
88
+ *
89
+ * This should work OK for mathbox options because the objects in question are
90
+ * either shallow, or are deep equal at a fairly shallow level.
91
+ * E.g., OrbitControls may not be a shall object, but if it's not, it will at
92
+ * least be deep equal between renders.
93
+ *
94
+ * But should work OK for mathbox options.
95
+ */
96
+ var useDeepCompareMemo = function (value, initial) {
97
+ var oldValue = (0, react_1.useRef)(initial);
98
+ var memoOptions = (0, react_1.useMemo)(function () {
99
+ if ((0, isEqual_1.default)(value, oldValue.current))
100
+ return oldValue.current;
101
+ oldValue.current = value;
102
+ return value;
103
+ }, [value]);
104
+ return memoOptions;
105
+ };
106
+ exports.useDeepCompareMemo = useDeepCompareMemo;
107
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/components/util.ts"],"names":[],"mappings":";;;;;;AAAA,yCAAyC;AACzC,2DAAoC;AACpC,+BAAuC;AAKvC;;GAEG;AACH,IAAM,OAAO,GAAG,UAAC,SAA2B;IAC1C,IAAI,OAAO,GAAG,SAA0B,CAAA;IACxC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAA;KACtB;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAEM,IAAM,eAAe,GAAG,UAAC,SAA2B;IACzD,IAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAA;AACjC,CAAC,CAAA;AAHY,QAAA,eAAe,mBAG3B;AAED;;;;;;;;;;;;;;GAcG;AACI,IAAM,iBAAiB,GAAG,UAC/B,SAA2B,EAC3B,MAAwB;;IAExB,IAAM,mBAAmB,GAAG,MAAC,SAA2B,CAAC,GAAG,0CAAG,CAAC,CAAC,CAAA;IACjE,OAAO,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,CAAA;AAC1C,CAAC,CAAA;AANY,QAAA,iBAAiB,qBAM7B;AAED,IAAM,iBAAiB,GAAG;IACxB,MAAM;IACN,WAAW;IACX,YAAY;IACZ,OAAO;IACP,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,OAAO;IACP,MAAM;IACN,OAAO;IACP,SAAS;IACT,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;CACC,CAAA;AAIH,IAAM,mBAAmB,GAAG,UAAC,IAAc;IAChD,OAAC,iBAAuC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAvD,CAAuD,CAAA;AAD5C,QAAA,mBAAmB,uBACyB;AAElD,IAAM,UAAU,GAAG,UAAC,CAAS;IAClC,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IACjB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAC9C,CAAC,CAAA;AAHY,QAAA,UAAU,cAGtB;AAED;;;;;;;;;;;;;GAaG;AACI,IAAM,kBAAkB,GAAG,UAAI,KAAQ,EAAE,OAAU;IACxD,IAAM,QAAQ,GAAG,IAAA,cAAM,EAAI,OAAO,CAAC,CAAA;IACnC,IAAM,WAAW,GAAG,IAAA,eAAO,EAAC;QAC1B,IAAI,IAAA,iBAAO,EAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC;YAAE,OAAO,QAAQ,CAAC,OAAO,CAAA;QAC7D,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAA;QACxB,OAAO,KAAK,CAAA;IACd,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IACX,OAAO,WAAW,CAAA;AACpB,CAAC,CAAA;AARY,QAAA,kBAAkB,sBAQ9B"}
@@ -0,0 +1,3 @@
1
+ import * as Threestrap from "./threestrap";
2
+ export * from "./components";
3
+ export { Threestrap };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Threestrap = void 0;
30
+ var Threestrap = __importStar(require("./threestrap"));
31
+ exports.Threestrap = Threestrap;
32
+ __exportStar(require("./components"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uDAA0C;AAGjC,gCAAU;AADnB,+CAA4B"}