@industry-theme/repository-composition-panels 0.2.14 → 0.2.16

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.
@@ -129,18 +129,18 @@ const createLucideIcon = (iconName, iconNode) => {
129
129
  * This source code is licensed under the ISC license.
130
130
  * See the LICENSE file in the root directory of this source tree.
131
131
  */
132
- const __iconNode$r = [
132
+ const __iconNode$s = [
133
133
  ["path", { d: "M5 12h14", key: "1ays0h" }],
134
134
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
135
135
  ];
136
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$r);
136
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$s);
137
137
  /**
138
138
  * @license lucide-react v0.552.0 - ISC
139
139
  *
140
140
  * This source code is licensed under the ISC license.
141
141
  * See the LICENSE file in the root directory of this source tree.
142
142
  */
143
- const __iconNode$q = [
143
+ const __iconNode$r = [
144
144
  [
145
145
  "path",
146
146
  {
@@ -151,93 +151,93 @@ const __iconNode$q = [
151
151
  ["path", { d: "m3.3 7 8.7 5 8.7-5", key: "g66t2b" }],
152
152
  ["path", { d: "M12 22V12", key: "d0xqtd" }]
153
153
  ];
154
- const Box = createLucideIcon("box", __iconNode$q);
154
+ const Box = createLucideIcon("box", __iconNode$r);
155
155
  /**
156
156
  * @license lucide-react v0.552.0 - ISC
157
157
  *
158
158
  * This source code is licensed under the ISC license.
159
159
  * See the LICENSE file in the root directory of this source tree.
160
160
  */
161
- const __iconNode$p = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
162
- const Check = createLucideIcon("check", __iconNode$p);
161
+ const __iconNode$q = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
162
+ const Check = createLucideIcon("check", __iconNode$q);
163
163
  /**
164
164
  * @license lucide-react v0.552.0 - ISC
165
165
  *
166
166
  * This source code is licensed under the ISC license.
167
167
  * See the LICENSE file in the root directory of this source tree.
168
168
  */
169
- const __iconNode$o = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
170
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$o);
169
+ const __iconNode$p = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
170
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$p);
171
171
  /**
172
172
  * @license lucide-react v0.552.0 - ISC
173
173
  *
174
174
  * This source code is licensed under the ISC license.
175
175
  * See the LICENSE file in the root directory of this source tree.
176
176
  */
177
- const __iconNode$n = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
178
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$n);
177
+ const __iconNode$o = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
178
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$o);
179
179
  /**
180
180
  * @license lucide-react v0.552.0 - ISC
181
181
  *
182
182
  * This source code is licensed under the ISC license.
183
183
  * See the LICENSE file in the root directory of this source tree.
184
184
  */
185
- const __iconNode$m = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
186
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$m);
185
+ const __iconNode$n = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
186
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$n);
187
187
  /**
188
188
  * @license lucide-react v0.552.0 - ISC
189
189
  *
190
190
  * This source code is licensed under the ISC license.
191
191
  * See the LICENSE file in the root directory of this source tree.
192
192
  */
193
- const __iconNode$l = [
193
+ const __iconNode$m = [
194
194
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
195
195
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
196
196
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
197
197
  ];
198
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$l);
198
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$m);
199
199
  /**
200
200
  * @license lucide-react v0.552.0 - ISC
201
201
  *
202
202
  * This source code is licensed under the ISC license.
203
203
  * See the LICENSE file in the root directory of this source tree.
204
204
  */
205
- const __iconNode$k = [
205
+ const __iconNode$l = [
206
206
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
207
207
  ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }],
208
208
  ["path", { d: "M12 17h.01", key: "p32p05" }]
209
209
  ];
210
- const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$k);
210
+ const CircleQuestionMark = createLucideIcon("circle-question-mark", __iconNode$l);
211
211
  /**
212
212
  * @license lucide-react v0.552.0 - ISC
213
213
  *
214
214
  * This source code is licensed under the ISC license.
215
215
  * See the LICENSE file in the root directory of this source tree.
216
216
  */
217
- const __iconNode$j = [
217
+ const __iconNode$k = [
218
218
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
219
219
  ["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" }]
220
220
  ];
221
- const Copy = createLucideIcon("copy", __iconNode$j);
221
+ const Copy = createLucideIcon("copy", __iconNode$k);
222
222
  /**
223
223
  * @license lucide-react v0.552.0 - ISC
224
224
  *
225
225
  * This source code is licensed under the ISC license.
226
226
  * See the LICENSE file in the root directory of this source tree.
227
227
  */
228
- const __iconNode$i = [
228
+ const __iconNode$j = [
229
229
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
230
230
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
231
231
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
232
232
  ];
233
- const ExternalLink = createLucideIcon("external-link", __iconNode$i);
233
+ const ExternalLink = createLucideIcon("external-link", __iconNode$j);
234
234
  /**
235
235
  * @license lucide-react v0.552.0 - ISC
236
236
  *
237
237
  * This source code is licensed under the ISC license.
238
238
  * See the LICENSE file in the root directory of this source tree.
239
239
  */
240
- const __iconNode$h = [
240
+ const __iconNode$i = [
241
241
  [
242
242
  "path",
243
243
  {
@@ -249,14 +249,14 @@ const __iconNode$h = [
249
249
  ["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
250
250
  ["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }]
251
251
  ];
252
- const FileCode = createLucideIcon("file-code", __iconNode$h);
252
+ const FileCode = createLucideIcon("file-code", __iconNode$i);
253
253
  /**
254
254
  * @license lucide-react v0.552.0 - ISC
255
255
  *
256
256
  * This source code is licensed under the ISC license.
257
257
  * See the LICENSE file in the root directory of this source tree.
258
258
  */
259
- const __iconNode$g = [
259
+ const __iconNode$h = [
260
260
  [
261
261
  "path",
262
262
  {
@@ -267,14 +267,14 @@ const __iconNode$g = [
267
267
  ["path", { d: "M12 17h.01", key: "p32p05" }],
268
268
  ["path", { d: "M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3", key: "mhlwft" }]
269
269
  ];
270
- const FileQuestionMark = createLucideIcon("file-question-mark", __iconNode$g);
270
+ const FileQuestionMark = createLucideIcon("file-question-mark", __iconNode$h);
271
271
  /**
272
272
  * @license lucide-react v0.552.0 - ISC
273
273
  *
274
274
  * This source code is licensed under the ISC license.
275
275
  * See the LICENSE file in the root directory of this source tree.
276
276
  */
277
- const __iconNode$f = [
277
+ const __iconNode$g = [
278
278
  [
279
279
  "path",
280
280
  {
@@ -285,14 +285,14 @@ const __iconNode$f = [
285
285
  ["path", { d: "M14 2v5a1 1 0 0 0 1 1h5", key: "wfsgrz" }],
286
286
  ["path", { d: "m10 18 3-3-3-3", key: "18f6ys" }]
287
287
  ];
288
- const FileSymlink = createLucideIcon("file-symlink", __iconNode$f);
288
+ const FileSymlink = createLucideIcon("file-symlink", __iconNode$g);
289
289
  /**
290
290
  * @license lucide-react v0.552.0 - ISC
291
291
  *
292
292
  * This source code is licensed under the ISC license.
293
293
  * See the LICENSE file in the root directory of this source tree.
294
294
  */
295
- const __iconNode$e = [
295
+ const __iconNode$f = [
296
296
  [
297
297
  "path",
298
298
  {
@@ -305,14 +305,14 @@ const __iconNode$e = [
305
305
  ["path", { d: "M16 13H8", key: "t4e002" }],
306
306
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
307
307
  ];
308
- const FileText = createLucideIcon("file-text", __iconNode$e);
308
+ const FileText = createLucideIcon("file-text", __iconNode$f);
309
309
  /**
310
310
  * @license lucide-react v0.552.0 - ISC
311
311
  *
312
312
  * This source code is licensed under the ISC license.
313
313
  * See the LICENSE file in the root directory of this source tree.
314
314
  */
315
- const __iconNode$d = [
315
+ const __iconNode$e = [
316
316
  [
317
317
  "path",
318
318
  {
@@ -321,14 +321,14 @@ const __iconNode$d = [
321
321
  }
322
322
  ]
323
323
  ];
324
- const FolderOpen = createLucideIcon("folder-open", __iconNode$d);
324
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$e);
325
325
  /**
326
326
  * @license lucide-react v0.552.0 - ISC
327
327
  *
328
328
  * This source code is licensed under the ISC license.
329
329
  * See the LICENSE file in the root directory of this source tree.
330
330
  */
331
- const __iconNode$c = [
331
+ const __iconNode$d = [
332
332
  [
333
333
  "path",
334
334
  {
@@ -337,27 +337,27 @@ const __iconNode$c = [
337
337
  }
338
338
  ]
339
339
  ];
340
- const Folder = createLucideIcon("folder", __iconNode$c);
340
+ const Folder = createLucideIcon("folder", __iconNode$d);
341
341
  /**
342
342
  * @license lucide-react v0.552.0 - ISC
343
343
  *
344
344
  * This source code is licensed under the ISC license.
345
345
  * See the LICENSE file in the root directory of this source tree.
346
346
  */
347
- const __iconNode$b = [
347
+ const __iconNode$c = [
348
348
  ["line", { x1: "6", x2: "6", y1: "3", y2: "15", key: "17qcm7" }],
349
349
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
350
350
  ["circle", { cx: "6", cy: "18", r: "3", key: "fqmcym" }],
351
351
  ["path", { d: "M18 9a9 9 0 0 1-9 9", key: "n2h4wq" }]
352
352
  ];
353
- const GitBranch = createLucideIcon("git-branch", __iconNode$b);
353
+ const GitBranch = createLucideIcon("git-branch", __iconNode$c);
354
354
  /**
355
355
  * @license lucide-react v0.552.0 - ISC
356
356
  *
357
357
  * This source code is licensed under the ISC license.
358
358
  * See the LICENSE file in the root directory of this source tree.
359
359
  */
360
- const __iconNode$a = [
360
+ const __iconNode$b = [
361
361
  [
362
362
  "path",
363
363
  {
@@ -380,35 +380,35 @@ const __iconNode$a = [
380
380
  }
381
381
  ]
382
382
  ];
383
- const Layers = createLucideIcon("layers", __iconNode$a);
383
+ const Layers = createLucideIcon("layers", __iconNode$b);
384
384
  /**
385
385
  * @license lucide-react v0.552.0 - ISC
386
386
  *
387
387
  * This source code is licensed under the ISC license.
388
388
  * See the LICENSE file in the root directory of this source tree.
389
389
  */
390
- const __iconNode$9 = [
390
+ const __iconNode$a = [
391
391
  ["rect", { width: "7", height: "7", x: "3", y: "3", rx: "1", key: "1g98yp" }],
392
392
  ["rect", { width: "7", height: "7", x: "14", y: "3", rx: "1", key: "6d4xhi" }],
393
393
  ["rect", { width: "7", height: "7", x: "14", y: "14", rx: "1", key: "nxv5o0" }],
394
394
  ["rect", { width: "7", height: "7", x: "3", y: "14", rx: "1", key: "1bb6yr" }]
395
395
  ];
396
- const LayoutGrid = createLucideIcon("layout-grid", __iconNode$9);
396
+ const LayoutGrid = createLucideIcon("layout-grid", __iconNode$a);
397
397
  /**
398
398
  * @license lucide-react v0.552.0 - ISC
399
399
  *
400
400
  * This source code is licensed under the ISC license.
401
401
  * See the LICENSE file in the root directory of this source tree.
402
402
  */
403
- const __iconNode$8 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
404
- const Minus = createLucideIcon("minus", __iconNode$8);
403
+ const __iconNode$9 = [["path", { d: "M5 12h14", key: "1ays0h" }]];
404
+ const Minus = createLucideIcon("minus", __iconNode$9);
405
405
  /**
406
406
  * @license lucide-react v0.552.0 - ISC
407
407
  *
408
408
  * This source code is licensed under the ISC license.
409
409
  * See the LICENSE file in the root directory of this source tree.
410
410
  */
411
- const __iconNode$7 = [
411
+ const __iconNode$8 = [
412
412
  [
413
413
  "path",
414
414
  {
@@ -420,50 +420,50 @@ const __iconNode$7 = [
420
420
  ["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
421
421
  ["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
422
422
  ];
423
- const Package = createLucideIcon("package", __iconNode$7);
423
+ const Package = createLucideIcon("package", __iconNode$8);
424
424
  /**
425
425
  * @license lucide-react v0.552.0 - ISC
426
426
  *
427
427
  * This source code is licensed under the ISC license.
428
428
  * See the LICENSE file in the root directory of this source tree.
429
429
  */
430
- const __iconNode$6 = [
430
+ const __iconNode$7 = [
431
431
  ["path", { d: "M5 12h14", key: "1ays0h" }],
432
432
  ["path", { d: "M12 5v14", key: "s699le" }]
433
433
  ];
434
- const Plus = createLucideIcon("plus", __iconNode$6);
434
+ const Plus = createLucideIcon("plus", __iconNode$7);
435
435
  /**
436
436
  * @license lucide-react v0.552.0 - ISC
437
437
  *
438
438
  * This source code is licensed under the ISC license.
439
439
  * See the LICENSE file in the root directory of this source tree.
440
440
  */
441
- const __iconNode$5 = [
441
+ const __iconNode$6 = [
442
442
  ["path", { d: "m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "7g6ntu" }],
443
443
  ["path", { d: "m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "ijws7r" }],
444
444
  ["path", { d: "M7 21h10", key: "1b0cd5" }],
445
445
  ["path", { d: "M12 3v18", key: "108xh3" }],
446
446
  ["path", { d: "M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2", key: "3gwbw2" }]
447
447
  ];
448
- const Scale = createLucideIcon("scale", __iconNode$5);
448
+ const Scale = createLucideIcon("scale", __iconNode$6);
449
449
  /**
450
450
  * @license lucide-react v0.552.0 - ISC
451
451
  *
452
452
  * This source code is licensed under the ISC license.
453
453
  * See the LICENSE file in the root directory of this source tree.
454
454
  */
455
- const __iconNode$4 = [
455
+ const __iconNode$5 = [
456
456
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
457
457
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
458
458
  ];
459
- const Search = createLucideIcon("search", __iconNode$4);
459
+ const Search = createLucideIcon("search", __iconNode$5);
460
460
  /**
461
461
  * @license lucide-react v0.552.0 - ISC
462
462
  *
463
463
  * This source code is licensed under the ISC license.
464
464
  * See the LICENSE file in the root directory of this source tree.
465
465
  */
466
- const __iconNode$3 = [
466
+ const __iconNode$4 = [
467
467
  [
468
468
  "path",
469
469
  {
@@ -473,14 +473,14 @@ const __iconNode$3 = [
473
473
  ],
474
474
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
475
475
  ];
476
- const Settings = createLucideIcon("settings", __iconNode$3);
476
+ const Settings = createLucideIcon("settings", __iconNode$4);
477
477
  /**
478
478
  * @license lucide-react v0.552.0 - ISC
479
479
  *
480
480
  * This source code is licensed under the ISC license.
481
481
  * See the LICENSE file in the root directory of this source tree.
482
482
  */
483
- const __iconNode$2 = [
483
+ const __iconNode$3 = [
484
484
  ["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" }],
485
485
  [
486
486
  "path",
@@ -490,18 +490,36 @@ const __iconNode$2 = [
490
490
  }
491
491
  ]
492
492
  ];
493
- const SquarePen = createLucideIcon("square-pen", __iconNode$2);
493
+ const SquarePen = createLucideIcon("square-pen", __iconNode$3);
494
494
  /**
495
495
  * @license lucide-react v0.552.0 - ISC
496
496
  *
497
497
  * This source code is licensed under the ISC license.
498
498
  * See the LICENSE file in the root directory of this source tree.
499
499
  */
500
- const __iconNode$1 = [
500
+ const __iconNode$2 = [
501
501
  ["path", { d: "M12 19h8", key: "baeox8" }],
502
502
  ["path", { d: "m4 17 6-6-6-6", key: "1yngyt" }]
503
503
  ];
504
- const Terminal = createLucideIcon("terminal", __iconNode$1);
504
+ const Terminal = createLucideIcon("terminal", __iconNode$2);
505
+ /**
506
+ * @license lucide-react v0.552.0 - ISC
507
+ *
508
+ * This source code is licensed under the ISC license.
509
+ * See the LICENSE file in the root directory of this source tree.
510
+ */
511
+ const __iconNode$1 = [
512
+ [
513
+ "path",
514
+ {
515
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
516
+ key: "wmoenq"
517
+ }
518
+ ],
519
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
520
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
521
+ ];
522
+ const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$1);
505
523
  /**
506
524
  * @license lucide-react v0.552.0 - ISC
507
525
  *
@@ -9271,6 +9289,522 @@ const FilterBar = ({
9271
9289
  }
9272
9290
  );
9273
9291
  };
9292
+ const LensRow = ({ lens }) => {
9293
+ const { theme } = useTheme();
9294
+ const [isExpanded, setIsExpanded] = useState(false);
9295
+ const getStatusDisplay = () => {
9296
+ if (lens.ready) {
9297
+ return { icon: Check, color: "#10b981", label: "Ready" };
9298
+ }
9299
+ if (lens.partial) {
9300
+ return { icon: TriangleAlert, color: "#f59e0b", label: "Partial" };
9301
+ }
9302
+ if (lens.checks.some((c) => c.satisfied)) {
9303
+ return { icon: X, color: "#ef4444", label: "Missing" };
9304
+ }
9305
+ return { icon: Minus, color: theme.colors.textSecondary, label: "Not configured" };
9306
+ };
9307
+ const status = getStatusDisplay();
9308
+ const StatusIcon = status.icon;
9309
+ const hasDetails = lens.checks.length > 0;
9310
+ return /* @__PURE__ */ jsxs(
9311
+ "div",
9312
+ {
9313
+ style: {
9314
+ borderBottom: `1px solid ${theme.colors.border}`
9315
+ },
9316
+ children: [
9317
+ /* @__PURE__ */ jsxs(
9318
+ "button",
9319
+ {
9320
+ onClick: () => hasDetails && setIsExpanded(!isExpanded),
9321
+ disabled: !hasDetails,
9322
+ style: {
9323
+ width: "100%",
9324
+ display: "flex",
9325
+ alignItems: "center",
9326
+ gap: "8px",
9327
+ padding: "10px 12px",
9328
+ backgroundColor: "transparent",
9329
+ border: "none",
9330
+ cursor: hasDetails ? "pointer" : "default",
9331
+ textAlign: "left",
9332
+ color: theme.colors.text
9333
+ },
9334
+ children: [
9335
+ hasDetails && (isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { size: 14, color: theme.colors.textSecondary }) : /* @__PURE__ */ jsx(ChevronRight, { size: 14, color: theme.colors.textSecondary })),
9336
+ !hasDetails && /* @__PURE__ */ jsx("div", { style: { width: 14 } }),
9337
+ /* @__PURE__ */ jsx(StatusIcon, { size: 16, color: status.color }),
9338
+ /* @__PURE__ */ jsx(
9339
+ "span",
9340
+ {
9341
+ style: {
9342
+ flex: 1,
9343
+ fontSize: theme.fontSizes[1],
9344
+ fontWeight: 500,
9345
+ color: lens.ready ? theme.colors.text : theme.colors.textSecondary
9346
+ },
9347
+ children: lens.displayName
9348
+ }
9349
+ ),
9350
+ lens.missing.length > 0 && /* @__PURE__ */ jsxs(
9351
+ "span",
9352
+ {
9353
+ style: {
9354
+ fontSize: theme.fontSizes[0],
9355
+ color: status.color,
9356
+ padding: "2px 6px",
9357
+ backgroundColor: status.color + "15",
9358
+ borderRadius: "4px"
9359
+ },
9360
+ children: [
9361
+ lens.missing.length,
9362
+ " missing"
9363
+ ]
9364
+ }
9365
+ )
9366
+ ]
9367
+ }
9368
+ ),
9369
+ isExpanded && hasDetails && /* @__PURE__ */ jsx(
9370
+ "div",
9371
+ {
9372
+ style: {
9373
+ padding: "0 12px 12px 34px",
9374
+ display: "flex",
9375
+ flexDirection: "column",
9376
+ gap: "4px"
9377
+ },
9378
+ children: lens.checks.map((check, idx) => /* @__PURE__ */ jsx(RequirementRow, { check }, idx))
9379
+ }
9380
+ )
9381
+ ]
9382
+ }
9383
+ );
9384
+ };
9385
+ const RequirementRow = ({ check }) => {
9386
+ const { theme } = useTheme();
9387
+ const { requirement, satisfied, foundValue } = check;
9388
+ const typeLabels = {
9389
+ devDependency: "dep",
9390
+ script: "script",
9391
+ config: "config"
9392
+ };
9393
+ return /* @__PURE__ */ jsxs(
9394
+ "div",
9395
+ {
9396
+ style: {
9397
+ display: "flex",
9398
+ alignItems: "center",
9399
+ gap: "8px",
9400
+ fontSize: theme.fontSizes[0],
9401
+ padding: "4px 0"
9402
+ },
9403
+ children: [
9404
+ satisfied ? /* @__PURE__ */ jsx(Check, { size: 12, color: "#10b981" }) : /* @__PURE__ */ jsx(X, { size: 12, color: "#ef4444" }),
9405
+ /* @__PURE__ */ jsx(
9406
+ "span",
9407
+ {
9408
+ style: {
9409
+ padding: "1px 4px",
9410
+ backgroundColor: theme.colors.backgroundTertiary,
9411
+ color: theme.colors.textSecondary,
9412
+ borderRadius: "3px",
9413
+ fontSize: "10px",
9414
+ fontWeight: 500,
9415
+ textTransform: "uppercase"
9416
+ },
9417
+ children: typeLabels[requirement.type] || requirement.type
9418
+ }
9419
+ ),
9420
+ /* @__PURE__ */ jsx(
9421
+ "span",
9422
+ {
9423
+ style: {
9424
+ color: satisfied ? theme.colors.text : theme.colors.textSecondary,
9425
+ fontFamily: "monospace"
9426
+ },
9427
+ children: requirement.name
9428
+ }
9429
+ ),
9430
+ satisfied && foundValue && /* @__PURE__ */ jsx(
9431
+ "span",
9432
+ {
9433
+ style: {
9434
+ color: theme.colors.textSecondary,
9435
+ marginLeft: "auto",
9436
+ fontFamily: "monospace"
9437
+ },
9438
+ children: foundValue.length > 30 ? foundValue.slice(0, 30) + "..." : foundValue
9439
+ }
9440
+ ),
9441
+ !satisfied && requirement.suggestedFix && /* @__PURE__ */ jsxs(
9442
+ "span",
9443
+ {
9444
+ style: {
9445
+ color: theme.colors.textSecondary,
9446
+ marginLeft: "auto",
9447
+ fontStyle: "italic"
9448
+ },
9449
+ children: [
9450
+ "(add: ",
9451
+ requirement.suggestedFix,
9452
+ ")"
9453
+ ]
9454
+ }
9455
+ )
9456
+ ]
9457
+ }
9458
+ );
9459
+ };
9460
+ const LensReadinessSection = ({
9461
+ lensReadiness
9462
+ }) => {
9463
+ const { theme } = useTheme();
9464
+ if (!lensReadiness || Object.keys(lensReadiness).length === 0) {
9465
+ return /* @__PURE__ */ jsx(
9466
+ "div",
9467
+ {
9468
+ style: {
9469
+ padding: "16px",
9470
+ textAlign: "center",
9471
+ color: theme.colors.textSecondary,
9472
+ fontSize: theme.fontSizes[1]
9473
+ },
9474
+ children: "No lens readiness data available"
9475
+ }
9476
+ );
9477
+ }
9478
+ const sortedLenses = Object.values(lensReadiness).sort((a, b) => {
9479
+ if (a.ready && !b.ready) return -1;
9480
+ if (!a.ready && b.ready) return 1;
9481
+ if (a.partial && !b.partial) return -1;
9482
+ if (!a.partial && b.partial) return 1;
9483
+ return a.displayName.localeCompare(b.displayName);
9484
+ });
9485
+ const readyCount = sortedLenses.filter((l) => l.ready).length;
9486
+ const totalCount = sortedLenses.length;
9487
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
9488
+ /* @__PURE__ */ jsxs(
9489
+ "div",
9490
+ {
9491
+ style: {
9492
+ padding: "8px 12px",
9493
+ borderBottom: `1px solid ${theme.colors.border}`,
9494
+ backgroundColor: theme.colors.backgroundTertiary,
9495
+ display: "flex",
9496
+ alignItems: "center",
9497
+ justifyContent: "space-between"
9498
+ },
9499
+ children: [
9500
+ /* @__PURE__ */ jsx(
9501
+ "span",
9502
+ {
9503
+ style: {
9504
+ fontSize: theme.fontSizes[0],
9505
+ fontWeight: 600,
9506
+ color: theme.colors.textSecondary,
9507
+ textTransform: "uppercase",
9508
+ letterSpacing: "0.5px"
9509
+ },
9510
+ children: "Quality Lenses"
9511
+ }
9512
+ ),
9513
+ /* @__PURE__ */ jsxs(
9514
+ "span",
9515
+ {
9516
+ style: {
9517
+ fontSize: theme.fontSizes[0],
9518
+ color: readyCount === totalCount ? "#10b981" : theme.colors.textSecondary,
9519
+ fontWeight: 500
9520
+ },
9521
+ children: [
9522
+ readyCount,
9523
+ "/",
9524
+ totalCount,
9525
+ " ready"
9526
+ ]
9527
+ }
9528
+ )
9529
+ ]
9530
+ }
9531
+ ),
9532
+ /* @__PURE__ */ jsx("div", { children: sortedLenses.map((lens) => /* @__PURE__ */ jsx(LensRow, { lens }, lens.lensId)) })
9533
+ ] });
9534
+ };
9535
+ const TurboLogo = ({ size: size2 = 24, className, style }) => /* @__PURE__ */ jsxs(
9536
+ "svg",
9537
+ {
9538
+ width: size2,
9539
+ height: size2,
9540
+ viewBox: "0 0 24 24",
9541
+ fill: "#FF1E56",
9542
+ role: "img",
9543
+ className,
9544
+ style,
9545
+ xmlns: "http://www.w3.org/2000/svg",
9546
+ children: [
9547
+ /* @__PURE__ */ jsx("title", { children: "Turborepo" }),
9548
+ /* @__PURE__ */ jsx("path", { d: "M11.9906 4.1957c-4.2998 0-7.7981 3.501-7.7981 7.8043s3.4983 7.8043 7.7981 7.8043c4.2999 0 7.7982-3.501 7.7982-7.8043s-3.4983-7.8043-7.7982-7.8043m0 11.843c-2.229 0-4.0356-1.8079-4.0356-4.0387s1.8065-4.0387 4.0356-4.0387S16.0262 9.7692 16.0262 12s-1.8065 4.0388-4.0356 4.0388m.6534-13.1249V0C18.9726.3386 24 5.5822 24 12s-5.0274 11.66-11.356 12v-2.9139c4.7167-.3372 8.4516-4.2814 8.4516-9.0861s-3.735-8.749-8.4516-9.0861M5.113 17.9586c-1.2502-1.4446-2.0562-3.2845-2.2-5.3046H0c.151 2.8266 1.2808 5.3917 3.051 7.3668l2.0606-2.0622zM11.3372 24v-2.9139c-2.02-.1439-3.8584-.949-5.3019-2.2018l-2.0606 2.0623c1.975 1.773 4.538 2.9022 7.361 3.0534z" })
9549
+ ]
9550
+ }
9551
+ );
9552
+ const NxLogo = ({ size: size2 = 24, className, style }) => /* @__PURE__ */ jsxs(
9553
+ "svg",
9554
+ {
9555
+ width: size2,
9556
+ height: size2,
9557
+ viewBox: "0 0 24 24",
9558
+ fill: "#143055",
9559
+ role: "img",
9560
+ className,
9561
+ style,
9562
+ xmlns: "http://www.w3.org/2000/svg",
9563
+ children: [
9564
+ /* @__PURE__ */ jsx("title", { children: "Nx" }),
9565
+ /* @__PURE__ */ jsx("path", { d: "M11.987 14.138l-3.132 4.923-5.193-8.427-.012 8.822H0V4.544h3.691l5.247 8.833.005-3.998 3.044 4.759zm.601-5.761c.024-.048 0-3.784.008-3.833h-3.65c.002.059-.005 3.776-.003 3.833h3.645zm5.634 4.134a2.061 2.061 0 0 0-1.969 1.336 1.963 1.963 0 0 1 2.343-.739c.396.161.917.422 1.33.283a2.1 2.1 0 0 0-1.704-.88zm3.39 1.061c-.375-.13-.8-.277-1.109-.681-.06-.08-.116-.17-.176-.265a2.143 2.143 0 0 0-.533-.642c-.294-.216-.68-.322-1.18-.322a2.482 2.482 0 0 0-2.294 1.536 2.325 2.325 0 0 1 4.002.388.75.75 0 0 0 .836.334c.493-.105.46.36 1.203.518v-.133c-.003-.446-.246-.55-.75-.733zm2.024 1.266a.723.723 0 0 0 .347-.638c-.01-2.957-2.41-5.487-5.37-5.487a5.364 5.364 0 0 0-4.487 2.418c-.01-.026-1.522-2.39-1.538-2.418H8.943l3.463 5.423-3.379 5.32h3.54l1.54-2.366 1.568 2.366h3.541l-3.21-5.052a.7.7 0 0 1-.084-.32 2.69 2.69 0 0 1 2.69-2.691h.001c1.488 0 1.736.89 2.057 1.308.634.826 1.9.464 1.9 1.541a.707.707 0 0 0 1.066.596zm.35.133c-.173.372-.56.338-.755.639-.176.271.114.412.114.412s.337.156.538-.311c.104-.231.14-.488.103-.74z" })
9566
+ ]
9567
+ }
9568
+ );
9569
+ const LernaLogo = ({ size: size2 = 24, className, style }) => /* @__PURE__ */ jsxs(
9570
+ "svg",
9571
+ {
9572
+ width: size2,
9573
+ height: size2,
9574
+ viewBox: "0 0 24 24",
9575
+ fill: "#9333EA",
9576
+ role: "img",
9577
+ className,
9578
+ style,
9579
+ xmlns: "http://www.w3.org/2000/svg",
9580
+ children: [
9581
+ /* @__PURE__ */ jsx("title", { children: "Lerna" }),
9582
+ /* @__PURE__ */ jsx("path", { d: "M12.87 10.071l5.551 9.618h1.073L12.87 7.93zm0 0L6.536 0H4.389l7.394 12.81 1.087-1.882zm5.551 9.618L12 12.212l-1.087 1.882 5.435 9.412h2.147zM12 12.212l-5.435-9.43H4.418l6.495 11.313zm6.506 5.787H5.494L4.418 19.88h15.164zM5.494 18L12 6.712 10.913 4.83 3.345 18zm0 0l6.506 5.506 6.507-5.505z" })
9583
+ ]
9584
+ }
9585
+ );
9586
+ const PnpmLogo = ({ size: size2 = 24, className, style }) => /* @__PURE__ */ jsxs(
9587
+ "svg",
9588
+ {
9589
+ width: size2,
9590
+ height: size2,
9591
+ viewBox: "0 0 24 24",
9592
+ fill: "#F69220",
9593
+ role: "img",
9594
+ className,
9595
+ style,
9596
+ xmlns: "http://www.w3.org/2000/svg",
9597
+ children: [
9598
+ /* @__PURE__ */ jsx("title", { children: "pnpm" }),
9599
+ /* @__PURE__ */ jsx("path", { d: "M0 0v7.5h7.5V0zm8.25 0v7.5h7.498V0zm8.25 0v7.5H24V0zM8.25 8.25v7.5h7.498v-7.5zm8.25 0v7.5H24v-7.5zM0 16.5V24h7.5v-7.5zm8.25 0V24h7.498v-7.5zm8.25 0V24H24v-7.5z" })
9600
+ ]
9601
+ }
9602
+ );
9603
+ const RushLogo = ({ size: size2 = 24, className, style }) => /* @__PURE__ */ jsxs(
9604
+ "svg",
9605
+ {
9606
+ width: size2,
9607
+ height: size2,
9608
+ viewBox: "0 0 24 24",
9609
+ fill: "#0078D4",
9610
+ role: "img",
9611
+ className,
9612
+ style,
9613
+ xmlns: "http://www.w3.org/2000/svg",
9614
+ children: [
9615
+ /* @__PURE__ */ jsx("title", { children: "Rush" }),
9616
+ /* @__PURE__ */ jsx("path", { d: "M12 2L2 7v10l10 5 10-5V7L12 2zm0 2.18l7.24 3.62L12 11.42 4.76 7.8 12 4.18zM4 16.54V9.23l7 3.5v7.31l-7-3.5zm9 3.5v-7.31l7-3.5v7.31l-7 3.5z" })
9617
+ ]
9618
+ }
9619
+ );
9620
+ const orchestratorLogos = {
9621
+ turbo: TurboLogo,
9622
+ nx: NxLogo,
9623
+ lerna: LernaLogo,
9624
+ pnpm: PnpmLogo,
9625
+ rush: RushLogo
9626
+ };
9627
+ const orchestratorColors = {
9628
+ turbo: "#FF1E56",
9629
+ nx: "#143055",
9630
+ lerna: "#9333EA",
9631
+ pnpm: "#F69220",
9632
+ rush: "#0078D4",
9633
+ none: "#6B7280"
9634
+ };
9635
+ const orchestratorLabels = {
9636
+ turbo: "Turbo",
9637
+ nx: "Nx",
9638
+ lerna: "Lerna",
9639
+ pnpm: "pnpm",
9640
+ rush: "Rush",
9641
+ none: "Unknown"
9642
+ };
9643
+ const OrchestratorBadge = ({
9644
+ orchestrator,
9645
+ size: size2 = "sm",
9646
+ showLabel = true
9647
+ }) => {
9648
+ const { theme } = useTheme();
9649
+ if (orchestrator === "none") {
9650
+ return null;
9651
+ }
9652
+ const LogoComponent = orchestratorLogos[orchestrator];
9653
+ const color = orchestratorColors[orchestrator];
9654
+ const label = orchestratorLabels[orchestrator];
9655
+ const isSmall = size2 === "sm";
9656
+ const iconSize = isSmall ? 14 : 18;
9657
+ const fontSize = isSmall ? theme.fontSizes[0] : theme.fontSizes[1];
9658
+ const padding = isSmall ? "3px 6px" : "4px 10px";
9659
+ const gap = isSmall ? "4px" : "6px";
9660
+ return /* @__PURE__ */ jsxs(
9661
+ "span",
9662
+ {
9663
+ style: {
9664
+ display: "inline-flex",
9665
+ alignItems: "center",
9666
+ gap,
9667
+ padding,
9668
+ backgroundColor: color + "18",
9669
+ borderRadius: "4px",
9670
+ fontSize,
9671
+ fontWeight: 500,
9672
+ color: theme.colors.text,
9673
+ whiteSpace: "nowrap",
9674
+ border: `1px solid ${color}30`
9675
+ },
9676
+ title: `Monorepo managed by ${label}`,
9677
+ children: [
9678
+ /* @__PURE__ */ jsx(LogoComponent, { size: iconSize }),
9679
+ showLabel && /* @__PURE__ */ jsx("span", { children: label })
9680
+ ]
9681
+ }
9682
+ );
9683
+ };
9684
+ const OtherScriptsSection = ({
9685
+ commands,
9686
+ onCommandClick
9687
+ }) => {
9688
+ const { theme } = useTheme();
9689
+ const [isExpanded, setIsExpanded] = useState(false);
9690
+ const nonLensCommands = commands.filter((cmd) => !cmd.isLensCommand);
9691
+ if (nonLensCommands.length === 0) {
9692
+ return null;
9693
+ }
9694
+ return /* @__PURE__ */ jsxs("div", { style: { borderTop: `1px solid ${theme.colors.border}` }, children: [
9695
+ /* @__PURE__ */ jsxs(
9696
+ "button",
9697
+ {
9698
+ onClick: () => setIsExpanded(!isExpanded),
9699
+ style: {
9700
+ width: "100%",
9701
+ display: "flex",
9702
+ alignItems: "center",
9703
+ gap: "8px",
9704
+ padding: "8px 12px",
9705
+ backgroundColor: theme.colors.backgroundTertiary,
9706
+ border: "none",
9707
+ cursor: "pointer",
9708
+ textAlign: "left"
9709
+ },
9710
+ children: [
9711
+ isExpanded ? /* @__PURE__ */ jsx(ChevronDown, { size: 14, color: theme.colors.textSecondary }) : /* @__PURE__ */ jsx(ChevronRight, { size: 14, color: theme.colors.textSecondary }),
9712
+ /* @__PURE__ */ jsx(
9713
+ "span",
9714
+ {
9715
+ style: {
9716
+ fontSize: theme.fontSizes[0],
9717
+ fontWeight: 600,
9718
+ color: theme.colors.textSecondary,
9719
+ textTransform: "uppercase",
9720
+ letterSpacing: "0.5px"
9721
+ },
9722
+ children: "Other Scripts"
9723
+ }
9724
+ ),
9725
+ /* @__PURE__ */ jsx(
9726
+ "span",
9727
+ {
9728
+ style: {
9729
+ fontSize: theme.fontSizes[0],
9730
+ color: theme.colors.textSecondary,
9731
+ marginLeft: "auto"
9732
+ },
9733
+ children: nonLensCommands.length
9734
+ }
9735
+ )
9736
+ ]
9737
+ }
9738
+ ),
9739
+ isExpanded && /* @__PURE__ */ jsx(
9740
+ "div",
9741
+ {
9742
+ style: {
9743
+ padding: "8px 12px",
9744
+ display: "flex",
9745
+ flexDirection: "column",
9746
+ gap: "4px"
9747
+ },
9748
+ children: nonLensCommands.map((cmd, idx) => /* @__PURE__ */ jsxs(
9749
+ "button",
9750
+ {
9751
+ onClick: () => onCommandClick == null ? void 0 : onCommandClick(cmd),
9752
+ style: {
9753
+ display: "flex",
9754
+ alignItems: "center",
9755
+ gap: "8px",
9756
+ padding: "6px 10px",
9757
+ backgroundColor: theme.colors.backgroundSecondary,
9758
+ border: `1px solid ${theme.colors.border}`,
9759
+ borderRadius: "4px",
9760
+ color: theme.colors.text,
9761
+ cursor: "pointer",
9762
+ textAlign: "left",
9763
+ transition: "border-color 0.15s ease"
9764
+ },
9765
+ onMouseEnter: (e) => {
9766
+ e.currentTarget.style.borderColor = theme.colors.primary;
9767
+ },
9768
+ onMouseLeave: (e) => {
9769
+ e.currentTarget.style.borderColor = theme.colors.border;
9770
+ },
9771
+ children: [
9772
+ /* @__PURE__ */ jsx(Terminal, { size: 12, color: theme.colors.textSecondary }),
9773
+ /* @__PURE__ */ jsx(
9774
+ "span",
9775
+ {
9776
+ style: {
9777
+ fontWeight: 500,
9778
+ fontSize: theme.fontSizes[1],
9779
+ minWidth: "60px"
9780
+ },
9781
+ children: cmd.name
9782
+ }
9783
+ ),
9784
+ /* @__PURE__ */ jsx(
9785
+ "span",
9786
+ {
9787
+ style: {
9788
+ flex: 1,
9789
+ fontSize: theme.fontSizes[0],
9790
+ color: theme.colors.textSecondary,
9791
+ fontFamily: "monospace",
9792
+ overflow: "hidden",
9793
+ textOverflow: "ellipsis",
9794
+ whiteSpace: "nowrap"
9795
+ },
9796
+ children: cmd.command
9797
+ }
9798
+ ),
9799
+ /* @__PURE__ */ jsx(ExternalLink, { size: 10, color: theme.colors.textSecondary })
9800
+ ]
9801
+ },
9802
+ idx
9803
+ ))
9804
+ }
9805
+ )
9806
+ ] });
9807
+ };
9274
9808
  const dependencyTypeOrder = {
9275
9809
  peer: 0,
9276
9810
  production: 1,
@@ -9322,7 +9856,7 @@ function findInternalDependencies(pkg, allPackages) {
9322
9856
  return { dependsOn, usedBy };
9323
9857
  }
9324
9858
  const PackageSummaryCard = ({ pkg, allPackages, onClick, onHover }) => {
9325
- var _a;
9859
+ var _a, _b;
9326
9860
  const { theme } = useTheme();
9327
9861
  const deps = pkg.packageData.dependencies || {};
9328
9862
  const devDeps = pkg.packageData.devDependencies || {};
@@ -9406,6 +9940,13 @@ const PackageSummaryCard = ({ pkg, allPackages, onClick, onHover }) => {
9406
9940
  }
9407
9941
  )
9408
9942
  ] }),
9943
+ pkg.packageData.isMonorepoRoot && ((_b = pkg.packageData.monorepoMetadata) == null ? void 0 : _b.orchestrator) && /* @__PURE__ */ jsx(
9944
+ OrchestratorBadge,
9945
+ {
9946
+ orchestrator: pkg.packageData.monorepoMetadata.orchestrator,
9947
+ size: "sm"
9948
+ }
9949
+ ),
9409
9950
  packageRole && /* @__PURE__ */ jsxs(
9410
9951
  "span",
9411
9952
  {
@@ -9577,13 +10118,13 @@ const PackageCard = ({
9577
10118
  onPackageClick,
9578
10119
  standalone = false
9579
10120
  }) => {
9580
- var _a, _b;
10121
+ var _a, _b, _c, _d, _e, _f, _g, _h;
9581
10122
  const { theme } = useTheme();
9582
10123
  const [activeTab, setActiveTab] = useState("dependencies");
9583
10124
  const [activeFilters, setActiveFilters] = useState(/* @__PURE__ */ new Set());
9584
10125
  const [searchQuery, setSearchQuery] = useState("");
9585
10126
  const [showInfoModal, setShowInfoModal] = useState(false);
9586
- const configFiles = useMemo(() => {
10127
+ useMemo(() => {
9587
10128
  if (!pkg.configFiles) return [];
9588
10129
  return Object.entries(pkg.configFiles).filter(([, config]) => config == null ? void 0 : config.exists).map(([name, config]) => ({ name, ...config }));
9589
10130
  }, [pkg.configFiles]);
@@ -9753,8 +10294,7 @@ const PackageCard = ({
9753
10294
  },
9754
10295
  children: [
9755
10296
  { id: "dependencies", label: "Dependencies", count: dependencyItems.length },
9756
- { id: "configs", label: "Configs", count: configFiles.length },
9757
- { id: "commands", label: "Commands", count: commands.length }
10297
+ { id: "lenses", label: "Lenses", count: ((_c = pkg.qualityMetrics) == null ? void 0 : _c.lensReadiness) ? Object.values(pkg.qualityMetrics.lensReadiness).filter((l) => l.ready).length : 0, total: ((_d = pkg.qualityMetrics) == null ? void 0 : _d.lensReadiness) ? Object.keys(pkg.qualityMetrics.lensReadiness).length : 0 }
9758
10298
  ].map((tab) => /* @__PURE__ */ jsxs(
9759
10299
  "button",
9760
10300
  {
@@ -9784,7 +10324,7 @@ const PackageCard = ({
9784
10324
  borderRadius: "10px",
9785
10325
  fontSize: theme.fontSizes[0]
9786
10326
  },
9787
- children: tab.count
10327
+ children: "total" in tab ? `${tab.count}/${tab.total}` : tab.count
9788
10328
  }
9789
10329
  )
9790
10330
  ]
@@ -9793,109 +10333,17 @@ const PackageCard = ({
9793
10333
  ))
9794
10334
  }
9795
10335
  ),
9796
- /* @__PURE__ */ jsxs("div", { style: { flex: 1, padding: activeTab === "dependencies" ? "0" : "12px", overflow: "auto" }, children: [
9797
- activeTab === "commands" && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: commands.length === 0 ? /* @__PURE__ */ jsx("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }, children: "No commands available" }) : commands.map((cmd, idx) => /* @__PURE__ */ jsxs(
9798
- "button",
9799
- {
9800
- onClick: () => onCommandClick == null ? void 0 : onCommandClick(cmd, pkg.packageData.path),
9801
- style: {
9802
- display: "flex",
9803
- alignItems: "center",
9804
- gap: "8px",
9805
- padding: "8px 12px",
9806
- backgroundColor: theme.colors.backgroundTertiary,
9807
- border: `1px solid ${theme.colors.border}`,
9808
- borderRadius: "6px",
9809
- color: theme.colors.text,
9810
- cursor: "pointer",
9811
- textAlign: "left"
9812
- },
9813
- children: [
9814
- /* @__PURE__ */ jsx(Terminal, { size: 14, color: theme.colors.accent }),
9815
- /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
9816
- /* @__PURE__ */ jsx("div", { style: { fontWeight: 500, fontSize: theme.fontSizes[1] }, children: cmd.name }),
9817
- /* @__PURE__ */ jsx(
9818
- "div",
9819
- {
9820
- style: {
9821
- fontSize: theme.fontSizes[0],
9822
- color: theme.colors.textSecondary,
9823
- fontFamily: "monospace",
9824
- overflow: "hidden",
9825
- textOverflow: "ellipsis",
9826
- whiteSpace: "nowrap"
9827
- },
9828
- children: cmd.command
9829
- }
9830
- )
9831
- ] }),
9832
- cmd.isLensCommand && /* @__PURE__ */ jsx(
9833
- "span",
9834
- {
9835
- style: {
9836
- padding: "2px 6px",
9837
- backgroundColor: theme.colors.accent + "20",
9838
- color: theme.colors.accent,
9839
- borderRadius: "4px",
9840
- fontSize: theme.fontSizes[0]
9841
- },
9842
- children: cmd.lensId
9843
- }
9844
- ),
9845
- /* @__PURE__ */ jsx(ExternalLink, { size: 12, color: theme.colors.textSecondary })
9846
- ]
9847
- },
9848
- idx
9849
- )) }),
9850
- activeTab === "configs" && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: configFiles.length === 0 ? /* @__PURE__ */ jsx("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }, children: "No config files detected" }) : configFiles.map((config, idx) => /* @__PURE__ */ jsxs(
9851
- "button",
9852
- {
9853
- onClick: () => onConfigClick == null ? void 0 : onConfigClick(config),
9854
- style: {
9855
- display: "flex",
9856
- alignItems: "center",
9857
- gap: "8px",
9858
- padding: "8px 12px",
9859
- backgroundColor: theme.colors.backgroundTertiary,
9860
- border: `1px solid ${theme.colors.border}`,
9861
- borderRadius: "6px",
9862
- color: theme.colors.text,
9863
- cursor: "pointer",
9864
- textAlign: "left"
9865
- },
9866
- children: [
9867
- /* @__PURE__ */ jsx(Settings, { size: 14, color: theme.colors.textSecondary }),
9868
- /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
9869
- /* @__PURE__ */ jsx("div", { style: { fontWeight: 500, fontSize: theme.fontSizes[1] }, children: config.name }),
9870
- /* @__PURE__ */ jsx(
9871
- "div",
9872
- {
9873
- style: {
9874
- fontSize: theme.fontSizes[0],
9875
- color: theme.colors.textSecondary,
9876
- fontFamily: "monospace"
9877
- },
9878
- children: config.path
9879
- }
9880
- )
9881
- ] }),
9882
- config.isInline && /* @__PURE__ */ jsx(
9883
- "span",
9884
- {
9885
- style: {
9886
- padding: "2px 6px",
9887
- backgroundColor: theme.colors.textSecondary + "20",
9888
- color: theme.colors.textSecondary,
9889
- borderRadius: "4px",
9890
- fontSize: theme.fontSizes[0]
9891
- },
9892
- children: "inline"
9893
- }
9894
- )
9895
- ]
9896
- },
9897
- idx
9898
- )) }),
10336
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1, padding: activeTab === "dependencies" ? "0" : "0", overflow: "auto" }, children: [
10337
+ activeTab === "lenses" && /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
10338
+ /* @__PURE__ */ jsx(LensReadinessSection, { lensReadiness: (_e = pkg.qualityMetrics) == null ? void 0 : _e.lensReadiness }),
10339
+ /* @__PURE__ */ jsx(
10340
+ OtherScriptsSection,
10341
+ {
10342
+ commands,
10343
+ onCommandClick: (cmd) => onCommandClick == null ? void 0 : onCommandClick(cmd, pkg.packageData.path)
10344
+ }
10345
+ )
10346
+ ] }),
9899
10347
  activeTab === "dependencies" && /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
9900
10348
  dependencyItems.length === 0 ? /* @__PURE__ */ jsxs(
9901
10349
  "div",
@@ -10070,8 +10518,7 @@ const PackageCard = ({
10070
10518
  },
10071
10519
  children: [
10072
10520
  { id: "dependencies", label: "Deps", count: dependencyItems.length },
10073
- { id: "configs", label: "Configs", count: configFiles.length },
10074
- { id: "commands", label: "Commands", count: commands.length }
10521
+ { id: "lenses", label: "Lenses", count: ((_f = pkg.qualityMetrics) == null ? void 0 : _f.lensReadiness) ? Object.values(pkg.qualityMetrics.lensReadiness).filter((l) => l.ready).length : 0, total: ((_g = pkg.qualityMetrics) == null ? void 0 : _g.lensReadiness) ? Object.keys(pkg.qualityMetrics.lensReadiness).length : 0 }
10075
10522
  ].map((tab) => /* @__PURE__ */ jsxs(
10076
10523
  "button",
10077
10524
  {
@@ -10101,7 +10548,7 @@ const PackageCard = ({
10101
10548
  borderRadius: "10px",
10102
10549
  fontSize: theme.fontSizes[0]
10103
10550
  },
10104
- children: tab.count
10551
+ children: "total" in tab ? `${tab.count}/${tab.total}` : tab.count
10105
10552
  }
10106
10553
  )
10107
10554
  ]
@@ -10110,109 +10557,17 @@ const PackageCard = ({
10110
10557
  ))
10111
10558
  }
10112
10559
  ),
10113
- /* @__PURE__ */ jsxs("div", { style: { padding: activeTab === "dependencies" ? "0" : "12px", maxHeight: "300px", overflow: "auto" }, children: [
10114
- activeTab === "commands" && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: commands.length === 0 ? /* @__PURE__ */ jsx("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }, children: "No commands available" }) : commands.map((cmd, idx) => /* @__PURE__ */ jsxs(
10115
- "button",
10116
- {
10117
- onClick: () => onCommandClick == null ? void 0 : onCommandClick(cmd, pkg.packageData.path),
10118
- style: {
10119
- display: "flex",
10120
- alignItems: "center",
10121
- gap: "8px",
10122
- padding: "8px 12px",
10123
- backgroundColor: theme.colors.backgroundTertiary,
10124
- border: `1px solid ${theme.colors.border}`,
10125
- borderRadius: "6px",
10126
- color: theme.colors.text,
10127
- cursor: "pointer",
10128
- textAlign: "left"
10129
- },
10130
- children: [
10131
- /* @__PURE__ */ jsx(Terminal, { size: 14, color: theme.colors.accent }),
10132
- /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
10133
- /* @__PURE__ */ jsx("div", { style: { fontWeight: 500, fontSize: theme.fontSizes[1] }, children: cmd.name }),
10134
- /* @__PURE__ */ jsx(
10135
- "div",
10136
- {
10137
- style: {
10138
- fontSize: theme.fontSizes[0],
10139
- color: theme.colors.textSecondary,
10140
- fontFamily: "monospace",
10141
- overflow: "hidden",
10142
- textOverflow: "ellipsis",
10143
- whiteSpace: "nowrap"
10144
- },
10145
- children: cmd.command
10146
- }
10147
- )
10148
- ] }),
10149
- cmd.isLensCommand && /* @__PURE__ */ jsx(
10150
- "span",
10151
- {
10152
- style: {
10153
- padding: "2px 6px",
10154
- backgroundColor: theme.colors.accent + "20",
10155
- color: theme.colors.accent,
10156
- borderRadius: "4px",
10157
- fontSize: theme.fontSizes[0]
10158
- },
10159
- children: cmd.lensId
10160
- }
10161
- ),
10162
- /* @__PURE__ */ jsx(ExternalLink, { size: 12, color: theme.colors.textSecondary })
10163
- ]
10164
- },
10165
- idx
10166
- )) }),
10167
- activeTab === "configs" && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "6px" }, children: configFiles.length === 0 ? /* @__PURE__ */ jsx("div", { style: { color: theme.colors.textSecondary, fontSize: theme.fontSizes[1] }, children: "No config files detected" }) : configFiles.map((config, idx) => /* @__PURE__ */ jsxs(
10168
- "button",
10169
- {
10170
- onClick: () => onConfigClick == null ? void 0 : onConfigClick(config),
10171
- style: {
10172
- display: "flex",
10173
- alignItems: "center",
10174
- gap: "8px",
10175
- padding: "8px 12px",
10176
- backgroundColor: theme.colors.backgroundTertiary,
10177
- border: `1px solid ${theme.colors.border}`,
10178
- borderRadius: "6px",
10179
- color: theme.colors.text,
10180
- cursor: "pointer",
10181
- textAlign: "left"
10182
- },
10183
- children: [
10184
- /* @__PURE__ */ jsx(Settings, { size: 14, color: theme.colors.textSecondary }),
10185
- /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
10186
- /* @__PURE__ */ jsx("div", { style: { fontWeight: 500, fontSize: theme.fontSizes[1] }, children: config.name }),
10187
- /* @__PURE__ */ jsx(
10188
- "div",
10189
- {
10190
- style: {
10191
- fontSize: theme.fontSizes[0],
10192
- color: theme.colors.textSecondary,
10193
- fontFamily: "monospace"
10194
- },
10195
- children: config.path
10196
- }
10197
- )
10198
- ] }),
10199
- config.isInline && /* @__PURE__ */ jsx(
10200
- "span",
10201
- {
10202
- style: {
10203
- padding: "2px 6px",
10204
- backgroundColor: theme.colors.textSecondary + "20",
10205
- color: theme.colors.textSecondary,
10206
- borderRadius: "4px",
10207
- fontSize: theme.fontSizes[0]
10208
- },
10209
- children: "inline"
10210
- }
10211
- )
10212
- ]
10213
- },
10214
- idx
10215
- )) }),
10560
+ /* @__PURE__ */ jsxs("div", { style: { padding: activeTab === "dependencies" ? "0" : "0", maxHeight: "300px", overflow: "auto" }, children: [
10561
+ activeTab === "lenses" && /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
10562
+ /* @__PURE__ */ jsx(LensReadinessSection, { lensReadiness: (_h = pkg.qualityMetrics) == null ? void 0 : _h.lensReadiness }),
10563
+ /* @__PURE__ */ jsx(
10564
+ OtherScriptsSection,
10565
+ {
10566
+ commands,
10567
+ onCommandClick: (cmd) => onCommandClick == null ? void 0 : onCommandClick(cmd, pkg.packageData.path)
10568
+ }
10569
+ )
10570
+ ] }),
10216
10571
  activeTab === "dependencies" && /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", height: "100%" }, children: [
10217
10572
  dependencyItems.length === 0 ? /* @__PURE__ */ jsxs(
10218
10573
  "div",