@industry-theme/alexandria-panels 0.1.15 → 0.1.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.
Files changed (26) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/mocks/panelContext.d.ts.map +1 -1
  4. package/dist/panels/GitHubProjectsPanel/index.d.ts.map +1 -1
  5. package/dist/panels/LocalProjectsPanel/LocalProjectCard.d.ts.map +1 -1
  6. package/dist/panels/WorkspaceCollectionPanel/WorkspaceCollectionPanel.stories.d.ts +13 -0
  7. package/dist/panels/WorkspaceCollectionPanel/WorkspaceCollectionPanel.stories.d.ts.map +1 -0
  8. package/dist/panels/WorkspaceCollectionPanel/index.d.ts +27 -0
  9. package/dist/panels/WorkspaceCollectionPanel/index.d.ts.map +1 -0
  10. package/dist/panels/WorkspaceCollectionPanel/tools.d.ts +35 -0
  11. package/dist/panels/WorkspaceCollectionPanel/tools.d.ts.map +1 -0
  12. package/dist/panels/WorkspaceCollectionPanel/types.d.ts +125 -0
  13. package/dist/panels/WorkspaceCollectionPanel/types.d.ts.map +1 -0
  14. package/dist/panels/WorkspaceRepositoriesPanel/WorkspaceRepositoriesPanel.stories.d.ts.map +1 -1
  15. package/dist/panels/WorkspacesListPanel/WorkspaceCard.d.ts.map +1 -1
  16. package/dist/panels/WorkspacesListPanel/types.d.ts +2 -0
  17. package/dist/panels/WorkspacesListPanel/types.d.ts.map +1 -1
  18. package/dist/panels/shared/GitHubRepositoryCard.d.ts.map +1 -1
  19. package/dist/panels/shared/github-types.d.ts +2 -0
  20. package/dist/panels/shared/github-types.d.ts.map +1 -1
  21. package/dist/panels.bundle.js +1210 -209
  22. package/dist/panels.bundle.js.map +1 -1
  23. package/dist/tools/index.d.ts +1 -0
  24. package/dist/tools/index.d.ts.map +1 -1
  25. package/dist/tools.bundle.js +151 -0
  26. package/package.json +1 -1
@@ -140,7 +140,18 @@ const createLucideIcon = (iconName, iconNode) => {
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$u = [
143
+ const __iconNode$w = [
144
+ ["path", { d: "M5 12h14", key: "1ays0h" }],
145
+ ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
146
+ ];
147
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$w);
148
+ /**
149
+ * @license lucide-react v0.552.0 - ISC
150
+ *
151
+ * This source code is licensed under the ISC license.
152
+ * See the LICENSE file in the root directory of this source tree.
153
+ */
154
+ const __iconNode$v = [
144
155
  ["path", { d: "M10 12h4", key: "a56b0p" }],
145
156
  ["path", { d: "M10 8h4", key: "1sr2af" }],
146
157
  ["path", { d: "M14 21v-3a2 2 0 0 0-4 0v3", key: "1rgiei" }],
@@ -153,132 +164,132 @@ const __iconNode$u = [
153
164
  ],
154
165
  ["path", { d: "M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16", key: "16ra0t" }]
155
166
  ];
156
- const Building2 = createLucideIcon("building-2", __iconNode$u);
167
+ const Building2 = createLucideIcon("building-2", __iconNode$v);
157
168
  /**
158
169
  * @license lucide-react v0.552.0 - ISC
159
170
  *
160
171
  * This source code is licensed under the ISC license.
161
172
  * See the LICENSE file in the root directory of this source tree.
162
173
  */
163
- const __iconNode$t = [
174
+ const __iconNode$u = [
164
175
  ["path", { d: "M8 2v4", key: "1cmpym" }],
165
176
  ["path", { d: "M16 2v4", key: "4m81vk" }],
166
177
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
167
178
  ["path", { d: "M3 10h18", key: "8toen8" }]
168
179
  ];
169
- const Calendar = createLucideIcon("calendar", __iconNode$t);
180
+ const Calendar = createLucideIcon("calendar", __iconNode$u);
170
181
  /**
171
182
  * @license lucide-react v0.552.0 - ISC
172
183
  *
173
184
  * This source code is licensed under the ISC license.
174
185
  * See the LICENSE file in the root directory of this source tree.
175
186
  */
176
- const __iconNode$s = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
177
- const Check = createLucideIcon("check", __iconNode$s);
187
+ const __iconNode$t = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
188
+ const Check = createLucideIcon("check", __iconNode$t);
178
189
  /**
179
190
  * @license lucide-react v0.552.0 - ISC
180
191
  *
181
192
  * This source code is licensed under the ISC license.
182
193
  * See the LICENSE file in the root directory of this source tree.
183
194
  */
184
- const __iconNode$r = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
185
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$r);
195
+ const __iconNode$s = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
196
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$s);
186
197
  /**
187
198
  * @license lucide-react v0.552.0 - ISC
188
199
  *
189
200
  * This source code is licensed under the ISC license.
190
201
  * See the LICENSE file in the root directory of this source tree.
191
202
  */
192
- const __iconNode$q = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
193
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$q);
203
+ const __iconNode$r = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
204
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$r);
194
205
  /**
195
206
  * @license lucide-react v0.552.0 - ISC
196
207
  *
197
208
  * This source code is licensed under the ISC license.
198
209
  * See the LICENSE file in the root directory of this source tree.
199
210
  */
200
- const __iconNode$p = [
211
+ const __iconNode$q = [
201
212
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
202
213
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
203
214
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
204
215
  ];
205
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$p);
216
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$q);
206
217
  /**
207
218
  * @license lucide-react v0.552.0 - ISC
208
219
  *
209
220
  * This source code is licensed under the ISC license.
210
221
  * See the LICENSE file in the root directory of this source tree.
211
222
  */
212
- const __iconNode$o = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
213
- const Circle = createLucideIcon("circle", __iconNode$o);
223
+ const __iconNode$p = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
224
+ const Circle = createLucideIcon("circle", __iconNode$p);
214
225
  /**
215
226
  * @license lucide-react v0.552.0 - ISC
216
227
  *
217
228
  * This source code is licensed under the ISC license.
218
229
  * See the LICENSE file in the root directory of this source tree.
219
230
  */
220
- const __iconNode$n = [
231
+ const __iconNode$o = [
221
232
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
222
233
  ["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" }]
223
234
  ];
224
- const Copy = createLucideIcon("copy", __iconNode$n);
235
+ const Copy = createLucideIcon("copy", __iconNode$o);
225
236
  /**
226
237
  * @license lucide-react v0.552.0 - ISC
227
238
  *
228
239
  * This source code is licensed under the ISC license.
229
240
  * See the LICENSE file in the root directory of this source tree.
230
241
  */
231
- const __iconNode$m = [
242
+ const __iconNode$n = [
232
243
  ["path", { d: "M10 12h.01", key: "1kxr2c" }],
233
244
  ["path", { d: "M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14", key: "36qu9e" }],
234
245
  ["path", { d: "M2 20h20", key: "owomy5" }]
235
246
  ];
236
- const DoorClosed = createLucideIcon("door-closed", __iconNode$m);
247
+ const DoorClosed = createLucideIcon("door-closed", __iconNode$n);
237
248
  /**
238
249
  * @license lucide-react v0.552.0 - ISC
239
250
  *
240
251
  * This source code is licensed under the ISC license.
241
252
  * See the LICENSE file in the root directory of this source tree.
242
253
  */
243
- const __iconNode$l = [
254
+ const __iconNode$m = [
244
255
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
245
256
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
246
257
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
247
258
  ];
248
- const Download = createLucideIcon("download", __iconNode$l);
259
+ const Download = createLucideIcon("download", __iconNode$m);
249
260
  /**
250
261
  * @license lucide-react v0.552.0 - ISC
251
262
  *
252
263
  * This source code is licensed under the ISC license.
253
264
  * See the LICENSE file in the root directory of this source tree.
254
265
  */
255
- const __iconNode$k = [
266
+ const __iconNode$l = [
256
267
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
257
268
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
258
269
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
259
270
  ];
260
- const ExternalLink = createLucideIcon("external-link", __iconNode$k);
271
+ const ExternalLink = createLucideIcon("external-link", __iconNode$l);
261
272
  /**
262
273
  * @license lucide-react v0.552.0 - ISC
263
274
  *
264
275
  * This source code is licensed under the ISC license.
265
276
  * See the LICENSE file in the root directory of this source tree.
266
277
  */
267
- const __iconNode$j = [
278
+ const __iconNode$k = [
268
279
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
269
280
  ["path", { d: "M3 7V5a2 2 0 0 1 2-2h2", key: "aa7l1z" }],
270
281
  ["path", { d: "M17 3h2a2 2 0 0 1 2 2v2", key: "4qcy5o" }],
271
282
  ["path", { d: "M21 17v2a2 2 0 0 1-2 2h-2", key: "6vwrx8" }],
272
283
  ["path", { d: "M7 21H5a2 2 0 0 1-2-2v-2", key: "ioqczr" }]
273
284
  ];
274
- const Focus = createLucideIcon("focus", __iconNode$j);
285
+ const Focus = createLucideIcon("focus", __iconNode$k);
275
286
  /**
276
287
  * @license lucide-react v0.552.0 - ISC
277
288
  *
278
289
  * This source code is licensed under the ISC license.
279
290
  * See the LICENSE file in the root directory of this source tree.
280
291
  */
281
- const __iconNode$i = [
292
+ const __iconNode$j = [
282
293
  [
283
294
  "path",
284
295
  {
@@ -290,14 +301,14 @@ const __iconNode$i = [
290
301
  ["path", { d: "M18 19c-2.8 0-5-2.2-5-5v8", key: "pkpw2h" }],
291
302
  ["circle", { cx: "20", cy: "19", r: "2", key: "1obnsp" }]
292
303
  ];
293
- const FolderGit2 = createLucideIcon("folder-git-2", __iconNode$i);
304
+ const FolderGit2 = createLucideIcon("folder-git-2", __iconNode$j);
294
305
  /**
295
306
  * @license lucide-react v0.552.0 - ISC
296
307
  *
297
308
  * This source code is licensed under the ISC license.
298
309
  * See the LICENSE file in the root directory of this source tree.
299
310
  */
300
- const __iconNode$h = [
311
+ const __iconNode$i = [
301
312
  [
302
313
  "path",
303
314
  {
@@ -306,14 +317,14 @@ const __iconNode$h = [
306
317
  }
307
318
  ]
308
319
  ];
309
- const FolderOpen = createLucideIcon("folder-open", __iconNode$h);
320
+ const FolderOpen = createLucideIcon("folder-open", __iconNode$i);
310
321
  /**
311
322
  * @license lucide-react v0.552.0 - ISC
312
323
  *
313
324
  * This source code is licensed under the ISC license.
314
325
  * See the LICENSE file in the root directory of this source tree.
315
326
  */
316
- const __iconNode$g = [
327
+ const __iconNode$h = [
317
328
  [
318
329
  "path",
319
330
  {
@@ -322,28 +333,28 @@ const __iconNode$g = [
322
333
  }
323
334
  ]
324
335
  ];
325
- const Folder = createLucideIcon("folder", __iconNode$g);
336
+ const Folder = createLucideIcon("folder", __iconNode$h);
326
337
  /**
327
338
  * @license lucide-react v0.552.0 - ISC
328
339
  *
329
340
  * This source code is licensed under the ISC license.
330
341
  * See the LICENSE file in the root directory of this source tree.
331
342
  */
332
- const __iconNode$f = [
343
+ const __iconNode$g = [
333
344
  ["circle", { cx: "12", cy: "18", r: "3", key: "1mpf1b" }],
334
345
  ["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
335
346
  ["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
336
347
  ["path", { d: "M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9", key: "1uq4wg" }],
337
348
  ["path", { d: "M12 12v3", key: "158kv8" }]
338
349
  ];
339
- const GitFork = createLucideIcon("git-fork", __iconNode$f);
350
+ const GitFork = createLucideIcon("git-fork", __iconNode$g);
340
351
  /**
341
352
  * @license lucide-react v0.552.0 - ISC
342
353
  *
343
354
  * This source code is licensed under the ISC license.
344
355
  * See the LICENSE file in the root directory of this source tree.
345
356
  */
346
- const __iconNode$e = [
357
+ const __iconNode$f = [
347
358
  ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
348
359
  [
349
360
  "path",
@@ -353,14 +364,14 @@ const __iconNode$e = [
353
364
  }
354
365
  ]
355
366
  ];
356
- const House = createLucideIcon("house", __iconNode$e);
367
+ const House = createLucideIcon("house", __iconNode$f);
357
368
  /**
358
369
  * @license lucide-react v0.552.0 - ISC
359
370
  *
360
371
  * This source code is licensed under the ISC license.
361
372
  * See the LICENSE file in the root directory of this source tree.
362
373
  */
363
- const __iconNode$d = [
374
+ const __iconNode$e = [
364
375
  [
365
376
  "path",
366
377
  {
@@ -383,44 +394,44 @@ const __iconNode$d = [
383
394
  }
384
395
  ]
385
396
  ];
386
- const Layers = createLucideIcon("layers", __iconNode$d);
397
+ const Layers = createLucideIcon("layers", __iconNode$e);
387
398
  /**
388
399
  * @license lucide-react v0.552.0 - ISC
389
400
  *
390
401
  * This source code is licensed under the ISC license.
391
402
  * See the LICENSE file in the root directory of this source tree.
392
403
  */
393
- const __iconNode$c = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
394
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$c);
404
+ const __iconNode$d = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
405
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$d);
395
406
  /**
396
407
  * @license lucide-react v0.552.0 - ISC
397
408
  *
398
409
  * This source code is licensed under the ISC license.
399
410
  * See the LICENSE file in the root directory of this source tree.
400
411
  */
401
- const __iconNode$b = [
412
+ const __iconNode$c = [
402
413
  ["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2", key: "1w4ew1" }],
403
414
  ["path", { d: "M7 11V7a5 5 0 0 1 10 0v4", key: "fwvmzm" }]
404
415
  ];
405
- const Lock = createLucideIcon("lock", __iconNode$b);
416
+ const Lock = createLucideIcon("lock", __iconNode$c);
406
417
  /**
407
418
  * @license lucide-react v0.552.0 - ISC
408
419
  *
409
420
  * This source code is licensed under the ISC license.
410
421
  * See the LICENSE file in the root directory of this source tree.
411
422
  */
412
- const __iconNode$a = [
423
+ const __iconNode$b = [
413
424
  ["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7", key: "132q7q" }],
414
425
  ["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2", key: "izxlao" }]
415
426
  ];
416
- const Mail = createLucideIcon("mail", __iconNode$a);
427
+ const Mail = createLucideIcon("mail", __iconNode$b);
417
428
  /**
418
429
  * @license lucide-react v0.552.0 - ISC
419
430
  *
420
431
  * This source code is licensed under the ISC license.
421
432
  * See the LICENSE file in the root directory of this source tree.
422
433
  */
423
- const __iconNode$9 = [
434
+ const __iconNode$a = [
424
435
  [
425
436
  "path",
426
437
  {
@@ -430,25 +441,25 @@ const __iconNode$9 = [
430
441
  ],
431
442
  ["circle", { cx: "12", cy: "10", r: "3", key: "ilqhr7" }]
432
443
  ];
433
- const MapPin = createLucideIcon("map-pin", __iconNode$9);
444
+ const MapPin = createLucideIcon("map-pin", __iconNode$a);
434
445
  /**
435
446
  * @license lucide-react v0.552.0 - ISC
436
447
  *
437
448
  * This source code is licensed under the ISC license.
438
449
  * See the LICENSE file in the root directory of this source tree.
439
450
  */
440
- const __iconNode$8 = [
451
+ const __iconNode$9 = [
441
452
  ["path", { d: "M8 6L12 2L16 6", key: "1yvkyx" }],
442
453
  ["path", { d: "M12 2V22", key: "r89rzk" }]
443
454
  ];
444
- const MoveUp = createLucideIcon("move-up", __iconNode$8);
455
+ const MoveUp = createLucideIcon("move-up", __iconNode$9);
445
456
  /**
446
457
  * @license lucide-react v0.552.0 - ISC
447
458
  *
448
459
  * This source code is licensed under the ISC license.
449
460
  * See the LICENSE file in the root directory of this source tree.
450
461
  */
451
- const __iconNode$7 = [
462
+ const __iconNode$8 = [
452
463
  [
453
464
  "path",
454
465
  {
@@ -457,29 +468,43 @@ const __iconNode$7 = [
457
468
  }
458
469
  ]
459
470
  ];
460
- const Pen = createLucideIcon("pen", __iconNode$7);
471
+ const Pen = createLucideIcon("pen", __iconNode$8);
461
472
  /**
462
473
  * @license lucide-react v0.552.0 - ISC
463
474
  *
464
475
  * This source code is licensed under the ISC license.
465
476
  * See the LICENSE file in the root directory of this source tree.
466
477
  */
467
- const __iconNode$6 = [
478
+ const __iconNode$7 = [
468
479
  ["path", { d: "M5 12h14", key: "1ays0h" }],
469
480
  ["path", { d: "M12 5v14", key: "s699le" }]
470
481
  ];
471
- const Plus = createLucideIcon("plus", __iconNode$6);
482
+ const Plus = createLucideIcon("plus", __iconNode$7);
472
483
  /**
473
484
  * @license lucide-react v0.552.0 - ISC
474
485
  *
475
486
  * This source code is licensed under the ISC license.
476
487
  * See the LICENSE file in the root directory of this source tree.
477
488
  */
478
- const __iconNode$5 = [
489
+ const __iconNode$6 = [
479
490
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
480
491
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
481
492
  ];
482
- const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$5);
493
+ const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$6);
494
+ /**
495
+ * @license lucide-react v0.552.0 - ISC
496
+ *
497
+ * This source code is licensed under the ISC license.
498
+ * See the LICENSE file in the root directory of this source tree.
499
+ */
500
+ const __iconNode$5 = [
501
+ ["path", { d: "m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "7g6ntu" }],
502
+ ["path", { d: "m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z", key: "ijws7r" }],
503
+ ["path", { d: "M7 21h10", key: "1b0cd5" }],
504
+ ["path", { d: "M12 3v18", key: "108xh3" }],
505
+ ["path", { d: "M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2", key: "3gwbw2" }]
506
+ ];
507
+ const Scale = createLucideIcon("scale", __iconNode$5);
483
508
  /**
484
509
  * @license lucide-react v0.552.0 - ISC
485
510
  *
@@ -614,7 +639,7 @@ const LANGUAGE_COLORS = {
614
639
  Shell: "#89e051",
615
640
  PowerShell: "#012456"
616
641
  };
617
- const getLanguageColor$1 = (language) => {
642
+ const getLanguageColor$2 = (language) => {
618
643
  return LANGUAGE_COLORS[language] || "#6e7681";
619
644
  };
620
645
  const LocalProjectCard = ({
@@ -920,7 +945,7 @@ const LocalProjectCard = ({
920
945
  minWidth: 0
921
946
  },
922
947
  children: [
923
- /* @__PURE__ */ jsx(
948
+ /* @__PURE__ */ jsxs(
924
949
  "div",
925
950
  {
926
951
  style: {
@@ -928,23 +953,31 @@ const LocalProjectCard = ({
928
953
  alignItems: "center",
929
954
  gap: "8px"
930
955
  },
931
- children: /* @__PURE__ */ jsx(
932
- "span",
933
- {
934
- className: ((_c = entry.github) == null ? void 0 : _c.primaryLanguage) ? "project-name-underline" : void 0,
935
- style: {
936
- flex: 1,
937
- fontSize: `${theme.fontSizes[2]}px`,
938
- fontWeight: theme.fontWeights.semibold,
939
- color: theme.colors.text,
940
- overflow: "hidden",
941
- textOverflow: "ellipsis",
942
- whiteSpace: "nowrap",
943
- "--underline-color": ((_d = entry.github) == null ? void 0 : _d.primaryLanguage) ? getLanguageColor$1(entry.github.primaryLanguage) : theme.colors.textSecondary
944
- },
945
- children: entry.name
946
- }
947
- )
956
+ children: [
957
+ /* @__PURE__ */ jsx(
958
+ "span",
959
+ {
960
+ className: ((_c = entry.github) == null ? void 0 : _c.primaryLanguage) ? "project-name-underline" : void 0,
961
+ style: {
962
+ fontSize: `${theme.fontSizes[2]}px`,
963
+ fontWeight: theme.fontWeights.semibold,
964
+ color: theme.colors.text,
965
+ overflow: "hidden",
966
+ textOverflow: "ellipsis",
967
+ whiteSpace: "nowrap",
968
+ "--underline-color": ((_d = entry.github) == null ? void 0 : _d.primaryLanguage) ? getLanguageColor$2(entry.github.primaryLanguage) : theme.colors.textSecondary
969
+ },
970
+ children: entry.name
971
+ }
972
+ ),
973
+ entry.github && entry.github.isPublic === false && /* @__PURE__ */ jsx("span", { title: "Private repository", children: /* @__PURE__ */ jsx(
974
+ Lock,
975
+ {
976
+ size: 12,
977
+ style: { color: theme.colors.textSecondary, flexShrink: 0 }
978
+ }
979
+ ) })
980
+ ]
948
981
  }
949
982
  ),
950
983
  /* @__PURE__ */ jsxs(
@@ -1005,10 +1038,10 @@ const LocalProjectCard = ({
1005
1038
  }
1006
1039
  );
1007
1040
  };
1008
- const PANEL_ID$b = "industry-theme.local-projects";
1009
- const createPanelEvent$5 = (type, payload) => ({
1041
+ const PANEL_ID$d = "industry-theme.local-projects";
1042
+ const createPanelEvent$6 = (type, payload) => ({
1010
1043
  type,
1011
- source: PANEL_ID$b,
1044
+ source: PANEL_ID$d,
1012
1045
  timestamp: Date.now(),
1013
1046
  payload
1014
1047
  });
@@ -1044,7 +1077,7 @@ const LocalProjectsPanelContent = ({
1044
1077
  try {
1045
1078
  await panelActions.openRepository(entry);
1046
1079
  setWindowStates((prev) => new Map(prev).set(entry.path, "ready"));
1047
- events.emit(createPanelEvent$5(`${PANEL_ID$b}:repository-opened`, { entry }));
1080
+ events.emit(createPanelEvent$6(`${PANEL_ID$d}:repository-opened`, { entry }));
1048
1081
  } catch (error) {
1049
1082
  console.error("Error opening repository:", error);
1050
1083
  setWindowStates((prev) => new Map(prev).set(entry.path, "closed"));
@@ -1055,14 +1088,14 @@ const LocalProjectsPanelContent = ({
1055
1088
  useEffect(() => {
1056
1089
  const unsubscribers = [
1057
1090
  // Filter event from tools
1058
- events.on(`${PANEL_ID$b}:filter`, (event) => {
1091
+ events.on(`${PANEL_ID$d}:filter`, (event) => {
1059
1092
  var _a2;
1060
1093
  if (((_a2 = event.payload) == null ? void 0 : _a2.filter) !== void 0) {
1061
1094
  setFilter(event.payload.filter);
1062
1095
  }
1063
1096
  }),
1064
1097
  // Select repository event from tools
1065
- events.on(`${PANEL_ID$b}:select-repository`, (event) => {
1098
+ events.on(`${PANEL_ID$d}:select-repository`, (event) => {
1066
1099
  var _a2;
1067
1100
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
1068
1101
  if (identifier) {
@@ -1071,12 +1104,12 @@ const LocalProjectsPanelContent = ({
1071
1104
  );
1072
1105
  if (entry) {
1073
1106
  setSelectedEntry(entry);
1074
- events.emit(createPanelEvent$5(`${PANEL_ID$b}:repository-selected`, { entry }));
1107
+ events.emit(createPanelEvent$6(`${PANEL_ID$d}:repository-selected`, { entry }));
1075
1108
  }
1076
1109
  }
1077
1110
  }),
1078
1111
  // Open repository event from tools
1079
- events.on(`${PANEL_ID$b}:open-repository`, (event) => {
1112
+ events.on(`${PANEL_ID$d}:open-repository`, (event) => {
1080
1113
  var _a2;
1081
1114
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
1082
1115
  if (identifier) {
@@ -1124,7 +1157,7 @@ const LocalProjectsPanelContent = ({
1124
1157
  };
1125
1158
  const handleSelectRepository = (entry) => {
1126
1159
  setSelectedEntry(entry);
1127
- events.emit(createPanelEvent$5(`${PANEL_ID$b}:repository-selected`, { entry }));
1160
+ events.emit(createPanelEvent$6(`${PANEL_ID$d}:repository-selected`, { entry }));
1128
1161
  };
1129
1162
  const normalizedFilter = filter.trim().toLowerCase();
1130
1163
  const filteredAndSortedRepositories = useMemo(() => {
@@ -1385,10 +1418,10 @@ const LocalProjectsPanelPreview = () => {
1385
1418
  }
1386
1419
  );
1387
1420
  };
1388
- const PANEL_ID$a = "industry-theme.workspace-repositories";
1389
- const createPanelEvent$4 = (type, payload) => ({
1421
+ const PANEL_ID$c = "industry-theme.workspace-repositories";
1422
+ const createPanelEvent$5 = (type, payload) => ({
1390
1423
  type,
1391
- source: PANEL_ID$a,
1424
+ source: PANEL_ID$c,
1392
1425
  timestamp: Date.now(),
1393
1426
  payload
1394
1427
  });
@@ -1453,7 +1486,7 @@ const WorkspaceRepositoriesPanelContent = ({
1453
1486
  (repository) => {
1454
1487
  var _a;
1455
1488
  events.emit(
1456
- createPanelEvent$4("repository:selected", {
1489
+ createPanelEvent$5("repository:selected", {
1457
1490
  repositoryId: ((_a = repository.github) == null ? void 0 : _a.id) || repository.name,
1458
1491
  repository,
1459
1492
  repositoryPath: repository.path
@@ -1466,7 +1499,7 @@ const WorkspaceRepositoriesPanelContent = ({
1466
1499
  (repository) => {
1467
1500
  var _a;
1468
1501
  events.emit(
1469
- createPanelEvent$4("repository:opened", {
1502
+ createPanelEvent$5("repository:opened", {
1470
1503
  repositoryId: ((_a = repository.github) == null ? void 0 : _a.id) || repository.name,
1471
1504
  repository
1472
1505
  })
@@ -1507,7 +1540,7 @@ const WorkspaceRepositoriesPanelContent = ({
1507
1540
  );
1508
1541
  useEffect(() => {
1509
1542
  const unsubscribers = [
1510
- events.on(`${PANEL_ID$a}:select-repository`, (event) => {
1543
+ events.on(`${PANEL_ID$c}:select-repository`, (event) => {
1511
1544
  var _a;
1512
1545
  const path = (_a = event.payload) == null ? void 0 : _a.repositoryPath;
1513
1546
  if (path) {
@@ -1517,7 +1550,7 @@ const WorkspaceRepositoriesPanelContent = ({
1517
1550
  }
1518
1551
  }
1519
1552
  }),
1520
- events.on(`${PANEL_ID$a}:open-repository`, (event) => {
1553
+ events.on(`${PANEL_ID$c}:open-repository`, (event) => {
1521
1554
  var _a;
1522
1555
  const path = (_a = event.payload) == null ? void 0 : _a.repositoryPath;
1523
1556
  if (path) {
@@ -2065,7 +2098,6 @@ const WorkspaceCard = ({
2065
2098
  "span",
2066
2099
  {
2067
2100
  style: {
2068
- flex: 1,
2069
2101
  whiteSpace: "nowrap",
2070
2102
  overflow: "hidden",
2071
2103
  textOverflow: "ellipsis"
@@ -2073,6 +2105,14 @@ const WorkspaceCard = ({
2073
2105
  children: workspace.name
2074
2106
  }
2075
2107
  ),
2108
+ workspace.isPrivate && /* @__PURE__ */ jsx("span", { title: "Private workspace", children: /* @__PURE__ */ jsx(
2109
+ Lock,
2110
+ {
2111
+ size: 12,
2112
+ style: { color: theme.colors.textSecondary, flexShrink: 0 }
2113
+ }
2114
+ ) }),
2115
+ /* @__PURE__ */ jsx("span", { style: { flex: 1 } }),
2076
2116
  isDefault && /* @__PURE__ */ jsx(
2077
2117
  "span",
2078
2118
  {
@@ -2206,10 +2246,10 @@ const WorkspaceCard = ({
2206
2246
  }
2207
2247
  );
2208
2248
  };
2209
- const PANEL_ID$9 = "industry-theme.workspaces-list";
2210
- const createPanelEvent$3 = (type, payload) => ({
2249
+ const PANEL_ID$b = "industry-theme.workspaces-list";
2250
+ const createPanelEvent$4 = (type, payload) => ({
2211
2251
  type,
2212
- source: PANEL_ID$9,
2252
+ source: PANEL_ID$b,
2213
2253
  timestamp: Date.now(),
2214
2254
  payload
2215
2255
  });
@@ -2284,7 +2324,7 @@ const WorkspacesListPanelContent = ({
2284
2324
  (workspace) => {
2285
2325
  setSelectedWorkspaceId(workspace.id);
2286
2326
  events.emit(
2287
- createPanelEvent$3(`${PANEL_ID$9}:workspace:selected`, {
2327
+ createPanelEvent$4(`${PANEL_ID$b}:workspace:selected`, {
2288
2328
  workspaceId: workspace.id,
2289
2329
  workspace
2290
2330
  })
@@ -2301,7 +2341,7 @@ const WorkspacesListPanelContent = ({
2301
2341
  try {
2302
2342
  await panelActions.openWorkspace(workspace.id);
2303
2343
  events.emit(
2304
- createPanelEvent$3(`${PANEL_ID$9}:workspace:opened`, {
2344
+ createPanelEvent$4(`${PANEL_ID$b}:workspace:opened`, {
2305
2345
  workspaceId: workspace.id,
2306
2346
  workspace
2307
2347
  })
@@ -2325,7 +2365,7 @@ const WorkspacesListPanelContent = ({
2325
2365
  try {
2326
2366
  await panelActions.deleteWorkspace(workspace.id);
2327
2367
  events.emit(
2328
- createPanelEvent$3(`${PANEL_ID$9}:workspace:deleted`, {
2368
+ createPanelEvent$4(`${PANEL_ID$b}:workspace:deleted`, {
2329
2369
  workspaceId: workspace.id
2330
2370
  })
2331
2371
  );
@@ -2349,13 +2389,13 @@ const WorkspacesListPanelContent = ({
2349
2389
  );
2350
2390
  const handleCreateWorkspace = useCallback(() => {
2351
2391
  events.emit(
2352
- createPanelEvent$3(`${PANEL_ID$9}:create-workspace-requested`, {})
2392
+ createPanelEvent$4(`${PANEL_ID$b}:create-workspace-requested`, {})
2353
2393
  );
2354
2394
  }, [events]);
2355
2395
  useEffect(() => {
2356
2396
  const unsubscribers = [
2357
2397
  // Select workspace event from tools
2358
- events.on(`${PANEL_ID$9}:select-workspace`, (event) => {
2398
+ events.on(`${PANEL_ID$b}:select-workspace`, (event) => {
2359
2399
  var _a2;
2360
2400
  const workspaceId = (_a2 = event.payload) == null ? void 0 : _a2.workspaceId;
2361
2401
  if (workspaceId) {
@@ -2366,7 +2406,7 @@ const WorkspacesListPanelContent = ({
2366
2406
  }
2367
2407
  }),
2368
2408
  // Open workspace event from tools
2369
- events.on(`${PANEL_ID$9}:open-workspace`, (event) => {
2409
+ events.on(`${PANEL_ID$b}:open-workspace`, (event) => {
2370
2410
  var _a2;
2371
2411
  const workspaceId = (_a2 = event.payload) == null ? void 0 : _a2.workspaceId;
2372
2412
  if (workspaceId) {
@@ -2378,14 +2418,14 @@ const WorkspacesListPanelContent = ({
2378
2418
  }),
2379
2419
  // Create workspace event from tools
2380
2420
  events.on(
2381
- `${PANEL_ID$9}:create-workspace`,
2421
+ `${PANEL_ID$b}:create-workspace`,
2382
2422
  async (event) => {
2383
2423
  const { name, description } = event.payload || {};
2384
2424
  if (name && panelActions.createWorkspace) {
2385
2425
  try {
2386
2426
  const workspace = await panelActions.createWorkspace(name, { description });
2387
2427
  events.emit(
2388
- createPanelEvent$3(`${PANEL_ID$9}:workspace:created`, {
2428
+ createPanelEvent$4(`${PANEL_ID$b}:workspace:created`, {
2389
2429
  workspaceId: workspace.id,
2390
2430
  workspace
2391
2431
  })
@@ -2533,51 +2573,805 @@ const WorkspacesListPanelContent = ({
2533
2573
  style: {
2534
2574
  display: "flex",
2535
2575
  alignItems: "center",
2536
- gap: "8px"
2576
+ gap: "8px"
2577
+ },
2578
+ children: [
2579
+ /* @__PURE__ */ jsx(
2580
+ "input",
2581
+ {
2582
+ type: "text",
2583
+ value: searchQuery,
2584
+ onChange: (e) => setSearchQuery(e.target.value),
2585
+ placeholder: "Search by workspace or repository name...",
2586
+ autoFocus: true,
2587
+ style: {
2588
+ flex: 1,
2589
+ padding: "8px 12px",
2590
+ borderRadius: "6px",
2591
+ border: `1px solid ${theme.colors.border}`,
2592
+ backgroundColor: theme.colors.background,
2593
+ color: theme.colors.text,
2594
+ fontSize: `${theme.fontSizes[1]}px`,
2595
+ fontFamily: theme.fonts.body,
2596
+ outline: "none"
2597
+ }
2598
+ }
2599
+ ),
2600
+ searchQuery && /* @__PURE__ */ jsx(
2601
+ "button",
2602
+ {
2603
+ onClick: () => setSearchQuery(""),
2604
+ style: {
2605
+ display: "flex",
2606
+ alignItems: "center",
2607
+ justifyContent: "center",
2608
+ width: "28px",
2609
+ height: "28px",
2610
+ borderRadius: "6px",
2611
+ border: `1px solid ${theme.colors.border}`,
2612
+ backgroundColor: theme.colors.backgroundTertiary,
2613
+ color: theme.colors.text,
2614
+ cursor: "pointer",
2615
+ transition: "all 0.15s ease"
2616
+ },
2617
+ title: "Clear search",
2618
+ children: /* @__PURE__ */ jsx(X, { size: 16 })
2619
+ }
2620
+ )
2621
+ ]
2622
+ }
2623
+ ),
2624
+ /* @__PURE__ */ jsxs(
2625
+ "div",
2626
+ {
2627
+ style: {
2628
+ flex: 1,
2629
+ overflowY: "auto",
2630
+ display: "flex",
2631
+ flexDirection: "column",
2632
+ gap: "4px"
2633
+ },
2634
+ children: [
2635
+ sortedWorkspaces.map((workspace) => /* @__PURE__ */ jsx(
2636
+ WorkspaceCard,
2637
+ {
2638
+ workspace,
2639
+ isSelected: workspace.id === selectedWorkspaceId,
2640
+ isDefault: workspace.id === defaultWorkspaceId,
2641
+ onClick: handleWorkspaceSelect,
2642
+ onOpen: panelActions.openWorkspace ? handleOpenWorkspace : void 0,
2643
+ onDelete: panelActions.deleteWorkspace ? handleDeleteWorkspace : void 0,
2644
+ onUpdateName: panelActions.updateWorkspace ? handleUpdateWorkspaceName : void 0
2645
+ },
2646
+ workspace.id
2647
+ )),
2648
+ sortedWorkspaces.length === 0 && !loading && /* @__PURE__ */ jsx(
2649
+ "div",
2650
+ {
2651
+ style: {
2652
+ padding: "32px",
2653
+ textAlign: "center",
2654
+ color: theme.colors.textSecondary
2655
+ },
2656
+ children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: searchQuery.trim() ? `No workspaces found matching "${searchQuery}"` : "No workspaces found." })
2657
+ }
2658
+ )
2659
+ ]
2660
+ }
2661
+ )
2662
+ ] });
2663
+ };
2664
+ const WorkspacesListPanel = (props) => {
2665
+ return /* @__PURE__ */ jsx(WorkspacesListPanelContent, { ...props });
2666
+ };
2667
+ const WorkspacesListPanelPreview = () => {
2668
+ const { theme } = useTheme();
2669
+ return /* @__PURE__ */ jsxs(
2670
+ "div",
2671
+ {
2672
+ style: {
2673
+ padding: "12px",
2674
+ fontSize: `${theme.fontSizes[0]}px`,
2675
+ fontFamily: theme.fonts.body,
2676
+ color: theme.colors.text,
2677
+ display: "flex",
2678
+ flexDirection: "column",
2679
+ gap: "8px"
2680
+ },
2681
+ children: [
2682
+ /* @__PURE__ */ jsxs(
2683
+ "div",
2684
+ {
2685
+ style: {
2686
+ display: "flex",
2687
+ alignItems: "center",
2688
+ gap: "6px",
2689
+ fontWeight: theme.fontWeights.semibold
2690
+ },
2691
+ children: [
2692
+ /* @__PURE__ */ jsx(Layers, { size: 16, style: { color: theme.colors.primary } }),
2693
+ /* @__PURE__ */ jsx("span", { children: "Workspaces" })
2694
+ ]
2695
+ }
2696
+ ),
2697
+ /* @__PURE__ */ jsx(
2698
+ "div",
2699
+ {
2700
+ style: {
2701
+ fontSize: `${theme.fontSizes[0]}px`,
2702
+ fontFamily: theme.fonts.body,
2703
+ color: theme.colors.textSecondary,
2704
+ marginTop: "4px"
2705
+ },
2706
+ children: "Browse and manage your workspaces"
2707
+ }
2708
+ )
2709
+ ]
2710
+ }
2711
+ );
2712
+ };
2713
+ const PANEL_ID$a = "industry-theme.workspace-collection";
2714
+ const createPanelEvent$3 = (type, payload) => ({
2715
+ type,
2716
+ source: PANEL_ID$a,
2717
+ timestamp: Date.now(),
2718
+ payload
2719
+ });
2720
+ const WorkspaceCollectionRepositoryCard = ({
2721
+ repository,
2722
+ isSelected = false,
2723
+ onSelect,
2724
+ onNavigate,
2725
+ onRemove
2726
+ }) => {
2727
+ const { theme } = useTheme();
2728
+ const [isHovered, setIsHovered] = useState(false);
2729
+ const handleClick = useCallback(() => {
2730
+ if (onSelect) {
2731
+ onSelect(repository);
2732
+ }
2733
+ }, [onSelect, repository]);
2734
+ const handleNavigate = useCallback(
2735
+ (e) => {
2736
+ e.stopPropagation();
2737
+ if (onNavigate) {
2738
+ onNavigate(repository);
2739
+ }
2740
+ },
2741
+ [onNavigate, repository]
2742
+ );
2743
+ const handleRemove = useCallback(
2744
+ (e) => {
2745
+ e.stopPropagation();
2746
+ if (onRemove) {
2747
+ onRemove(repository);
2748
+ }
2749
+ },
2750
+ [onRemove, repository]
2751
+ );
2752
+ const handleOpenOnGitHub = useCallback(
2753
+ (e) => {
2754
+ e.stopPropagation();
2755
+ window.open(repository.html_url, "_blank", "noopener,noreferrer");
2756
+ },
2757
+ [repository.html_url]
2758
+ );
2759
+ const getRelativeTime = (dateString) => {
2760
+ const date = new Date(dateString);
2761
+ const now = /* @__PURE__ */ new Date();
2762
+ const diffMs = now.getTime() - date.getTime();
2763
+ const diffDays = Math.floor(diffMs / (1e3 * 60 * 60 * 24));
2764
+ if (diffDays === 0) return "today";
2765
+ if (diffDays === 1) return "yesterday";
2766
+ if (diffDays < 7) return `${diffDays} days ago`;
2767
+ if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;
2768
+ if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;
2769
+ return `${Math.floor(diffDays / 365)} years ago`;
2770
+ };
2771
+ return /* @__PURE__ */ jsxs(
2772
+ "div",
2773
+ {
2774
+ onClick: handleClick,
2775
+ onMouseEnter: () => setIsHovered(true),
2776
+ onMouseLeave: () => setIsHovered(false),
2777
+ style: {
2778
+ display: "flex",
2779
+ alignItems: "flex-start",
2780
+ gap: "12px",
2781
+ padding: "12px",
2782
+ borderRadius: "8px",
2783
+ backgroundColor: isSelected ? `${theme.colors.primary}15` : isHovered ? theme.colors.backgroundTertiary : "transparent",
2784
+ border: `1px solid ${isSelected ? theme.colors.primary : "transparent"}`,
2785
+ cursor: onSelect ? "pointer" : "default",
2786
+ transition: "background-color 0.15s, border-color 0.15s"
2787
+ },
2788
+ children: [
2789
+ /* @__PURE__ */ jsx(
2790
+ RepositoryAvatar,
2791
+ {
2792
+ owner: repository.owner.login,
2793
+ customAvatarUrl: repository.owner.avatar_url,
2794
+ size: 40
2795
+ }
2796
+ ),
2797
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
2798
+ /* @__PURE__ */ jsx(
2799
+ "div",
2800
+ {
2801
+ style: {
2802
+ display: "flex",
2803
+ alignItems: "center",
2804
+ gap: "8px",
2805
+ marginBottom: "4px"
2806
+ },
2807
+ children: /* @__PURE__ */ jsx(
2808
+ "span",
2809
+ {
2810
+ style: {
2811
+ fontSize: `${theme.fontSizes[2]}px`,
2812
+ fontWeight: theme.fontWeights.semibold,
2813
+ fontFamily: theme.fonts.body,
2814
+ color: theme.colors.text,
2815
+ overflow: "hidden",
2816
+ textOverflow: "ellipsis",
2817
+ whiteSpace: "nowrap"
2818
+ },
2819
+ title: repository.full_name,
2820
+ children: repository.name
2821
+ }
2822
+ )
2823
+ }
2824
+ ),
2825
+ /* @__PURE__ */ jsx(
2826
+ "div",
2827
+ {
2828
+ style: {
2829
+ fontSize: `${theme.fontSizes[0]}px`,
2830
+ fontFamily: theme.fonts.body,
2831
+ color: theme.colors.textSecondary,
2832
+ marginBottom: "4px"
2833
+ },
2834
+ children: repository.owner.login
2835
+ }
2836
+ ),
2837
+ repository.description && /* @__PURE__ */ jsx(
2838
+ "div",
2839
+ {
2840
+ style: {
2841
+ fontSize: `${theme.fontSizes[1]}px`,
2842
+ fontFamily: theme.fonts.body,
2843
+ color: theme.colors.textSecondary,
2844
+ lineHeight: theme.lineHeights.body,
2845
+ overflow: "hidden",
2846
+ textOverflow: "ellipsis",
2847
+ display: "-webkit-box",
2848
+ WebkitLineClamp: 2,
2849
+ WebkitBoxOrient: "vertical",
2850
+ marginBottom: "8px"
2851
+ },
2852
+ children: repository.description
2853
+ }
2854
+ ),
2855
+ /* @__PURE__ */ jsxs(
2856
+ "div",
2857
+ {
2858
+ style: {
2859
+ display: "flex",
2860
+ alignItems: "center",
2861
+ gap: "12px",
2862
+ fontSize: `${theme.fontSizes[0]}px`,
2863
+ fontFamily: theme.fonts.body,
2864
+ color: theme.colors.textSecondary
2865
+ },
2866
+ children: [
2867
+ repository.language && /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
2868
+ /* @__PURE__ */ jsx(
2869
+ "span",
2870
+ {
2871
+ style: {
2872
+ width: "8px",
2873
+ height: "8px",
2874
+ borderRadius: "50%",
2875
+ backgroundColor: getLanguageColor$1(repository.language)
2876
+ }
2877
+ }
2878
+ ),
2879
+ repository.language
2880
+ ] }),
2881
+ /* @__PURE__ */ jsxs("span", { children: [
2882
+ "Updated ",
2883
+ getRelativeTime(repository.pushed_at || repository.updated_at)
2884
+ ] })
2885
+ ]
2886
+ }
2887
+ )
2888
+ ] }),
2889
+ /* @__PURE__ */ jsxs(
2890
+ "div",
2891
+ {
2892
+ style: {
2893
+ display: "flex",
2894
+ alignItems: "center",
2895
+ gap: "8px",
2896
+ flexShrink: 0,
2897
+ opacity: isHovered || isSelected ? 1 : 0,
2898
+ transition: "opacity 0.15s"
2899
+ },
2900
+ children: [
2901
+ onRemove && /* @__PURE__ */ jsx(
2902
+ "button",
2903
+ {
2904
+ type: "button",
2905
+ onClick: handleRemove,
2906
+ style: {
2907
+ display: "flex",
2908
+ alignItems: "center",
2909
+ justifyContent: "center",
2910
+ width: "32px",
2911
+ height: "32px",
2912
+ borderRadius: "6px",
2913
+ border: `1px solid ${theme.colors.border}`,
2914
+ backgroundColor: "transparent",
2915
+ color: theme.colors.textSecondary,
2916
+ cursor: "pointer",
2917
+ transition: "background-color 0.15s, color 0.15s"
2918
+ },
2919
+ title: "Remove from workspace",
2920
+ onMouseEnter: (e) => {
2921
+ e.currentTarget.style.backgroundColor = `${theme.colors.error || "#ef4444"}20`;
2922
+ e.currentTarget.style.color = theme.colors.error || "#ef4444";
2923
+ e.currentTarget.style.borderColor = theme.colors.error || "#ef4444";
2924
+ },
2925
+ onMouseLeave: (e) => {
2926
+ e.currentTarget.style.backgroundColor = "transparent";
2927
+ e.currentTarget.style.color = theme.colors.textSecondary;
2928
+ e.currentTarget.style.borderColor = theme.colors.border;
2929
+ },
2930
+ children: /* @__PURE__ */ jsx(Trash2, { size: 16 })
2931
+ }
2932
+ ),
2933
+ /* @__PURE__ */ jsx(
2934
+ "button",
2935
+ {
2936
+ type: "button",
2937
+ onClick: handleOpenOnGitHub,
2938
+ style: {
2939
+ display: "flex",
2940
+ alignItems: "center",
2941
+ justifyContent: "center",
2942
+ width: "32px",
2943
+ height: "32px",
2944
+ borderRadius: "6px",
2945
+ border: `1px solid ${theme.colors.border}`,
2946
+ backgroundColor: "transparent",
2947
+ color: theme.colors.textSecondary,
2948
+ cursor: "pointer",
2949
+ transition: "background-color 0.15s, color 0.15s"
2950
+ },
2951
+ title: "Open on GitHub",
2952
+ onMouseEnter: (e) => {
2953
+ e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
2954
+ e.currentTarget.style.color = theme.colors.text;
2955
+ },
2956
+ onMouseLeave: (e) => {
2957
+ e.currentTarget.style.backgroundColor = "transparent";
2958
+ e.currentTarget.style.color = theme.colors.textSecondary;
2959
+ },
2960
+ children: /* @__PURE__ */ jsx(ExternalLink, { size: 16 })
2961
+ }
2962
+ ),
2963
+ onNavigate && /* @__PURE__ */ jsxs(
2964
+ "button",
2965
+ {
2966
+ type: "button",
2967
+ onClick: handleNavigate,
2968
+ style: {
2969
+ display: "flex",
2970
+ alignItems: "center",
2971
+ gap: "6px",
2972
+ padding: "6px 12px",
2973
+ borderRadius: "6px",
2974
+ border: "none",
2975
+ backgroundColor: theme.colors.primary,
2976
+ color: theme.colors.background,
2977
+ fontSize: `${theme.fontSizes[1]}px`,
2978
+ fontWeight: theme.fontWeights.medium,
2979
+ fontFamily: theme.fonts.body,
2980
+ cursor: "pointer",
2981
+ transition: "opacity 0.15s"
2982
+ },
2983
+ title: "View repository",
2984
+ children: [
2985
+ /* @__PURE__ */ jsx(ArrowRight, { size: 14 }),
2986
+ "View"
2987
+ ]
2988
+ }
2989
+ )
2990
+ ]
2991
+ }
2992
+ )
2993
+ ]
2994
+ }
2995
+ );
2996
+ };
2997
+ function getLanguageColor$1(language) {
2998
+ const colors = {
2999
+ TypeScript: "#3178c6",
3000
+ JavaScript: "#f7df1e",
3001
+ Python: "#3572A5",
3002
+ Rust: "#dea584",
3003
+ Go: "#00ADD8",
3004
+ Java: "#b07219",
3005
+ Ruby: "#701516",
3006
+ PHP: "#4F5D95",
3007
+ "C++": "#f34b7d",
3008
+ C: "#555555",
3009
+ "C#": "#178600",
3010
+ Swift: "#F05138",
3011
+ Kotlin: "#A97BFF",
3012
+ Shell: "#89e051",
3013
+ HTML: "#e34c26",
3014
+ CSS: "#563d7c",
3015
+ Vue: "#41b883",
3016
+ Svelte: "#ff3e00"
3017
+ };
3018
+ return colors[language] || "#8b949e";
3019
+ }
3020
+ const WorkspaceCollectionPanelContent = ({
3021
+ context,
3022
+ actions,
3023
+ events
3024
+ }) => {
3025
+ var _a, _b, _c, _d;
3026
+ const { theme } = useTheme();
3027
+ const [filter, setFilter] = useState("");
3028
+ const [selectedRepo, setSelectedRepo] = useState(null);
3029
+ const panelActions = actions;
3030
+ const workspaceSlice = context.getSlice("workspace");
3031
+ const repositoriesSlice = context.getSlice("workspaceRepositories");
3032
+ const workspace = ((_a = workspaceSlice == null ? void 0 : workspaceSlice.data) == null ? void 0 : _a.workspace) ?? null;
3033
+ const repositories = ((_b = repositoriesSlice == null ? void 0 : repositoriesSlice.data) == null ? void 0 : _b.repositories) ?? [];
3034
+ const isLoading = (workspaceSlice == null ? void 0 : workspaceSlice.loading) || (repositoriesSlice == null ? void 0 : repositoriesSlice.loading) || false;
3035
+ const error = ((_c = workspaceSlice == null ? void 0 : workspaceSlice.data) == null ? void 0 : _c.error) || ((_d = repositoriesSlice == null ? void 0 : repositoriesSlice.data) == null ? void 0 : _d.error);
3036
+ const filteredRepositories = useMemo(() => {
3037
+ let filtered = [...repositories];
3038
+ if (filter.trim()) {
3039
+ const normalizedFilter = filter.trim().toLowerCase();
3040
+ filtered = filtered.filter((repo) => {
3041
+ var _a2;
3042
+ const haystack = [
3043
+ repo.name,
3044
+ repo.full_name,
3045
+ ((_a2 = repo.owner) == null ? void 0 : _a2.login) ?? "",
3046
+ repo.description ?? "",
3047
+ repo.language ?? ""
3048
+ ].join(" ").toLowerCase();
3049
+ return haystack.includes(normalizedFilter);
3050
+ });
3051
+ }
3052
+ return filtered.sort((a, b) => a.name.localeCompare(b.name));
3053
+ }, [repositories, filter]);
3054
+ const handleSelectRepository = useCallback(
3055
+ (repository) => {
3056
+ setSelectedRepo(repository);
3057
+ events.emit(
3058
+ createPanelEvent$3("repository:selected", {
3059
+ repositoryKey: repository.full_name,
3060
+ repository
3061
+ })
3062
+ );
3063
+ if (panelActions.previewRepository) {
3064
+ panelActions.previewRepository(repository);
3065
+ }
3066
+ },
3067
+ [events, panelActions]
3068
+ );
3069
+ const handleNavigateRepository = useCallback(
3070
+ (repository) => {
3071
+ events.emit(
3072
+ createPanelEvent$3("repository:navigate", {
3073
+ owner: repository.owner.login,
3074
+ repo: repository.name,
3075
+ repository
3076
+ })
3077
+ );
3078
+ if (panelActions.navigateToRepository) {
3079
+ panelActions.navigateToRepository(repository.owner.login, repository.name);
3080
+ }
3081
+ },
3082
+ [events, panelActions]
3083
+ );
3084
+ const handleRemoveRepository = useCallback(
3085
+ async (repository) => {
3086
+ if (!(workspace == null ? void 0 : workspace.id) || !panelActions.removeRepositoryFromWorkspace) return;
3087
+ try {
3088
+ await panelActions.removeRepositoryFromWorkspace(repository.full_name, workspace.id);
3089
+ events.emit(
3090
+ createPanelEvent$3("repository:removed", {
3091
+ repositoryKey: repository.full_name,
3092
+ workspaceId: workspace.id
3093
+ })
3094
+ );
3095
+ if ((selectedRepo == null ? void 0 : selectedRepo.id) === repository.id) {
3096
+ setSelectedRepo(null);
3097
+ }
3098
+ } catch (err) {
3099
+ console.error("Failed to remove repository from workspace:", err);
3100
+ }
3101
+ },
3102
+ [workspace, panelActions, events, selectedRepo]
3103
+ );
3104
+ useEffect(() => {
3105
+ const unsubscribers = [
3106
+ events.on(`${PANEL_ID$a}:select-repository`, (event) => {
3107
+ var _a2;
3108
+ const key = (_a2 = event.payload) == null ? void 0 : _a2.repositoryKey;
3109
+ if (key) {
3110
+ const repository = repositories.find(
3111
+ (r) => r.full_name === key || r.name === key
3112
+ );
3113
+ if (repository) {
3114
+ handleSelectRepository(repository);
3115
+ }
3116
+ }
3117
+ }),
3118
+ events.on(`${PANEL_ID$a}:navigate-repository`, (event) => {
3119
+ var _a2;
3120
+ const key = (_a2 = event.payload) == null ? void 0 : _a2.repositoryKey;
3121
+ if (key) {
3122
+ const repository = repositories.find(
3123
+ (r) => r.full_name === key || r.name === key
3124
+ );
3125
+ if (repository) {
3126
+ handleNavigateRepository(repository);
3127
+ }
3128
+ }
3129
+ }),
3130
+ events.on(`${PANEL_ID$a}:remove-repository`, (event) => {
3131
+ var _a2;
3132
+ const key = (_a2 = event.payload) == null ? void 0 : _a2.repositoryKey;
3133
+ if (key) {
3134
+ const repository = repositories.find(
3135
+ (r) => r.full_name === key || r.name === key
3136
+ );
3137
+ if (repository) {
3138
+ void handleRemoveRepository(repository);
3139
+ }
3140
+ }
3141
+ }),
3142
+ events.on(`${PANEL_ID$a}:filter`, (event) => {
3143
+ var _a2;
3144
+ setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
3145
+ })
3146
+ ];
3147
+ return () => unsubscribers.forEach((unsub) => unsub());
3148
+ }, [events, repositories, handleSelectRepository, handleNavigateRepository, handleRemoveRepository]);
3149
+ const baseContainerStyle = {
3150
+ display: "flex",
3151
+ flexDirection: "column",
3152
+ height: "100%",
3153
+ backgroundColor: theme.colors.backgroundSecondary
3154
+ };
3155
+ const contentContainerStyle = {
3156
+ ...baseContainerStyle,
3157
+ padding: "16px",
3158
+ gap: "12px"
3159
+ };
3160
+ if (!workspace) {
3161
+ return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
3162
+ "div",
3163
+ {
3164
+ style: {
3165
+ flex: 1,
3166
+ display: "flex",
3167
+ alignItems: "center",
3168
+ justifyContent: "center",
3169
+ padding: "32px",
3170
+ textAlign: "center"
3171
+ },
3172
+ children: /* @__PURE__ */ jsxs(
3173
+ "div",
3174
+ {
3175
+ style: {
3176
+ display: "flex",
3177
+ flexDirection: "column",
3178
+ alignItems: "center",
3179
+ gap: "16px",
3180
+ maxWidth: "360px"
3181
+ },
3182
+ children: [
3183
+ /* @__PURE__ */ jsx(
3184
+ Folder,
3185
+ {
3186
+ size: 48,
3187
+ style: {
3188
+ color: theme.colors.textSecondary,
3189
+ opacity: 0.5
3190
+ }
3191
+ }
3192
+ ),
3193
+ /* @__PURE__ */ jsxs("div", { children: [
3194
+ /* @__PURE__ */ jsx(
3195
+ "h3",
3196
+ {
3197
+ style: {
3198
+ margin: "0 0 8px 0",
3199
+ color: theme.colors.text,
3200
+ fontSize: `${theme.fontSizes[3]}px`,
3201
+ fontWeight: theme.fontWeights.semibold,
3202
+ fontFamily: theme.fonts.body
3203
+ },
3204
+ children: "No Workspace Selected"
3205
+ }
3206
+ ),
3207
+ /* @__PURE__ */ jsx(
3208
+ "p",
3209
+ {
3210
+ style: {
3211
+ margin: 0,
3212
+ color: theme.colors.textSecondary,
3213
+ fontSize: `${theme.fontSizes[1]}px`,
3214
+ fontFamily: theme.fonts.body
3215
+ },
3216
+ children: "Select a workspace to see its repositories."
3217
+ }
3218
+ )
3219
+ ] })
3220
+ ]
3221
+ }
3222
+ )
3223
+ }
3224
+ ) });
3225
+ }
3226
+ if (isLoading && repositories.length === 0) {
3227
+ return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
3228
+ "div",
3229
+ {
3230
+ style: {
3231
+ flex: 1,
3232
+ display: "flex",
3233
+ alignItems: "center",
3234
+ justifyContent: "center",
3235
+ padding: "32px",
3236
+ textAlign: "center"
3237
+ },
3238
+ children: /* @__PURE__ */ jsxs(
3239
+ "div",
3240
+ {
3241
+ style: {
3242
+ display: "flex",
3243
+ flexDirection: "column",
3244
+ alignItems: "center",
3245
+ gap: "16px"
3246
+ },
3247
+ children: [
3248
+ /* @__PURE__ */ jsx(
3249
+ LoaderCircle,
3250
+ {
3251
+ size: 32,
3252
+ style: { color: theme.colors.textSecondary },
3253
+ className: "animate-spin"
3254
+ }
3255
+ ),
3256
+ /* @__PURE__ */ jsx(
3257
+ "h3",
3258
+ {
3259
+ style: {
3260
+ margin: 0,
3261
+ color: theme.colors.text,
3262
+ fontSize: `${theme.fontSizes[3]}px`,
3263
+ fontWeight: theme.fontWeights.semibold,
3264
+ fontFamily: theme.fonts.body
3265
+ },
3266
+ children: "Loading repositories..."
3267
+ }
3268
+ )
3269
+ ]
3270
+ }
3271
+ )
3272
+ }
3273
+ ) });
3274
+ }
3275
+ return /* @__PURE__ */ jsxs("div", { style: contentContainerStyle, children: [
3276
+ /* @__PURE__ */ jsxs("div", { children: [
3277
+ /* @__PURE__ */ jsx(
3278
+ "h3",
3279
+ {
3280
+ style: {
3281
+ margin: "0 0 4px 0",
3282
+ fontSize: `${theme.fontSizes[2]}px`,
3283
+ fontWeight: theme.fontWeights.semibold,
3284
+ color: theme.colors.text,
3285
+ fontFamily: theme.fonts.body
3286
+ },
3287
+ children: workspace.name
3288
+ }
3289
+ ),
3290
+ workspace.description && /* @__PURE__ */ jsx(
3291
+ "p",
3292
+ {
3293
+ style: {
3294
+ margin: 0,
3295
+ fontSize: `${theme.fontSizes[1]}px`,
3296
+ color: theme.colors.textSecondary,
3297
+ fontFamily: theme.fonts.body
3298
+ },
3299
+ children: workspace.description
3300
+ }
3301
+ )
3302
+ ] }),
3303
+ repositories.length > 0 && /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
3304
+ /* @__PURE__ */ jsx(
3305
+ Search,
3306
+ {
3307
+ size: 16,
3308
+ style: {
3309
+ position: "absolute",
3310
+ top: "50%",
3311
+ left: "12px",
3312
+ transform: "translateY(-50%)",
3313
+ color: theme.colors.textSecondary,
3314
+ pointerEvents: "none"
3315
+ }
3316
+ }
3317
+ ),
3318
+ /* @__PURE__ */ jsx(
3319
+ "input",
3320
+ {
3321
+ type: "text",
3322
+ value: filter,
3323
+ placeholder: "Filter repositories...",
3324
+ onChange: (e) => setFilter(e.target.value),
3325
+ style: {
3326
+ width: "100%",
3327
+ padding: "8px 12px 8px 36px",
3328
+ borderRadius: "6px",
3329
+ border: `1px solid ${theme.colors.border}`,
3330
+ backgroundColor: theme.colors.background,
3331
+ color: theme.colors.text,
3332
+ fontSize: `${theme.fontSizes[1]}px`,
3333
+ fontFamily: theme.fonts.body,
3334
+ outline: "none"
3335
+ }
3336
+ }
3337
+ )
3338
+ ] }),
3339
+ error && /* @__PURE__ */ jsx(
3340
+ "div",
3341
+ {
3342
+ style: {
3343
+ display: "flex",
3344
+ alignItems: "center",
3345
+ gap: "8px",
3346
+ padding: "10px 14px",
3347
+ borderRadius: "6px",
3348
+ backgroundColor: `${theme.colors.error || "#ef4444"}20`,
3349
+ color: theme.colors.error || "#ef4444",
3350
+ fontSize: `${theme.fontSizes[1]}px`,
3351
+ fontFamily: theme.fonts.body
3352
+ },
3353
+ children: /* @__PURE__ */ jsx("span", { children: error })
3354
+ }
3355
+ ),
3356
+ /* @__PURE__ */ jsxs(
3357
+ "div",
3358
+ {
3359
+ style: {
3360
+ fontSize: `${theme.fontSizes[0]}px`,
3361
+ fontFamily: theme.fonts.body,
3362
+ color: theme.colors.textSecondary,
3363
+ textTransform: "uppercase",
3364
+ letterSpacing: "0.5px"
2537
3365
  },
2538
3366
  children: [
2539
- /* @__PURE__ */ jsx(
2540
- "input",
2541
- {
2542
- type: "text",
2543
- value: searchQuery,
2544
- onChange: (e) => setSearchQuery(e.target.value),
2545
- placeholder: "Search by workspace or repository name...",
2546
- autoFocus: true,
2547
- style: {
2548
- flex: 1,
2549
- padding: "8px 12px",
2550
- borderRadius: "6px",
2551
- border: `1px solid ${theme.colors.border}`,
2552
- backgroundColor: theme.colors.background,
2553
- color: theme.colors.text,
2554
- fontSize: `${theme.fontSizes[1]}px`,
2555
- fontFamily: theme.fonts.body,
2556
- outline: "none"
2557
- }
2558
- }
2559
- ),
2560
- searchQuery && /* @__PURE__ */ jsx(
2561
- "button",
2562
- {
2563
- onClick: () => setSearchQuery(""),
2564
- style: {
2565
- display: "flex",
2566
- alignItems: "center",
2567
- justifyContent: "center",
2568
- width: "28px",
2569
- height: "28px",
2570
- borderRadius: "6px",
2571
- border: `1px solid ${theme.colors.border}`,
2572
- backgroundColor: theme.colors.backgroundTertiary,
2573
- color: theme.colors.text,
2574
- cursor: "pointer",
2575
- transition: "all 0.15s ease"
2576
- },
2577
- title: "Clear search",
2578
- children: /* @__PURE__ */ jsx(X, { size: 16 })
2579
- }
2580
- )
3367
+ filteredRepositories.length,
3368
+ " ",
3369
+ filteredRepositories.length === 1 ? "repository" : "repositories",
3370
+ filter && repositories.length !== filteredRepositories.length && /* @__PURE__ */ jsxs("span", { children: [
3371
+ " (filtered from ",
3372
+ repositories.length,
3373
+ ")"
3374
+ ] })
2581
3375
  ]
2582
3376
  }
2583
3377
  ),
@@ -2592,20 +3386,37 @@ const WorkspacesListPanelContent = ({
2592
3386
  gap: "4px"
2593
3387
  },
2594
3388
  children: [
2595
- sortedWorkspaces.map((workspace) => /* @__PURE__ */ jsx(
2596
- WorkspaceCard,
3389
+ repositories.length === 0 && !isLoading && /* @__PURE__ */ jsxs(
3390
+ "div",
2597
3391
  {
2598
- workspace,
2599
- isSelected: workspace.id === selectedWorkspaceId,
2600
- isDefault: workspace.id === defaultWorkspaceId,
2601
- onClick: handleWorkspaceSelect,
2602
- onOpen: panelActions.openWorkspace ? handleOpenWorkspace : void 0,
2603
- onDelete: panelActions.deleteWorkspace ? handleDeleteWorkspace : void 0,
2604
- onUpdateName: panelActions.updateWorkspace ? handleUpdateWorkspaceName : void 0
2605
- },
2606
- workspace.id
2607
- )),
2608
- sortedWorkspaces.length === 0 && !loading && /* @__PURE__ */ jsx(
3392
+ style: {
3393
+ padding: "32px",
3394
+ textAlign: "center",
3395
+ color: theme.colors.textSecondary
3396
+ },
3397
+ children: [
3398
+ /* @__PURE__ */ jsx(
3399
+ Folder,
3400
+ {
3401
+ size: 32,
3402
+ style: { marginBottom: "12px", opacity: 0.5 }
3403
+ }
3404
+ ),
3405
+ /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories in this workspace." }),
3406
+ /* @__PURE__ */ jsx(
3407
+ "p",
3408
+ {
3409
+ style: {
3410
+ margin: "8px 0 0 0",
3411
+ fontSize: `${theme.fontSizes[0]}px`
3412
+ },
3413
+ children: "Add repositories to organize your projects."
3414
+ }
3415
+ )
3416
+ ]
3417
+ }
3418
+ ),
3419
+ repositories.length > 0 && filteredRepositories.length === 0 && /* @__PURE__ */ jsx(
2609
3420
  "div",
2610
3421
  {
2611
3422
  style: {
@@ -2613,18 +3424,29 @@ const WorkspacesListPanelContent = ({
2613
3424
  textAlign: "center",
2614
3425
  color: theme.colors.textSecondary
2615
3426
  },
2616
- children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: searchQuery.trim() ? `No workspaces found matching "${searchQuery}"` : "No workspaces found." })
3427
+ children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories match your filter." })
2617
3428
  }
2618
- )
3429
+ ),
3430
+ filteredRepositories.map((repository) => /* @__PURE__ */ jsx(
3431
+ WorkspaceCollectionRepositoryCard,
3432
+ {
3433
+ repository,
3434
+ isSelected: (selectedRepo == null ? void 0 : selectedRepo.id) === repository.id,
3435
+ onSelect: handleSelectRepository,
3436
+ onNavigate: panelActions.navigateToRepository ? handleNavigateRepository : void 0,
3437
+ onRemove: panelActions.removeRepositoryFromWorkspace ? handleRemoveRepository : void 0
3438
+ },
3439
+ repository.id
3440
+ ))
2619
3441
  ]
2620
3442
  }
2621
3443
  )
2622
3444
  ] });
2623
3445
  };
2624
- const WorkspacesListPanel = (props) => {
2625
- return /* @__PURE__ */ jsx(WorkspacesListPanelContent, { ...props });
3446
+ const WorkspaceCollectionPanel = (props) => {
3447
+ return /* @__PURE__ */ jsx(WorkspaceCollectionPanelContent, { ...props });
2626
3448
  };
2627
- const WorkspacesListPanelPreview = () => {
3449
+ const WorkspaceCollectionPanelPreview = () => {
2628
3450
  const { theme } = useTheme();
2629
3451
  return /* @__PURE__ */ jsxs(
2630
3452
  "div",
@@ -2649,8 +3471,8 @@ const WorkspacesListPanelPreview = () => {
2649
3471
  fontWeight: theme.fontWeights.semibold
2650
3472
  },
2651
3473
  children: [
2652
- /* @__PURE__ */ jsx(Layers, { size: 16, style: { color: theme.colors.primary } }),
2653
- /* @__PURE__ */ jsx("span", { children: "Workspaces" })
3474
+ /* @__PURE__ */ jsx(Folder, { size: 16, style: { color: theme.colors.primary } }),
3475
+ /* @__PURE__ */ jsx("span", { children: "Workspace Collection" })
2654
3476
  ]
2655
3477
  }
2656
3478
  ),
@@ -2663,7 +3485,7 @@ const WorkspacesListPanelPreview = () => {
2663
3485
  color: theme.colors.textSecondary,
2664
3486
  marginTop: "4px"
2665
3487
  },
2666
- children: "Browse and manage your workspaces"
3488
+ children: "Repositories in your workspace"
2667
3489
  }
2668
3490
  )
2669
3491
  ]
@@ -2854,6 +3676,10 @@ const GitHubRepositoryCard = ({
2854
3676
  /* @__PURE__ */ jsx(Star, { size: 12 }),
2855
3677
  formatNumber(repository.stargazers_count)
2856
3678
  ] }),
3679
+ repository.license && /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
3680
+ /* @__PURE__ */ jsx(Scale, { size: 12 }),
3681
+ repository.license
3682
+ ] }),
2857
3683
  /* @__PURE__ */ jsxs("span", { children: [
2858
3684
  "Updated ",
2859
3685
  getRelativeTime(repository.pushed_at || repository.updated_at)
@@ -2998,10 +3824,10 @@ function formatNumber(num) {
2998
3824
  }
2999
3825
  return num.toString();
3000
3826
  }
3001
- const PANEL_ID$8 = "industry-theme.github-starred";
3827
+ const PANEL_ID$9 = "industry-theme.github-starred";
3002
3828
  const createPanelEvent$2 = (type, payload) => ({
3003
3829
  type,
3004
- source: PANEL_ID$8,
3830
+ source: PANEL_ID$9,
3005
3831
  timestamp: Date.now(),
3006
3832
  payload
3007
3833
  });
@@ -3090,7 +3916,7 @@ const GitHubStarredPanelContent = ({
3090
3916
  if (panelActions.cloneRepository) {
3091
3917
  await panelActions.cloneRepository(repo);
3092
3918
  events.emit(
3093
- createPanelEvent$2(`${PANEL_ID$8}:repository-cloned`, {
3919
+ createPanelEvent$2(`${PANEL_ID$9}:repository-cloned`, {
3094
3920
  repository: repo
3095
3921
  })
3096
3922
  );
@@ -3110,7 +3936,7 @@ const GitHubStarredPanelContent = ({
3110
3936
  (repo) => {
3111
3937
  setSelectedRepo(repo);
3112
3938
  events.emit(
3113
- createPanelEvent$2(`${PANEL_ID$8}:repository-selected`, { repository: repo })
3939
+ createPanelEvent$2(`${PANEL_ID$9}:repository-selected`, { repository: repo })
3114
3940
  );
3115
3941
  },
3116
3942
  [events]
@@ -3122,11 +3948,11 @@ const GitHubStarredPanelContent = ({
3122
3948
  }, [panelActions]);
3123
3949
  useEffect(() => {
3124
3950
  const unsubscribers = [
3125
- events.on(`${PANEL_ID$8}:filter`, (event) => {
3951
+ events.on(`${PANEL_ID$9}:filter`, (event) => {
3126
3952
  var _a2;
3127
3953
  setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
3128
3954
  }),
3129
- events.on(`${PANEL_ID$8}:select-repository`, (event) => {
3955
+ events.on(`${PANEL_ID$9}:select-repository`, (event) => {
3130
3956
  var _a2;
3131
3957
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3132
3958
  if (identifier) {
@@ -3138,7 +3964,7 @@ const GitHubStarredPanelContent = ({
3138
3964
  }
3139
3965
  }
3140
3966
  }),
3141
- events.on(`${PANEL_ID$8}:clone-repository`, (event) => {
3967
+ events.on(`${PANEL_ID$9}:clone-repository`, (event) => {
3142
3968
  var _a2;
3143
3969
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3144
3970
  if (identifier) {
@@ -3471,10 +4297,10 @@ const GitHubStarredPanelPreview = () => {
3471
4297
  }
3472
4298
  );
3473
4299
  };
3474
- const PANEL_ID$7 = "industry-theme.github-projects";
4300
+ const PANEL_ID$8 = "industry-theme.github-projects";
3475
4301
  const createPanelEvent$1 = (type, payload) => ({
3476
4302
  type,
3477
- source: PANEL_ID$7,
4303
+ source: PANEL_ID$8,
3478
4304
  timestamp: Date.now(),
3479
4305
  payload
3480
4306
  });
@@ -3577,6 +4403,7 @@ const GitHubProjectsPanelContent = ({
3577
4403
  const filteredOrgRepos = useMemo(() => {
3578
4404
  const result = {};
3579
4405
  for (const [orgLogin, repos] of Object.entries(orgRepositories)) {
4406
+ if (!Array.isArray(repos)) continue;
3580
4407
  const filtered = filterRepos(repos);
3581
4408
  if (filtered.length > 0) {
3582
4409
  result[orgLogin] = filtered;
@@ -3587,7 +4414,9 @@ const GitHubProjectsPanelContent = ({
3587
4414
  const allRepositories = useMemo(() => {
3588
4415
  const all = [...userRepositories];
3589
4416
  for (const repos of Object.values(orgRepositories)) {
3590
- all.push(...repos);
4417
+ if (Array.isArray(repos)) {
4418
+ all.push(...repos);
4419
+ }
3591
4420
  }
3592
4421
  return all;
3593
4422
  }, [userRepositories, orgRepositories]);
@@ -3597,7 +4426,7 @@ const GitHubProjectsPanelContent = ({
3597
4426
  if (panelActions.cloneRepository) {
3598
4427
  await panelActions.cloneRepository(repo);
3599
4428
  events.emit(
3600
- createPanelEvent$1(`${PANEL_ID$7}:repository-cloned`, {
4429
+ createPanelEvent$1(`${PANEL_ID$8}:repository-cloned`, {
3601
4430
  repository: repo
3602
4431
  })
3603
4432
  );
@@ -3617,7 +4446,7 @@ const GitHubProjectsPanelContent = ({
3617
4446
  (repo) => {
3618
4447
  setSelectedRepo(repo);
3619
4448
  events.emit(
3620
- createPanelEvent$1(`${PANEL_ID$7}:repository-selected`, { repository: repo })
4449
+ createPanelEvent$1(`${PANEL_ID$8}:repository-selected`, { repository: repo })
3621
4450
  );
3622
4451
  },
3623
4452
  [events]
@@ -3640,18 +4469,18 @@ const GitHubProjectsPanelContent = ({
3640
4469
  }, []);
3641
4470
  useEffect(() => {
3642
4471
  const unsubscribers = [
3643
- events.on(`${PANEL_ID$7}:filter`, (event) => {
4472
+ events.on(`${PANEL_ID$8}:filter`, (event) => {
3644
4473
  var _a2;
3645
4474
  setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
3646
4475
  }),
3647
- events.on(`${PANEL_ID$7}:toggle-section`, (event) => {
4476
+ events.on(`${PANEL_ID$8}:toggle-section`, (event) => {
3648
4477
  var _a2;
3649
4478
  const owner = (_a2 = event.payload) == null ? void 0 : _a2.owner;
3650
4479
  if (owner) {
3651
4480
  toggleSection(owner);
3652
4481
  }
3653
4482
  }),
3654
- events.on(`${PANEL_ID$7}:select-repository`, (event) => {
4483
+ events.on(`${PANEL_ID$8}:select-repository`, (event) => {
3655
4484
  var _a2;
3656
4485
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3657
4486
  if (identifier) {
@@ -3663,7 +4492,7 @@ const GitHubProjectsPanelContent = ({
3663
4492
  }
3664
4493
  }
3665
4494
  }),
3666
- events.on(`${PANEL_ID$7}:clone-repository`, (event) => {
4495
+ events.on(`${PANEL_ID$8}:clone-repository`, (event) => {
3667
4496
  var _a2;
3668
4497
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3669
4498
  if (identifier) {
@@ -4107,10 +4936,10 @@ const GitHubProjectsPanelPreview = () => {
4107
4936
  }
4108
4937
  );
4109
4938
  };
4110
- const PANEL_ID$6 = "industry-theme.user-profile";
4939
+ const PANEL_ID$7 = "industry-theme.user-profile";
4111
4940
  const createPanelEvent = (type, payload) => ({
4112
4941
  type,
4113
- source: PANEL_ID$6,
4942
+ source: PANEL_ID$7,
4114
4943
  timestamp: Date.now(),
4115
4944
  payload
4116
4945
  });
@@ -4388,7 +5217,7 @@ const UserProfilePanelContent = ({
4388
5217
  (organization) => {
4389
5218
  var _a2;
4390
5219
  events.emit(
4391
- createPanelEvent(`${PANEL_ID$6}:organization:selected`, {
5220
+ createPanelEvent(`${PANEL_ID$7}:organization:selected`, {
4392
5221
  orgLogin: organization.login,
4393
5222
  organization
4394
5223
  })
@@ -4401,7 +5230,7 @@ const UserProfilePanelContent = ({
4401
5230
  (repository) => {
4402
5231
  var _a2;
4403
5232
  events.emit(
4404
- createPanelEvent(`${PANEL_ID$6}:repository:selected`, {
5233
+ createPanelEvent(`${PANEL_ID$7}:repository:selected`, {
4405
5234
  owner: repository.owner.login,
4406
5235
  repo: repository.name,
4407
5236
  repository
@@ -4415,7 +5244,7 @@ const UserProfilePanelContent = ({
4415
5244
  (repository) => {
4416
5245
  var _a2;
4417
5246
  events.emit(
4418
- createPanelEvent(`${PANEL_ID$6}:repository:clone-requested`, {
5247
+ createPanelEvent(`${PANEL_ID$7}:repository:clone-requested`, {
4419
5248
  repository
4420
5249
  })
4421
5250
  );
@@ -4435,19 +5264,19 @@ const UserProfilePanelContent = ({
4435
5264
  setActiveView(view);
4436
5265
  setSearchQuery("");
4437
5266
  setShowSearchBox(false);
4438
- events.emit(createPanelEvent(`${PANEL_ID$6}:view:changed`, { view }));
5267
+ events.emit(createPanelEvent(`${PANEL_ID$7}:view:changed`, { view }));
4439
5268
  },
4440
5269
  [events]
4441
5270
  );
4442
5271
  useEffect(() => {
4443
5272
  const unsubscribers = [
4444
- events.on(`${PANEL_ID$6}:set-view`, (event) => {
5273
+ events.on(`${PANEL_ID$7}:set-view`, (event) => {
4445
5274
  var _a2;
4446
5275
  if ((_a2 = event.payload) == null ? void 0 : _a2.view) {
4447
5276
  handleViewChange(event.payload.view);
4448
5277
  }
4449
5278
  }),
4450
- events.on(`${PANEL_ID$6}:select-organization`, (event) => {
5279
+ events.on(`${PANEL_ID$7}:select-organization`, (event) => {
4451
5280
  var _a2;
4452
5281
  const orgLogin = (_a2 = event.payload) == null ? void 0 : _a2.orgLogin;
4453
5282
  if (orgLogin) {
@@ -4457,7 +5286,7 @@ const UserProfilePanelContent = ({
4457
5286
  }
4458
5287
  }
4459
5288
  }),
4460
- events.on(`${PANEL_ID$6}:select-repository`, (event) => {
5289
+ events.on(`${PANEL_ID$7}:select-repository`, (event) => {
4461
5290
  const { owner, repo } = event.payload || {};
4462
5291
  if (owner && repo) {
4463
5292
  const repository = starredRepositories.find(
@@ -4468,7 +5297,7 @@ const UserProfilePanelContent = ({
4468
5297
  }
4469
5298
  }
4470
5299
  }),
4471
- events.on(`${PANEL_ID$6}:clone-repository`, (event) => {
5300
+ events.on(`${PANEL_ID$7}:clone-repository`, (event) => {
4472
5301
  const { owner, repo } = event.payload || {};
4473
5302
  if (owner && repo) {
4474
5303
  const repository = starredRepositories.find(
@@ -4479,7 +5308,7 @@ const UserProfilePanelContent = ({
4479
5308
  }
4480
5309
  }
4481
5310
  }),
4482
- events.on(`${PANEL_ID$6}:filter-starred`, (event) => {
5311
+ events.on(`${PANEL_ID$7}:filter-starred`, (event) => {
4483
5312
  var _a2;
4484
5313
  if (((_a2 = event.payload) == null ? void 0 : _a2.filter) !== void 0) {
4485
5314
  setSearchQuery(event.payload.filter);
@@ -4993,7 +5822,7 @@ const UserProfilePanelPreview = () => {
4993
5822
  }
4994
5823
  );
4995
5824
  };
4996
- const PANEL_ID$5 = "industry-theme.local-projects";
5825
+ const PANEL_ID$6 = "industry-theme.local-projects";
4997
5826
  const filterProjectsTool$1 = {
4998
5827
  name: "filter_projects",
4999
5828
  description: "Filter the local projects list by name, owner, or path",
@@ -5017,7 +5846,7 @@ const filterProjectsTool$1 = {
5017
5846
  tags: ["filter", "search", "projects"],
5018
5847
  tool_call_template: {
5019
5848
  call_template_type: "panel_event",
5020
- event_type: `${PANEL_ID$5}:filter`
5849
+ event_type: `${PANEL_ID$6}:filter`
5021
5850
  }
5022
5851
  };
5023
5852
  const selectProjectTool = {
@@ -5043,7 +5872,7 @@ const selectProjectTool = {
5043
5872
  tags: ["select", "project", "navigation"],
5044
5873
  tool_call_template: {
5045
5874
  call_template_type: "panel_event",
5046
- event_type: `${PANEL_ID$5}:select-repository`
5875
+ event_type: `${PANEL_ID$6}:select-repository`
5047
5876
  }
5048
5877
  };
5049
5878
  const openProjectTool = {
@@ -5069,7 +5898,7 @@ const openProjectTool = {
5069
5898
  tags: ["open", "project", "workspace"],
5070
5899
  tool_call_template: {
5071
5900
  call_template_type: "panel_event",
5072
- event_type: `${PANEL_ID$5}:open-repository`
5901
+ event_type: `${PANEL_ID$6}:open-repository`
5073
5902
  }
5074
5903
  };
5075
5904
  const localProjectsPanelTools = [
@@ -5078,13 +5907,13 @@ const localProjectsPanelTools = [
5078
5907
  openProjectTool
5079
5908
  ];
5080
5909
  const localProjectsPanelToolsMetadata = {
5081
- id: PANEL_ID$5,
5910
+ id: PANEL_ID$6,
5082
5911
  name: "Local Projects Panel",
5083
5912
  description: "Tools for browsing and managing local Alexandria repositories",
5084
5913
  tools: localProjectsPanelTools
5085
5914
  };
5086
- const PANEL_ID$4 = "industry-theme.workspace-repositories";
5087
- const selectRepositoryTool$1 = {
5915
+ const PANEL_ID$5 = "industry-theme.workspace-repositories";
5916
+ const selectRepositoryTool$2 = {
5088
5917
  name: "select_workspace_repository",
5089
5918
  description: "Selects a repository in the workspace panel",
5090
5919
  inputs: {
@@ -5107,7 +5936,7 @@ const selectRepositoryTool$1 = {
5107
5936
  tags: ["workspace", "repository", "select"],
5108
5937
  tool_call_template: {
5109
5938
  call_template_type: "panel_event",
5110
- event_type: `${PANEL_ID$4}:select-repository`
5939
+ event_type: `${PANEL_ID$5}:select-repository`
5111
5940
  }
5112
5941
  };
5113
5942
  const refreshWorkspaceTool = {
@@ -5132,7 +5961,7 @@ const refreshWorkspaceTool = {
5132
5961
  tags: ["workspace", "refresh"],
5133
5962
  tool_call_template: {
5134
5963
  call_template_type: "panel_event",
5135
- event_type: `${PANEL_ID$4}:refresh-workspace`
5964
+ event_type: `${PANEL_ID$5}:refresh-workspace`
5136
5965
  }
5137
5966
  };
5138
5967
  const openRepositoryTool = {
@@ -5158,21 +5987,21 @@ const openRepositoryTool = {
5158
5987
  tags: ["workspace", "repository", "open"],
5159
5988
  tool_call_template: {
5160
5989
  call_template_type: "panel_event",
5161
- event_type: `${PANEL_ID$4}:open-repository`
5990
+ event_type: `${PANEL_ID$5}:open-repository`
5162
5991
  }
5163
5992
  };
5164
5993
  const workspaceRepositoriesPanelTools = [
5165
- selectRepositoryTool$1,
5994
+ selectRepositoryTool$2,
5166
5995
  refreshWorkspaceTool,
5167
5996
  openRepositoryTool
5168
5997
  ];
5169
5998
  const workspaceRepositoriesPanelToolsMetadata = {
5170
- id: PANEL_ID$4,
5999
+ id: PANEL_ID$5,
5171
6000
  name: "Workspace Repositories Panel",
5172
6001
  description: "Tools provided by the workspace repositories panel",
5173
6002
  tools: workspaceRepositoriesPanelTools
5174
6003
  };
5175
- const PANEL_ID$3 = "industry-theme.workspaces-list";
6004
+ const PANEL_ID$4 = "industry-theme.workspaces-list";
5176
6005
  const filterWorkspacesTool = {
5177
6006
  name: "filter_workspaces",
5178
6007
  description: "Filter the workspaces list by workspace name, description, or repository names within workspaces",
@@ -5196,7 +6025,7 @@ const filterWorkspacesTool = {
5196
6025
  tags: ["filter", "search", "workspaces"],
5197
6026
  tool_call_template: {
5198
6027
  call_template_type: "panel_event",
5199
- event_type: `${PANEL_ID$3}:filter`
6028
+ event_type: `${PANEL_ID$4}:filter`
5200
6029
  }
5201
6030
  };
5202
6031
  const selectWorkspaceTool = {
@@ -5222,7 +6051,7 @@ const selectWorkspaceTool = {
5222
6051
  tags: ["select", "workspace", "navigation"],
5223
6052
  tool_call_template: {
5224
6053
  call_template_type: "panel_event",
5225
- event_type: `${PANEL_ID$3}:select-workspace`
6054
+ event_type: `${PANEL_ID$4}:select-workspace`
5226
6055
  }
5227
6056
  };
5228
6057
  const openWorkspaceTool = {
@@ -5248,7 +6077,7 @@ const openWorkspaceTool = {
5248
6077
  tags: ["open", "workspace", "window"],
5249
6078
  tool_call_template: {
5250
6079
  call_template_type: "panel_event",
5251
- event_type: `${PANEL_ID$3}:open-workspace`
6080
+ event_type: `${PANEL_ID$4}:open-workspace`
5252
6081
  }
5253
6082
  };
5254
6083
  const createWorkspaceTool = {
@@ -5279,7 +6108,7 @@ const createWorkspaceTool = {
5279
6108
  tags: ["create", "workspace", "new"],
5280
6109
  tool_call_template: {
5281
6110
  call_template_type: "panel_event",
5282
- event_type: `${PANEL_ID$3}:create-workspace`
6111
+ event_type: `${PANEL_ID$4}:create-workspace`
5283
6112
  }
5284
6113
  };
5285
6114
  const workspacesListPanelTools = [
@@ -5289,11 +6118,154 @@ const workspacesListPanelTools = [
5289
6118
  createWorkspaceTool
5290
6119
  ];
5291
6120
  const workspacesListPanelToolsMetadata = {
5292
- id: PANEL_ID$3,
6121
+ id: PANEL_ID$4,
5293
6122
  name: "Workspaces List Panel",
5294
6123
  description: "Tools for browsing and managing workspaces",
5295
6124
  tools: workspacesListPanelTools
5296
6125
  };
6126
+ const PANEL_ID$3 = "industry-theme.workspace-collection";
6127
+ const filterRepositoriesTool = {
6128
+ name: "filter_workspace_collection",
6129
+ description: "Filters repositories in the workspace collection by search term",
6130
+ inputs: {
6131
+ type: "object",
6132
+ properties: {
6133
+ filter: {
6134
+ type: "string",
6135
+ description: "Search term to filter repositories by name, owner, or description"
6136
+ }
6137
+ },
6138
+ required: ["filter"]
6139
+ },
6140
+ outputs: {
6141
+ type: "object",
6142
+ properties: {
6143
+ success: { type: "boolean" },
6144
+ matchCount: { type: "number" }
6145
+ }
6146
+ },
6147
+ tags: ["workspace", "repository", "filter", "search"],
6148
+ tool_call_template: {
6149
+ call_template_type: "panel_event",
6150
+ event_type: `${PANEL_ID$3}:filter`
6151
+ }
6152
+ };
6153
+ const selectRepositoryTool$1 = {
6154
+ name: "select_collection_repository",
6155
+ description: "Selects a repository in the workspace collection panel",
6156
+ inputs: {
6157
+ type: "object",
6158
+ properties: {
6159
+ repositoryKey: {
6160
+ type: "string",
6161
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6162
+ }
6163
+ },
6164
+ required: ["repositoryKey"]
6165
+ },
6166
+ outputs: {
6167
+ type: "object",
6168
+ properties: {
6169
+ success: { type: "boolean" },
6170
+ message: { type: "string" }
6171
+ }
6172
+ },
6173
+ tags: ["workspace", "repository", "select"],
6174
+ tool_call_template: {
6175
+ call_template_type: "panel_event",
6176
+ event_type: `${PANEL_ID$3}:select-repository`
6177
+ }
6178
+ };
6179
+ const navigateRepositoryTool = {
6180
+ name: "navigate_collection_repository",
6181
+ description: "Navigates to the full repository page for a repository in the workspace",
6182
+ inputs: {
6183
+ type: "object",
6184
+ properties: {
6185
+ repositoryKey: {
6186
+ type: "string",
6187
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6188
+ }
6189
+ },
6190
+ required: ["repositoryKey"]
6191
+ },
6192
+ outputs: {
6193
+ type: "object",
6194
+ properties: {
6195
+ success: { type: "boolean" },
6196
+ message: { type: "string" }
6197
+ }
6198
+ },
6199
+ tags: ["workspace", "repository", "navigate", "open"],
6200
+ tool_call_template: {
6201
+ call_template_type: "panel_event",
6202
+ event_type: `${PANEL_ID$3}:navigate-repository`
6203
+ }
6204
+ };
6205
+ const removeRepositoryTool = {
6206
+ name: "remove_collection_repository",
6207
+ description: "Removes a repository from the current workspace",
6208
+ inputs: {
6209
+ type: "object",
6210
+ properties: {
6211
+ repositoryKey: {
6212
+ type: "string",
6213
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6214
+ }
6215
+ },
6216
+ required: ["repositoryKey"]
6217
+ },
6218
+ outputs: {
6219
+ type: "object",
6220
+ properties: {
6221
+ success: { type: "boolean" },
6222
+ message: { type: "string" }
6223
+ }
6224
+ },
6225
+ tags: ["workspace", "repository", "remove", "delete"],
6226
+ tool_call_template: {
6227
+ call_template_type: "panel_event",
6228
+ event_type: `${PANEL_ID$3}:remove-repository`
6229
+ }
6230
+ };
6231
+ const refreshWorkspaceCollectionTool = {
6232
+ name: "refresh_workspace_collection",
6233
+ description: "Refreshes the workspace collection repository list",
6234
+ inputs: {
6235
+ type: "object",
6236
+ properties: {
6237
+ force: {
6238
+ type: "boolean",
6239
+ description: "Force refresh even if data is fresh"
6240
+ }
6241
+ }
6242
+ },
6243
+ outputs: {
6244
+ type: "object",
6245
+ properties: {
6246
+ success: { type: "boolean" },
6247
+ repositoryCount: { type: "number" }
6248
+ }
6249
+ },
6250
+ tags: ["workspace", "refresh"],
6251
+ tool_call_template: {
6252
+ call_template_type: "panel_event",
6253
+ event_type: `${PANEL_ID$3}:refresh-workspace`
6254
+ }
6255
+ };
6256
+ const workspaceCollectionPanelTools = [
6257
+ filterRepositoriesTool,
6258
+ selectRepositoryTool$1,
6259
+ navigateRepositoryTool,
6260
+ removeRepositoryTool,
6261
+ refreshWorkspaceCollectionTool
6262
+ ];
6263
+ const workspaceCollectionPanelToolsMetadata = {
6264
+ id: PANEL_ID$3,
6265
+ name: "Workspace Collection Panel",
6266
+ description: "Tools provided by the browser-based workspace collection panel",
6267
+ tools: workspaceCollectionPanelTools
6268
+ };
5297
6269
  const PANEL_ID$2 = "industry-theme.github-starred";
5298
6270
  const filterStarredTool$1 = {
5299
6271
  name: "filter_starred_repositories",
@@ -5752,6 +6724,26 @@ const panels = [
5752
6724
  console.log("Workspaces List Panel unmounting");
5753
6725
  }
5754
6726
  },
6727
+ {
6728
+ metadata: {
6729
+ id: "industry-theme.workspace-collection",
6730
+ name: "Workspace Collection",
6731
+ icon: "FolderOpen",
6732
+ version: "0.1.0",
6733
+ author: "Industry Theme",
6734
+ description: "Browse repositories in a workspace (browser)",
6735
+ slices: ["workspace", "workspaceRepositories"],
6736
+ tools: workspaceCollectionPanelTools
6737
+ },
6738
+ component: WorkspaceCollectionPanel,
6739
+ onMount: async (context) => {
6740
+ console.log("Workspace Collection Panel mounted");
6741
+ console.log("Current scope:", context.currentScope.type);
6742
+ },
6743
+ onUnmount: async (_context) => {
6744
+ console.log("Workspace Collection Panel unmounting");
6745
+ }
6746
+ },
5755
6747
  {
5756
6748
  metadata: {
5757
6749
  id: "industry-theme.github-starred",
@@ -5838,6 +6830,8 @@ export {
5838
6830
  UserProfilePanel,
5839
6831
  UserProfilePanelPreview,
5840
6832
  WorkspaceCard,
6833
+ WorkspaceCollectionPanel,
6834
+ WorkspaceCollectionPanelPreview,
5841
6835
  WorkspaceRepositoriesPanel,
5842
6836
  WorkspacesListPanel,
5843
6837
  WorkspacesListPanelPreview,
@@ -5847,6 +6841,7 @@ export {
5847
6841
  createWorkspaceTool,
5848
6842
  filterProjectsTool as filterGitHubProjectsTool,
5849
6843
  filterProjectsTool$1 as filterProjectsTool,
6844
+ filterRepositoriesTool,
5850
6845
  filterStarredTool$1 as filterStarredTool,
5851
6846
  filterStarredTool as filterUserStarredTool,
5852
6847
  filterWorkspacesTool,
@@ -5856,17 +6851,21 @@ export {
5856
6851
  githubStarredPanelToolsMetadata,
5857
6852
  localProjectsPanelTools,
5858
6853
  localProjectsPanelToolsMetadata,
6854
+ navigateRepositoryTool,
5859
6855
  onPackageLoad,
5860
6856
  onPackageUnload,
5861
6857
  openProjectTool,
5862
6858
  openRepositoryTool,
5863
6859
  openWorkspaceTool,
5864
6860
  panels,
6861
+ refreshWorkspaceCollectionTool,
5865
6862
  refreshWorkspaceTool,
6863
+ removeRepositoryTool,
6864
+ selectRepositoryTool$1 as selectCollectionRepositoryTool,
5866
6865
  selectOrganizationTool,
5867
6866
  selectProjectRepositoryTool,
5868
6867
  selectProjectTool,
5869
- selectRepositoryTool$1 as selectRepositoryTool,
6868
+ selectRepositoryTool$2 as selectRepositoryTool,
5870
6869
  selectStarredRepositoryTool,
5871
6870
  selectRepositoryTool as selectUserRepositoryTool,
5872
6871
  selectWorkspaceTool,
@@ -5875,6 +6874,8 @@ export {
5875
6874
  userProfilePanelToolsMetadata,
5876
6875
  viewOrganizationsTool,
5877
6876
  viewStarredTool,
6877
+ workspaceCollectionPanelTools,
6878
+ workspaceCollectionPanelToolsMetadata,
5878
6879
  workspaceRepositoriesPanelTools,
5879
6880
  workspaceRepositoriesPanelToolsMetadata,
5880
6881
  workspacesListPanelTools,