@dxos/react-ui-canvas 0.8.3 → 0.8.4-main.2e9d522
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.
- package/dist/lib/browser/index.mjs +11 -11
- package/dist/lib/browser/index.mjs.map +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +11 -11
- package/dist/lib/node-esm/index.mjs.map +2 -2
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/Canvas/Canvas.d.ts.map +1 -1
- package/dist/types/src/components/Canvas/Canvas.stories.d.ts +1 -1
- package/dist/types/src/components/Canvas/Canvas.stories.d.ts.map +1 -1
- package/dist/types/src/components/Grid/Grid.stories.d.ts +1 -1
- package/dist/types/src/components/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/types/src/util/svg.stories.d.ts +1 -1
- package/dist/types/src/util/svg.stories.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/src/components/Canvas/Canvas.stories.tsx +1 -1
- package/src/components/Canvas/Canvas.tsx +7 -11
- package/src/components/Grid/Grid.stories.tsx +1 -1
- package/src/util/svg.stories.tsx +1 -1
- package/dist/lib/node/index.cjs +0 -691
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
package/dist/lib/node/index.cjs
DELETED
|
@@ -1,691 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var node_exports = {};
|
|
30
|
-
__export(node_exports, {
|
|
31
|
-
Arrow: () => Arrow,
|
|
32
|
-
Canvas: () => Canvas,
|
|
33
|
-
CanvasContext: () => CanvasContext,
|
|
34
|
-
DATA_TEST_ID: () => DATA_TEST_ID,
|
|
35
|
-
Dimension: () => Dimension,
|
|
36
|
-
FPS: () => FPS,
|
|
37
|
-
Grid: () => Grid,
|
|
38
|
-
GridComponent: () => GridComponent,
|
|
39
|
-
GridPattern: () => GridPattern,
|
|
40
|
-
Marker: () => Marker,
|
|
41
|
-
Markers: () => Markers,
|
|
42
|
-
Point: () => Point,
|
|
43
|
-
ProjectionMapper: () => ProjectionMapper,
|
|
44
|
-
Rect: () => Rect,
|
|
45
|
-
createPath: () => createPath,
|
|
46
|
-
defaultOrigin: () => defaultOrigin,
|
|
47
|
-
getRelativePoint: () => getRelativePoint,
|
|
48
|
-
getZoomTransform: () => getZoomTransform,
|
|
49
|
-
inspectElement: () => inspectElement,
|
|
50
|
-
testId: () => testId,
|
|
51
|
-
useCanvasContext: () => useCanvasContext,
|
|
52
|
-
useWheel: () => useWheel,
|
|
53
|
-
zoomInPlace: () => zoomInPlace,
|
|
54
|
-
zoomTo: () => zoomTo
|
|
55
|
-
});
|
|
56
|
-
module.exports = __toCommonJS(node_exports);
|
|
57
|
-
var import_tracking = require("@preact-signals/safe-react/tracking");
|
|
58
|
-
var import_react = __toESM(require("react"));
|
|
59
|
-
var import_react_resize_detector = require("react-resize-detector");
|
|
60
|
-
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
61
|
-
var import_d3 = require("d3");
|
|
62
|
-
var import_transformation_matrix = require("transformation-matrix");
|
|
63
|
-
var import_react2 = require("react");
|
|
64
|
-
var import_debug = require("@dxos/debug");
|
|
65
|
-
var import_bind_event_listener = require("bind-event-listener");
|
|
66
|
-
var import_react3 = require("react");
|
|
67
|
-
var import_tracking2 = require("@preact-signals/safe-react/tracking");
|
|
68
|
-
var import_react4 = __toESM(require("react"));
|
|
69
|
-
var import_react_ui_theme2 = require("@dxos/react-ui-theme");
|
|
70
|
-
var import_tracking3 = require("@preact-signals/safe-react/tracking");
|
|
71
|
-
var import_react5 = __toESM(require("react"));
|
|
72
|
-
var import_react_ui_theme3 = require("@dxos/react-ui-theme");
|
|
73
|
-
var import_tracking4 = require("@preact-signals/safe-react/tracking");
|
|
74
|
-
var import_react6 = __toESM(require("react"));
|
|
75
|
-
var import_react_ui = require("@dxos/react-ui");
|
|
76
|
-
var import_react_ui_theme4 = require("@dxos/react-ui-theme");
|
|
77
|
-
var import_effect = require("effect");
|
|
78
|
-
var defaultOrigin = {
|
|
79
|
-
x: 0,
|
|
80
|
-
y: 0
|
|
81
|
-
};
|
|
82
|
-
var ProjectionMapper = class {
|
|
83
|
-
constructor(bounds, scale, offset) {
|
|
84
|
-
this._bounds = {
|
|
85
|
-
width: 0,
|
|
86
|
-
height: 0
|
|
87
|
-
};
|
|
88
|
-
this._scale = 1;
|
|
89
|
-
this._offset = defaultOrigin;
|
|
90
|
-
this._toScreen = (0, import_transformation_matrix.identity)();
|
|
91
|
-
this._toModel = (0, import_transformation_matrix.identity)();
|
|
92
|
-
if (bounds && scale && offset) {
|
|
93
|
-
this.update(bounds, scale, offset);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
update(bounds, scale, offset) {
|
|
97
|
-
this._bounds = bounds;
|
|
98
|
-
this._scale = scale;
|
|
99
|
-
this._offset = offset;
|
|
100
|
-
this._toScreen = (0, import_transformation_matrix.compose)(
|
|
101
|
-
// NOTE: Order is important.
|
|
102
|
-
(0, import_transformation_matrix.translate)(this._offset.x, this._offset.y),
|
|
103
|
-
(0, import_transformation_matrix.scale)(this._scale)
|
|
104
|
-
);
|
|
105
|
-
this._toModel = (0, import_transformation_matrix.inverse)(this._toScreen);
|
|
106
|
-
return this;
|
|
107
|
-
}
|
|
108
|
-
get bounds() {
|
|
109
|
-
return this._bounds;
|
|
110
|
-
}
|
|
111
|
-
get scale() {
|
|
112
|
-
return this._scale;
|
|
113
|
-
}
|
|
114
|
-
get offset() {
|
|
115
|
-
return this._offset;
|
|
116
|
-
}
|
|
117
|
-
toScreen(points) {
|
|
118
|
-
return (0, import_transformation_matrix.applyToPoints)(this._toScreen, points);
|
|
119
|
-
}
|
|
120
|
-
toModel(points) {
|
|
121
|
-
return (0, import_transformation_matrix.applyToPoints)(this._toModel, points);
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
var getZoomTransform = ({ scale, offset, pos, newScale }) => {
|
|
125
|
-
return {
|
|
126
|
-
scale: newScale,
|
|
127
|
-
offset: {
|
|
128
|
-
x: pos.x - (pos.x - offset.x) * (newScale / scale),
|
|
129
|
-
y: pos.y - (pos.y - offset.y) * (newScale / scale)
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
};
|
|
133
|
-
var zoomInPlace = (setTransform, pos, offset, current, next, delay = 200) => {
|
|
134
|
-
const is = (0, import_d3.interpolate)(current, next);
|
|
135
|
-
(0, import_d3.transition)().ease(import_d3.easeSinOut).duration(delay).tween("zoom", () => (t) => {
|
|
136
|
-
const newScale = is(t);
|
|
137
|
-
setTransform(getZoomTransform({
|
|
138
|
-
scale: current,
|
|
139
|
-
newScale,
|
|
140
|
-
offset,
|
|
141
|
-
pos
|
|
142
|
-
}));
|
|
143
|
-
});
|
|
144
|
-
};
|
|
145
|
-
var noop = () => {
|
|
146
|
-
};
|
|
147
|
-
var zoomTo = (setTransform, current, next, delay = 200, cb = noop) => {
|
|
148
|
-
const is = (0, import_d3.interpolateObject)({
|
|
149
|
-
scale: current.scale,
|
|
150
|
-
...current.offset
|
|
151
|
-
}, {
|
|
152
|
-
scale: next.scale,
|
|
153
|
-
...next.offset
|
|
154
|
-
});
|
|
155
|
-
(0, import_d3.transition)().ease(import_d3.easeSinOut).duration(delay).tween("zoom", () => (t) => {
|
|
156
|
-
const { scale, x, y } = is(t);
|
|
157
|
-
setTransform({
|
|
158
|
-
scale,
|
|
159
|
-
offset: {
|
|
160
|
-
x,
|
|
161
|
-
y
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
}).on("end", cb);
|
|
165
|
-
};
|
|
166
|
-
var CanvasContext = /* @__PURE__ */ (0, import_react2.createContext)(null);
|
|
167
|
-
var useCanvasContext = () => {
|
|
168
|
-
return (0, import_react2.useContext)(CanvasContext) ?? (0, import_debug.raise)(new Error("Missing CanvasContext"));
|
|
169
|
-
};
|
|
170
|
-
var createPath = (points, join = false) => {
|
|
171
|
-
return [
|
|
172
|
-
"M",
|
|
173
|
-
points.map(({ x, y }) => `${x},${y}`).join(" L "),
|
|
174
|
-
join ? "Z" : ""
|
|
175
|
-
].join(" ");
|
|
176
|
-
};
|
|
177
|
-
var Markers = ({ id = "dx-marker", classNames }) => {
|
|
178
|
-
var _effect = (0, import_tracking2.useSignals)();
|
|
179
|
-
try {
|
|
180
|
-
return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(Arrow, {
|
|
181
|
-
id: `${id}-arrow-start`,
|
|
182
|
-
dir: "start",
|
|
183
|
-
classNames
|
|
184
|
-
}), /* @__PURE__ */ import_react4.default.createElement(Arrow, {
|
|
185
|
-
id: `${id}-arrow-end`,
|
|
186
|
-
dir: "end",
|
|
187
|
-
classNames
|
|
188
|
-
}), /* @__PURE__ */ import_react4.default.createElement(Arrow, {
|
|
189
|
-
id: `${id}-triangle-start`,
|
|
190
|
-
dir: "start",
|
|
191
|
-
closed: true,
|
|
192
|
-
classNames
|
|
193
|
-
}), /* @__PURE__ */ import_react4.default.createElement(Arrow, {
|
|
194
|
-
id: `${id}-triangle-end`,
|
|
195
|
-
dir: "end",
|
|
196
|
-
closed: true,
|
|
197
|
-
classNames
|
|
198
|
-
}), /* @__PURE__ */ import_react4.default.createElement(Marker, {
|
|
199
|
-
id: `${id}-circle`,
|
|
200
|
-
pos: {
|
|
201
|
-
x: 8,
|
|
202
|
-
y: 8
|
|
203
|
-
},
|
|
204
|
-
size: {
|
|
205
|
-
width: 16,
|
|
206
|
-
height: 16
|
|
207
|
-
}
|
|
208
|
-
}, /* @__PURE__ */ import_react4.default.createElement("circle", {
|
|
209
|
-
cx: 8,
|
|
210
|
-
cy: 8,
|
|
211
|
-
r: 5,
|
|
212
|
-
stroke: "context-stroke",
|
|
213
|
-
className: (0, import_react_ui_theme2.mx)(classNames)
|
|
214
|
-
})));
|
|
215
|
-
} finally {
|
|
216
|
-
_effect.f();
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
var Marker = ({ id, className, children, pos: { x: refX, y: refY }, size: { width: markerWidth, height: markerHeight }, fill, ...rest }) => {
|
|
220
|
-
var _effect = (0, import_tracking2.useSignals)();
|
|
221
|
-
try {
|
|
222
|
-
return /* @__PURE__ */ import_react4.default.createElement("marker", {
|
|
223
|
-
id,
|
|
224
|
-
className,
|
|
225
|
-
refX,
|
|
226
|
-
refY,
|
|
227
|
-
markerWidth,
|
|
228
|
-
markerHeight,
|
|
229
|
-
markerUnits: "strokeWidth",
|
|
230
|
-
orient: "auto",
|
|
231
|
-
...rest
|
|
232
|
-
}, children);
|
|
233
|
-
} finally {
|
|
234
|
-
_effect.f();
|
|
235
|
-
}
|
|
236
|
-
};
|
|
237
|
-
var Arrow = ({ classNames, id, size = 16, dir = "end", closed = false }) => {
|
|
238
|
-
var _effect = (0, import_tracking2.useSignals)();
|
|
239
|
-
try {
|
|
240
|
-
return /* @__PURE__ */ import_react4.default.createElement(Marker, {
|
|
241
|
-
id,
|
|
242
|
-
size: {
|
|
243
|
-
width: size,
|
|
244
|
-
height: size
|
|
245
|
-
},
|
|
246
|
-
pos: dir === "end" ? {
|
|
247
|
-
x: size,
|
|
248
|
-
y: size / 2
|
|
249
|
-
} : {
|
|
250
|
-
x: 0,
|
|
251
|
-
y: size / 2
|
|
252
|
-
}
|
|
253
|
-
}, /* @__PURE__ */ import_react4.default.createElement("path", {
|
|
254
|
-
fill: closed ? void 0 : "none",
|
|
255
|
-
stroke: "context-stroke",
|
|
256
|
-
className: (0, import_react_ui_theme2.mx)(classNames),
|
|
257
|
-
d: createPath(dir === "end" ? [
|
|
258
|
-
{
|
|
259
|
-
x: 1,
|
|
260
|
-
y: 1
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
x: size,
|
|
264
|
-
y: size / 2
|
|
265
|
-
},
|
|
266
|
-
{
|
|
267
|
-
x: 1,
|
|
268
|
-
y: size - 1
|
|
269
|
-
}
|
|
270
|
-
] : [
|
|
271
|
-
{
|
|
272
|
-
x: size - 1,
|
|
273
|
-
y: 1
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
x: 0,
|
|
277
|
-
y: size / 2
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
x: size - 1,
|
|
281
|
-
y: size - 1
|
|
282
|
-
}
|
|
283
|
-
], closed)
|
|
284
|
-
}));
|
|
285
|
-
} finally {
|
|
286
|
-
_effect.f();
|
|
287
|
-
}
|
|
288
|
-
};
|
|
289
|
-
var GridPattern = ({ classNames, id, size, offset }) => {
|
|
290
|
-
var _effect = (0, import_tracking2.useSignals)();
|
|
291
|
-
try {
|
|
292
|
-
return /* @__PURE__ */ import_react4.default.createElement("pattern", {
|
|
293
|
-
id,
|
|
294
|
-
x: (size / 2 + offset.x) % size,
|
|
295
|
-
y: (size / 2 + offset.y) % size,
|
|
296
|
-
width: size,
|
|
297
|
-
height: size,
|
|
298
|
-
patternUnits: "userSpaceOnUse"
|
|
299
|
-
}, /* @__PURE__ */ import_react4.default.createElement("g", {
|
|
300
|
-
className: (0, import_react_ui_theme2.mx)(classNames)
|
|
301
|
-
}, /* @__PURE__ */ import_react4.default.createElement("line", {
|
|
302
|
-
x1: 0,
|
|
303
|
-
y1: size / 2,
|
|
304
|
-
x2: size,
|
|
305
|
-
y2: size / 2
|
|
306
|
-
}), /* @__PURE__ */ import_react4.default.createElement("line", {
|
|
307
|
-
x1: size / 2,
|
|
308
|
-
y1: 0,
|
|
309
|
-
x2: size / 2,
|
|
310
|
-
y2: size
|
|
311
|
-
})));
|
|
312
|
-
} finally {
|
|
313
|
-
_effect.f();
|
|
314
|
-
}
|
|
315
|
-
};
|
|
316
|
-
var logged = false;
|
|
317
|
-
var getRelativePoint = (el, ev) => {
|
|
318
|
-
const rect = el.getBoundingClientRect();
|
|
319
|
-
return {
|
|
320
|
-
x: ev.clientX - rect.x,
|
|
321
|
-
y: ev.clientY - rect.top
|
|
322
|
-
};
|
|
323
|
-
};
|
|
324
|
-
var testId = (id, inspect = false) => {
|
|
325
|
-
if (inspect) {
|
|
326
|
-
if (!logged) {
|
|
327
|
-
console.log("Open storybook in expanded window;\nthen run INSPECT()");
|
|
328
|
-
logged = true;
|
|
329
|
-
}
|
|
330
|
-
window.INSPECT = () => {
|
|
331
|
-
const el = document.querySelector(`[data-test-id="${id}"]`);
|
|
332
|
-
window.inspect(el);
|
|
333
|
-
console.log(el);
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
return {
|
|
337
|
-
[DATA_TEST_ID]: id
|
|
338
|
-
};
|
|
339
|
-
};
|
|
340
|
-
var inspectElement = (el) => {
|
|
341
|
-
window.INSPECT = () => {
|
|
342
|
-
window.inspect(el);
|
|
343
|
-
window.element = el;
|
|
344
|
-
console.log("Open storybook in expanded window;\nthen run INSPECT()");
|
|
345
|
-
console.log(el);
|
|
346
|
-
};
|
|
347
|
-
};
|
|
348
|
-
var DATA_TEST_ID = "data-test-id";
|
|
349
|
-
var defaultOptions = {
|
|
350
|
-
zoom: true
|
|
351
|
-
};
|
|
352
|
-
var useWheel = (options = defaultOptions) => {
|
|
353
|
-
const { root, setProjection } = useCanvasContext();
|
|
354
|
-
(0, import_react3.useEffect)(() => {
|
|
355
|
-
if (!root) {
|
|
356
|
-
return;
|
|
357
|
-
}
|
|
358
|
-
return (0, import_bind_event_listener.bindAll)(root, [
|
|
359
|
-
{
|
|
360
|
-
type: "wheel",
|
|
361
|
-
options: {
|
|
362
|
-
capture: true,
|
|
363
|
-
passive: false
|
|
364
|
-
},
|
|
365
|
-
listener: (ev) => {
|
|
366
|
-
const zooming = isWheelZooming(ev);
|
|
367
|
-
if (!hasFocus(root) && !zooming) {
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
ev.preventDefault();
|
|
371
|
-
if (zooming && !options.zoom) {
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
if (ev.ctrlKey) {
|
|
375
|
-
if (!root) {
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
setProjection(({ scale, offset }) => {
|
|
379
|
-
const pos = getRelativePoint(root, ev);
|
|
380
|
-
const scaleSensitivity = 0.01;
|
|
381
|
-
const newScale = scale * Math.exp(-ev.deltaY * scaleSensitivity);
|
|
382
|
-
return getZoomTransform({
|
|
383
|
-
scale,
|
|
384
|
-
offset,
|
|
385
|
-
newScale,
|
|
386
|
-
pos
|
|
387
|
-
});
|
|
388
|
-
});
|
|
389
|
-
} else {
|
|
390
|
-
setProjection(({ scale, offset: { x, y } }) => {
|
|
391
|
-
return {
|
|
392
|
-
scale,
|
|
393
|
-
offset: {
|
|
394
|
-
x: x - ev.deltaX,
|
|
395
|
-
y: y - ev.deltaY
|
|
396
|
-
}
|
|
397
|
-
};
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
]);
|
|
403
|
-
}, [
|
|
404
|
-
root
|
|
405
|
-
]);
|
|
406
|
-
};
|
|
407
|
-
var isWheelZooming = (ev) => {
|
|
408
|
-
if (ev.ctrlKey || ev.metaKey) {
|
|
409
|
-
return Math.abs(ev.deltaY) > 0 || Math.abs(ev.deltaZ) > 0;
|
|
410
|
-
}
|
|
411
|
-
return false;
|
|
412
|
-
};
|
|
413
|
-
var hasFocus = (element) => {
|
|
414
|
-
const activeElement = document.activeElement;
|
|
415
|
-
if (!activeElement) {
|
|
416
|
-
return false;
|
|
417
|
-
}
|
|
418
|
-
let shadowActive = activeElement;
|
|
419
|
-
while (shadowActive?.shadowRoot?.activeElement) {
|
|
420
|
-
shadowActive = shadowActive.shadowRoot.activeElement;
|
|
421
|
-
}
|
|
422
|
-
let current = element;
|
|
423
|
-
while (current) {
|
|
424
|
-
if (current === activeElement || current === shadowActive) {
|
|
425
|
-
return true;
|
|
426
|
-
}
|
|
427
|
-
current = current.parentElement;
|
|
428
|
-
}
|
|
429
|
-
return false;
|
|
430
|
-
};
|
|
431
|
-
var Canvas = /* @__PURE__ */ (0, import_react.forwardRef)(({ children, classNames, scale: _scale = 1, offset: _offset = defaultOrigin, ...props }, forwardedRef) => {
|
|
432
|
-
var _effect = (0, import_tracking.useSignals)();
|
|
433
|
-
try {
|
|
434
|
-
const { ref, width = 0, height = 0 } = (0, import_react_resize_detector.useResizeDetector)();
|
|
435
|
-
const [ready, setReady] = (0, import_react.useState)(false);
|
|
436
|
-
const [{ scale, offset }, setProjection] = (0, import_react.useState)({
|
|
437
|
-
scale: _scale,
|
|
438
|
-
offset: _offset
|
|
439
|
-
});
|
|
440
|
-
(0, import_react.useEffect)(() => {
|
|
441
|
-
if (width && height && offset === defaultOrigin) {
|
|
442
|
-
setProjection({
|
|
443
|
-
scale,
|
|
444
|
-
offset: {
|
|
445
|
-
x: width / 2,
|
|
446
|
-
y: height / 2
|
|
447
|
-
}
|
|
448
|
-
});
|
|
449
|
-
}
|
|
450
|
-
}, [
|
|
451
|
-
width,
|
|
452
|
-
height,
|
|
453
|
-
scale,
|
|
454
|
-
offset
|
|
455
|
-
]);
|
|
456
|
-
const projection = (0, import_react.useMemo)(() => new ProjectionMapper(), []);
|
|
457
|
-
(0, import_react.useEffect)(() => {
|
|
458
|
-
projection.update({
|
|
459
|
-
width,
|
|
460
|
-
height
|
|
461
|
-
}, scale, offset);
|
|
462
|
-
if (offset !== defaultOrigin) {
|
|
463
|
-
setReady(true);
|
|
464
|
-
}
|
|
465
|
-
}, [
|
|
466
|
-
projection,
|
|
467
|
-
scale,
|
|
468
|
-
offset,
|
|
469
|
-
width,
|
|
470
|
-
height
|
|
471
|
-
]);
|
|
472
|
-
const styles = (0, import_react.useMemo)(() => {
|
|
473
|
-
return {
|
|
474
|
-
// NOTE: Order is important.
|
|
475
|
-
transform: `translate(${offset.x}px, ${offset.y}px) scale(${scale})`,
|
|
476
|
-
visibility: width && height ? "visible" : "hidden"
|
|
477
|
-
};
|
|
478
|
-
}, [
|
|
479
|
-
scale,
|
|
480
|
-
offset
|
|
481
|
-
]);
|
|
482
|
-
(0, import_react.useImperativeHandle)(forwardedRef, () => {
|
|
483
|
-
return {
|
|
484
|
-
setProjection: async (projection2) => {
|
|
485
|
-
setProjection(projection2);
|
|
486
|
-
}
|
|
487
|
-
};
|
|
488
|
-
}, [
|
|
489
|
-
ref
|
|
490
|
-
]);
|
|
491
|
-
return /* @__PURE__ */ import_react.default.createElement(CanvasContext.Provider, {
|
|
492
|
-
value: {
|
|
493
|
-
root: ref.current,
|
|
494
|
-
ready,
|
|
495
|
-
width,
|
|
496
|
-
height,
|
|
497
|
-
scale,
|
|
498
|
-
offset,
|
|
499
|
-
styles,
|
|
500
|
-
projection,
|
|
501
|
-
setProjection
|
|
502
|
-
}
|
|
503
|
-
}, /* @__PURE__ */ import_react.default.createElement("div", {
|
|
504
|
-
role: "none",
|
|
505
|
-
...props,
|
|
506
|
-
className: (0, import_react_ui_theme.mx)("absolute inset-0 overflow-hidden", classNames),
|
|
507
|
-
ref
|
|
508
|
-
}, ready ? children : null));
|
|
509
|
-
} finally {
|
|
510
|
-
_effect.f();
|
|
511
|
-
}
|
|
512
|
-
});
|
|
513
|
-
var SEC = 1e3;
|
|
514
|
-
var FPS = ({ classNames, width = 60, height = 30, bar = "bg-cyan-500" }) => {
|
|
515
|
-
var _effect = (0, import_tracking3.useSignals)();
|
|
516
|
-
try {
|
|
517
|
-
const [{ fps, max, len }, dispatch] = (0, import_react5.useReducer)((state) => {
|
|
518
|
-
const currentTime = Date.now();
|
|
519
|
-
if (currentTime > state.prevTime + SEC) {
|
|
520
|
-
const nextFPS = [
|
|
521
|
-
...new Array(Math.floor((currentTime - state.prevTime - SEC) / SEC)).fill(0),
|
|
522
|
-
Math.max(1, Math.round(state.frames * SEC / (currentTime - state.prevTime)))
|
|
523
|
-
];
|
|
524
|
-
return {
|
|
525
|
-
max: Math.max(state.max, ...nextFPS),
|
|
526
|
-
len: Math.min(state.len + nextFPS.length, width),
|
|
527
|
-
fps: [
|
|
528
|
-
...state.fps,
|
|
529
|
-
...nextFPS
|
|
530
|
-
].slice(-width),
|
|
531
|
-
frames: 1,
|
|
532
|
-
prevTime: currentTime
|
|
533
|
-
};
|
|
534
|
-
} else {
|
|
535
|
-
return {
|
|
536
|
-
...state,
|
|
537
|
-
frames: state.frames + 1
|
|
538
|
-
};
|
|
539
|
-
}
|
|
540
|
-
}, {
|
|
541
|
-
max: 0,
|
|
542
|
-
len: 0,
|
|
543
|
-
fps: [],
|
|
544
|
-
frames: 0,
|
|
545
|
-
prevTime: Date.now()
|
|
546
|
-
});
|
|
547
|
-
const requestRef = (0, import_react5.useRef)();
|
|
548
|
-
const tick = () => {
|
|
549
|
-
dispatch();
|
|
550
|
-
requestRef.current = requestAnimationFrame(tick);
|
|
551
|
-
};
|
|
552
|
-
(0, import_react5.useEffect)(() => {
|
|
553
|
-
requestRef.current = requestAnimationFrame(tick);
|
|
554
|
-
return () => {
|
|
555
|
-
if (requestRef.current) {
|
|
556
|
-
cancelAnimationFrame(requestRef.current);
|
|
557
|
-
}
|
|
558
|
-
};
|
|
559
|
-
}, []);
|
|
560
|
-
return /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
561
|
-
style: {
|
|
562
|
-
width: width + 6
|
|
563
|
-
},
|
|
564
|
-
className: (0, import_react_ui_theme3.mx)("relative flex flex-col p-0.5", "bg-baseSurface text-xs text-subdued font-thin pointer-events-none border border-separator", classNames)
|
|
565
|
-
}, /* @__PURE__ */ import_react5.default.createElement("div", null, fps[len - 1], " FPS"), /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
566
|
-
className: "w-full relative",
|
|
567
|
-
style: {
|
|
568
|
-
height
|
|
569
|
-
}
|
|
570
|
-
}, fps.map((frame, i) => /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
571
|
-
key: `fps-${i}`,
|
|
572
|
-
className: bar,
|
|
573
|
-
style: {
|
|
574
|
-
position: "absolute",
|
|
575
|
-
bottom: 0,
|
|
576
|
-
right: `${len - 1 - i}px`,
|
|
577
|
-
height: `${height * frame / max}px`,
|
|
578
|
-
width: 1
|
|
579
|
-
}
|
|
580
|
-
}))));
|
|
581
|
-
} finally {
|
|
582
|
-
_effect.f();
|
|
583
|
-
}
|
|
584
|
-
};
|
|
585
|
-
var gridRatios = [
|
|
586
|
-
1 / 4,
|
|
587
|
-
1,
|
|
588
|
-
4,
|
|
589
|
-
16
|
|
590
|
-
];
|
|
591
|
-
var defaultGridSize = 16;
|
|
592
|
-
var defaultOffset = {
|
|
593
|
-
x: 0,
|
|
594
|
-
y: 0
|
|
595
|
-
};
|
|
596
|
-
var createId = (parent, grid) => `dx-canvas-grid-${parent}-${grid}`;
|
|
597
|
-
var GridComponent = /* @__PURE__ */ (0, import_react6.forwardRef)(({ size: gridSize = defaultGridSize, scale = 1, offset = defaultOffset, showAxes = true, classNames }, forwardedRef) => {
|
|
598
|
-
var _effect = (0, import_tracking4.useSignals)();
|
|
599
|
-
try {
|
|
600
|
-
const svgRef = (0, import_react_ui.useForwardedRef)(forwardedRef);
|
|
601
|
-
const instanceId = (0, import_react6.useId)();
|
|
602
|
-
const grids = (0, import_react6.useMemo)(() => gridRatios.map((ratio) => ({
|
|
603
|
-
id: ratio,
|
|
604
|
-
size: ratio * gridSize * scale
|
|
605
|
-
})).filter(({ size }) => size >= gridSize && size <= 256), [
|
|
606
|
-
gridSize,
|
|
607
|
-
scale
|
|
608
|
-
]);
|
|
609
|
-
const { width = 0, height = 0 } = svgRef.current?.getBoundingClientRect() ?? {};
|
|
610
|
-
return /* @__PURE__ */ import_react6.default.createElement("svg", {
|
|
611
|
-
...testId("dx-canvas-grid"),
|
|
612
|
-
ref: svgRef,
|
|
613
|
-
className: (0, import_react_ui_theme4.mx)("absolute inset-0 w-full h-full pointer-events-none touch-none select-none", "stroke-neutral-500", classNames)
|
|
614
|
-
}, /* @__PURE__ */ import_react6.default.createElement("defs", null, grids.map(({ id, size }) => /* @__PURE__ */ import_react6.default.createElement(GridPattern, {
|
|
615
|
-
key: id,
|
|
616
|
-
id: createId(instanceId, id),
|
|
617
|
-
offset,
|
|
618
|
-
size
|
|
619
|
-
}))), showAxes && /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement("line", {
|
|
620
|
-
x1: 0,
|
|
621
|
-
y1: offset.y,
|
|
622
|
-
x2: width,
|
|
623
|
-
y2: offset.y,
|
|
624
|
-
className: "stroke-neutral-500 opacity-40"
|
|
625
|
-
}), /* @__PURE__ */ import_react6.default.createElement("line", {
|
|
626
|
-
x1: offset.x,
|
|
627
|
-
y1: 0,
|
|
628
|
-
x2: offset.x,
|
|
629
|
-
y2: height,
|
|
630
|
-
className: "stroke-neutral-500 opacity-40"
|
|
631
|
-
})), /* @__PURE__ */ import_react6.default.createElement("g", null, grids.map(({ id }, i) => /* @__PURE__ */ import_react6.default.createElement("rect", {
|
|
632
|
-
key: id,
|
|
633
|
-
opacity: 0.1 + i * 0.05,
|
|
634
|
-
fill: `url(#${createId(instanceId, id)})`,
|
|
635
|
-
width: "100%",
|
|
636
|
-
height: "100%"
|
|
637
|
-
}))));
|
|
638
|
-
} finally {
|
|
639
|
-
_effect.f();
|
|
640
|
-
}
|
|
641
|
-
});
|
|
642
|
-
var Grid = (props) => {
|
|
643
|
-
var _effect = (0, import_tracking4.useSignals)();
|
|
644
|
-
try {
|
|
645
|
-
const { scale, offset } = useCanvasContext();
|
|
646
|
-
return /* @__PURE__ */ import_react6.default.createElement(GridComponent, {
|
|
647
|
-
...props,
|
|
648
|
-
scale,
|
|
649
|
-
offset
|
|
650
|
-
});
|
|
651
|
-
} finally {
|
|
652
|
-
_effect.f();
|
|
653
|
-
}
|
|
654
|
-
};
|
|
655
|
-
var Point = import_effect.Schema.Struct({
|
|
656
|
-
x: import_effect.Schema.Number,
|
|
657
|
-
y: import_effect.Schema.Number
|
|
658
|
-
});
|
|
659
|
-
var Dimension = import_effect.Schema.Struct({
|
|
660
|
-
width: import_effect.Schema.Number,
|
|
661
|
-
height: import_effect.Schema.Number
|
|
662
|
-
});
|
|
663
|
-
var Rect = import_effect.Schema.extend(Point, Dimension);
|
|
664
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
665
|
-
0 && (module.exports = {
|
|
666
|
-
Arrow,
|
|
667
|
-
Canvas,
|
|
668
|
-
CanvasContext,
|
|
669
|
-
DATA_TEST_ID,
|
|
670
|
-
Dimension,
|
|
671
|
-
FPS,
|
|
672
|
-
Grid,
|
|
673
|
-
GridComponent,
|
|
674
|
-
GridPattern,
|
|
675
|
-
Marker,
|
|
676
|
-
Markers,
|
|
677
|
-
Point,
|
|
678
|
-
ProjectionMapper,
|
|
679
|
-
Rect,
|
|
680
|
-
createPath,
|
|
681
|
-
defaultOrigin,
|
|
682
|
-
getRelativePoint,
|
|
683
|
-
getZoomTransform,
|
|
684
|
-
inspectElement,
|
|
685
|
-
testId,
|
|
686
|
-
useCanvasContext,
|
|
687
|
-
useWheel,
|
|
688
|
-
zoomInPlace,
|
|
689
|
-
zoomTo
|
|
690
|
-
});
|
|
691
|
-
//# sourceMappingURL=index.cjs.map
|