@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.
@@ -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