@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/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 d33 from 'd3';
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
- function RocketIcon({
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__ */ jsxs(
254
+ }) => {
255
+ return /* @__PURE__ */ jsx(
339
256
  "svg",
340
257
  {
341
- viewBox: "0 0 24 24",
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 FileIcon({
357
- className = "w-6 h-6",
358
- ...props
359
- }) {
267
+ };
268
+ function AlertCircleIcon(props) {
360
269
  return /* @__PURE__ */ jsxs(
361
- "svg",
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("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" }),
374
- /* @__PURE__ */ jsx("polyline", { points: "14 2 14 8 20 8" })
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 ShieldIcon({
380
- className = "w-6 h-6",
381
- ...props
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
- xmlns: "http://www.w3.org/2000/svg",
395
- children: /* @__PURE__ */ jsx("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" })
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 TrendingUpIcon({
400
- className = "w-6 h-6",
401
- ...props
402
- }) {
300
+ function ArrowRightIcon(props) {
403
301
  return /* @__PURE__ */ jsxs(
404
- "svg",
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("polyline", { points: "23 6 13.5 15.5 8.5 10.5 1 18" }),
417
- /* @__PURE__ */ jsx("polyline", { points: "17 6 23 6 23 12" })
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 TrashIcon({
423
- className = "w-6 h-6",
424
- ...props
425
- }) {
315
+ function BrainIcon(props) {
426
316
  return /* @__PURE__ */ jsxs(
427
- "svg",
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("polyline", { points: "3 6 5 6 21 6" }),
440
- /* @__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" })
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 PlayIcon({
446
- className = "w-6 h-6",
447
- ...props
448
- }) {
449
- return /* @__PURE__ */ jsx(
450
- "svg",
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
- xmlns: "http://www.w3.org/2000/svg",
461
- children: /* @__PURE__ */ jsx("polygon", { points: "5 3 19 12 5 21 5 3" })
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 UploadIcon({
466
- className = "w-6 h-6",
467
- ...props
468
- }) {
353
+ function FileIcon(props) {
469
354
  return /* @__PURE__ */ jsxs(
470
- "svg",
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: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v4" }),
483
- /* @__PURE__ */ jsx("polyline", { points: "17 8 12 3 7 8" }),
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 AlertCircleIcon({
490
- className = "w-6 h-6",
491
- ...props
492
- }) {
368
+ function HammerIcon(props) {
493
369
  return /* @__PURE__ */ jsxs(
494
- "svg",
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("circle", { cx: "12", cy: "12", r: "10" }),
507
- /* @__PURE__ */ jsx("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
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
- "svg",
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 BrainIcon({
538
- className = "w-6 h-6",
539
- ...props
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
- xmlns: "http://www.w3.org/2000/svg",
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 TerminalIcon({
561
- className = "w-6 h-6",
562
- ...props
563
- }) {
411
+ function RefreshCwIcon(props) {
564
412
  return /* @__PURE__ */ jsxs(
565
- "svg",
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("polyline", { points: "4 17 10 11 4 5" }),
578
- /* @__PURE__ */ jsx("line", { x1: "12", y1: "19", x2: "20", y2: "19" })
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 CommandLineIcon(props) {
584
- return /* @__PURE__ */ jsx(TerminalIcon, { ...props });
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 SettingsIcon({
587
- className = "w-6 h-6",
588
- ...props
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
- "svg",
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: "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" }),
604
- /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" })
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 SaveIcon({
610
- className = "w-6 h-6",
611
- ...props
612
- }) {
473
+ function SettingsIcon(props) {
613
474
  return /* @__PURE__ */ jsxs(
614
- "svg",
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: "M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z" }),
627
- /* @__PURE__ */ jsx("polyline", { points: "17 21 17 13 7 13 7 21" }),
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 RefreshCwIcon({
634
- className = "w-6 h-6",
635
- ...props
636
- }) {
488
+ function ShieldCheckIcon(props) {
637
489
  return /* @__PURE__ */ jsxs(
638
- "svg",
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: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8" }),
651
- /* @__PURE__ */ jsx("path", { d: "M21 3v5h-5" }),
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 WalletIcon({
659
- className = "w-6 h-6",
660
- ...props
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 ClockIcon({
682
- className = "w-6 h-6",
683
- ...props
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
- "svg",
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("circle", { cx: "12", cy: "12", r: "10" }),
698
- /* @__PURE__ */ jsx("polyline", { points: "12 6 12 12 16 14" })
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 ZapIcon({
704
- className = "w-6 h-6",
705
- ...props
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: /* @__PURE__ */ jsx("polygon", { points: "13 2 3 14 12 14 11 22 21 10 12 10 13 2" })
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 HammerIcon({
723
- className = "w-6 h-6",
724
- ...props
725
- }) {
559
+ function TrendingUpIcon(props) {
726
560
  return /* @__PURE__ */ jsxs(
727
- "svg",
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("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" }),
739
- /* @__PURE__ */ jsx("path", { d: "M13 18l6 6" })
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 ArrowRightIcon({
745
- className = "w-6 h-6",
746
- ...props
747
- }) {
574
+ function UploadIcon(props) {
748
575
  return /* @__PURE__ */ jsxs(
749
- "svg",
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("line", { x1: "5", y1: "12", x2: "19", y2: "12" }),
761
- /* @__PURE__ */ jsx("polyline", { points: "12 5 19 12 12 19" })
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 ShieldCheckIcon({
767
- className = "w-6 h-6",
768
- ...props
769
- }) {
590
+ function WalletIcon(props) {
770
591
  return /* @__PURE__ */ jsxs(
771
- "svg",
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: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }),
783
- /* @__PURE__ */ jsx("path", { d: "M9 12l2 2 4-4" })
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 AlertTriangleIcon({
789
- className = "w-6 h-6",
790
- ...props
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 = d33.select(ref.current);
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 = d33.select(ref.current);
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 = d33.forceSimulation(
2168
+ const simulation = d34.forceSimulation(
2362
2169
  nodesCopy
2363
2170
  );
2364
2171
  try {
2365
- const linkForce = d33.forceLink(
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", d33.forceLink(linksCopy));
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
- d33.forceManyBody().strength(chargeStrength)
2188
+ d34.forceManyBody().strength(chargeStrength)
2382
2189
  );
2383
2190
  simulation.force(
2384
2191
  "center",
2385
- d33.forceCenter(width / 2, height / 2).strength(centerStrength)
2192
+ d34.forceCenter(width / 2, height / 2).strength(centerStrength)
2386
2193
  );
2387
- const collide = d33.forceCollide().radius((d) => {
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
- d33.forceX(width / 2).strength(Math.max(0.02, centerStrength * 0.5))
2201
+ d34.forceX(width / 2).strength(Math.max(0.02, centerStrength * 0.5))
2395
2202
  );
2396
2203
  simulation.force(
2397
2204
  "y",
2398
- d33.forceY(height / 2).strength(Math.max(0.02, centerStrength * 0.5))
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 = "#69b3a2",
2763
- defaultNodeSize = 10,
2764
- defaultLinkColor = "#999",
2765
- defaultLinkWidth = 1,
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 centerX = width / 2;
2802
- const centerY = height / 2;
2803
- if (layout === "force") {
2804
- return initialNodes.map((n) => ({
2805
- ...n,
2806
- x: Math.random() * width,
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
- const applyLayout = () => {
2840
- const centerX = width / 2;
2841
- const centerY = height / 2;
2842
- if (layout === "circular") {
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
- try {
2884
- if (manualLayout || pinnedNodes.size > 0) setForcesEnabled(false);
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 || 10;
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 - padding * 2) / nodeWidth,
2936
- (height - padding * 2) / nodeHeight,
2824
+ (width - FIT_VIEW_PADDING * 2) / (maxX - minX),
2825
+ (height - FIT_VIEW_PADDING * 2) / (maxY - minY),
2937
2826
  10
2938
2827
  );
2939
- const centerX = (minX + maxX) / 2;
2940
- const centerY = (minY + maxY) / 2;
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 = d33.select(svgRef.current);
2945
- const newTransform = d33.zoomIdentity.translate(x, y).scale(scale);
2946
- svg.transition().duration(300).call(d33.zoom().transform, newTransform);
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
- [nodes, pinnedNodes, restart, width, height, layout, handleLayoutChange]
2844
+ [
2845
+ nodes,
2846
+ pinnedNodes,
2847
+ restart,
2848
+ width,
2849
+ height,
2850
+ layout,
2851
+ handleLayoutChange,
2852
+ setForcesEnabled
2853
+ ]
2960
2854
  );
2961
2855
  useEffect(() => {
2962
- try {
2963
- if (typeof onManualLayoutChange === "function")
2964
- onManualLayoutChange(manualLayout);
2965
- } catch (e) {
2966
- }
2856
+ if (typeof onManualLayoutChange === "function")
2857
+ onManualLayoutChange(manualLayout);
2967
2858
  }, [manualLayout, onManualLayoutChange]);
2968
- useEffect(() => {
2969
- if (!enableZoom || !svgRef.current || !gRef.current) return;
2970
- const svg = d33.select(svgRef.current);
2971
- const g = d33.select(gRef.current);
2972
- const zoom2 = d33.zoom().scaleExtent([0.1, 10]).on("zoom", (event) => {
2973
- g.attr("transform", event.transform);
2974
- transformRef.current = event.transform;
2975
- setTransform(event.transform);
2976
- });
2977
- svg.call(zoom2);
2978
- return () => {
2979
- svg.on(".zoom", null);
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
- try {
2985
- const g = d33.select(gRef.current);
2986
- g.selectAll("g.node").each(function() {
2987
- const datum = d33.select(this).datum();
2988
- if (!datum) return;
2989
- d33.select(this).attr(
2990
- "transform",
2991
- `translate(${datum.x || 0},${datum.y || 0})`
2992
- );
2993
- });
2994
- g.selectAll("line").each(function() {
2995
- const l = d33.select(this).datum();
2996
- if (!l) return;
2997
- const s = typeof l.source === "object" ? l.source : nodes.find((n) => n.id === l.source) || l.source;
2998
- const t = typeof l.target === "object" ? l.target : nodes.find((n) => n.id === l.target) || l.target;
2999
- if (!s || !t) return;
3000
- d33.select(this).attr("x1", s.x).attr("y1", s.y).attr("x2", t.x).attr("y2", t.y);
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
- try {
3016
- stop();
3017
- } catch (e) {
3018
- }
2901
+ stop();
3019
2902
  },
3020
- [enableDrag, restart]
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 = d33.select(gRef.current);
3062
- const dragBehavior = d33.drag().on("start", function(event) {
3063
- try {
3064
- const target = event.sourceEvent && event.sourceEvent.target || event.target;
3065
- const grp = target.closest?.("g.node");
3066
- const id = grp?.getAttribute("data-id");
3067
- if (!id) return;
3068
- const node = nodes.find((n) => n.id === id);
3069
- if (!node) return;
3070
- if (!internalDragEnabledRef.current) return;
3071
- if (!event.active) restart();
3072
- dragActiveRef.current = true;
3073
- dragNodeRef.current = node;
3074
- node.fx = node.x;
3075
- node.fy = node.y;
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
- const x = (event.sourceEvent.clientX - rect.left - transform.x) / transform.k;
3085
- const y = (event.sourceEvent.clientY - rect.top - transform.y) / transform.k;
3086
- dragNodeRef.current.fx = x;
3087
- dragNodeRef.current.fy = y;
3088
- }).on("end", function() {
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
- try {
3096
- g.selectAll("g.node").call(dragBehavior);
3097
- } catch (e) {
3098
- }
2932
+ g.selectAll("g.node").call(dragBehavior);
3099
2933
  return () => {
3100
- try {
3101
- g.selectAll("g.node").on(".drag", null);
3102
- } catch (e) {
3103
- }
2934
+ g.selectAll("g.node").on(".drag", null);
3104
2935
  };
3105
- }, [gRef, enableDrag, nodes, transform, restart]);
3106
- const handleNodeClick = useCallback(
3107
- (node) => {
3108
- onNodeClick?.(node);
3109
- },
3110
- [onNodeClick]
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: handleCanvasDoubleClick,
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
- links.map((link, i) => /* @__PURE__ */ jsx(
2996
+ initialLinks.map((link, i) => /* @__PURE__ */ jsx(
3180
2997
  LinkItem_default,
3181
2998
  {
3182
2999
  link,
3183
- onClick: handleLinkClick,
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: handleNodeClick,
3017
+ onClick: onNodeClick,
3201
3018
  onDoubleClick: handleNodeDoubleClick,
3202
- onMouseEnter: handleNodeMouseEnter,
3203
- onMouseLeave: handleNodeMouseLeave,
3019
+ onMouseEnter: (n) => onNodeHover?.(n),
3020
+ onMouseLeave: () => onNodeHover?.(null),
3204
3021
  onMouseDown: handleDragStart
3205
3022
  },
3206
3023
  node.id
3207
3024
  )),
3208
- packageBounds && Object.keys(packageBounds).length > 0 && /* @__PURE__ */ jsx("g", { className: "package-boundaries", pointerEvents: "none", children: Object.entries(packageBounds).map(([pid, b]) => /* @__PURE__ */ jsxs("g", { children: [
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, CommandLineIcon, 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 };
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