@industry-theme/repository-composition-panels 0.2.26 → 0.2.28

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.
@@ -132,29 +132,45 @@ const createLucideIcon$1 = (iconName, iconNode) => {
132
132
  * This source code is licensed under the ISC license.
133
133
  * See the LICENSE file in the root directory of this source tree.
134
134
  */
135
- const __iconNode$qh = [
135
+ const __iconNode$ql = [
136
+ [
137
+ "path",
138
+ {
139
+ d: "M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",
140
+ key: "169zse"
141
+ }
142
+ ]
143
+ ];
144
+ const Activity$1 = createLucideIcon$1("activity", __iconNode$ql);
145
+ /**
146
+ * @license lucide-react v0.552.0 - ISC
147
+ *
148
+ * This source code is licensed under the ISC license.
149
+ * See the LICENSE file in the root directory of this source tree.
150
+ */
151
+ const __iconNode$qk = [
136
152
  ["path", { d: "M5 12h14", key: "1ays0h" }],
137
153
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
138
154
  ];
139
- const ArrowRight$1 = createLucideIcon$1("arrow-right", __iconNode$qh);
155
+ const ArrowRight$1 = createLucideIcon$1("arrow-right", __iconNode$qk);
140
156
  /**
141
157
  * @license lucide-react v0.552.0 - ISC
142
158
  *
143
159
  * This source code is licensed under the ISC license.
144
160
  * See the LICENSE file in the root directory of this source tree.
145
161
  */
146
- const __iconNode$qg = [
162
+ const __iconNode$qj = [
147
163
  ["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
148
164
  ["path", { d: "M12 19V5", key: "x0mq9r" }]
149
165
  ];
150
- const ArrowUp$1 = createLucideIcon$1("arrow-up", __iconNode$qg);
166
+ const ArrowUp$1 = createLucideIcon$1("arrow-up", __iconNode$qj);
151
167
  /**
152
168
  * @license lucide-react v0.552.0 - ISC
153
169
  *
154
170
  * This source code is licensed under the ISC license.
155
171
  * See the LICENSE file in the root directory of this source tree.
156
172
  */
157
- const __iconNode$qf = [
173
+ const __iconNode$qi = [
158
174
  [
159
175
  "path",
160
176
  {
@@ -165,101 +181,120 @@ const __iconNode$qf = [
165
181
  ["path", { d: "m3.3 7 8.7 5 8.7-5", key: "g66t2b" }],
166
182
  ["path", { d: "M12 22V12", key: "d0xqtd" }]
167
183
  ];
168
- const Box$1 = createLucideIcon$1("box", __iconNode$qf);
184
+ const Box$1 = createLucideIcon$1("box", __iconNode$qi);
169
185
  /**
170
186
  * @license lucide-react v0.552.0 - ISC
171
187
  *
172
188
  * This source code is licensed under the ISC license.
173
189
  * See the LICENSE file in the root directory of this source tree.
174
190
  */
175
- const __iconNode$qe = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
176
- const Check$1 = createLucideIcon$1("check", __iconNode$qe);
191
+ const __iconNode$qh = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
192
+ const Check$1 = createLucideIcon$1("check", __iconNode$qh);
177
193
  /**
178
194
  * @license lucide-react v0.552.0 - ISC
179
195
  *
180
196
  * This source code is licensed under the ISC license.
181
197
  * See the LICENSE file in the root directory of this source tree.
182
198
  */
183
- const __iconNode$qd = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
184
- const ChevronDown$1 = createLucideIcon$1("chevron-down", __iconNode$qd);
199
+ const __iconNode$qg = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
200
+ const ChevronDown$1 = createLucideIcon$1("chevron-down", __iconNode$qg);
185
201
  /**
186
202
  * @license lucide-react v0.552.0 - ISC
187
203
  *
188
204
  * This source code is licensed under the ISC license.
189
205
  * See the LICENSE file in the root directory of this source tree.
190
206
  */
191
- const __iconNode$qc = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
192
- const ChevronLeft$1 = createLucideIcon$1("chevron-left", __iconNode$qc);
207
+ const __iconNode$qf = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
208
+ const ChevronLeft$1 = createLucideIcon$1("chevron-left", __iconNode$qf);
193
209
  /**
194
210
  * @license lucide-react v0.552.0 - ISC
195
211
  *
196
212
  * This source code is licensed under the ISC license.
197
213
  * See the LICENSE file in the root directory of this source tree.
198
214
  */
199
- const __iconNode$qb = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
200
- const ChevronRight$1 = createLucideIcon$1("chevron-right", __iconNode$qb);
215
+ const __iconNode$qe = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
216
+ const ChevronRight$1 = createLucideIcon$1("chevron-right", __iconNode$qe);
201
217
  /**
202
218
  * @license lucide-react v0.552.0 - ISC
203
219
  *
204
220
  * This source code is licensed under the ISC license.
205
221
  * See the LICENSE file in the root directory of this source tree.
206
222
  */
207
- const __iconNode$qa = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
208
- const ChevronUp$1 = createLucideIcon$1("chevron-up", __iconNode$qa);
223
+ const __iconNode$qd = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
224
+ const ChevronUp$1 = createLucideIcon$1("chevron-up", __iconNode$qd);
209
225
  /**
210
226
  * @license lucide-react v0.552.0 - ISC
211
227
  *
212
228
  * This source code is licensed under the ISC license.
213
229
  * See the LICENSE file in the root directory of this source tree.
214
230
  */
215
- const __iconNode$q9 = [
231
+ const __iconNode$qc = [
216
232
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
217
233
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
218
234
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
219
235
  ];
220
- const CircleAlert$1 = createLucideIcon$1("circle-alert", __iconNode$q9);
236
+ const CircleAlert$1 = createLucideIcon$1("circle-alert", __iconNode$qc);
221
237
  /**
222
238
  * @license lucide-react v0.552.0 - ISC
223
239
  *
224
240
  * This source code is licensed under the ISC license.
225
241
  * See the LICENSE file in the root directory of this source tree.
226
242
  */
227
- const __iconNode$q8 = [
243
+ const __iconNode$qb = [
244
+ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
245
+ ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }]
246
+ ];
247
+ const CircleDot$1 = createLucideIcon$1("circle-dot", __iconNode$qb);
248
+ /**
249
+ * @license lucide-react v0.552.0 - ISC
250
+ *
251
+ * This source code is licensed under the ISC license.
252
+ * See the LICENSE file in the root directory of this source tree.
253
+ */
254
+ const __iconNode$qa = [
228
255
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
229
256
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
230
257
  ["path", { d: "M12 17h.01", key: "p32p05" }]
231
258
  ];
232
- const CircleQuestionMark$1 = createLucideIcon$1("circle-question-mark", __iconNode$q8);
259
+ const CircleQuestionMark$1 = createLucideIcon$1("circle-question-mark", __iconNode$qa);
233
260
  /**
234
261
  * @license lucide-react v0.552.0 - ISC
235
262
  *
236
263
  * This source code is licensed under the ISC license.
237
264
  * See the LICENSE file in the root directory of this source tree.
238
265
  */
239
- const __iconNode$q7 = [
266
+ const __iconNode$q9 = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
267
+ const Circle$1 = createLucideIcon$1("circle", __iconNode$q9);
268
+ /**
269
+ * @license lucide-react v0.552.0 - ISC
270
+ *
271
+ * This source code is licensed under the ISC license.
272
+ * See the LICENSE file in the root directory of this source tree.
273
+ */
274
+ const __iconNode$q8 = [
240
275
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
241
276
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
242
277
  ];
243
- const Copy$1 = createLucideIcon$1("copy", __iconNode$q7);
278
+ const Copy$1 = createLucideIcon$1("copy", __iconNode$q8);
244
279
  /**
245
280
  * @license lucide-react v0.552.0 - ISC
246
281
  *
247
282
  * This source code is licensed under the ISC license.
248
283
  * See the LICENSE file in the root directory of this source tree.
249
284
  */
250
- const __iconNode$q6 = [
285
+ const __iconNode$q7 = [
251
286
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
252
287
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
253
288
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
254
289
  ];
255
- const ExternalLink$1 = createLucideIcon$1("external-link", __iconNode$q6);
290
+ const ExternalLink$1 = createLucideIcon$1("external-link", __iconNode$q7);
256
291
  /**
257
292
  * @license lucide-react v0.552.0 - ISC
258
293
  *
259
294
  * This source code is licensed under the ISC license.
260
295
  * See the LICENSE file in the root directory of this source tree.
261
296
  */
262
- const __iconNode$q5 = [
297
+ const __iconNode$q6 = [
263
298
  [
264
299
  "path",
265
300
  {
@@ -271,14 +306,14 @@ const __iconNode$q5 = [
271
306
  ["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
272
307
  ["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }]
273
308
  ];
274
- const FileCode$1 = createLucideIcon$1("file-code", __iconNode$q5);
309
+ const FileCode$1 = createLucideIcon$1("file-code", __iconNode$q6);
275
310
  /**
276
311
  * @license lucide-react v0.552.0 - ISC
277
312
  *
278
313
  * This source code is licensed under the ISC license.
279
314
  * See the LICENSE file in the root directory of this source tree.
280
315
  */
281
- const __iconNode$q4 = [
316
+ const __iconNode$q5 = [
282
317
  [
283
318
  "path",
284
319
  {
@@ -289,14 +324,14 @@ const __iconNode$q4 = [
289
324
  ["path", { d: "M12 17h.01", key: "p32p05" }],
290
325
  ["path", { d: "M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3", key: "mhlwft" }]
291
326
  ];
292
- const FileQuestionMark$1 = createLucideIcon$1("file-question-mark", __iconNode$q4);
327
+ const FileQuestionMark$1 = createLucideIcon$1("file-question-mark", __iconNode$q5);
293
328
  /**
294
329
  * @license lucide-react v0.552.0 - ISC
295
330
  *
296
331
  * This source code is licensed under the ISC license.
297
332
  * See the LICENSE file in the root directory of this source tree.
298
333
  */
299
- const __iconNode$q3 = [
334
+ const __iconNode$q4 = [
300
335
  [
301
336
  "path",
302
337
  {
@@ -307,14 +342,14 @@ const __iconNode$q3 = [
307
342
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }],
308
343
  ["path", { d: "m10 18 3-3-3-3", key: "18f6ys" }]
309
344
  ];
310
- const FileSymlink$1 = createLucideIcon$1("file-symlink", __iconNode$q3);
345
+ const FileSymlink$1 = createLucideIcon$1("file-symlink", __iconNode$q4);
311
346
  /**
312
347
  * @license lucide-react v0.552.0 - ISC
313
348
  *
314
349
  * This source code is licensed under the ISC license.
315
350
  * See the LICENSE file in the root directory of this source tree.
316
351
  */
317
- const __iconNode$q2 = [
352
+ const __iconNode$q3 = [
318
353
  [
319
354
  "path",
320
355
  {
@@ -327,14 +362,14 @@ const __iconNode$q2 = [
327
362
  ["path", { d: "M16 13H8", key: "t4e002" }],
328
363
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
329
364
  ];
330
- const FileText$1 = createLucideIcon$1("file-text", __iconNode$q2);
365
+ const FileText$1 = createLucideIcon$1("file-text", __iconNode$q3);
331
366
  /**
332
367
  * @license lucide-react v0.552.0 - ISC
333
368
  *
334
369
  * This source code is licensed under the ISC license.
335
370
  * See the LICENSE file in the root directory of this source tree.
336
371
  */
337
- const __iconNode$q1 = [
372
+ const __iconNode$q2 = [
338
373
  [
339
374
  "path",
340
375
  {
@@ -343,14 +378,14 @@ const __iconNode$q1 = [
343
378
  }
344
379
  ]
345
380
  ];
346
- const FolderOpen$1 = createLucideIcon$1("folder-open", __iconNode$q1);
381
+ const FolderOpen$1 = createLucideIcon$1("folder-open", __iconNode$q2);
347
382
  /**
348
383
  * @license lucide-react v0.552.0 - ISC
349
384
  *
350
385
  * This source code is licensed under the ISC license.
351
386
  * See the LICENSE file in the root directory of this source tree.
352
387
  */
353
- const __iconNode$q0 = [
388
+ const __iconNode$q1 = [
354
389
  [
355
390
  "path",
356
391
  {
@@ -359,27 +394,27 @@ const __iconNode$q0 = [
359
394
  }
360
395
  ]
361
396
  ];
362
- const Folder$1 = createLucideIcon$1("folder", __iconNode$q0);
397
+ const Folder$1 = createLucideIcon$1("folder", __iconNode$q1);
363
398
  /**
364
399
  * @license lucide-react v0.552.0 - ISC
365
400
  *
366
401
  * This source code is licensed under the ISC license.
367
402
  * See the LICENSE file in the root directory of this source tree.
368
403
  */
369
- const __iconNode$p$ = [
404
+ const __iconNode$q0 = [
370
405
  ["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
371
406
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
372
407
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
373
408
  ["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
374
409
  ];
375
- const GitBranch$1 = createLucideIcon$1("git-branch", __iconNode$p$);
410
+ const GitBranch$1 = createLucideIcon$1("git-branch", __iconNode$q0);
376
411
  /**
377
412
  * @license lucide-react v0.552.0 - ISC
378
413
  *
379
414
  * This source code is licensed under the ISC license.
380
415
  * See the LICENSE file in the root directory of this source tree.
381
416
  */
382
- const __iconNode$p_ = [
417
+ const __iconNode$p$ = [
383
418
  [
384
419
  "path",
385
420
  {
@@ -402,43 +437,43 @@ const __iconNode$p_ = [
402
437
  }
403
438
  ]
404
439
  ];
405
- const Layers$1 = createLucideIcon$1("layers", __iconNode$p_);
440
+ const Layers$1 = createLucideIcon$1("layers", __iconNode$p$);
406
441
  /**
407
442
  * @license lucide-react v0.552.0 - ISC
408
443
  *
409
444
  * This source code is licensed under the ISC license.
410
445
  * See the LICENSE file in the root directory of this source tree.
411
446
  */
412
- const __iconNode$pZ = [
447
+ const __iconNode$p_ = [
413
448
  ["rect", { width: "7", height: "7", x: "3", y: "3", rx: "1", key: "1g98yp" }],
414
449
  ["rect", { width: "7", height: "7", x: "14", y: "3", rx: "1", key: "6d4xhi" }],
415
450
  ["rect", { width: "7", height: "7", x: "14", y: "14", rx: "1", key: "nxv5o0" }],
416
451
  ["rect", { width: "7", height: "7", x: "3", y: "14", rx: "1", key: "1bb6yr" }]
417
452
  ];
418
- const LayoutGrid$1 = createLucideIcon$1("layout-grid", __iconNode$pZ);
453
+ const LayoutGrid$1 = createLucideIcon$1("layout-grid", __iconNode$p_);
419
454
  /**
420
455
  * @license lucide-react v0.552.0 - ISC
421
456
  *
422
457
  * This source code is licensed under the ISC license.
423
458
  * See the LICENSE file in the root directory of this source tree.
424
459
  */
425
- const __iconNode$pY = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
426
- const LoaderCircle$1 = createLucideIcon$1("loader-circle", __iconNode$pY);
460
+ const __iconNode$pZ = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
461
+ const LoaderCircle$1 = createLucideIcon$1("loader-circle", __iconNode$pZ);
427
462
  /**
428
463
  * @license lucide-react v0.552.0 - ISC
429
464
  *
430
465
  * This source code is licensed under the ISC license.
431
466
  * See the LICENSE file in the root directory of this source tree.
432
467
  */
433
- const __iconNode$pX = [["path", { d: "M5 12h14", key: "1ays0h" }]];
434
- const Minus$1 = createLucideIcon$1("minus", __iconNode$pX);
468
+ const __iconNode$pY = [["path", { d: "M5 12h14", key: "1ays0h" }]];
469
+ const Minus$1 = createLucideIcon$1("minus", __iconNode$pY);
435
470
  /**
436
471
  * @license lucide-react v0.552.0 - ISC
437
472
  *
438
473
  * This source code is licensed under the ISC license.
439
474
  * See the LICENSE file in the root directory of this source tree.
440
475
  */
441
- const __iconNode$pW = [
476
+ const __iconNode$pX = [
442
477
  [
443
478
  "path",
444
479
  {
@@ -450,76 +485,76 @@ const __iconNode$pW = [
450
485
  ["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
451
486
  ["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
452
487
  ];
453
- const Package$1 = createLucideIcon$1("package", __iconNode$pW);
488
+ const Package$1 = createLucideIcon$1("package", __iconNode$pX);
454
489
  /**
455
490
  * @license lucide-react v0.552.0 - ISC
456
491
  *
457
492
  * This source code is licensed under the ISC license.
458
493
  * See the LICENSE file in the root directory of this source tree.
459
494
  */
460
- const __iconNode$pV = [
495
+ const __iconNode$pW = [
461
496
  ["path", { d: "M5 12h14", key: "1ays0h" }],
462
497
  ["path", { d: "M12 5v14", key: "s699le" }]
463
498
  ];
464
- const Plus$1 = createLucideIcon$1("plus", __iconNode$pV);
499
+ const Plus$1 = createLucideIcon$1("plus", __iconNode$pW);
465
500
  /**
466
501
  * @license lucide-react v0.552.0 - ISC
467
502
  *
468
503
  * This source code is licensed under the ISC license.
469
504
  * See the LICENSE file in the root directory of this source tree.
470
505
  */
471
- const __iconNode$pU = [
506
+ const __iconNode$pV = [
472
507
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
473
508
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
474
509
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
475
510
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
476
511
  ];
477
- const RefreshCw$1 = createLucideIcon$1("refresh-cw", __iconNode$pU);
512
+ const RefreshCw$1 = createLucideIcon$1("refresh-cw", __iconNode$pV);
478
513
  /**
479
514
  * @license lucide-react v0.552.0 - ISC
480
515
  *
481
516
  * This source code is licensed under the ISC license.
482
517
  * See the LICENSE file in the root directory of this source tree.
483
518
  */
484
- const __iconNode$pT = [
519
+ const __iconNode$pU = [
485
520
  ["path", { d: "m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "7g6ntu" }],
486
521
  ["path", { d: "m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "ijws7r" }],
487
522
  ["path", { d: "M7 21h10", key: "1b0cd5" }],
488
523
  ["path", { d: "M12 3v18", key: "108xh3" }],
489
524
  ["path", { d: "M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2", key: "3gwbw2" }]
490
525
  ];
491
- const Scale$1 = createLucideIcon$1("scale", __iconNode$pT);
526
+ const Scale$1 = createLucideIcon$1("scale", __iconNode$pU);
492
527
  /**
493
528
  * @license lucide-react v0.552.0 - ISC
494
529
  *
495
530
  * This source code is licensed under the ISC license.
496
531
  * See the LICENSE file in the root directory of this source tree.
497
532
  */
498
- const __iconNode$pS = [
533
+ const __iconNode$pT = [
499
534
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
500
535
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
501
536
  ];
502
- const Search$1 = createLucideIcon$1("search", __iconNode$pS);
537
+ const Search$1 = createLucideIcon$1("search", __iconNode$pT);
503
538
  /**
504
539
  * @license lucide-react v0.552.0 - ISC
505
540
  *
506
541
  * This source code is licensed under the ISC license.
507
542
  * See the LICENSE file in the root directory of this source tree.
508
543
  */
509
- const __iconNode$pR = [
544
+ const __iconNode$pS = [
510
545
  ["path", { d: "M14 17H5", key: "gfn3mx" }],
511
546
  ["path", { d: "M19 7h-9", key: "6i9tg" }],
512
547
  ["circle", { cx: "17", cy: "17", r: "3", key: "18b49y" }],
513
548
  ["circle", { cx: "7", cy: "7", r: "3", key: "dfmy0x" }]
514
549
  ];
515
- const Settings2$1 = createLucideIcon$1("settings-2", __iconNode$pR);
550
+ const Settings2$1 = createLucideIcon$1("settings-2", __iconNode$pS);
516
551
  /**
517
552
  * @license lucide-react v0.552.0 - ISC
518
553
  *
519
554
  * This source code is licensed under the ISC license.
520
555
  * See the LICENSE file in the root directory of this source tree.
521
556
  */
522
- const __iconNode$pQ = [
557
+ const __iconNode$pR = [
523
558
  [
524
559
  "path",
525
560
  {
@@ -529,14 +564,14 @@ const __iconNode$pQ = [
529
564
  ],
530
565
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
531
566
  ];
532
- const Settings$1 = createLucideIcon$1("settings", __iconNode$pQ);
567
+ const Settings$1 = createLucideIcon$1("settings", __iconNode$pR);
533
568
  /**
534
569
  * @license lucide-react v0.552.0 - ISC
535
570
  *
536
571
  * This source code is licensed under the ISC license.
537
572
  * See the LICENSE file in the root directory of this source tree.
538
573
  */
539
- const __iconNode$pP = [
574
+ const __iconNode$pQ = [
540
575
  ["path", { d: "M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7", key: "1m0v6g" }],
541
576
  [
542
577
  "path",
@@ -546,18 +581,30 @@ const __iconNode$pP = [
546
581
  }
547
582
  ]
548
583
  ];
549
- const SquarePen$1 = createLucideIcon$1("square-pen", __iconNode$pP);
584
+ const SquarePen$1 = createLucideIcon$1("square-pen", __iconNode$pQ);
550
585
  /**
551
586
  * @license lucide-react v0.552.0 - ISC
552
587
  *
553
588
  * This source code is licensed under the ISC license.
554
589
  * See the LICENSE file in the root directory of this source tree.
555
590
  */
556
- const __iconNode$pO = [
591
+ const __iconNode$pP = [
557
592
  ["path", { d: "M12 19h8", key: "baeox8" }],
558
593
  ["path", { d: "m4 17 6-6-6-6", key: "1yngyt" }]
559
594
  ];
560
- const Terminal$1 = createLucideIcon$1("terminal", __iconNode$pO);
595
+ const Terminal$1 = createLucideIcon$1("terminal", __iconNode$pP);
596
+ /**
597
+ * @license lucide-react v0.552.0 - ISC
598
+ *
599
+ * This source code is licensed under the ISC license.
600
+ * See the LICENSE file in the root directory of this source tree.
601
+ */
602
+ const __iconNode$pO = [
603
+ ["path", { d: "M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2", key: "125lnx" }],
604
+ ["path", { d: "M8.5 2h7", key: "csnxdl" }],
605
+ ["path", { d: "M14.5 16h-5", key: "1ox875" }]
606
+ ];
607
+ const TestTube$1 = createLucideIcon$1("test-tube", __iconNode$pO);
561
608
  /**
562
609
  * @license lucide-react v0.552.0 - ISC
563
610
  *
@@ -8126,6 +8173,290 @@ var GitStatusFileTree = ({
8126
8173
  rowHeight: 28
8127
8174
  }, NodeRenderer)));
8128
8175
  };
8176
+ var TelemetryCoverageContext = React2.createContext(null);
8177
+ var DEFAULT_TEST_PATTERNS = [
8178
+ /\.test\.[jt]sx?$/,
8179
+ /\.spec\.[jt]sx?$/,
8180
+ /\.tests\.[jt]sx?$/,
8181
+ /\.specs\.[jt]sx?$/,
8182
+ /__tests__\/.*\.[jt]sx?$/
8183
+ ];
8184
+ var isTestFile = (filename, patterns) => {
8185
+ return patterns.some((pattern) => pattern.test(filename));
8186
+ };
8187
+ var getCoverageStatusDisplay = (coverage, _theme) => {
8188
+ const { status, tracedTestCount, totalTestCount } = coverage;
8189
+ const percentage = totalTestCount > 0 ? Math.round(tracedTestCount / totalTestCount * 100) : 0;
8190
+ switch (status) {
8191
+ case "covered":
8192
+ return {
8193
+ icon: /* @__PURE__ */ React2.createElement(Activity$1, {
8194
+ size: 14
8195
+ }),
8196
+ color: "#22c55e",
8197
+ label: `${tracedTestCount}/${totalTestCount} tests traced (${percentage}%)`,
8198
+ badge: `${percentage}%`
8199
+ };
8200
+ case "partial":
8201
+ return {
8202
+ icon: /* @__PURE__ */ React2.createElement(CircleDot$1, {
8203
+ size: 14
8204
+ }),
8205
+ color: "#eab308",
8206
+ label: `${tracedTestCount}/${totalTestCount} tests traced (${percentage}%)`,
8207
+ badge: `${tracedTestCount}/${totalTestCount}`
8208
+ };
8209
+ case "none":
8210
+ return {
8211
+ icon: /* @__PURE__ */ React2.createElement(Circle$1, {
8212
+ size: 14
8213
+ }),
8214
+ color: "#6b7280",
8215
+ label: `No tests traced (0/${totalTestCount})`,
8216
+ badge: "0%"
8217
+ };
8218
+ }
8219
+ };
8220
+ var sortNodes2 = (a2, b) => {
8221
+ const aIsDir = !!a2.children;
8222
+ const bIsDir = !!b.children;
8223
+ if (aIsDir && !bIsDir)
8224
+ return -1;
8225
+ if (!aIsDir && bIsDir)
8226
+ return 1;
8227
+ return a2.name.localeCompare(b.name, void 0, { sensitivity: "base" });
8228
+ };
8229
+ var transformTreeStructure2 = (fileTree, showOnlyTestFiles, testPatterns) => {
8230
+ const transformNode = (node, parentId) => {
8231
+ const id = parentId ? `${parentId}/${node.name}` : node.name;
8232
+ if ("children" in node && node.children) {
8233
+ const children = node.children.map((child) => transformNode(child, id)).filter((n) => n !== null).sort(sortNodes2);
8234
+ if (showOnlyTestFiles && children.length === 0) {
8235
+ return null;
8236
+ }
8237
+ return {
8238
+ id,
8239
+ name: node.name,
8240
+ children
8241
+ };
8242
+ } else {
8243
+ const isTest = isTestFile(id, testPatterns);
8244
+ if (showOnlyTestFiles && !isTest) {
8245
+ return null;
8246
+ }
8247
+ return {
8248
+ id,
8249
+ name: node.name,
8250
+ isTestFile: isTest
8251
+ };
8252
+ }
8253
+ };
8254
+ return fileTree.root.children.map((node) => transformNode(node, "")).filter((n) => n !== null).sort(sortNodes2);
8255
+ };
8256
+ var filterCoveredNodes = (nodes, coverageMap) => {
8257
+ const result = [];
8258
+ const hasCoverage = (node) => {
8259
+ if (coverageMap.has(node.id))
8260
+ return true;
8261
+ if (node.children) {
8262
+ return node.children.some((child) => hasCoverage(child));
8263
+ }
8264
+ return false;
8265
+ };
8266
+ for (const node of nodes) {
8267
+ if (node.children) {
8268
+ if (hasCoverage(node)) {
8269
+ const filteredChildren = filterCoveredNodes(node.children, coverageMap);
8270
+ result.push({ ...node, children: filteredChildren });
8271
+ }
8272
+ } else {
8273
+ if (coverageMap.has(node.id)) {
8274
+ result.push(node);
8275
+ }
8276
+ }
8277
+ }
8278
+ return result;
8279
+ };
8280
+ var countVisibleNodes3 = (nodes, openByDefault) => {
8281
+ let count = 0;
8282
+ const countNode = (node) => {
8283
+ count++;
8284
+ if (node.children && node.children.length > 0 && openByDefault) {
8285
+ node.children.forEach(countNode);
8286
+ }
8287
+ };
8288
+ nodes.forEach(countNode);
8289
+ return count;
8290
+ };
8291
+ var TelemetryCoverageFileTree = ({
8292
+ fileTree,
8293
+ theme,
8294
+ coverageData,
8295
+ selectedDirectories: _selectedDirectories = [],
8296
+ selectedFile,
8297
+ onDirectorySelect,
8298
+ onFileSelect,
8299
+ showOnlyTestFiles = true,
8300
+ showUncoveredFiles = true,
8301
+ transparentBackground = false,
8302
+ horizontalNodePadding,
8303
+ onContextMenu,
8304
+ openByDefault = true,
8305
+ initialHeight = 600,
8306
+ autoHeight = false,
8307
+ testFilePatterns = DEFAULT_TEST_PATTERNS
8308
+ }) => {
8309
+ const coverageMap = useMemo(() => {
8310
+ const map2 = /* @__PURE__ */ new Map();
8311
+ coverageData.forEach((item) => {
8312
+ map2.set(item.filePath, item);
8313
+ });
8314
+ return map2;
8315
+ }, [coverageData]);
8316
+ const NodeRenderer = (props) => {
8317
+ const { node } = props;
8318
+ const ctx = React2.useContext(TelemetryCoverageContext);
8319
+ const coverage = ctx == null ? void 0 : ctx.coverageMap.get(node.data.id);
8320
+ const hasTracedChildren = ctx == null ? void 0 : ctx.hasTracedChildrenMap.get(node.data.id);
8321
+ const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage) : null;
8322
+ let nameColor;
8323
+ if (coverageDisplay) {
8324
+ nameColor = coverageDisplay.color;
8325
+ } else if (hasTracedChildren) {
8326
+ nameColor = "#22c55e80";
8327
+ } else if (node.data.isTestFile) {
8328
+ nameColor = "#6b728080";
8329
+ }
8330
+ const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React2.createElement(TestTube$1, {
8331
+ size: 14,
8332
+ style: { marginRight: 4, color: "#6b7280" }
8333
+ }) : null;
8334
+ const rightContent = coverageDisplay ? /* @__PURE__ */ React2.createElement("div", {
8335
+ style: {
8336
+ display: "flex",
8337
+ alignItems: "center",
8338
+ color: coverageDisplay.color,
8339
+ marginRight: "8px"
8340
+ },
8341
+ title: coverageDisplay.label
8342
+ }, coverageDisplay.icon, /* @__PURE__ */ React2.createElement("span", {
8343
+ style: {
8344
+ marginLeft: "4px",
8345
+ fontSize: "11px",
8346
+ fontWeight: "bold",
8347
+ fontFamily: "monospace"
8348
+ }
8349
+ }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React2.createElement("div", {
8350
+ style: {
8351
+ display: "flex",
8352
+ alignItems: "center",
8353
+ color: "#6b7280",
8354
+ marginRight: "8px",
8355
+ opacity: 0.5
8356
+ },
8357
+ title: "No telemetry instrumentation"
8358
+ }, /* @__PURE__ */ React2.createElement(Circle$1, {
8359
+ size: 14
8360
+ })) : null;
8361
+ return /* @__PURE__ */ React2.createElement(TreeNode, {
8362
+ ...props,
8363
+ theme,
8364
+ rightContent,
8365
+ extraContent: leftIcon,
8366
+ nameColor,
8367
+ horizontalNodePadding,
8368
+ onContextMenu: (e, node2) => {
8369
+ if (onContextMenu) {
8370
+ onContextMenu(e, node2.data.id, !!node2.data.children);
8371
+ }
8372
+ }
8373
+ });
8374
+ };
8375
+ const treeStructure = useMemo(() => {
8376
+ return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
8377
+ }, [fileTree, showOnlyTestFiles, testFilePatterns]);
8378
+ const treeData = useMemo(() => {
8379
+ if (showUncoveredFiles) {
8380
+ return treeStructure;
8381
+ }
8382
+ return filterCoveredNodes(treeStructure, coverageMap);
8383
+ }, [treeStructure, showUncoveredFiles, coverageMap]);
8384
+ const hasTracedChildrenMap = useMemo(() => {
8385
+ const map2 = /* @__PURE__ */ new Map();
8386
+ const markTracedParents = (nodes) => {
8387
+ let hasTraced = false;
8388
+ for (const node of nodes) {
8389
+ if (node.children) {
8390
+ const childrenTraced = markTracedParents(node.children);
8391
+ if (childrenTraced) {
8392
+ map2.set(node.id, true);
8393
+ hasTraced = true;
8394
+ }
8395
+ }
8396
+ const coverage = coverageMap.get(node.id);
8397
+ if (coverage && coverage.status !== "none") {
8398
+ hasTraced = true;
8399
+ }
8400
+ }
8401
+ return hasTraced;
8402
+ };
8403
+ markTracedParents(treeData);
8404
+ return map2;
8405
+ }, [treeData, coverageMap]);
8406
+ const handleSelect = (selectedNodes) => {
8407
+ const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);
8408
+ const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);
8409
+ if (onFileSelect && selectedFiles.length > 0) {
8410
+ onFileSelect(selectedFiles[0]);
8411
+ }
8412
+ if (onDirectorySelect) {
8413
+ onDirectorySelect(selectedDirs);
8414
+ }
8415
+ };
8416
+ const calculatedHeight = useMemo(() => {
8417
+ if (autoHeight) {
8418
+ const visibleNodeCount = countVisibleNodes3(treeData, openByDefault);
8419
+ return visibleNodeCount * 28;
8420
+ }
8421
+ return initialHeight;
8422
+ }, [autoHeight, treeData, openByDefault, initialHeight]);
8423
+ const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
8424
+ return /* @__PURE__ */ React2.createElement("div", {
8425
+ ref: containerRef,
8426
+ style: {
8427
+ backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
8428
+ color: theme.colors.text,
8429
+ fontFamily: theme.fonts.body,
8430
+ ...autoHeight ? {} : { height: "100%" }
8431
+ }
8432
+ }, /* @__PURE__ */ React2.createElement(TelemetryCoverageContext.Provider, {
8433
+ value: { coverageMap, hasTracedChildrenMap }
8434
+ }, /* @__PURE__ */ React2.createElement(Tree, {
8435
+ data: treeData,
8436
+ onSelect: handleSelect,
8437
+ ...selectedFile !== void 0 && { selection: selectedFile },
8438
+ openByDefault,
8439
+ width: "100%",
8440
+ height: containerHeight,
8441
+ rowHeight: 28
8442
+ }, NodeRenderer)));
8443
+ };
8444
+ var calculateTelemetryCoverageStats = (coverageData) => {
8445
+ const testFiles = coverageData.length;
8446
+ const coveredFiles = coverageData.filter((c2) => c2.status === "covered").length;
8447
+ const partialFiles = coverageData.filter((c2) => c2.status === "partial").length;
8448
+ const totalTraced = coverageData.reduce((sum, c2) => sum + c2.tracedTestCount, 0);
8449
+ const totalTests = coverageData.reduce((sum, c2) => sum + c2.totalTestCount, 0);
8450
+ return {
8451
+ testFiles,
8452
+ coveredFiles,
8453
+ partialFiles,
8454
+ uncoveredFiles: testFiles - coveredFiles - partialFiles,
8455
+ totalTraced,
8456
+ totalTests,
8457
+ percentage: totalTests > 0 ? Math.round(totalTraced / totalTests * 100) : 0
8458
+ };
8459
+ };
8129
8460
  class _ {
8130
8461
  static buildTreeFromPaths(j, k = "") {
8131
8462
  let q2 = k.endsWith("/") ? k.slice(0, -1) : k, E = /* @__PURE__ */ new Map(), J = [], O = [], X2 = /* @__PURE__ */ new Set();
@@ -65068,6 +65399,734 @@ const DependencyGraphPanel = ({ context }) => {
65068
65399
  }
65069
65400
  );
65070
65401
  };
65402
+ const getCoverageColor = (percentage) => {
65403
+ if (percentage >= 80) return "#22c55e";
65404
+ if (percentage >= 50) return "#eab308";
65405
+ if (percentage > 0) return "#f97316";
65406
+ return "#6b7280";
65407
+ };
65408
+ const CoverageBar = ({
65409
+ percentage,
65410
+ width = 60
65411
+ }) => {
65412
+ const color = getCoverageColor(percentage);
65413
+ return /* @__PURE__ */ jsx(
65414
+ "div",
65415
+ {
65416
+ style: {
65417
+ width,
65418
+ height: 6,
65419
+ backgroundColor: color + "30",
65420
+ borderRadius: 3,
65421
+ overflow: "hidden"
65422
+ },
65423
+ children: /* @__PURE__ */ jsx(
65424
+ "div",
65425
+ {
65426
+ style: {
65427
+ width: `${percentage}%`,
65428
+ height: "100%",
65429
+ backgroundColor: color,
65430
+ borderRadius: 3,
65431
+ transition: "width 0.3s ease"
65432
+ }
65433
+ }
65434
+ )
65435
+ }
65436
+ );
65437
+ };
65438
+ const PackageCoverageCard = ({
65439
+ pkg,
65440
+ coverage,
65441
+ isSelected,
65442
+ onClick
65443
+ }) => {
65444
+ const { theme } = useTheme();
65445
+ const stats = useMemo(() => {
65446
+ if (!coverage || coverage.files.length === 0) {
65447
+ return { percentage: 0, totalTraced: 0, totalTests: 0, testFiles: 0, coveredFiles: 0, partialFiles: 0, uncoveredFiles: 0 };
65448
+ }
65449
+ const result = calculateTelemetryCoverageStats(coverage.files);
65450
+ return result;
65451
+ }, [coverage]);
65452
+ const hasTraceFile = !!(coverage == null ? void 0 : coverage.traceFilePath);
65453
+ return /* @__PURE__ */ jsxs(
65454
+ "button",
65455
+ {
65456
+ onClick,
65457
+ style: {
65458
+ display: "flex",
65459
+ flexDirection: "column",
65460
+ gap: "8px",
65461
+ padding: "12px",
65462
+ backgroundColor: isSelected ? theme.colors.primary + "10" : theme.colors.backgroundSecondary,
65463
+ border: `1px solid ${isSelected ? theme.colors.primary : theme.colors.border}`,
65464
+ borderRadius: "0",
65465
+ cursor: "pointer",
65466
+ textAlign: "left",
65467
+ transition: "all 0.15s ease",
65468
+ width: "100%"
65469
+ },
65470
+ onMouseEnter: (e) => {
65471
+ if (!isSelected) {
65472
+ e.currentTarget.style.borderColor = theme.colors.primary;
65473
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
65474
+ }
65475
+ },
65476
+ onMouseLeave: (e) => {
65477
+ if (!isSelected) {
65478
+ e.currentTarget.style.borderColor = theme.colors.border;
65479
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundSecondary;
65480
+ }
65481
+ },
65482
+ children: [
65483
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
65484
+ /* @__PURE__ */ jsx(
65485
+ Activity$1,
65486
+ {
65487
+ size: 16,
65488
+ color: stats.percentage > 0 ? getCoverageColor(stats.percentage) : theme.colors.textSecondary
65489
+ }
65490
+ ),
65491
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
65492
+ /* @__PURE__ */ jsx(
65493
+ "div",
65494
+ {
65495
+ style: {
65496
+ fontSize: theme.fontSizes[2],
65497
+ fontWeight: 600,
65498
+ color: theme.colors.text,
65499
+ overflow: "hidden",
65500
+ textOverflow: "ellipsis",
65501
+ whiteSpace: "nowrap"
65502
+ },
65503
+ children: pkg.packageData.name
65504
+ }
65505
+ ),
65506
+ /* @__PURE__ */ jsx(
65507
+ "div",
65508
+ {
65509
+ style: {
65510
+ fontSize: theme.fontSizes[0],
65511
+ color: theme.colors.textSecondary
65512
+ },
65513
+ children: pkg.packageData.path || "/"
65514
+ }
65515
+ )
65516
+ ] }),
65517
+ /* @__PURE__ */ jsxs(
65518
+ "div",
65519
+ {
65520
+ style: {
65521
+ display: "flex",
65522
+ alignItems: "center",
65523
+ gap: "8px"
65524
+ },
65525
+ children: [
65526
+ /* @__PURE__ */ jsx(CoverageBar, { percentage: stats.percentage }),
65527
+ /* @__PURE__ */ jsxs(
65528
+ "span",
65529
+ {
65530
+ style: {
65531
+ padding: "2px 8px",
65532
+ backgroundColor: getCoverageColor(stats.percentage) + "20",
65533
+ color: getCoverageColor(stats.percentage),
65534
+ borderRadius: "4px",
65535
+ fontSize: theme.fontSizes[0],
65536
+ fontWeight: "bold",
65537
+ fontFamily: "monospace",
65538
+ minWidth: "40px",
65539
+ textAlign: "center"
65540
+ },
65541
+ children: [
65542
+ stats.percentage,
65543
+ "%"
65544
+ ]
65545
+ }
65546
+ )
65547
+ ]
65548
+ }
65549
+ ),
65550
+ /* @__PURE__ */ jsx(ChevronRight$1, { size: 16, color: theme.colors.textSecondary })
65551
+ ] }),
65552
+ /* @__PURE__ */ jsxs(
65553
+ "div",
65554
+ {
65555
+ style: {
65556
+ display: "flex",
65557
+ gap: "16px",
65558
+ fontSize: theme.fontSizes[0],
65559
+ color: theme.colors.textSecondary
65560
+ },
65561
+ children: [
65562
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
65563
+ /* @__PURE__ */ jsx(TestTube$1, { size: 12 }),
65564
+ /* @__PURE__ */ jsxs("span", { children: [
65565
+ stats.totalTraced,
65566
+ "/",
65567
+ stats.totalTests,
65568
+ " tests traced"
65569
+ ] })
65570
+ ] }),
65571
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
65572
+ /* @__PURE__ */ jsx(FileCode$1, { size: 12 }),
65573
+ /* @__PURE__ */ jsxs("span", { children: [
65574
+ stats.testFiles,
65575
+ " test files"
65576
+ ] })
65577
+ ] }),
65578
+ hasTraceFile && /* @__PURE__ */ jsxs(
65579
+ "div",
65580
+ {
65581
+ style: {
65582
+ display: "flex",
65583
+ alignItems: "center",
65584
+ gap: "4px",
65585
+ color: theme.colors.primary
65586
+ },
65587
+ children: [
65588
+ /* @__PURE__ */ jsx(Activity$1, { size: 12 }),
65589
+ /* @__PURE__ */ jsx("span", { children: "trace available" })
65590
+ ]
65591
+ }
65592
+ )
65593
+ ]
65594
+ }
65595
+ )
65596
+ ]
65597
+ }
65598
+ );
65599
+ };
65600
+ const TelemetryCoveragePanelContent = ({
65601
+ packages,
65602
+ coverageData,
65603
+ fileTree,
65604
+ isLoading = false,
65605
+ error = null,
65606
+ onFileSelect,
65607
+ onPackageSelect,
65608
+ onViewTrace
65609
+ }) => {
65610
+ const { theme } = useTheme();
65611
+ const [selectedPackageId, setSelectedPackageId] = useState(null);
65612
+ const coverageMap = useMemo(() => {
65613
+ const map2 = /* @__PURE__ */ new Map();
65614
+ coverageData.forEach((c2) => map2.set(c2.packageId, c2));
65615
+ return map2;
65616
+ }, [coverageData]);
65617
+ const sortedPackages = useMemo(() => {
65618
+ return [...packages].sort((a2, b) => {
65619
+ const aCoverage = coverageMap.get(a2.id);
65620
+ const bCoverage = coverageMap.get(b.id);
65621
+ const aStats = aCoverage ? calculateTelemetryCoverageStats(aCoverage.files) : { percentage: 0 };
65622
+ const bStats = bCoverage ? calculateTelemetryCoverageStats(bCoverage.files) : { percentage: 0 };
65623
+ return bStats.percentage - aStats.percentage;
65624
+ });
65625
+ }, [packages, coverageMap]);
65626
+ const selectedPackage = useMemo(() => {
65627
+ if (!selectedPackageId) return null;
65628
+ return packages.find((p) => p.id === selectedPackageId) || null;
65629
+ }, [selectedPackageId, packages]);
65630
+ const selectedCoverage = useMemo(() => {
65631
+ if (!selectedPackageId) return null;
65632
+ return coverageMap.get(selectedPackageId) || null;
65633
+ }, [selectedPackageId, coverageMap]);
65634
+ const overallStats = useMemo(() => {
65635
+ const allFiles = coverageData.flatMap((c2) => c2.files);
65636
+ if (allFiles.length === 0) {
65637
+ return { percentage: 0, totalTraced: 0, totalTests: 0, testFiles: 0, coveredFiles: 0, partialFiles: 0, uncoveredFiles: 0 };
65638
+ }
65639
+ return calculateTelemetryCoverageStats(allFiles);
65640
+ }, [coverageData]);
65641
+ const packageFileTree = useMemo(() => {
65642
+ if (!fileTree || !selectedPackage) return void 0;
65643
+ return fileTree;
65644
+ }, [fileTree, selectedPackage]);
65645
+ if (isLoading) {
65646
+ return /* @__PURE__ */ jsx(
65647
+ "div",
65648
+ {
65649
+ style: {
65650
+ padding: "20px",
65651
+ textAlign: "center",
65652
+ color: theme.colors.textSecondary
65653
+ },
65654
+ children: "Loading telemetry coverage data..."
65655
+ }
65656
+ );
65657
+ }
65658
+ if (error) {
65659
+ return /* @__PURE__ */ jsx(
65660
+ "div",
65661
+ {
65662
+ style: {
65663
+ padding: "20px",
65664
+ textAlign: "center",
65665
+ color: theme.colors.error
65666
+ },
65667
+ children: error
65668
+ }
65669
+ );
65670
+ }
65671
+ if (packages.length === 0) {
65672
+ return /* @__PURE__ */ jsxs(
65673
+ "div",
65674
+ {
65675
+ style: {
65676
+ padding: "20px",
65677
+ textAlign: "center",
65678
+ color: theme.colors.textSecondary,
65679
+ display: "flex",
65680
+ flexDirection: "column",
65681
+ alignItems: "center",
65682
+ gap: "12px"
65683
+ },
65684
+ children: [
65685
+ /* @__PURE__ */ jsx(Activity$1, { size: 32, color: theme.colors.textSecondary }),
65686
+ /* @__PURE__ */ jsx("div", { children: "No packages detected" }),
65687
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme.fontSizes[0] }, children: "Run package detection to see telemetry coverage" })
65688
+ ]
65689
+ }
65690
+ );
65691
+ }
65692
+ if (packages.length === 1 && packageFileTree) {
65693
+ const pkg = packages[0];
65694
+ const coverage = coverageMap.get(pkg.id);
65695
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
65696
+ /* @__PURE__ */ jsxs(
65697
+ "div",
65698
+ {
65699
+ style: {
65700
+ padding: "12px 16px",
65701
+ borderBottom: `1px solid ${theme.colors.border}`,
65702
+ display: "flex",
65703
+ alignItems: "center",
65704
+ gap: "12px"
65705
+ },
65706
+ children: [
65707
+ /* @__PURE__ */ jsx(Activity$1, { size: 20, color: theme.colors.primary }),
65708
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
65709
+ /* @__PURE__ */ jsx("div", { style: { fontWeight: 600, color: theme.colors.text }, children: pkg.packageData.name }),
65710
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: theme.fontSizes[0], color: theme.colors.textSecondary }, children: [
65711
+ overallStats.totalTraced,
65712
+ "/",
65713
+ overallStats.totalTests,
65714
+ " tests traced"
65715
+ ] })
65716
+ ] }),
65717
+ /* @__PURE__ */ jsx(CoverageBar, { percentage: overallStats.percentage, width: 80 }),
65718
+ /* @__PURE__ */ jsxs(
65719
+ "span",
65720
+ {
65721
+ style: {
65722
+ padding: "4px 12px",
65723
+ backgroundColor: getCoverageColor(overallStats.percentage),
65724
+ color: "#fff",
65725
+ borderRadius: "4px",
65726
+ fontSize: theme.fontSizes[1],
65727
+ fontWeight: "bold",
65728
+ fontFamily: "monospace"
65729
+ },
65730
+ children: [
65731
+ overallStats.percentage,
65732
+ "%"
65733
+ ]
65734
+ }
65735
+ )
65736
+ ]
65737
+ }
65738
+ ),
65739
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, overflow: "hidden" }, children: /* @__PURE__ */ jsx(
65740
+ TelemetryCoverageFileTree,
65741
+ {
65742
+ fileTree: packageFileTree,
65743
+ theme,
65744
+ coverageData: (coverage == null ? void 0 : coverage.files) || [],
65745
+ onFileSelect: (path) => onFileSelect == null ? void 0 : onFileSelect(path, pkg.packageData.path),
65746
+ showOnlyTestFiles: true,
65747
+ showUncoveredFiles: true,
65748
+ openByDefault: true
65749
+ }
65750
+ ) })
65751
+ ] });
65752
+ }
65753
+ return /* @__PURE__ */ jsx(
65754
+ "div",
65755
+ {
65756
+ style: {
65757
+ display: "flex",
65758
+ flexDirection: "column",
65759
+ height: "100%",
65760
+ overflow: "hidden",
65761
+ position: "relative"
65762
+ },
65763
+ children: /* @__PURE__ */ jsxs(
65764
+ "div",
65765
+ {
65766
+ style: {
65767
+ display: "flex",
65768
+ width: "200%",
65769
+ height: "100%",
65770
+ transform: selectedPackage ? "translateX(-50%)" : "translateX(0)",
65771
+ transition: "transform 0.25s ease-in-out"
65772
+ },
65773
+ children: [
65774
+ /* @__PURE__ */ jsxs(
65775
+ "div",
65776
+ {
65777
+ style: {
65778
+ width: "50%",
65779
+ height: "100%",
65780
+ display: "flex",
65781
+ flexDirection: "column",
65782
+ overflow: "hidden"
65783
+ },
65784
+ children: [
65785
+ /* @__PURE__ */ jsxs(
65786
+ "div",
65787
+ {
65788
+ style: {
65789
+ padding: "12px 16px",
65790
+ borderBottom: `1px solid ${theme.colors.border}`,
65791
+ display: "flex",
65792
+ alignItems: "center",
65793
+ gap: "12px"
65794
+ },
65795
+ children: [
65796
+ /* @__PURE__ */ jsx(Activity$1, { size: 16, color: theme.colors.primary }),
65797
+ /* @__PURE__ */ jsxs("span", { style: { fontSize: theme.fontSizes[1], color: theme.colors.textSecondary }, children: [
65798
+ packages.length,
65799
+ " packages"
65800
+ ] }),
65801
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
65802
+ /* @__PURE__ */ jsx("span", { style: { fontSize: theme.fontSizes[0], color: theme.colors.textSecondary }, children: "Overall:" }),
65803
+ /* @__PURE__ */ jsx(CoverageBar, { percentage: overallStats.percentage }),
65804
+ /* @__PURE__ */ jsxs(
65805
+ "span",
65806
+ {
65807
+ style: {
65808
+ padding: "2px 8px",
65809
+ backgroundColor: getCoverageColor(overallStats.percentage) + "20",
65810
+ color: getCoverageColor(overallStats.percentage),
65811
+ borderRadius: "4px",
65812
+ fontSize: theme.fontSizes[0],
65813
+ fontWeight: "bold",
65814
+ fontFamily: "monospace"
65815
+ },
65816
+ children: [
65817
+ overallStats.percentage,
65818
+ "%"
65819
+ ]
65820
+ }
65821
+ )
65822
+ ]
65823
+ }
65824
+ ),
65825
+ /* @__PURE__ */ jsx(
65826
+ "div",
65827
+ {
65828
+ style: {
65829
+ flex: 1,
65830
+ overflow: "auto",
65831
+ display: "flex",
65832
+ flexDirection: "column"
65833
+ },
65834
+ children: sortedPackages.map((pkg) => /* @__PURE__ */ jsx(
65835
+ PackageCoverageCard,
65836
+ {
65837
+ pkg,
65838
+ coverage: coverageMap.get(pkg.id),
65839
+ isSelected: selectedPackageId === pkg.id,
65840
+ onClick: () => {
65841
+ setSelectedPackageId(pkg.id);
65842
+ onPackageSelect == null ? void 0 : onPackageSelect(pkg);
65843
+ }
65844
+ },
65845
+ pkg.id
65846
+ ))
65847
+ }
65848
+ )
65849
+ ]
65850
+ }
65851
+ ),
65852
+ /* @__PURE__ */ jsxs(
65853
+ "div",
65854
+ {
65855
+ style: {
65856
+ width: "50%",
65857
+ height: "100%",
65858
+ display: "flex",
65859
+ flexDirection: "column",
65860
+ overflow: "hidden"
65861
+ },
65862
+ children: [
65863
+ /* @__PURE__ */ jsxs(
65864
+ "div",
65865
+ {
65866
+ style: {
65867
+ padding: "8px 12px",
65868
+ borderBottom: `1px solid ${theme.colors.border}`,
65869
+ display: "flex",
65870
+ alignItems: "center",
65871
+ gap: "8px"
65872
+ },
65873
+ children: [
65874
+ /* @__PURE__ */ jsxs(
65875
+ "button",
65876
+ {
65877
+ onClick: () => {
65878
+ setSelectedPackageId(null);
65879
+ onPackageSelect == null ? void 0 : onPackageSelect(null);
65880
+ },
65881
+ style: {
65882
+ display: "flex",
65883
+ alignItems: "center",
65884
+ gap: "4px",
65885
+ padding: "4px 8px",
65886
+ backgroundColor: "transparent",
65887
+ border: "none",
65888
+ borderRadius: "4px",
65889
+ color: theme.colors.accent,
65890
+ fontSize: theme.fontSizes[1],
65891
+ cursor: "pointer",
65892
+ transition: "background-color 0.15s ease"
65893
+ },
65894
+ onMouseEnter: (e) => {
65895
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
65896
+ },
65897
+ onMouseLeave: (e) => {
65898
+ e.currentTarget.style.backgroundColor = "transparent";
65899
+ },
65900
+ children: [
65901
+ /* @__PURE__ */ jsx(ChevronLeft$1, { size: 16 }),
65902
+ "All Packages"
65903
+ ]
65904
+ }
65905
+ ),
65906
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 } }),
65907
+ (selectedCoverage == null ? void 0 : selectedCoverage.traceFilePath) && /* @__PURE__ */ jsxs(
65908
+ "button",
65909
+ {
65910
+ onClick: () => onViewTrace == null ? void 0 : onViewTrace(
65911
+ selectedCoverage.traceFilePath,
65912
+ (selectedPackage == null ? void 0 : selectedPackage.packageData.path) || ""
65913
+ ),
65914
+ style: {
65915
+ display: "flex",
65916
+ alignItems: "center",
65917
+ gap: "4px",
65918
+ padding: "4px 8px",
65919
+ backgroundColor: theme.colors.primary + "15",
65920
+ border: `1px solid ${theme.colors.primary}`,
65921
+ borderRadius: "4px",
65922
+ color: theme.colors.primary,
65923
+ fontSize: theme.fontSizes[0],
65924
+ cursor: "pointer"
65925
+ },
65926
+ children: [
65927
+ /* @__PURE__ */ jsx(Activity$1, { size: 14 }),
65928
+ "View Trace"
65929
+ ]
65930
+ }
65931
+ )
65932
+ ]
65933
+ }
65934
+ ),
65935
+ selectedPackage && /* @__PURE__ */ jsxs(
65936
+ "div",
65937
+ {
65938
+ style: {
65939
+ padding: "12px 16px",
65940
+ borderBottom: `1px solid ${theme.colors.border}`,
65941
+ display: "flex",
65942
+ alignItems: "center",
65943
+ gap: "12px"
65944
+ },
65945
+ children: [
65946
+ /* @__PURE__ */ jsx(FolderOpen$1, { size: 16, color: theme.colors.primary }),
65947
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
65948
+ /* @__PURE__ */ jsx("div", { style: { fontWeight: 600, color: theme.colors.text }, children: selectedPackage.packageData.name }),
65949
+ /* @__PURE__ */ jsx("div", { style: { fontSize: theme.fontSizes[0], color: theme.colors.textSecondary }, children: selectedPackage.packageData.path || "/" })
65950
+ ] }),
65951
+ selectedCoverage && /* @__PURE__ */ jsxs(Fragment, { children: [
65952
+ /* @__PURE__ */ jsx(
65953
+ CoverageBar,
65954
+ {
65955
+ percentage: calculateTelemetryCoverageStats(selectedCoverage.files).percentage,
65956
+ width: 60
65957
+ }
65958
+ ),
65959
+ /* @__PURE__ */ jsxs(
65960
+ "span",
65961
+ {
65962
+ style: {
65963
+ padding: "2px 8px",
65964
+ backgroundColor: getCoverageColor(
65965
+ calculateTelemetryCoverageStats(selectedCoverage.files).percentage
65966
+ ) + "20",
65967
+ color: getCoverageColor(
65968
+ calculateTelemetryCoverageStats(selectedCoverage.files).percentage
65969
+ ),
65970
+ borderRadius: "4px",
65971
+ fontSize: theme.fontSizes[0],
65972
+ fontWeight: "bold",
65973
+ fontFamily: "monospace"
65974
+ },
65975
+ children: [
65976
+ calculateTelemetryCoverageStats(selectedCoverage.files).percentage,
65977
+ "%"
65978
+ ]
65979
+ }
65980
+ )
65981
+ ] })
65982
+ ]
65983
+ }
65984
+ ),
65985
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, overflow: "hidden" }, children: selectedPackage && packageFileTree && /* @__PURE__ */ jsx(
65986
+ TelemetryCoverageFileTree,
65987
+ {
65988
+ fileTree: packageFileTree,
65989
+ theme,
65990
+ coverageData: (selectedCoverage == null ? void 0 : selectedCoverage.files) || [],
65991
+ onFileSelect: (path) => onFileSelect == null ? void 0 : onFileSelect(path, selectedPackage.packageData.path),
65992
+ showOnlyTestFiles: true,
65993
+ showUncoveredFiles: true,
65994
+ openByDefault: true
65995
+ }
65996
+ ) })
65997
+ ]
65998
+ }
65999
+ )
66000
+ ]
66001
+ }
66002
+ )
66003
+ }
66004
+ );
66005
+ };
66006
+ const TelemetryCoveragePanelPreview = () => {
66007
+ const { theme } = useTheme();
66008
+ return /* @__PURE__ */ jsxs(
66009
+ "div",
66010
+ {
66011
+ style: {
66012
+ padding: "12px",
66013
+ fontSize: "12px",
66014
+ color: theme.colors.text,
66015
+ display: "flex",
66016
+ flexDirection: "column",
66017
+ gap: "6px"
66018
+ },
66019
+ children: [
66020
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px" }, children: [
66021
+ /* @__PURE__ */ jsx(Activity$1, { size: 14, color: theme.colors.primary }),
66022
+ /* @__PURE__ */ jsx("span", { children: "Telemetry Coverage" })
66023
+ ] }),
66024
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px", paddingLeft: "8px" }, children: [
66025
+ /* @__PURE__ */ jsx(TestTube$1, { size: 12, color: theme.colors.textSecondary }),
66026
+ /* @__PURE__ */ jsx("span", { style: { color: theme.colors.textSecondary }, children: "8/14 tests traced" })
66027
+ ] }),
66028
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "6px", paddingLeft: "8px" }, children: [
66029
+ /* @__PURE__ */ jsx(CoverageBar, { percentage: 57, width: 40 }),
66030
+ /* @__PURE__ */ jsx(
66031
+ "span",
66032
+ {
66033
+ style: {
66034
+ color: getCoverageColor(57),
66035
+ fontWeight: "bold",
66036
+ fontFamily: "monospace"
66037
+ },
66038
+ children: "57%"
66039
+ }
66040
+ )
66041
+ ] })
66042
+ ]
66043
+ }
66044
+ );
66045
+ };
66046
+ const TelemetryCoveragePanel = ({ context, events }) => {
66047
+ var _a;
66048
+ const packagesSlice = context.getSlice("packages");
66049
+ const fileTreeSlice = context.getSlice("fileTree");
66050
+ const packages = ((_a = packagesSlice == null ? void 0 : packagesSlice.data) == null ? void 0 : _a.packages) ?? [];
66051
+ const fileTree = (fileTreeSlice == null ? void 0 : fileTreeSlice.data) ?? void 0;
66052
+ const isLoading = (packagesSlice == null ? void 0 : packagesSlice.loading) || (fileTreeSlice == null ? void 0 : fileTreeSlice.loading) || false;
66053
+ const coverageData = useMemo(() => {
66054
+ return packages.map((pkg) => ({
66055
+ packageId: pkg.id,
66056
+ packageName: pkg.packageData.name,
66057
+ packagePath: pkg.packageData.path,
66058
+ files: []
66059
+ }));
66060
+ }, [packages]);
66061
+ const handleFileSelect = (filePath, packagePath) => {
66062
+ events == null ? void 0 : events.emit({
66063
+ type: "file:select",
66064
+ source: "TelemetryCoveragePanel",
66065
+ timestamp: Date.now(),
66066
+ payload: { filePath, packagePath }
66067
+ });
66068
+ const pkgCoverage = coverageData.find((c2) => c2.packagePath === packagePath);
66069
+ if (pkgCoverage == null ? void 0 : pkgCoverage.traceFilePath) {
66070
+ events == null ? void 0 : events.emit({
66071
+ type: "trace:load",
66072
+ source: "TelemetryCoveragePanel",
66073
+ timestamp: Date.now(),
66074
+ payload: {
66075
+ tracePath: pkgCoverage.traceFilePath,
66076
+ packagePath
66077
+ }
66078
+ });
66079
+ }
66080
+ };
66081
+ const handlePackageSelect = (pkg) => {
66082
+ events == null ? void 0 : events.emit({
66083
+ type: "package:select",
66084
+ source: "TelemetryCoveragePanel",
66085
+ timestamp: Date.now(),
66086
+ payload: pkg ? {
66087
+ packagePath: pkg.packageData.path,
66088
+ packageName: pkg.packageData.name
66089
+ } : null
66090
+ });
66091
+ if (pkg) {
66092
+ const pkgCoverage = coverageData.find((c2) => c2.packagePath === pkg.packageData.path);
66093
+ if (pkgCoverage == null ? void 0 : pkgCoverage.traceFilePath) {
66094
+ events == null ? void 0 : events.emit({
66095
+ type: "trace:load",
66096
+ source: "TelemetryCoveragePanel",
66097
+ timestamp: Date.now(),
66098
+ payload: {
66099
+ tracePath: pkgCoverage.traceFilePath,
66100
+ packagePath: pkg.packageData.path
66101
+ }
66102
+ });
66103
+ }
66104
+ }
66105
+ };
66106
+ const handleViewTrace = (traceFilePath, packagePath) => {
66107
+ events == null ? void 0 : events.emit({
66108
+ type: "trace:load",
66109
+ source: "TelemetryCoveragePanel",
66110
+ timestamp: Date.now(),
66111
+ payload: {
66112
+ tracePath: traceFilePath,
66113
+ packagePath
66114
+ }
66115
+ });
66116
+ };
66117
+ return /* @__PURE__ */ jsx(
66118
+ TelemetryCoveragePanelContent,
66119
+ {
66120
+ packages,
66121
+ coverageData,
66122
+ fileTree,
66123
+ isLoading,
66124
+ onFileSelect: handleFileSelect,
66125
+ onPackageSelect: handlePackageSelect,
66126
+ onViewTrace: handleViewTrace
66127
+ }
66128
+ );
66129
+ };
65071
66130
  const panels = [
65072
66131
  {
65073
66132
  metadata: {
@@ -65152,6 +66211,30 @@ const panels = [
65152
66211
  onUnmount: async (_context) => {
65153
66212
  console.log("Dependency Graph Panel unmounting");
65154
66213
  }
66214
+ },
66215
+ {
66216
+ metadata: {
66217
+ id: "industry-theme.telemetry-coverage",
66218
+ name: "Telemetry Coverage",
66219
+ icon: "Activity",
66220
+ version: "0.1.0",
66221
+ author: "Industry Theme",
66222
+ description: "View OpenTelemetry test coverage across packages",
66223
+ slices: ["packages", "fileTree"]
66224
+ },
66225
+ component: TelemetryCoveragePanel,
66226
+ onMount: async (context) => {
66227
+ console.log("Telemetry Coverage Panel mounted");
66228
+ if (context.hasSlice("packages") && !context.isSliceLoading("packages")) {
66229
+ await context.refresh("repository", "packages");
66230
+ }
66231
+ if (context.hasSlice("fileTree") && !context.isSliceLoading("fileTree")) {
66232
+ await context.refresh("repository", "fileTree");
66233
+ }
66234
+ },
66235
+ onUnmount: async (_context) => {
66236
+ console.log("Telemetry Coverage Panel unmounting");
66237
+ }
65155
66238
  }
65156
66239
  ];
65157
66240
  const onPackageLoad = async () => {
@@ -65173,6 +66256,9 @@ export {
65173
66256
  SearchPanel,
65174
66257
  SearchPanelContent,
65175
66258
  SearchPanelPreview,
66259
+ TelemetryCoveragePanel,
66260
+ TelemetryCoveragePanelContent,
66261
+ TelemetryCoveragePanelPreview,
65176
66262
  applyForceLayout,
65177
66263
  applySugiyamaLayout,
65178
66264
  dependencyTreeToCanvas,