@aiready/components 0.13.6 → 0.13.8
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/charts/ForceDirectedGraph.js +265 -281
- package/dist/charts/ForceDirectedGraph.js.map +1 -1
- package/dist/components/button.d.ts +1 -1
- package/dist/index.d.ts +32 -77
- package/dist/index.js +428 -637
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/charts/ForceDirectedGraph.tsx +192 -393
- package/src/charts/PackageBoundaries.tsx +55 -0
- package/src/charts/constants.ts +30 -0
- package/src/charts/hooks.ts +87 -0
- package/src/charts/layout-utils.ts +93 -0
- package/src/components/icons/IconBase.tsx +38 -0
- package/src/components/icons/index.tsx +367 -0
- package/src/components/icons.tsx +3 -564
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
|
7
7
|
import { AnimatePresence, motion } from 'framer-motion';
|
|
8
8
|
import { X, MessageSquare, Loader2, Send } from 'lucide-react';
|
|
9
9
|
import { getRatingSlug, getRating as getRating$1 } from '@aiready/core/client';
|
|
10
|
-
import * as
|
|
10
|
+
import * as d34 from 'd3';
|
|
11
11
|
|
|
12
12
|
// src/components/button.tsx
|
|
13
13
|
function cn(...inputs) {
|
|
@@ -246,286 +246,148 @@ function Modal({
|
|
|
246
246
|
)
|
|
247
247
|
] }) });
|
|
248
248
|
}
|
|
249
|
-
|
|
250
|
-
className = "w-6 h-6",
|
|
251
|
-
...props
|
|
252
|
-
}) {
|
|
253
|
-
return /* @__PURE__ */ jsxs(
|
|
254
|
-
"svg",
|
|
255
|
-
{
|
|
256
|
-
viewBox: "0 0 24 24",
|
|
257
|
-
fill: "none",
|
|
258
|
-
stroke: "currentColor",
|
|
259
|
-
className,
|
|
260
|
-
...props,
|
|
261
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
262
|
-
children: [
|
|
263
|
-
/* @__PURE__ */ jsx(
|
|
264
|
-
"path",
|
|
265
|
-
{
|
|
266
|
-
d: "M12 2c1.5 0 3 1 3 1s1.2 1.8 1.2 4.2c0 2.4-1.2 5-3.6 7.4-2.4 2.4-5 3.6-7.4 3.6C3.8 18.2 2 17 2 17S3 15.5 3 14c0-2.1 1.5-3.6 1.5-3.6S7.5 9 9 9c2.4 0 3-7 3-7z",
|
|
267
|
-
strokeWidth: "0",
|
|
268
|
-
fill: "currentColor"
|
|
269
|
-
}
|
|
270
|
-
),
|
|
271
|
-
/* @__PURE__ */ jsx(
|
|
272
|
-
"path",
|
|
273
|
-
{
|
|
274
|
-
d: "M14 10c.8.8 2 2 3 3",
|
|
275
|
-
strokeWidth: "1.5",
|
|
276
|
-
strokeLinecap: "round",
|
|
277
|
-
strokeLinejoin: "round"
|
|
278
|
-
}
|
|
279
|
-
)
|
|
280
|
-
]
|
|
281
|
-
}
|
|
282
|
-
);
|
|
283
|
-
}
|
|
284
|
-
function ChartIcon({
|
|
285
|
-
className = "w-6 h-6",
|
|
286
|
-
...props
|
|
287
|
-
}) {
|
|
288
|
-
return /* @__PURE__ */ jsxs(
|
|
289
|
-
"svg",
|
|
290
|
-
{
|
|
291
|
-
viewBox: "0 0 24 24",
|
|
292
|
-
fill: "none",
|
|
293
|
-
stroke: "currentColor",
|
|
294
|
-
className,
|
|
295
|
-
...props,
|
|
296
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
297
|
-
children: [
|
|
298
|
-
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", strokeWidth: "1.2" }),
|
|
299
|
-
/* @__PURE__ */ jsx("rect", { x: "7", y: "11", width: "2", height: "6", fill: "currentColor" }),
|
|
300
|
-
/* @__PURE__ */ jsx("rect", { x: "11", y: "8", width: "2", height: "9", fill: "currentColor" }),
|
|
301
|
-
/* @__PURE__ */ jsx("rect", { x: "15", y: "5", width: "2", height: "12", fill: "currentColor" })
|
|
302
|
-
]
|
|
303
|
-
}
|
|
304
|
-
);
|
|
305
|
-
}
|
|
306
|
-
function TargetIcon({
|
|
307
|
-
className = "w-6 h-6",
|
|
308
|
-
...props
|
|
309
|
-
}) {
|
|
310
|
-
return /* @__PURE__ */ jsxs(
|
|
311
|
-
"svg",
|
|
312
|
-
{
|
|
313
|
-
viewBox: "0 0 24 24",
|
|
314
|
-
fill: "none",
|
|
315
|
-
stroke: "currentColor",
|
|
316
|
-
className,
|
|
317
|
-
...props,
|
|
318
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
319
|
-
children: [
|
|
320
|
-
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", strokeWidth: "1.2" }),
|
|
321
|
-
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "5", fill: "currentColor" }),
|
|
322
|
-
/* @__PURE__ */ jsx(
|
|
323
|
-
"path",
|
|
324
|
-
{
|
|
325
|
-
d: "M22 12h-3M5 12H2M12 2v3M12 19v3",
|
|
326
|
-
strokeWidth: "1.2",
|
|
327
|
-
strokeLinecap: "round"
|
|
328
|
-
}
|
|
329
|
-
)
|
|
330
|
-
]
|
|
331
|
-
}
|
|
332
|
-
);
|
|
333
|
-
}
|
|
334
|
-
function RobotIcon({
|
|
249
|
+
var IconBase = ({
|
|
335
250
|
className = "w-6 h-6",
|
|
251
|
+
children,
|
|
252
|
+
viewBox = "0 0 24 24",
|
|
336
253
|
...props
|
|
337
|
-
}) {
|
|
338
|
-
return /* @__PURE__ */
|
|
254
|
+
}) => {
|
|
255
|
+
return /* @__PURE__ */ jsx(
|
|
339
256
|
"svg",
|
|
340
257
|
{
|
|
341
|
-
viewBox
|
|
258
|
+
viewBox,
|
|
342
259
|
fill: "none",
|
|
343
260
|
stroke: "currentColor",
|
|
344
261
|
className,
|
|
345
262
|
...props,
|
|
346
263
|
xmlns: "http://www.w3.org/2000/svg",
|
|
347
|
-
children
|
|
348
|
-
/* @__PURE__ */ jsx("rect", { x: "3", y: "7", width: "18", height: "11", rx: "2", strokeWidth: "1.2" }),
|
|
349
|
-
/* @__PURE__ */ jsx("rect", { x: "7", y: "10", width: "2", height: "2", fill: "currentColor" }),
|
|
350
|
-
/* @__PURE__ */ jsx("rect", { x: "15", y: "10", width: "2", height: "2", fill: "currentColor" }),
|
|
351
|
-
/* @__PURE__ */ jsx("path", { d: "M9 3v2M15 3v2", strokeWidth: "1.2", strokeLinecap: "round" })
|
|
352
|
-
]
|
|
264
|
+
children
|
|
353
265
|
}
|
|
354
266
|
);
|
|
355
|
-
}
|
|
356
|
-
function
|
|
357
|
-
className = "w-6 h-6",
|
|
358
|
-
...props
|
|
359
|
-
}) {
|
|
267
|
+
};
|
|
268
|
+
function AlertCircleIcon(props) {
|
|
360
269
|
return /* @__PURE__ */ jsxs(
|
|
361
|
-
|
|
270
|
+
IconBase,
|
|
362
271
|
{
|
|
363
|
-
viewBox: "0 0 24 24",
|
|
364
|
-
fill: "none",
|
|
365
|
-
stroke: "currentColor",
|
|
366
272
|
strokeWidth: "2",
|
|
367
273
|
strokeLinecap: "round",
|
|
368
274
|
strokeLinejoin: "round",
|
|
369
|
-
className,
|
|
370
275
|
...props,
|
|
371
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
372
276
|
children: [
|
|
373
|
-
/* @__PURE__ */ jsx("
|
|
374
|
-
/* @__PURE__ */ jsx("
|
|
277
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
278
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
|
|
279
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
375
280
|
]
|
|
376
281
|
}
|
|
377
282
|
);
|
|
378
283
|
}
|
|
379
|
-
function
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
}) {
|
|
383
|
-
return /* @__PURE__ */ jsx(
|
|
384
|
-
"svg",
|
|
284
|
+
function AlertTriangleIcon(props) {
|
|
285
|
+
return /* @__PURE__ */ jsxs(
|
|
286
|
+
IconBase,
|
|
385
287
|
{
|
|
386
|
-
viewBox: "0 0 24 24",
|
|
387
|
-
fill: "none",
|
|
388
|
-
stroke: "currentColor",
|
|
389
288
|
strokeWidth: "2",
|
|
390
289
|
strokeLinecap: "round",
|
|
391
290
|
strokeLinejoin: "round",
|
|
392
|
-
className,
|
|
393
291
|
...props,
|
|
394
|
-
|
|
395
|
-
|
|
292
|
+
children: [
|
|
293
|
+
/* @__PURE__ */ jsx("path", { d: "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }),
|
|
294
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
295
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
296
|
+
]
|
|
396
297
|
}
|
|
397
298
|
);
|
|
398
299
|
}
|
|
399
|
-
function
|
|
400
|
-
className = "w-6 h-6",
|
|
401
|
-
...props
|
|
402
|
-
}) {
|
|
300
|
+
function ArrowRightIcon(props) {
|
|
403
301
|
return /* @__PURE__ */ jsxs(
|
|
404
|
-
|
|
302
|
+
IconBase,
|
|
405
303
|
{
|
|
406
|
-
viewBox: "0 0 24 24",
|
|
407
|
-
fill: "none",
|
|
408
|
-
stroke: "currentColor",
|
|
409
304
|
strokeWidth: "2",
|
|
410
305
|
strokeLinecap: "round",
|
|
411
306
|
strokeLinejoin: "round",
|
|
412
|
-
className,
|
|
413
307
|
...props,
|
|
414
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
415
308
|
children: [
|
|
416
|
-
/* @__PURE__ */ jsx("
|
|
417
|
-
/* @__PURE__ */ jsx("polyline", { points: "
|
|
309
|
+
/* @__PURE__ */ jsx("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
|
|
310
|
+
/* @__PURE__ */ jsx("polyline", { points: "12 5 19 12 12 19" })
|
|
418
311
|
]
|
|
419
312
|
}
|
|
420
313
|
);
|
|
421
314
|
}
|
|
422
|
-
function
|
|
423
|
-
className = "w-6 h-6",
|
|
424
|
-
...props
|
|
425
|
-
}) {
|
|
315
|
+
function BrainIcon(props) {
|
|
426
316
|
return /* @__PURE__ */ jsxs(
|
|
427
|
-
|
|
317
|
+
IconBase,
|
|
428
318
|
{
|
|
429
|
-
viewBox: "0 0 24 24",
|
|
430
|
-
fill: "none",
|
|
431
|
-
stroke: "currentColor",
|
|
432
319
|
strokeWidth: "2",
|
|
433
320
|
strokeLinecap: "round",
|
|
434
321
|
strokeLinejoin: "round",
|
|
435
|
-
className,
|
|
436
322
|
...props,
|
|
437
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
438
323
|
children: [
|
|
439
|
-
/* @__PURE__ */ jsx("
|
|
440
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
324
|
+
/* @__PURE__ */ jsx("path", { d: "M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.74-3.41A2.5 2.5 0 0 1 2 14c0-1.5 1-2 1-2s-1-.5-1-2a2.5 2.5 0 0 1 2.3-2.48A2.5 2.5 0 0 1 7 5.5a2.5 2.5 0 0 1 2.5-3.5z" }),
|
|
325
|
+
/* @__PURE__ */ jsx("path", { d: "M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.74-3.41A2.5 2.5 0 0 0 22 14c0-1.5-1-2-1-2s1-.5 1-2a2.5 2.5 0 0 0-2.3-2.48A2.5 2.5 0 0 0 17 5.5a2.5 2.5 0 0 0-2.5-3.5z" })
|
|
441
326
|
]
|
|
442
327
|
}
|
|
443
328
|
);
|
|
444
329
|
}
|
|
445
|
-
function
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
})
|
|
449
|
-
|
|
450
|
-
"
|
|
330
|
+
function ChartIcon(props) {
|
|
331
|
+
return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
|
|
332
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2", strokeWidth: "1.2" }),
|
|
333
|
+
/* @__PURE__ */ jsx("rect", { x: "7", y: "11", width: "2", height: "6", fill: "currentColor" }),
|
|
334
|
+
/* @__PURE__ */ jsx("rect", { x: "11", y: "8", width: "2", height: "9", fill: "currentColor" }),
|
|
335
|
+
/* @__PURE__ */ jsx("rect", { x: "15", y: "5", width: "2", height: "12", fill: "currentColor" })
|
|
336
|
+
] });
|
|
337
|
+
}
|
|
338
|
+
function ClockIcon(props) {
|
|
339
|
+
return /* @__PURE__ */ jsxs(
|
|
340
|
+
IconBase,
|
|
451
341
|
{
|
|
452
|
-
viewBox: "0 0 24 24",
|
|
453
|
-
fill: "none",
|
|
454
|
-
stroke: "currentColor",
|
|
455
342
|
strokeWidth: "2",
|
|
456
343
|
strokeLinecap: "round",
|
|
457
344
|
strokeLinejoin: "round",
|
|
458
|
-
className,
|
|
459
345
|
...props,
|
|
460
|
-
|
|
461
|
-
|
|
346
|
+
children: [
|
|
347
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
348
|
+
/* @__PURE__ */ jsx("polyline", { points: "12 6 12 12 16 14" })
|
|
349
|
+
]
|
|
462
350
|
}
|
|
463
351
|
);
|
|
464
352
|
}
|
|
465
|
-
function
|
|
466
|
-
className = "w-6 h-6",
|
|
467
|
-
...props
|
|
468
|
-
}) {
|
|
353
|
+
function FileIcon(props) {
|
|
469
354
|
return /* @__PURE__ */ jsxs(
|
|
470
|
-
|
|
355
|
+
IconBase,
|
|
471
356
|
{
|
|
472
|
-
viewBox: "0 0 24 24",
|
|
473
|
-
fill: "none",
|
|
474
|
-
stroke: "currentColor",
|
|
475
357
|
strokeWidth: "2",
|
|
476
358
|
strokeLinecap: "round",
|
|
477
359
|
strokeLinejoin: "round",
|
|
478
|
-
className,
|
|
479
360
|
...props,
|
|
480
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
481
361
|
children: [
|
|
482
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
483
|
-
/* @__PURE__ */ jsx("polyline", { points: "
|
|
484
|
-
/* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
|
|
362
|
+
/* @__PURE__ */ jsx("path", { d: "M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z" }),
|
|
363
|
+
/* @__PURE__ */ jsx("polyline", { points: "14 2 14 8 20 8" })
|
|
485
364
|
]
|
|
486
365
|
}
|
|
487
366
|
);
|
|
488
367
|
}
|
|
489
|
-
function
|
|
490
|
-
className = "w-6 h-6",
|
|
491
|
-
...props
|
|
492
|
-
}) {
|
|
368
|
+
function HammerIcon(props) {
|
|
493
369
|
return /* @__PURE__ */ jsxs(
|
|
494
|
-
|
|
370
|
+
IconBase,
|
|
495
371
|
{
|
|
496
|
-
viewBox: "0 0 24 24",
|
|
497
|
-
fill: "none",
|
|
498
|
-
stroke: "currentColor",
|
|
499
372
|
strokeWidth: "2",
|
|
500
373
|
strokeLinecap: "round",
|
|
501
374
|
strokeLinejoin: "round",
|
|
502
|
-
className,
|
|
503
375
|
...props,
|
|
504
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
505
376
|
children: [
|
|
506
|
-
/* @__PURE__ */ jsx("
|
|
507
|
-
/* @__PURE__ */ jsx("
|
|
508
|
-
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
|
|
377
|
+
/* @__PURE__ */ jsx("path", { d: "M18.42 13.59L7.46 2.63a1 1 0 0 0-1.42 0l-4.7 4.7a1 1 0 0 0 0 1.42L11 18.23l1.07-1.07-1.41-1.41 1.42-1.42 1.41 1.41 1.41-1.41-1.41-1.41 1.42-1.42 1.41 1.41 2-2z" }),
|
|
378
|
+
/* @__PURE__ */ jsx("path", { d: "M13 18l6 6" })
|
|
509
379
|
]
|
|
510
380
|
}
|
|
511
381
|
);
|
|
512
382
|
}
|
|
513
|
-
function InfoIcon({
|
|
514
|
-
className = "w-6 h-6",
|
|
515
|
-
...props
|
|
516
|
-
}) {
|
|
383
|
+
function InfoIcon(props) {
|
|
517
384
|
return /* @__PURE__ */ jsxs(
|
|
518
|
-
|
|
385
|
+
IconBase,
|
|
519
386
|
{
|
|
520
|
-
viewBox: "0 0 24 24",
|
|
521
|
-
fill: "none",
|
|
522
|
-
stroke: "currentColor",
|
|
523
387
|
strokeWidth: "2",
|
|
524
388
|
strokeLinecap: "round",
|
|
525
389
|
strokeLinejoin: "round",
|
|
526
|
-
className,
|
|
527
390
|
...props,
|
|
528
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
529
391
|
children: [
|
|
530
392
|
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
|
|
531
393
|
/* @__PURE__ */ jsx("line", { x1: "12", y1: "16", x2: "12", y2: "12" }),
|
|
@@ -534,277 +396,222 @@ function InfoIcon({
|
|
|
534
396
|
}
|
|
535
397
|
);
|
|
536
398
|
}
|
|
537
|
-
function
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
}) {
|
|
541
|
-
return /* @__PURE__ */ jsxs(
|
|
542
|
-
"svg",
|
|
399
|
+
function PlayIcon(props) {
|
|
400
|
+
return /* @__PURE__ */ jsx(
|
|
401
|
+
IconBase,
|
|
543
402
|
{
|
|
544
|
-
viewBox: "0 0 24 24",
|
|
545
|
-
fill: "none",
|
|
546
|
-
stroke: "currentColor",
|
|
547
403
|
strokeWidth: "2",
|
|
548
404
|
strokeLinecap: "round",
|
|
549
405
|
strokeLinejoin: "round",
|
|
550
|
-
className,
|
|
551
406
|
...props,
|
|
552
|
-
|
|
553
|
-
children: [
|
|
554
|
-
/* @__PURE__ */ jsx("path", { d: "M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.74-3.41A2.5 2.5 0 0 1 2 14c0-1.5 1-2 1-2s-1-.5-1-2a2.5 2.5 0 0 1 2.3-2.48A2.5 2.5 0 0 1 7 5.5a2.5 2.5 0 0 1 2.5-3.5z" }),
|
|
555
|
-
/* @__PURE__ */ jsx("path", { d: "M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.74-3.41A2.5 2.5 0 0 0 22 14c0-1.5-1-2-1-2s1-.5 1-2a2.5 2.5 0 0 0-2.3-2.48A2.5 2.5 0 0 0 17 5.5a2.5 2.5 0 0 0-2.5-3.5z" })
|
|
556
|
-
]
|
|
407
|
+
children: /* @__PURE__ */ jsx("polygon", { points: "5 3 19 12 5 21 5 3" })
|
|
557
408
|
}
|
|
558
409
|
);
|
|
559
410
|
}
|
|
560
|
-
function
|
|
561
|
-
className = "w-6 h-6",
|
|
562
|
-
...props
|
|
563
|
-
}) {
|
|
411
|
+
function RefreshCwIcon(props) {
|
|
564
412
|
return /* @__PURE__ */ jsxs(
|
|
565
|
-
|
|
413
|
+
IconBase,
|
|
566
414
|
{
|
|
567
|
-
viewBox: "0 0 24 24",
|
|
568
|
-
fill: "none",
|
|
569
|
-
stroke: "currentColor",
|
|
570
415
|
strokeWidth: "2",
|
|
571
416
|
strokeLinecap: "round",
|
|
572
417
|
strokeLinejoin: "round",
|
|
573
|
-
className,
|
|
574
418
|
...props,
|
|
575
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
576
419
|
children: [
|
|
577
|
-
/* @__PURE__ */ jsx("
|
|
578
|
-
/* @__PURE__ */ jsx("
|
|
420
|
+
/* @__PURE__ */ jsx("path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
|
|
421
|
+
/* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" }),
|
|
422
|
+
/* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
|
|
423
|
+
/* @__PURE__ */ jsx("path", { d: "M3 21v-5h5" })
|
|
579
424
|
]
|
|
580
425
|
}
|
|
581
426
|
);
|
|
582
427
|
}
|
|
583
|
-
function
|
|
584
|
-
return /* @__PURE__ */
|
|
428
|
+
function RobotIcon(props) {
|
|
429
|
+
return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
|
|
430
|
+
/* @__PURE__ */ jsx("rect", { x: "3", y: "7", width: "18", height: "11", rx: "2", strokeWidth: "1.2" }),
|
|
431
|
+
/* @__PURE__ */ jsx("rect", { x: "7", y: "10", width: "2", height: "2", fill: "currentColor" }),
|
|
432
|
+
/* @__PURE__ */ jsx("rect", { x: "15", y: "10", width: "2", height: "2", fill: "currentColor" }),
|
|
433
|
+
/* @__PURE__ */ jsx("path", { d: "M9 3v2M15 3v2", strokeWidth: "1.2", strokeLinecap: "round" })
|
|
434
|
+
] });
|
|
585
435
|
}
|
|
586
|
-
function
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
436
|
+
function RocketIcon(props) {
|
|
437
|
+
return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
|
|
438
|
+
/* @__PURE__ */ jsx(
|
|
439
|
+
"path",
|
|
440
|
+
{
|
|
441
|
+
d: "M12 2c1.5 0 3 1 3 1s1.2 1.8 1.2 4.2c0 2.4-1.2 5-3.6 7.4-2.4 2.4-5 3.6-7.4 3.6C3.8 18.2 2 17 2 17S3 15.5 3 14c0-2.1 1.5-3.6 1.5-3.6S7.5 9 9 9c2.4 0 3-7 3-7z",
|
|
442
|
+
strokeWidth: "0",
|
|
443
|
+
fill: "currentColor"
|
|
444
|
+
}
|
|
445
|
+
),
|
|
446
|
+
/* @__PURE__ */ jsx(
|
|
447
|
+
"path",
|
|
448
|
+
{
|
|
449
|
+
d: "M14 10c.8.8 2 2 3 3",
|
|
450
|
+
strokeWidth: "1.5",
|
|
451
|
+
strokeLinecap: "round",
|
|
452
|
+
strokeLinejoin: "round"
|
|
453
|
+
}
|
|
454
|
+
)
|
|
455
|
+
] });
|
|
456
|
+
}
|
|
457
|
+
function SaveIcon(props) {
|
|
590
458
|
return /* @__PURE__ */ jsxs(
|
|
591
|
-
|
|
459
|
+
IconBase,
|
|
592
460
|
{
|
|
593
|
-
viewBox: "0 0 24 24",
|
|
594
|
-
fill: "none",
|
|
595
|
-
stroke: "currentColor",
|
|
596
461
|
strokeWidth: "2",
|
|
597
462
|
strokeLinecap: "round",
|
|
598
463
|
strokeLinejoin: "round",
|
|
599
|
-
className,
|
|
600
464
|
...props,
|
|
601
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
602
465
|
children: [
|
|
603
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
604
|
-
/* @__PURE__ */ jsx("
|
|
466
|
+
/* @__PURE__ */ jsx("path", { d: "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" }),
|
|
467
|
+
/* @__PURE__ */ jsx("polyline", { points: "17 21 17 13 7 13 7 21" }),
|
|
468
|
+
/* @__PURE__ */ jsx("polyline", { points: "7 3 7 8 15 8" })
|
|
605
469
|
]
|
|
606
470
|
}
|
|
607
471
|
);
|
|
608
472
|
}
|
|
609
|
-
function
|
|
610
|
-
className = "w-6 h-6",
|
|
611
|
-
...props
|
|
612
|
-
}) {
|
|
473
|
+
function SettingsIcon(props) {
|
|
613
474
|
return /* @__PURE__ */ jsxs(
|
|
614
|
-
|
|
475
|
+
IconBase,
|
|
615
476
|
{
|
|
616
|
-
viewBox: "0 0 24 24",
|
|
617
|
-
fill: "none",
|
|
618
|
-
stroke: "currentColor",
|
|
619
477
|
strokeWidth: "2",
|
|
620
478
|
strokeLinecap: "round",
|
|
621
479
|
strokeLinejoin: "round",
|
|
622
|
-
className,
|
|
623
480
|
...props,
|
|
624
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
625
481
|
children: [
|
|
626
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
627
|
-
/* @__PURE__ */ jsx("
|
|
628
|
-
/* @__PURE__ */ jsx("polyline", { points: "7 3 7 8 15 8" })
|
|
482
|
+
/* @__PURE__ */ jsx("path", { d: "M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.38a2 2 0 0 0-.73-2.73l-.15-.1a2 2 0 0 1-1-1.72v-.51a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" }),
|
|
483
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" })
|
|
629
484
|
]
|
|
630
485
|
}
|
|
631
486
|
);
|
|
632
487
|
}
|
|
633
|
-
function
|
|
634
|
-
className = "w-6 h-6",
|
|
635
|
-
...props
|
|
636
|
-
}) {
|
|
488
|
+
function ShieldCheckIcon(props) {
|
|
637
489
|
return /* @__PURE__ */ jsxs(
|
|
638
|
-
|
|
490
|
+
IconBase,
|
|
639
491
|
{
|
|
640
|
-
viewBox: "0 0 24 24",
|
|
641
|
-
fill: "none",
|
|
642
|
-
stroke: "currentColor",
|
|
643
492
|
strokeWidth: "2",
|
|
644
493
|
strokeLinecap: "round",
|
|
645
494
|
strokeLinejoin: "round",
|
|
646
|
-
className,
|
|
647
495
|
...props,
|
|
648
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
649
496
|
children: [
|
|
650
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
651
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
652
|
-
/* @__PURE__ */ jsx("path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16" }),
|
|
653
|
-
/* @__PURE__ */ jsx("path", { d: "M3 21v-5h5" })
|
|
497
|
+
/* @__PURE__ */ jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }),
|
|
498
|
+
/* @__PURE__ */ jsx("path", { d: "M9 12l2 2 4-4" })
|
|
654
499
|
]
|
|
655
500
|
}
|
|
656
501
|
);
|
|
657
502
|
}
|
|
658
|
-
function
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
}) {
|
|
662
|
-
return /* @__PURE__ */ jsxs(
|
|
663
|
-
"svg",
|
|
503
|
+
function ShieldIcon(props) {
|
|
504
|
+
return /* @__PURE__ */ jsx(
|
|
505
|
+
IconBase,
|
|
664
506
|
{
|
|
665
|
-
viewBox: "0 0 24 24",
|
|
666
|
-
fill: "none",
|
|
667
|
-
stroke: "currentColor",
|
|
668
507
|
strokeWidth: "2",
|
|
669
508
|
strokeLinecap: "round",
|
|
670
509
|
strokeLinejoin: "round",
|
|
671
|
-
className,
|
|
672
510
|
...props,
|
|
673
|
-
children:
|
|
674
|
-
/* @__PURE__ */ jsx("path", { d: "M21 12V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-1" }),
|
|
675
|
-
/* @__PURE__ */ jsx("path", { d: "M16 12h5" }),
|
|
676
|
-
/* @__PURE__ */ jsx("circle", { cx: "16", cy: "12", r: "1" })
|
|
677
|
-
]
|
|
511
|
+
children: /* @__PURE__ */ jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
|
|
678
512
|
}
|
|
679
513
|
);
|
|
680
514
|
}
|
|
681
|
-
function
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
})
|
|
515
|
+
function TargetIcon(props) {
|
|
516
|
+
return /* @__PURE__ */ jsxs(IconBase, { ...props, children: [
|
|
517
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", strokeWidth: "1.2" }),
|
|
518
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "5", fill: "currentColor" }),
|
|
519
|
+
/* @__PURE__ */ jsx(
|
|
520
|
+
"path",
|
|
521
|
+
{
|
|
522
|
+
d: "M22 12h-3M5 12H2M12 2v3M12 19v3",
|
|
523
|
+
strokeWidth: "1.2",
|
|
524
|
+
strokeLinecap: "round"
|
|
525
|
+
}
|
|
526
|
+
)
|
|
527
|
+
] });
|
|
528
|
+
}
|
|
529
|
+
function TerminalIcon(props) {
|
|
685
530
|
return /* @__PURE__ */ jsxs(
|
|
686
|
-
|
|
531
|
+
IconBase,
|
|
687
532
|
{
|
|
688
|
-
viewBox: "0 0 24 24",
|
|
689
|
-
fill: "none",
|
|
690
|
-
stroke: "currentColor",
|
|
691
533
|
strokeWidth: "2",
|
|
692
534
|
strokeLinecap: "round",
|
|
693
535
|
strokeLinejoin: "round",
|
|
694
|
-
className,
|
|
695
536
|
...props,
|
|
696
537
|
children: [
|
|
697
|
-
/* @__PURE__ */ jsx("
|
|
698
|
-
/* @__PURE__ */ jsx("
|
|
538
|
+
/* @__PURE__ */ jsx("polyline", { points: "4 17 10 11 4 5" }),
|
|
539
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "19", x2: "20", y2: "19" })
|
|
699
540
|
]
|
|
700
541
|
}
|
|
701
542
|
);
|
|
702
543
|
}
|
|
703
|
-
function
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
}) {
|
|
707
|
-
return /* @__PURE__ */ jsx(
|
|
708
|
-
"svg",
|
|
544
|
+
function TrashIcon(props) {
|
|
545
|
+
return /* @__PURE__ */ jsxs(
|
|
546
|
+
IconBase,
|
|
709
547
|
{
|
|
710
|
-
viewBox: "0 0 24 24",
|
|
711
|
-
fill: "none",
|
|
712
|
-
stroke: "currentColor",
|
|
713
548
|
strokeWidth: "2",
|
|
714
549
|
strokeLinecap: "round",
|
|
715
550
|
strokeLinejoin: "round",
|
|
716
|
-
className,
|
|
717
551
|
...props,
|
|
718
|
-
children:
|
|
552
|
+
children: [
|
|
553
|
+
/* @__PURE__ */ jsx("polyline", { points: "3 6 5 6 21 6" }),
|
|
554
|
+
/* @__PURE__ */ jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })
|
|
555
|
+
]
|
|
719
556
|
}
|
|
720
557
|
);
|
|
721
558
|
}
|
|
722
|
-
function
|
|
723
|
-
className = "w-6 h-6",
|
|
724
|
-
...props
|
|
725
|
-
}) {
|
|
559
|
+
function TrendingUpIcon(props) {
|
|
726
560
|
return /* @__PURE__ */ jsxs(
|
|
727
|
-
|
|
561
|
+
IconBase,
|
|
728
562
|
{
|
|
729
|
-
viewBox: "0 0 24 24",
|
|
730
|
-
fill: "none",
|
|
731
|
-
stroke: "currentColor",
|
|
732
563
|
strokeWidth: "2",
|
|
733
564
|
strokeLinecap: "round",
|
|
734
565
|
strokeLinejoin: "round",
|
|
735
|
-
className,
|
|
736
566
|
...props,
|
|
737
567
|
children: [
|
|
738
|
-
/* @__PURE__ */ jsx("
|
|
739
|
-
/* @__PURE__ */ jsx("
|
|
568
|
+
/* @__PURE__ */ jsx("polyline", { points: "23 6 13.5 15.5 8.5 10.5 1 18" }),
|
|
569
|
+
/* @__PURE__ */ jsx("polyline", { points: "17 6 23 6 23 12" })
|
|
740
570
|
]
|
|
741
571
|
}
|
|
742
572
|
);
|
|
743
573
|
}
|
|
744
|
-
function
|
|
745
|
-
className = "w-6 h-6",
|
|
746
|
-
...props
|
|
747
|
-
}) {
|
|
574
|
+
function UploadIcon(props) {
|
|
748
575
|
return /* @__PURE__ */ jsxs(
|
|
749
|
-
|
|
576
|
+
IconBase,
|
|
750
577
|
{
|
|
751
|
-
viewBox: "0 0 24 24",
|
|
752
|
-
fill: "none",
|
|
753
|
-
stroke: "currentColor",
|
|
754
578
|
strokeWidth: "2",
|
|
755
579
|
strokeLinecap: "round",
|
|
756
580
|
strokeLinejoin: "round",
|
|
757
|
-
className,
|
|
758
581
|
...props,
|
|
759
582
|
children: [
|
|
760
|
-
/* @__PURE__ */ jsx("
|
|
761
|
-
/* @__PURE__ */ jsx("polyline", { points: "
|
|
583
|
+
/* @__PURE__ */ jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v4" }),
|
|
584
|
+
/* @__PURE__ */ jsx("polyline", { points: "17 8 12 3 7 8" }),
|
|
585
|
+
/* @__PURE__ */ jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })
|
|
762
586
|
]
|
|
763
587
|
}
|
|
764
588
|
);
|
|
765
589
|
}
|
|
766
|
-
function
|
|
767
|
-
className = "w-6 h-6",
|
|
768
|
-
...props
|
|
769
|
-
}) {
|
|
590
|
+
function WalletIcon(props) {
|
|
770
591
|
return /* @__PURE__ */ jsxs(
|
|
771
|
-
|
|
592
|
+
IconBase,
|
|
772
593
|
{
|
|
773
|
-
viewBox: "0 0 24 24",
|
|
774
|
-
fill: "none",
|
|
775
|
-
stroke: "currentColor",
|
|
776
594
|
strokeWidth: "2",
|
|
777
595
|
strokeLinecap: "round",
|
|
778
596
|
strokeLinejoin: "round",
|
|
779
|
-
className,
|
|
780
597
|
...props,
|
|
781
598
|
children: [
|
|
782
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
783
|
-
/* @__PURE__ */ jsx("path", { d: "
|
|
599
|
+
/* @__PURE__ */ jsx("path", { d: "M21 12V7a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-1" }),
|
|
600
|
+
/* @__PURE__ */ jsx("path", { d: "M16 12h5" }),
|
|
601
|
+
/* @__PURE__ */ jsx("circle", { cx: "16", cy: "12", r: "1" })
|
|
784
602
|
]
|
|
785
603
|
}
|
|
786
604
|
);
|
|
787
605
|
}
|
|
788
|
-
function
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
}) {
|
|
792
|
-
return /* @__PURE__ */ jsxs(
|
|
793
|
-
"svg",
|
|
606
|
+
function ZapIcon(props) {
|
|
607
|
+
return /* @__PURE__ */ jsx(
|
|
608
|
+
IconBase,
|
|
794
609
|
{
|
|
795
|
-
viewBox: "0 0 24 24",
|
|
796
|
-
fill: "none",
|
|
797
|
-
stroke: "currentColor",
|
|
798
610
|
strokeWidth: "2",
|
|
799
611
|
strokeLinecap: "round",
|
|
800
612
|
strokeLinejoin: "round",
|
|
801
|
-
className,
|
|
802
613
|
...props,
|
|
803
|
-
children:
|
|
804
|
-
/* @__PURE__ */ jsx("path", { d: "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" }),
|
|
805
|
-
/* @__PURE__ */ jsx("line", { x1: "12", y1: "9", x2: "12", y2: "13" }),
|
|
806
|
-
/* @__PURE__ */ jsx("line", { x1: "12", y1: "17", x2: "12.01", y2: "17" })
|
|
807
|
-
]
|
|
614
|
+
children: /* @__PURE__ */ jsx("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
|
|
808
615
|
}
|
|
809
616
|
);
|
|
810
617
|
}
|
|
@@ -2281,7 +2088,7 @@ function useD3(renderFn, dependencies = []) {
|
|
|
2281
2088
|
const ref = useRef(null);
|
|
2282
2089
|
useEffect(() => {
|
|
2283
2090
|
if (ref.current) {
|
|
2284
|
-
const selection =
|
|
2091
|
+
const selection = d34.select(ref.current);
|
|
2285
2092
|
renderFn(selection);
|
|
2286
2093
|
}
|
|
2287
2094
|
}, dependencies);
|
|
@@ -2291,7 +2098,7 @@ function useD3WithResize(renderFn, dependencies = []) {
|
|
|
2291
2098
|
const ref = useRef(null);
|
|
2292
2099
|
useEffect(() => {
|
|
2293
2100
|
if (!ref.current) return;
|
|
2294
|
-
const selection =
|
|
2101
|
+
const selection = d34.select(ref.current);
|
|
2295
2102
|
const render = () => renderFn(selection);
|
|
2296
2103
|
render();
|
|
2297
2104
|
const resizeObserver = new ResizeObserver(() => {
|
|
@@ -2358,11 +2165,11 @@ function useForceSimulation(initialNodes, initialLinks, options) {
|
|
|
2358
2165
|
n.vy = (Math.random() - 0.5) * 10;
|
|
2359
2166
|
});
|
|
2360
2167
|
}
|
|
2361
|
-
const simulation =
|
|
2168
|
+
const simulation = d34.forceSimulation(
|
|
2362
2169
|
nodesCopy
|
|
2363
2170
|
);
|
|
2364
2171
|
try {
|
|
2365
|
-
const linkForce =
|
|
2172
|
+
const linkForce = d34.forceLink(
|
|
2366
2173
|
linksCopy
|
|
2367
2174
|
);
|
|
2368
2175
|
linkForce.id((d) => d.id).distance(
|
|
@@ -2371,31 +2178,31 @@ function useForceSimulation(initialNodes, initialLinks, options) {
|
|
|
2371
2178
|
simulation.force("link", linkForce);
|
|
2372
2179
|
} catch (e) {
|
|
2373
2180
|
try {
|
|
2374
|
-
simulation.force("link",
|
|
2181
|
+
simulation.force("link", d34.forceLink(linksCopy));
|
|
2375
2182
|
} catch (e2) {
|
|
2376
2183
|
}
|
|
2377
2184
|
}
|
|
2378
2185
|
try {
|
|
2379
2186
|
simulation.force(
|
|
2380
2187
|
"charge",
|
|
2381
|
-
|
|
2188
|
+
d34.forceManyBody().strength(chargeStrength)
|
|
2382
2189
|
);
|
|
2383
2190
|
simulation.force(
|
|
2384
2191
|
"center",
|
|
2385
|
-
|
|
2192
|
+
d34.forceCenter(width / 2, height / 2).strength(centerStrength)
|
|
2386
2193
|
);
|
|
2387
|
-
const collide =
|
|
2194
|
+
const collide = d34.forceCollide().radius((d) => {
|
|
2388
2195
|
const nodeSize = d && d.size ? d.size : 10;
|
|
2389
2196
|
return nodeSize + collisionRadius;
|
|
2390
2197
|
}).strength(collisionStrength);
|
|
2391
2198
|
simulation.force("collision", collide);
|
|
2392
2199
|
simulation.force(
|
|
2393
2200
|
"x",
|
|
2394
|
-
|
|
2201
|
+
d34.forceX(width / 2).strength(Math.max(0.02, centerStrength * 0.5))
|
|
2395
2202
|
);
|
|
2396
2203
|
simulation.force(
|
|
2397
2204
|
"y",
|
|
2398
|
-
|
|
2205
|
+
d34.forceY(height / 2).strength(Math.max(0.02, centerStrength * 0.5))
|
|
2399
2206
|
);
|
|
2400
2207
|
simulation.alphaDecay(alphaDecay);
|
|
2401
2208
|
simulation.velocityDecay(velocityDecay);
|
|
@@ -2746,6 +2553,155 @@ var LinkItem = ({
|
|
|
2746
2553
|
] });
|
|
2747
2554
|
};
|
|
2748
2555
|
var LinkItem_default = LinkItem;
|
|
2556
|
+
|
|
2557
|
+
// src/charts/constants.ts
|
|
2558
|
+
var DEFAULT_NODE_COLOR = "#64748b";
|
|
2559
|
+
var DEFAULT_NODE_SIZE = 10;
|
|
2560
|
+
var DEFAULT_LINK_COLOR = "#94a3b8";
|
|
2561
|
+
var DEFAULT_LINK_WIDTH = 1;
|
|
2562
|
+
var CIRCULAR_LAYOUT_RADIUS_RATIO = 0.35;
|
|
2563
|
+
var FIT_VIEW_PADDING = 40;
|
|
2564
|
+
var TRANSITION_DURATION_MS = 300;
|
|
2565
|
+
var PACKAGE_BOUNDARY_FILL = "rgba(148,163,184,0.06)";
|
|
2566
|
+
var PACKAGE_BOUNDARY_STROKE = "#475569";
|
|
2567
|
+
var PACKAGE_BOUNDARY_STROKE_WIDTH = 2;
|
|
2568
|
+
var PACKAGE_BOUNDARY_DASH = "6 6";
|
|
2569
|
+
var PACKAGE_LABEL_FONT_SIZE = 11;
|
|
2570
|
+
var PACKAGE_LABEL_COLOR = "#475569";
|
|
2571
|
+
var PackageBoundaries = ({
|
|
2572
|
+
packageBounds
|
|
2573
|
+
}) => {
|
|
2574
|
+
if (!packageBounds || Object.keys(packageBounds).length === 0) return null;
|
|
2575
|
+
return /* @__PURE__ */ jsx("g", { className: "package-boundaries", pointerEvents: "none", children: Object.entries(packageBounds).map(([pid, b]) => /* @__PURE__ */ jsxs("g", { children: [
|
|
2576
|
+
/* @__PURE__ */ jsx(
|
|
2577
|
+
"circle",
|
|
2578
|
+
{
|
|
2579
|
+
cx: b.x,
|
|
2580
|
+
cy: b.y,
|
|
2581
|
+
r: b.r,
|
|
2582
|
+
fill: PACKAGE_BOUNDARY_FILL,
|
|
2583
|
+
stroke: PACKAGE_BOUNDARY_STROKE,
|
|
2584
|
+
strokeWidth: PACKAGE_BOUNDARY_STROKE_WIDTH,
|
|
2585
|
+
strokeDasharray: PACKAGE_BOUNDARY_DASH,
|
|
2586
|
+
opacity: 0.9
|
|
2587
|
+
}
|
|
2588
|
+
),
|
|
2589
|
+
/* @__PURE__ */ jsx(
|
|
2590
|
+
"text",
|
|
2591
|
+
{
|
|
2592
|
+
x: b.x,
|
|
2593
|
+
y: Math.max(12, b.y - b.r + 14),
|
|
2594
|
+
fill: PACKAGE_LABEL_COLOR,
|
|
2595
|
+
fontSize: PACKAGE_LABEL_FONT_SIZE,
|
|
2596
|
+
textAnchor: "middle",
|
|
2597
|
+
pointerEvents: "none",
|
|
2598
|
+
children: pid.replace(/^pkg:/, "")
|
|
2599
|
+
}
|
|
2600
|
+
)
|
|
2601
|
+
] }, pid)) });
|
|
2602
|
+
};
|
|
2603
|
+
PackageBoundaries.displayName = "PackageBoundaries";
|
|
2604
|
+
|
|
2605
|
+
// src/charts/layout-utils.ts
|
|
2606
|
+
function applyCircularLayout(nodes, width, height) {
|
|
2607
|
+
const centerX = width / 2;
|
|
2608
|
+
const centerY = height / 2;
|
|
2609
|
+
const radius = Math.min(width, height) * CIRCULAR_LAYOUT_RADIUS_RATIO;
|
|
2610
|
+
nodes.forEach((node, i) => {
|
|
2611
|
+
const angle = 2 * Math.PI * i / nodes.length;
|
|
2612
|
+
node.fx = centerX + Math.cos(angle) * radius;
|
|
2613
|
+
node.fy = centerY + Math.sin(angle) * radius;
|
|
2614
|
+
node.x = node.fx;
|
|
2615
|
+
node.y = node.fy;
|
|
2616
|
+
});
|
|
2617
|
+
}
|
|
2618
|
+
function applyHierarchicalLayout(nodes, width, height) {
|
|
2619
|
+
const groups = /* @__PURE__ */ new Map();
|
|
2620
|
+
nodes.forEach((n) => {
|
|
2621
|
+
const key = n.packageGroup || n.group || "root";
|
|
2622
|
+
if (!groups.has(key)) groups.set(key, []);
|
|
2623
|
+
groups.get(key).push(n);
|
|
2624
|
+
});
|
|
2625
|
+
const groupArray = Array.from(groups.entries());
|
|
2626
|
+
const cols = Math.ceil(Math.sqrt(groupArray.length));
|
|
2627
|
+
const groupSpacingX = width * 0.8 / cols;
|
|
2628
|
+
const groupSpacingY = height * 0.8 / Math.ceil(groupArray.length / cols);
|
|
2629
|
+
groupArray.forEach(([groupKey, groupNodes], gi) => {
|
|
2630
|
+
const col = gi % cols;
|
|
2631
|
+
const row = Math.floor(gi / cols);
|
|
2632
|
+
const groupX = (col + 0.5) * groupSpacingX;
|
|
2633
|
+
const groupY = (row + 0.5) * groupSpacingY;
|
|
2634
|
+
if (groupKey.startsWith("pkg:") || groupKey === groupKey) {
|
|
2635
|
+
groupNodes.forEach((n, ni) => {
|
|
2636
|
+
const angle = 2 * Math.PI * ni / groupNodes.length;
|
|
2637
|
+
const r = Math.min(80, 20 + groupNodes.length * 8);
|
|
2638
|
+
n.fx = groupX + Math.cos(angle) * r;
|
|
2639
|
+
n.fy = groupY + Math.sin(angle) * r;
|
|
2640
|
+
n.x = n.fx;
|
|
2641
|
+
n.y = n.fy;
|
|
2642
|
+
});
|
|
2643
|
+
}
|
|
2644
|
+
});
|
|
2645
|
+
}
|
|
2646
|
+
function applyInitialForceLayout(nodes, width, height) {
|
|
2647
|
+
nodes.forEach((node) => {
|
|
2648
|
+
if (node.fx === void 0 || node.fx === null) {
|
|
2649
|
+
node.x = Math.random() * width;
|
|
2650
|
+
node.y = Math.random() * height;
|
|
2651
|
+
}
|
|
2652
|
+
});
|
|
2653
|
+
}
|
|
2654
|
+
function useGraphZoom(svgRef, gRef, enableZoom, setTransform, transformRef) {
|
|
2655
|
+
useEffect(() => {
|
|
2656
|
+
if (!enableZoom || !svgRef.current || !gRef.current) return;
|
|
2657
|
+
const svg = d34.select(svgRef.current);
|
|
2658
|
+
const g = d34.select(gRef.current);
|
|
2659
|
+
const zoom3 = d34.zoom().scaleExtent([0.1, 10]).on("zoom", (event) => {
|
|
2660
|
+
g.attr("transform", event.transform);
|
|
2661
|
+
transformRef.current = event.transform;
|
|
2662
|
+
setTransform(event.transform);
|
|
2663
|
+
});
|
|
2664
|
+
svg.call(zoom3);
|
|
2665
|
+
return () => {
|
|
2666
|
+
svg.on(".zoom", null);
|
|
2667
|
+
};
|
|
2668
|
+
}, [enableZoom, svgRef, gRef, setTransform, transformRef]);
|
|
2669
|
+
}
|
|
2670
|
+
function useWindowDrag(enableDrag, svgRef, transformRef, dragActiveRef, dragNodeRef, onDragEnd) {
|
|
2671
|
+
useEffect(() => {
|
|
2672
|
+
if (!enableDrag) return;
|
|
2673
|
+
const handleWindowMove = (event) => {
|
|
2674
|
+
if (!dragActiveRef.current || !dragNodeRef.current) return;
|
|
2675
|
+
const svg = svgRef.current;
|
|
2676
|
+
if (!svg) return;
|
|
2677
|
+
const rect = svg.getBoundingClientRect();
|
|
2678
|
+
const t = transformRef.current;
|
|
2679
|
+
const x = (event.clientX - rect.left - t.x) / t.k;
|
|
2680
|
+
const y = (event.clientY - rect.top - t.y) / t.k;
|
|
2681
|
+
dragNodeRef.current.fx = x;
|
|
2682
|
+
dragNodeRef.current.fy = y;
|
|
2683
|
+
};
|
|
2684
|
+
const handleWindowUp = () => {
|
|
2685
|
+
if (!dragActiveRef.current) return;
|
|
2686
|
+
onDragEnd();
|
|
2687
|
+
dragNodeRef.current = null;
|
|
2688
|
+
dragActiveRef.current = false;
|
|
2689
|
+
};
|
|
2690
|
+
const handleWindowLeave = (event) => {
|
|
2691
|
+
if (event.relatedTarget === null) handleWindowUp();
|
|
2692
|
+
};
|
|
2693
|
+
window.addEventListener("mousemove", handleWindowMove);
|
|
2694
|
+
window.addEventListener("mouseup", handleWindowUp);
|
|
2695
|
+
window.addEventListener("mouseout", handleWindowLeave);
|
|
2696
|
+
window.addEventListener("blur", handleWindowUp);
|
|
2697
|
+
return () => {
|
|
2698
|
+
window.removeEventListener("mousemove", handleWindowMove);
|
|
2699
|
+
window.removeEventListener("mouseup", handleWindowUp);
|
|
2700
|
+
window.removeEventListener("mouseout", handleWindowLeave);
|
|
2701
|
+
window.removeEventListener("blur", handleWindowUp);
|
|
2702
|
+
};
|
|
2703
|
+
}, [enableDrag, svgRef, transformRef, dragActiveRef, dragNodeRef, onDragEnd]);
|
|
2704
|
+
}
|
|
2749
2705
|
var ForceDirectedGraph = forwardRef(
|
|
2750
2706
|
({
|
|
2751
2707
|
nodes: initialNodes,
|
|
@@ -2759,10 +2715,10 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2759
2715
|
onLinkClick,
|
|
2760
2716
|
selectedNodeId,
|
|
2761
2717
|
hoveredNodeId,
|
|
2762
|
-
defaultNodeColor =
|
|
2763
|
-
defaultNodeSize =
|
|
2764
|
-
defaultLinkColor =
|
|
2765
|
-
defaultLinkWidth =
|
|
2718
|
+
defaultNodeColor = DEFAULT_NODE_COLOR,
|
|
2719
|
+
defaultNodeSize = DEFAULT_NODE_SIZE,
|
|
2720
|
+
defaultLinkColor = DEFAULT_LINK_COLOR,
|
|
2721
|
+
defaultLinkWidth = DEFAULT_LINK_WIDTH,
|
|
2766
2722
|
showNodeLabels = true,
|
|
2767
2723
|
showLinkLabels = false,
|
|
2768
2724
|
className,
|
|
@@ -2785,7 +2741,7 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2785
2741
|
if (externalLayout && externalLayout !== layout) {
|
|
2786
2742
|
setLayout(externalLayout);
|
|
2787
2743
|
}
|
|
2788
|
-
}, [externalLayout]);
|
|
2744
|
+
}, [externalLayout, layout]);
|
|
2789
2745
|
const handleLayoutChange = useCallback(
|
|
2790
2746
|
(newLayout) => {
|
|
2791
2747
|
setLayout(newLayout);
|
|
@@ -2798,36 +2754,13 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2798
2754
|
}, [enableDrag]);
|
|
2799
2755
|
const nodes = React2__default.useMemo(() => {
|
|
2800
2756
|
if (!initialNodes || !initialNodes.length) return initialNodes;
|
|
2801
|
-
const
|
|
2802
|
-
|
|
2803
|
-
if (layout === "
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
y: Math.random() * height
|
|
2808
|
-
}));
|
|
2809
|
-
}
|
|
2810
|
-
if (layout === "circular") {
|
|
2811
|
-
const radius = Math.min(width, height) * 0.35;
|
|
2812
|
-
return initialNodes.map((n, i) => ({
|
|
2813
|
-
...n,
|
|
2814
|
-
x: centerX + Math.cos(2 * Math.PI * i / initialNodes.length) * radius,
|
|
2815
|
-
y: centerY + Math.sin(2 * Math.PI * i / initialNodes.length) * radius
|
|
2816
|
-
}));
|
|
2817
|
-
}
|
|
2818
|
-
if (layout === "hierarchical") {
|
|
2819
|
-
const cols = Math.ceil(Math.sqrt(initialNodes.length));
|
|
2820
|
-
const spacingX = width / (cols + 1);
|
|
2821
|
-
const spacingY = height / (Math.ceil(initialNodes.length / cols) + 1);
|
|
2822
|
-
return initialNodes.map((n, i) => ({
|
|
2823
|
-
...n,
|
|
2824
|
-
x: spacingX * (i % cols + 1),
|
|
2825
|
-
y: spacingY * (Math.floor(i / cols) + 1)
|
|
2826
|
-
}));
|
|
2827
|
-
}
|
|
2828
|
-
return initialNodes;
|
|
2757
|
+
const copy = initialNodes.map((n) => ({ ...n }));
|
|
2758
|
+
if (layout === "circular") applyCircularLayout(copy, width, height);
|
|
2759
|
+
else if (layout === "hierarchical")
|
|
2760
|
+
applyHierarchicalLayout(copy, width, height);
|
|
2761
|
+
else applyInitialForceLayout(copy, width, height);
|
|
2762
|
+
return copy;
|
|
2829
2763
|
}, [initialNodes, width, height, layout]);
|
|
2830
|
-
const links = initialLinks;
|
|
2831
2764
|
const restart = React2__default.useCallback(() => {
|
|
2832
2765
|
}, []);
|
|
2833
2766
|
const stop = React2__default.useCallback(() => {
|
|
@@ -2836,55 +2769,14 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2836
2769
|
}, []);
|
|
2837
2770
|
useEffect(() => {
|
|
2838
2771
|
if (!nodes || nodes.length === 0) return;
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
const radius = Math.min(width, height) * 0.35;
|
|
2844
|
-
nodes.forEach((node, i) => {
|
|
2845
|
-
const angle = 2 * Math.PI * i / nodes.length;
|
|
2846
|
-
node.fx = centerX + Math.cos(angle) * radius;
|
|
2847
|
-
node.fy = centerY + Math.sin(angle) * radius;
|
|
2848
|
-
});
|
|
2849
|
-
} else if (layout === "hierarchical") {
|
|
2850
|
-
const groups = /* @__PURE__ */ new Map();
|
|
2851
|
-
nodes.forEach((n) => {
|
|
2852
|
-
const key = n.packageGroup || n.group || "root";
|
|
2853
|
-
if (!groups.has(key)) groups.set(key, []);
|
|
2854
|
-
groups.get(key).push(n);
|
|
2855
|
-
});
|
|
2856
|
-
const groupArray = Array.from(groups.entries());
|
|
2857
|
-
const cols = Math.ceil(Math.sqrt(groupArray.length));
|
|
2858
|
-
const groupSpacingX = width * 0.8 / cols;
|
|
2859
|
-
const groupSpacingY = height * 0.8 / Math.ceil(groupArray.length / cols);
|
|
2860
|
-
groupArray.forEach(([groupKey, groupNodes], gi) => {
|
|
2861
|
-
const col = gi % cols;
|
|
2862
|
-
const row = Math.floor(gi / cols);
|
|
2863
|
-
const groupX = (col + 0.5) * groupSpacingX;
|
|
2864
|
-
const groupY = (row + 0.5) * groupSpacingY;
|
|
2865
|
-
if (groupKey.startsWith("pkg:") || groupKey === groupKey) {
|
|
2866
|
-
groupNodes.forEach((n, ni) => {
|
|
2867
|
-
const angle = 2 * Math.PI * ni / groupNodes.length;
|
|
2868
|
-
const r = Math.min(80, 20 + groupNodes.length * 8);
|
|
2869
|
-
n.fx = groupX + Math.cos(angle) * r;
|
|
2870
|
-
n.fy = groupY + Math.sin(angle) * r;
|
|
2871
|
-
});
|
|
2872
|
-
}
|
|
2873
|
-
});
|
|
2874
|
-
}
|
|
2875
|
-
try {
|
|
2876
|
-
restart();
|
|
2877
|
-
} catch (e) {
|
|
2878
|
-
}
|
|
2879
|
-
};
|
|
2880
|
-
applyLayout();
|
|
2772
|
+
if (layout === "circular") applyCircularLayout(nodes, width, height);
|
|
2773
|
+
else if (layout === "hierarchical")
|
|
2774
|
+
applyHierarchicalLayout(nodes, width, height);
|
|
2775
|
+
restart();
|
|
2881
2776
|
}, [layout, nodes, width, height, restart]);
|
|
2882
2777
|
useEffect(() => {
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
else setForcesEnabled(true);
|
|
2886
|
-
} catch (e) {
|
|
2887
|
-
}
|
|
2778
|
+
if (manualLayout || pinnedNodes.size > 0) setForcesEnabled(false);
|
|
2779
|
+
else setForcesEnabled(true);
|
|
2888
2780
|
}, [manualLayout, pinnedNodes, setForcesEnabled]);
|
|
2889
2781
|
useImperativeHandle(
|
|
2890
2782
|
ref,
|
|
@@ -2920,7 +2812,7 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2920
2812
|
let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;
|
|
2921
2813
|
nodes.forEach((node) => {
|
|
2922
2814
|
if (node.x !== void 0 && node.y !== void 0) {
|
|
2923
|
-
const size = node.size ||
|
|
2815
|
+
const size = node.size || DEFAULT_NODE_SIZE;
|
|
2924
2816
|
minX = Math.min(minX, node.x - size);
|
|
2925
2817
|
maxX = Math.max(maxX, node.x + size);
|
|
2926
2818
|
minY = Math.min(minY, node.y - size);
|
|
@@ -2928,22 +2820,17 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2928
2820
|
}
|
|
2929
2821
|
});
|
|
2930
2822
|
if (!isFinite(minX)) return;
|
|
2931
|
-
const padding = 40;
|
|
2932
|
-
const nodeWidth = maxX - minX;
|
|
2933
|
-
const nodeHeight = maxY - minY;
|
|
2934
2823
|
const scale = Math.min(
|
|
2935
|
-
(width -
|
|
2936
|
-
(height -
|
|
2824
|
+
(width - FIT_VIEW_PADDING * 2) / (maxX - minX),
|
|
2825
|
+
(height - FIT_VIEW_PADDING * 2) / (maxY - minY),
|
|
2937
2826
|
10
|
|
2938
2827
|
);
|
|
2939
|
-
const
|
|
2940
|
-
const
|
|
2941
|
-
const x = width / 2 - centerX * scale;
|
|
2942
|
-
const y = height / 2 - centerY * scale;
|
|
2828
|
+
const x = width / 2 - (minX + maxX) / 2 * scale;
|
|
2829
|
+
const y = height / 2 - (minY + maxY) / 2 * scale;
|
|
2943
2830
|
if (gRef.current && svgRef.current) {
|
|
2944
|
-
const svg =
|
|
2945
|
-
const newTransform =
|
|
2946
|
-
svg.transition().duration(
|
|
2831
|
+
const svg = d34.select(svgRef.current);
|
|
2832
|
+
const newTransform = d34.zoomIdentity.translate(x, y).scale(scale);
|
|
2833
|
+
svg.transition().duration(TRANSITION_DURATION_MS).call(d34.zoom().transform, newTransform);
|
|
2947
2834
|
setTransform(newTransform);
|
|
2948
2835
|
}
|
|
2949
2836
|
},
|
|
@@ -2951,57 +2838,56 @@ var ForceDirectedGraph = forwardRef(
|
|
|
2951
2838
|
setDragMode: (enabled) => {
|
|
2952
2839
|
internalDragEnabledRef.current = enabled;
|
|
2953
2840
|
},
|
|
2954
|
-
setLayout: (newLayout) =>
|
|
2955
|
-
handleLayoutChange(newLayout);
|
|
2956
|
-
},
|
|
2841
|
+
setLayout: (newLayout) => handleLayoutChange(newLayout),
|
|
2957
2842
|
getLayout: () => layout
|
|
2958
2843
|
}),
|
|
2959
|
-
[
|
|
2844
|
+
[
|
|
2845
|
+
nodes,
|
|
2846
|
+
pinnedNodes,
|
|
2847
|
+
restart,
|
|
2848
|
+
width,
|
|
2849
|
+
height,
|
|
2850
|
+
layout,
|
|
2851
|
+
handleLayoutChange,
|
|
2852
|
+
setForcesEnabled
|
|
2853
|
+
]
|
|
2960
2854
|
);
|
|
2961
2855
|
useEffect(() => {
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
onManualLayoutChange(manualLayout);
|
|
2965
|
-
} catch (e) {
|
|
2966
|
-
}
|
|
2856
|
+
if (typeof onManualLayoutChange === "function")
|
|
2857
|
+
onManualLayoutChange(manualLayout);
|
|
2967
2858
|
}, [manualLayout, onManualLayoutChange]);
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
};
|
|
2981
|
-
}, [enableZoom]);
|
|
2859
|
+
useGraphZoom(svgRef, gRef, enableZoom, setTransform, transformRef);
|
|
2860
|
+
useWindowDrag(
|
|
2861
|
+
enableDrag,
|
|
2862
|
+
svgRef,
|
|
2863
|
+
transformRef,
|
|
2864
|
+
dragActiveRef,
|
|
2865
|
+
dragNodeRef,
|
|
2866
|
+
() => {
|
|
2867
|
+
setForcesEnabled(true);
|
|
2868
|
+
restart();
|
|
2869
|
+
}
|
|
2870
|
+
);
|
|
2982
2871
|
useEffect(() => {
|
|
2983
2872
|
if (!gRef.current) return;
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
|
|
2988
|
-
|
|
2989
|
-
|
|
2990
|
-
|
|
2991
|
-
|
|
2992
|
-
|
|
2993
|
-
|
|
2994
|
-
|
|
2995
|
-
|
|
2996
|
-
|
|
2997
|
-
|
|
2998
|
-
|
|
2999
|
-
|
|
3000
|
-
|
|
3001
|
-
|
|
3002
|
-
} catch (e) {
|
|
3003
|
-
}
|
|
3004
|
-
}, [nodes, links]);
|
|
2873
|
+
const g = d34.select(gRef.current);
|
|
2874
|
+
g.selectAll("g.node").each(function() {
|
|
2875
|
+
const datum = d34.select(this).datum();
|
|
2876
|
+
if (!datum) return;
|
|
2877
|
+
d34.select(this).attr(
|
|
2878
|
+
"transform",
|
|
2879
|
+
`translate(${datum.x || 0},${datum.y || 0})`
|
|
2880
|
+
);
|
|
2881
|
+
});
|
|
2882
|
+
g.selectAll("line").each(function() {
|
|
2883
|
+
const l = d34.select(this).datum();
|
|
2884
|
+
if (!l) return;
|
|
2885
|
+
const s = typeof l.source === "object" ? l.source : nodes.find((n) => n.id === l.source) || l.source;
|
|
2886
|
+
const t = typeof l.target === "object" ? l.target : nodes.find((n) => n.id === l.target) || l.target;
|
|
2887
|
+
if (!s || !t) return;
|
|
2888
|
+
d34.select(this).attr("x1", s.x).attr("y1", s.y).attr("x2", t.x).attr("y2", t.y);
|
|
2889
|
+
});
|
|
2890
|
+
}, [nodes, initialLinks]);
|
|
3005
2891
|
const handleDragStart = useCallback(
|
|
3006
2892
|
(event, node) => {
|
|
3007
2893
|
if (!enableDrag) return;
|
|
@@ -3012,103 +2898,50 @@ var ForceDirectedGraph = forwardRef(
|
|
|
3012
2898
|
node.fx = node.x;
|
|
3013
2899
|
node.fy = node.y;
|
|
3014
2900
|
setPinnedNodes((prev) => /* @__PURE__ */ new Set([...prev, node.id]));
|
|
3015
|
-
|
|
3016
|
-
stop();
|
|
3017
|
-
} catch (e) {
|
|
3018
|
-
}
|
|
2901
|
+
stop();
|
|
3019
2902
|
},
|
|
3020
|
-
[enableDrag,
|
|
2903
|
+
[enableDrag, stop]
|
|
3021
2904
|
);
|
|
3022
|
-
useEffect(() => {
|
|
3023
|
-
if (!enableDrag) return;
|
|
3024
|
-
const handleWindowMove = (event) => {
|
|
3025
|
-
if (!dragActiveRef.current || !dragNodeRef.current) return;
|
|
3026
|
-
const svg = svgRef.current;
|
|
3027
|
-
if (!svg) return;
|
|
3028
|
-
const rect = svg.getBoundingClientRect();
|
|
3029
|
-
const t = transformRef.current;
|
|
3030
|
-
const x = (event.clientX - rect.left - t.x) / t.k;
|
|
3031
|
-
const y = (event.clientY - rect.top - t.y) / t.k;
|
|
3032
|
-
dragNodeRef.current.fx = x;
|
|
3033
|
-
dragNodeRef.current.fy = y;
|
|
3034
|
-
};
|
|
3035
|
-
const handleWindowUp = () => {
|
|
3036
|
-
if (!dragActiveRef.current) return;
|
|
3037
|
-
try {
|
|
3038
|
-
setForcesEnabled(true);
|
|
3039
|
-
restart();
|
|
3040
|
-
} catch (e) {
|
|
3041
|
-
}
|
|
3042
|
-
dragNodeRef.current = null;
|
|
3043
|
-
dragActiveRef.current = false;
|
|
3044
|
-
};
|
|
3045
|
-
const handleWindowLeave = (event) => {
|
|
3046
|
-
if (event.relatedTarget === null) handleWindowUp();
|
|
3047
|
-
};
|
|
3048
|
-
window.addEventListener("mousemove", handleWindowMove);
|
|
3049
|
-
window.addEventListener("mouseup", handleWindowUp);
|
|
3050
|
-
window.addEventListener("mouseout", handleWindowLeave);
|
|
3051
|
-
window.addEventListener("blur", handleWindowUp);
|
|
3052
|
-
return () => {
|
|
3053
|
-
window.removeEventListener("mousemove", handleWindowMove);
|
|
3054
|
-
window.removeEventListener("mouseup", handleWindowUp);
|
|
3055
|
-
window.removeEventListener("mouseout", handleWindowLeave);
|
|
3056
|
-
window.removeEventListener("blur", handleWindowUp);
|
|
3057
|
-
};
|
|
3058
|
-
}, [enableDrag]);
|
|
3059
2905
|
useEffect(() => {
|
|
3060
2906
|
if (!gRef.current || !enableDrag) return;
|
|
3061
|
-
const g =
|
|
3062
|
-
const dragBehavior =
|
|
3063
|
-
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
|
|
3072
|
-
|
|
3073
|
-
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
setPinnedNodes((prev) => /* @__PURE__ */ new Set([...prev, node.id]));
|
|
3077
|
-
} catch (e) {
|
|
3078
|
-
}
|
|
3079
|
-
}).on("drag", function(event) {
|
|
2907
|
+
const g = d34.select(gRef.current);
|
|
2908
|
+
const dragBehavior = d34.drag().on("start", (event) => {
|
|
2909
|
+
const target = event.sourceEvent && event.sourceEvent.target || event.target;
|
|
2910
|
+
const grp = target.closest?.("g.node");
|
|
2911
|
+
const id = grp?.getAttribute("data-id");
|
|
2912
|
+
if (!id || !internalDragEnabledRef.current) return;
|
|
2913
|
+
const node = nodes.find((n) => n.id === id);
|
|
2914
|
+
if (!node) return;
|
|
2915
|
+
if (!event.active) restart();
|
|
2916
|
+
dragActiveRef.current = true;
|
|
2917
|
+
dragNodeRef.current = node;
|
|
2918
|
+
node.fx = node.x;
|
|
2919
|
+
node.fy = node.y;
|
|
2920
|
+
setPinnedNodes((prev) => /* @__PURE__ */ new Set([...prev, node.id]));
|
|
2921
|
+
}).on("drag", (event) => {
|
|
3080
2922
|
if (!dragActiveRef.current || !dragNodeRef.current) return;
|
|
3081
2923
|
const svg = svgRef.current;
|
|
3082
2924
|
if (!svg) return;
|
|
3083
2925
|
const rect = svg.getBoundingClientRect();
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
try {
|
|
3090
|
-
setForcesEnabled(true);
|
|
3091
|
-
restart();
|
|
3092
|
-
} catch (e) {
|
|
3093
|
-
}
|
|
2926
|
+
dragNodeRef.current.fx = (event.sourceEvent.clientX - rect.left - transform.x) / transform.k;
|
|
2927
|
+
dragNodeRef.current.fy = (event.sourceEvent.clientY - rect.top - transform.y) / transform.k;
|
|
2928
|
+
}).on("end", () => {
|
|
2929
|
+
setForcesEnabled(true);
|
|
2930
|
+
restart();
|
|
3094
2931
|
});
|
|
3095
|
-
|
|
3096
|
-
g.selectAll("g.node").call(dragBehavior);
|
|
3097
|
-
} catch (e) {
|
|
3098
|
-
}
|
|
2932
|
+
g.selectAll("g.node").call(dragBehavior);
|
|
3099
2933
|
return () => {
|
|
3100
|
-
|
|
3101
|
-
g.selectAll("g.node").on(".drag", null);
|
|
3102
|
-
} catch (e) {
|
|
3103
|
-
}
|
|
2934
|
+
g.selectAll("g.node").on(".drag", null);
|
|
3104
2935
|
};
|
|
3105
|
-
}, [
|
|
3106
|
-
|
|
3107
|
-
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
2936
|
+
}, [
|
|
2937
|
+
gRef,
|
|
2938
|
+
enableDrag,
|
|
2939
|
+
nodes,
|
|
2940
|
+
transform,
|
|
2941
|
+
restart,
|
|
2942
|
+
setForcesEnabled,
|
|
2943
|
+
internalDragEnabledRef
|
|
2944
|
+
]);
|
|
3112
2945
|
const handleNodeDoubleClick = useCallback(
|
|
3113
2946
|
(event, node) => {
|
|
3114
2947
|
event.stopPropagation();
|
|
@@ -3130,29 +2963,6 @@ var ForceDirectedGraph = forwardRef(
|
|
|
3130
2963
|
},
|
|
3131
2964
|
[enableDrag, restart]
|
|
3132
2965
|
);
|
|
3133
|
-
const handleCanvasDoubleClick = useCallback(() => {
|
|
3134
|
-
nodes.forEach((node) => {
|
|
3135
|
-
node.fx = null;
|
|
3136
|
-
node.fy = null;
|
|
3137
|
-
});
|
|
3138
|
-
setPinnedNodes(/* @__PURE__ */ new Set());
|
|
3139
|
-
restart();
|
|
3140
|
-
}, [nodes, restart]);
|
|
3141
|
-
const handleNodeMouseEnter = useCallback(
|
|
3142
|
-
(node) => {
|
|
3143
|
-
onNodeHover?.(node);
|
|
3144
|
-
},
|
|
3145
|
-
[onNodeHover]
|
|
3146
|
-
);
|
|
3147
|
-
const handleNodeMouseLeave = useCallback(() => {
|
|
3148
|
-
onNodeHover?.(null);
|
|
3149
|
-
}, [onNodeHover]);
|
|
3150
|
-
const handleLinkClick = useCallback(
|
|
3151
|
-
(link) => {
|
|
3152
|
-
onLinkClick?.(link);
|
|
3153
|
-
},
|
|
3154
|
-
[onLinkClick]
|
|
3155
|
-
);
|
|
3156
2966
|
return /* @__PURE__ */ jsxs(
|
|
3157
2967
|
"svg",
|
|
3158
2968
|
{
|
|
@@ -3160,7 +2970,14 @@ var ForceDirectedGraph = forwardRef(
|
|
|
3160
2970
|
width,
|
|
3161
2971
|
height,
|
|
3162
2972
|
className: cn("bg-white dark:bg-gray-900", className),
|
|
3163
|
-
onDoubleClick:
|
|
2973
|
+
onDoubleClick: () => {
|
|
2974
|
+
nodes.forEach((n) => {
|
|
2975
|
+
n.fx = null;
|
|
2976
|
+
n.fy = null;
|
|
2977
|
+
});
|
|
2978
|
+
setPinnedNodes(/* @__PURE__ */ new Set());
|
|
2979
|
+
restart();
|
|
2980
|
+
},
|
|
3164
2981
|
children: [
|
|
3165
2982
|
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
|
|
3166
2983
|
"marker",
|
|
@@ -3176,11 +2993,11 @@ var ForceDirectedGraph = forwardRef(
|
|
|
3176
2993
|
}
|
|
3177
2994
|
) }),
|
|
3178
2995
|
/* @__PURE__ */ jsxs("g", { ref: gRef, children: [
|
|
3179
|
-
|
|
2996
|
+
initialLinks.map((link, i) => /* @__PURE__ */ jsx(
|
|
3180
2997
|
LinkItem_default,
|
|
3181
2998
|
{
|
|
3182
2999
|
link,
|
|
3183
|
-
onClick:
|
|
3000
|
+
onClick: onLinkClick,
|
|
3184
3001
|
defaultWidth: defaultLinkWidth,
|
|
3185
3002
|
showLabel: showLinkLabels,
|
|
3186
3003
|
nodes
|
|
@@ -3197,41 +3014,15 @@ var ForceDirectedGraph = forwardRef(
|
|
|
3197
3014
|
defaultNodeSize,
|
|
3198
3015
|
defaultNodeColor,
|
|
3199
3016
|
showLabel: showNodeLabels,
|
|
3200
|
-
onClick:
|
|
3017
|
+
onClick: onNodeClick,
|
|
3201
3018
|
onDoubleClick: handleNodeDoubleClick,
|
|
3202
|
-
onMouseEnter:
|
|
3203
|
-
onMouseLeave:
|
|
3019
|
+
onMouseEnter: (n) => onNodeHover?.(n),
|
|
3020
|
+
onMouseLeave: () => onNodeHover?.(null),
|
|
3204
3021
|
onMouseDown: handleDragStart
|
|
3205
3022
|
},
|
|
3206
3023
|
node.id
|
|
3207
3024
|
)),
|
|
3208
|
-
|
|
3209
|
-
/* @__PURE__ */ jsx(
|
|
3210
|
-
"circle",
|
|
3211
|
-
{
|
|
3212
|
-
cx: b.x,
|
|
3213
|
-
cy: b.y,
|
|
3214
|
-
r: b.r,
|
|
3215
|
-
fill: "rgba(148,163,184,0.06)",
|
|
3216
|
-
stroke: "#475569",
|
|
3217
|
-
strokeWidth: 2,
|
|
3218
|
-
strokeDasharray: "6 6",
|
|
3219
|
-
opacity: 0.9
|
|
3220
|
-
}
|
|
3221
|
-
),
|
|
3222
|
-
/* @__PURE__ */ jsx(
|
|
3223
|
-
"text",
|
|
3224
|
-
{
|
|
3225
|
-
x: b.x,
|
|
3226
|
-
y: Math.max(12, b.y - b.r + 14),
|
|
3227
|
-
fill: "#475569",
|
|
3228
|
-
fontSize: 11,
|
|
3229
|
-
textAnchor: "middle",
|
|
3230
|
-
pointerEvents: "none",
|
|
3231
|
-
children: pid.replace(/^pkg:/, "")
|
|
3232
|
-
}
|
|
3233
|
-
)
|
|
3234
|
-
] }, pid)) })
|
|
3025
|
+
/* @__PURE__ */ jsx(PackageBoundaries, { packageBounds: packageBounds || {} })
|
|
3235
3026
|
] })
|
|
3236
3027
|
]
|
|
3237
3028
|
}
|
|
@@ -3375,6 +3166,6 @@ var GraphControls = ({
|
|
|
3375
3166
|
};
|
|
3376
3167
|
GraphControls.displayName = "GraphControls";
|
|
3377
3168
|
|
|
3378
|
-
export { AlertCircleIcon, AlertTriangleIcon, ArrowRightIcon, Badge, BrainIcon, Breadcrumb, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartIcon, Checkbox, ClockIcon, CodeBlock,
|
|
3169
|
+
export { AlertCircleIcon, AlertTriangleIcon, ArrowRightIcon, Badge, BrainIcon, Breadcrumb, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ChartIcon, Checkbox, ClockIcon, CodeBlock, Container, EmptyState, ErrorDisplay, FeedbackWidget, FileIcon, ForceDirectedGraph, GlassCard, GlassCardContent, GlassCardHeader, GraphControls, Grid, HammerIcon, InfoIcon, InlineCode, Input, Label, LoadingOverlay, LoadingSpinner, Modal, PlatformShell, PlayIcon, RadioGroup, RefreshCwIcon, RobotIcon, RocketIcon, SaveIcon, ScoreBar, ScoreCard, ScoreCircle, Select, Separator, SettingsIcon, ShieldCheckIcon, ShieldIcon, Stack, Switch, TargetIcon, TerminalIcon, Textarea, ThemeProvider, TrashIcon, TrendingUpIcon, UploadIcon, WalletIcon, ZapIcon, badgeVariants, buttonVariants, chartColors, cn, domainColors, formatCompactNumber, formatDate, formatDateTime, formatDecimal, formatDuration, formatFileSize, formatMetric, formatNumber, formatPercentage, formatRange, formatRelativeTime, getDomainColor, getScoreRating, getSeverityColor, hexToRgba, scoreBg, scoreColor, scoreGlow, scoreLabel, severityColors, useD3, useD3WithResize, useDebounce, useDrag, useForceSimulation, useTheme };
|
|
3379
3170
|
//# sourceMappingURL=index.js.map
|
|
3380
3171
|
//# sourceMappingURL=index.js.map
|