@industry-theme/alexandria-panels 0.1.15 → 0.1.17

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 +1183 -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,778 @@ 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
+ repositories.length > 0 && /* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
3277
+ /* @__PURE__ */ jsx(
3278
+ Search,
3279
+ {
3280
+ size: 16,
3281
+ style: {
3282
+ position: "absolute",
3283
+ top: "50%",
3284
+ left: "12px",
3285
+ transform: "translateY(-50%)",
3286
+ color: theme.colors.textSecondary,
3287
+ pointerEvents: "none"
3288
+ }
3289
+ }
3290
+ ),
3291
+ /* @__PURE__ */ jsx(
3292
+ "input",
3293
+ {
3294
+ type: "text",
3295
+ value: filter,
3296
+ placeholder: "Filter repositories...",
3297
+ onChange: (e) => setFilter(e.target.value),
3298
+ style: {
3299
+ width: "100%",
3300
+ padding: "8px 12px 8px 36px",
3301
+ borderRadius: "6px",
3302
+ border: `1px solid ${theme.colors.border}`,
3303
+ backgroundColor: theme.colors.background,
3304
+ color: theme.colors.text,
3305
+ fontSize: `${theme.fontSizes[1]}px`,
3306
+ fontFamily: theme.fonts.body,
3307
+ outline: "none"
3308
+ }
3309
+ }
3310
+ )
3311
+ ] }),
3312
+ error && /* @__PURE__ */ jsx(
3313
+ "div",
3314
+ {
3315
+ style: {
3316
+ display: "flex",
3317
+ alignItems: "center",
3318
+ gap: "8px",
3319
+ padding: "10px 14px",
3320
+ borderRadius: "6px",
3321
+ backgroundColor: `${theme.colors.error || "#ef4444"}20`,
3322
+ color: theme.colors.error || "#ef4444",
3323
+ fontSize: `${theme.fontSizes[1]}px`,
3324
+ fontFamily: theme.fonts.body
3325
+ },
3326
+ children: /* @__PURE__ */ jsx("span", { children: error })
3327
+ }
3328
+ ),
3329
+ /* @__PURE__ */ jsxs(
3330
+ "div",
3331
+ {
3332
+ style: {
3333
+ fontSize: `${theme.fontSizes[0]}px`,
3334
+ fontFamily: theme.fonts.body,
3335
+ color: theme.colors.textSecondary,
3336
+ textTransform: "uppercase",
3337
+ letterSpacing: "0.5px"
2537
3338
  },
2538
3339
  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
- )
3340
+ filteredRepositories.length,
3341
+ " ",
3342
+ filteredRepositories.length === 1 ? "repository" : "repositories",
3343
+ filter && repositories.length !== filteredRepositories.length && /* @__PURE__ */ jsxs("span", { children: [
3344
+ " (filtered from ",
3345
+ repositories.length,
3346
+ ")"
3347
+ ] })
2581
3348
  ]
2582
3349
  }
2583
3350
  ),
@@ -2592,20 +3359,37 @@ const WorkspacesListPanelContent = ({
2592
3359
  gap: "4px"
2593
3360
  },
2594
3361
  children: [
2595
- sortedWorkspaces.map((workspace) => /* @__PURE__ */ jsx(
2596
- WorkspaceCard,
3362
+ repositories.length === 0 && !isLoading && /* @__PURE__ */ jsxs(
3363
+ "div",
2597
3364
  {
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(
3365
+ style: {
3366
+ padding: "32px",
3367
+ textAlign: "center",
3368
+ color: theme.colors.textSecondary
3369
+ },
3370
+ children: [
3371
+ /* @__PURE__ */ jsx(
3372
+ Folder,
3373
+ {
3374
+ size: 32,
3375
+ style: { marginBottom: "12px", opacity: 0.5 }
3376
+ }
3377
+ ),
3378
+ /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories in this workspace." }),
3379
+ /* @__PURE__ */ jsx(
3380
+ "p",
3381
+ {
3382
+ style: {
3383
+ margin: "8px 0 0 0",
3384
+ fontSize: `${theme.fontSizes[0]}px`
3385
+ },
3386
+ children: "Add repositories to organize your projects."
3387
+ }
3388
+ )
3389
+ ]
3390
+ }
3391
+ ),
3392
+ repositories.length > 0 && filteredRepositories.length === 0 && /* @__PURE__ */ jsx(
2609
3393
  "div",
2610
3394
  {
2611
3395
  style: {
@@ -2613,18 +3397,29 @@ const WorkspacesListPanelContent = ({
2613
3397
  textAlign: "center",
2614
3398
  color: theme.colors.textSecondary
2615
3399
  },
2616
- children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: searchQuery.trim() ? `No workspaces found matching "${searchQuery}"` : "No workspaces found." })
3400
+ children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories match your filter." })
2617
3401
  }
2618
- )
3402
+ ),
3403
+ filteredRepositories.map((repository) => /* @__PURE__ */ jsx(
3404
+ WorkspaceCollectionRepositoryCard,
3405
+ {
3406
+ repository,
3407
+ isSelected: (selectedRepo == null ? void 0 : selectedRepo.id) === repository.id,
3408
+ onSelect: handleSelectRepository,
3409
+ onNavigate: panelActions.navigateToRepository ? handleNavigateRepository : void 0,
3410
+ onRemove: panelActions.removeRepositoryFromWorkspace ? handleRemoveRepository : void 0
3411
+ },
3412
+ repository.id
3413
+ ))
2619
3414
  ]
2620
3415
  }
2621
3416
  )
2622
3417
  ] });
2623
3418
  };
2624
- const WorkspacesListPanel = (props) => {
2625
- return /* @__PURE__ */ jsx(WorkspacesListPanelContent, { ...props });
3419
+ const WorkspaceCollectionPanel = (props) => {
3420
+ return /* @__PURE__ */ jsx(WorkspaceCollectionPanelContent, { ...props });
2626
3421
  };
2627
- const WorkspacesListPanelPreview = () => {
3422
+ const WorkspaceCollectionPanelPreview = () => {
2628
3423
  const { theme } = useTheme();
2629
3424
  return /* @__PURE__ */ jsxs(
2630
3425
  "div",
@@ -2649,8 +3444,8 @@ const WorkspacesListPanelPreview = () => {
2649
3444
  fontWeight: theme.fontWeights.semibold
2650
3445
  },
2651
3446
  children: [
2652
- /* @__PURE__ */ jsx(Layers, { size: 16, style: { color: theme.colors.primary } }),
2653
- /* @__PURE__ */ jsx("span", { children: "Workspaces" })
3447
+ /* @__PURE__ */ jsx(Folder, { size: 16, style: { color: theme.colors.primary } }),
3448
+ /* @__PURE__ */ jsx("span", { children: "Workspace Collection" })
2654
3449
  ]
2655
3450
  }
2656
3451
  ),
@@ -2663,7 +3458,7 @@ const WorkspacesListPanelPreview = () => {
2663
3458
  color: theme.colors.textSecondary,
2664
3459
  marginTop: "4px"
2665
3460
  },
2666
- children: "Browse and manage your workspaces"
3461
+ children: "Repositories in your workspace"
2667
3462
  }
2668
3463
  )
2669
3464
  ]
@@ -2854,6 +3649,10 @@ const GitHubRepositoryCard = ({
2854
3649
  /* @__PURE__ */ jsx(Star, { size: 12 }),
2855
3650
  formatNumber(repository.stargazers_count)
2856
3651
  ] }),
3652
+ repository.license && /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
3653
+ /* @__PURE__ */ jsx(Scale, { size: 12 }),
3654
+ repository.license
3655
+ ] }),
2857
3656
  /* @__PURE__ */ jsxs("span", { children: [
2858
3657
  "Updated ",
2859
3658
  getRelativeTime(repository.pushed_at || repository.updated_at)
@@ -2998,10 +3797,10 @@ function formatNumber(num) {
2998
3797
  }
2999
3798
  return num.toString();
3000
3799
  }
3001
- const PANEL_ID$8 = "industry-theme.github-starred";
3800
+ const PANEL_ID$9 = "industry-theme.github-starred";
3002
3801
  const createPanelEvent$2 = (type, payload) => ({
3003
3802
  type,
3004
- source: PANEL_ID$8,
3803
+ source: PANEL_ID$9,
3005
3804
  timestamp: Date.now(),
3006
3805
  payload
3007
3806
  });
@@ -3090,7 +3889,7 @@ const GitHubStarredPanelContent = ({
3090
3889
  if (panelActions.cloneRepository) {
3091
3890
  await panelActions.cloneRepository(repo);
3092
3891
  events.emit(
3093
- createPanelEvent$2(`${PANEL_ID$8}:repository-cloned`, {
3892
+ createPanelEvent$2(`${PANEL_ID$9}:repository-cloned`, {
3094
3893
  repository: repo
3095
3894
  })
3096
3895
  );
@@ -3110,7 +3909,7 @@ const GitHubStarredPanelContent = ({
3110
3909
  (repo) => {
3111
3910
  setSelectedRepo(repo);
3112
3911
  events.emit(
3113
- createPanelEvent$2(`${PANEL_ID$8}:repository-selected`, { repository: repo })
3912
+ createPanelEvent$2(`${PANEL_ID$9}:repository-selected`, { repository: repo })
3114
3913
  );
3115
3914
  },
3116
3915
  [events]
@@ -3122,11 +3921,11 @@ const GitHubStarredPanelContent = ({
3122
3921
  }, [panelActions]);
3123
3922
  useEffect(() => {
3124
3923
  const unsubscribers = [
3125
- events.on(`${PANEL_ID$8}:filter`, (event) => {
3924
+ events.on(`${PANEL_ID$9}:filter`, (event) => {
3126
3925
  var _a2;
3127
3926
  setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
3128
3927
  }),
3129
- events.on(`${PANEL_ID$8}:select-repository`, (event) => {
3928
+ events.on(`${PANEL_ID$9}:select-repository`, (event) => {
3130
3929
  var _a2;
3131
3930
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3132
3931
  if (identifier) {
@@ -3138,7 +3937,7 @@ const GitHubStarredPanelContent = ({
3138
3937
  }
3139
3938
  }
3140
3939
  }),
3141
- events.on(`${PANEL_ID$8}:clone-repository`, (event) => {
3940
+ events.on(`${PANEL_ID$9}:clone-repository`, (event) => {
3142
3941
  var _a2;
3143
3942
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3144
3943
  if (identifier) {
@@ -3471,10 +4270,10 @@ const GitHubStarredPanelPreview = () => {
3471
4270
  }
3472
4271
  );
3473
4272
  };
3474
- const PANEL_ID$7 = "industry-theme.github-projects";
4273
+ const PANEL_ID$8 = "industry-theme.github-projects";
3475
4274
  const createPanelEvent$1 = (type, payload) => ({
3476
4275
  type,
3477
- source: PANEL_ID$7,
4276
+ source: PANEL_ID$8,
3478
4277
  timestamp: Date.now(),
3479
4278
  payload
3480
4279
  });
@@ -3577,6 +4376,7 @@ const GitHubProjectsPanelContent = ({
3577
4376
  const filteredOrgRepos = useMemo(() => {
3578
4377
  const result = {};
3579
4378
  for (const [orgLogin, repos] of Object.entries(orgRepositories)) {
4379
+ if (!Array.isArray(repos)) continue;
3580
4380
  const filtered = filterRepos(repos);
3581
4381
  if (filtered.length > 0) {
3582
4382
  result[orgLogin] = filtered;
@@ -3587,7 +4387,9 @@ const GitHubProjectsPanelContent = ({
3587
4387
  const allRepositories = useMemo(() => {
3588
4388
  const all = [...userRepositories];
3589
4389
  for (const repos of Object.values(orgRepositories)) {
3590
- all.push(...repos);
4390
+ if (Array.isArray(repos)) {
4391
+ all.push(...repos);
4392
+ }
3591
4393
  }
3592
4394
  return all;
3593
4395
  }, [userRepositories, orgRepositories]);
@@ -3597,7 +4399,7 @@ const GitHubProjectsPanelContent = ({
3597
4399
  if (panelActions.cloneRepository) {
3598
4400
  await panelActions.cloneRepository(repo);
3599
4401
  events.emit(
3600
- createPanelEvent$1(`${PANEL_ID$7}:repository-cloned`, {
4402
+ createPanelEvent$1(`${PANEL_ID$8}:repository-cloned`, {
3601
4403
  repository: repo
3602
4404
  })
3603
4405
  );
@@ -3617,7 +4419,7 @@ const GitHubProjectsPanelContent = ({
3617
4419
  (repo) => {
3618
4420
  setSelectedRepo(repo);
3619
4421
  events.emit(
3620
- createPanelEvent$1(`${PANEL_ID$7}:repository-selected`, { repository: repo })
4422
+ createPanelEvent$1(`${PANEL_ID$8}:repository-selected`, { repository: repo })
3621
4423
  );
3622
4424
  },
3623
4425
  [events]
@@ -3640,18 +4442,18 @@ const GitHubProjectsPanelContent = ({
3640
4442
  }, []);
3641
4443
  useEffect(() => {
3642
4444
  const unsubscribers = [
3643
- events.on(`${PANEL_ID$7}:filter`, (event) => {
4445
+ events.on(`${PANEL_ID$8}:filter`, (event) => {
3644
4446
  var _a2;
3645
4447
  setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
3646
4448
  }),
3647
- events.on(`${PANEL_ID$7}:toggle-section`, (event) => {
4449
+ events.on(`${PANEL_ID$8}:toggle-section`, (event) => {
3648
4450
  var _a2;
3649
4451
  const owner = (_a2 = event.payload) == null ? void 0 : _a2.owner;
3650
4452
  if (owner) {
3651
4453
  toggleSection(owner);
3652
4454
  }
3653
4455
  }),
3654
- events.on(`${PANEL_ID$7}:select-repository`, (event) => {
4456
+ events.on(`${PANEL_ID$8}:select-repository`, (event) => {
3655
4457
  var _a2;
3656
4458
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3657
4459
  if (identifier) {
@@ -3663,7 +4465,7 @@ const GitHubProjectsPanelContent = ({
3663
4465
  }
3664
4466
  }
3665
4467
  }),
3666
- events.on(`${PANEL_ID$7}:clone-repository`, (event) => {
4468
+ events.on(`${PANEL_ID$8}:clone-repository`, (event) => {
3667
4469
  var _a2;
3668
4470
  const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
3669
4471
  if (identifier) {
@@ -4107,10 +4909,10 @@ const GitHubProjectsPanelPreview = () => {
4107
4909
  }
4108
4910
  );
4109
4911
  };
4110
- const PANEL_ID$6 = "industry-theme.user-profile";
4912
+ const PANEL_ID$7 = "industry-theme.user-profile";
4111
4913
  const createPanelEvent = (type, payload) => ({
4112
4914
  type,
4113
- source: PANEL_ID$6,
4915
+ source: PANEL_ID$7,
4114
4916
  timestamp: Date.now(),
4115
4917
  payload
4116
4918
  });
@@ -4388,7 +5190,7 @@ const UserProfilePanelContent = ({
4388
5190
  (organization) => {
4389
5191
  var _a2;
4390
5192
  events.emit(
4391
- createPanelEvent(`${PANEL_ID$6}:organization:selected`, {
5193
+ createPanelEvent(`${PANEL_ID$7}:organization:selected`, {
4392
5194
  orgLogin: organization.login,
4393
5195
  organization
4394
5196
  })
@@ -4401,7 +5203,7 @@ const UserProfilePanelContent = ({
4401
5203
  (repository) => {
4402
5204
  var _a2;
4403
5205
  events.emit(
4404
- createPanelEvent(`${PANEL_ID$6}:repository:selected`, {
5206
+ createPanelEvent(`${PANEL_ID$7}:repository:selected`, {
4405
5207
  owner: repository.owner.login,
4406
5208
  repo: repository.name,
4407
5209
  repository
@@ -4415,7 +5217,7 @@ const UserProfilePanelContent = ({
4415
5217
  (repository) => {
4416
5218
  var _a2;
4417
5219
  events.emit(
4418
- createPanelEvent(`${PANEL_ID$6}:repository:clone-requested`, {
5220
+ createPanelEvent(`${PANEL_ID$7}:repository:clone-requested`, {
4419
5221
  repository
4420
5222
  })
4421
5223
  );
@@ -4435,19 +5237,19 @@ const UserProfilePanelContent = ({
4435
5237
  setActiveView(view);
4436
5238
  setSearchQuery("");
4437
5239
  setShowSearchBox(false);
4438
- events.emit(createPanelEvent(`${PANEL_ID$6}:view:changed`, { view }));
5240
+ events.emit(createPanelEvent(`${PANEL_ID$7}:view:changed`, { view }));
4439
5241
  },
4440
5242
  [events]
4441
5243
  );
4442
5244
  useEffect(() => {
4443
5245
  const unsubscribers = [
4444
- events.on(`${PANEL_ID$6}:set-view`, (event) => {
5246
+ events.on(`${PANEL_ID$7}:set-view`, (event) => {
4445
5247
  var _a2;
4446
5248
  if ((_a2 = event.payload) == null ? void 0 : _a2.view) {
4447
5249
  handleViewChange(event.payload.view);
4448
5250
  }
4449
5251
  }),
4450
- events.on(`${PANEL_ID$6}:select-organization`, (event) => {
5252
+ events.on(`${PANEL_ID$7}:select-organization`, (event) => {
4451
5253
  var _a2;
4452
5254
  const orgLogin = (_a2 = event.payload) == null ? void 0 : _a2.orgLogin;
4453
5255
  if (orgLogin) {
@@ -4457,7 +5259,7 @@ const UserProfilePanelContent = ({
4457
5259
  }
4458
5260
  }
4459
5261
  }),
4460
- events.on(`${PANEL_ID$6}:select-repository`, (event) => {
5262
+ events.on(`${PANEL_ID$7}:select-repository`, (event) => {
4461
5263
  const { owner, repo } = event.payload || {};
4462
5264
  if (owner && repo) {
4463
5265
  const repository = starredRepositories.find(
@@ -4468,7 +5270,7 @@ const UserProfilePanelContent = ({
4468
5270
  }
4469
5271
  }
4470
5272
  }),
4471
- events.on(`${PANEL_ID$6}:clone-repository`, (event) => {
5273
+ events.on(`${PANEL_ID$7}:clone-repository`, (event) => {
4472
5274
  const { owner, repo } = event.payload || {};
4473
5275
  if (owner && repo) {
4474
5276
  const repository = starredRepositories.find(
@@ -4479,7 +5281,7 @@ const UserProfilePanelContent = ({
4479
5281
  }
4480
5282
  }
4481
5283
  }),
4482
- events.on(`${PANEL_ID$6}:filter-starred`, (event) => {
5284
+ events.on(`${PANEL_ID$7}:filter-starred`, (event) => {
4483
5285
  var _a2;
4484
5286
  if (((_a2 = event.payload) == null ? void 0 : _a2.filter) !== void 0) {
4485
5287
  setSearchQuery(event.payload.filter);
@@ -4993,7 +5795,7 @@ const UserProfilePanelPreview = () => {
4993
5795
  }
4994
5796
  );
4995
5797
  };
4996
- const PANEL_ID$5 = "industry-theme.local-projects";
5798
+ const PANEL_ID$6 = "industry-theme.local-projects";
4997
5799
  const filterProjectsTool$1 = {
4998
5800
  name: "filter_projects",
4999
5801
  description: "Filter the local projects list by name, owner, or path",
@@ -5017,7 +5819,7 @@ const filterProjectsTool$1 = {
5017
5819
  tags: ["filter", "search", "projects"],
5018
5820
  tool_call_template: {
5019
5821
  call_template_type: "panel_event",
5020
- event_type: `${PANEL_ID$5}:filter`
5822
+ event_type: `${PANEL_ID$6}:filter`
5021
5823
  }
5022
5824
  };
5023
5825
  const selectProjectTool = {
@@ -5043,7 +5845,7 @@ const selectProjectTool = {
5043
5845
  tags: ["select", "project", "navigation"],
5044
5846
  tool_call_template: {
5045
5847
  call_template_type: "panel_event",
5046
- event_type: `${PANEL_ID$5}:select-repository`
5848
+ event_type: `${PANEL_ID$6}:select-repository`
5047
5849
  }
5048
5850
  };
5049
5851
  const openProjectTool = {
@@ -5069,7 +5871,7 @@ const openProjectTool = {
5069
5871
  tags: ["open", "project", "workspace"],
5070
5872
  tool_call_template: {
5071
5873
  call_template_type: "panel_event",
5072
- event_type: `${PANEL_ID$5}:open-repository`
5874
+ event_type: `${PANEL_ID$6}:open-repository`
5073
5875
  }
5074
5876
  };
5075
5877
  const localProjectsPanelTools = [
@@ -5078,13 +5880,13 @@ const localProjectsPanelTools = [
5078
5880
  openProjectTool
5079
5881
  ];
5080
5882
  const localProjectsPanelToolsMetadata = {
5081
- id: PANEL_ID$5,
5883
+ id: PANEL_ID$6,
5082
5884
  name: "Local Projects Panel",
5083
5885
  description: "Tools for browsing and managing local Alexandria repositories",
5084
5886
  tools: localProjectsPanelTools
5085
5887
  };
5086
- const PANEL_ID$4 = "industry-theme.workspace-repositories";
5087
- const selectRepositoryTool$1 = {
5888
+ const PANEL_ID$5 = "industry-theme.workspace-repositories";
5889
+ const selectRepositoryTool$2 = {
5088
5890
  name: "select_workspace_repository",
5089
5891
  description: "Selects a repository in the workspace panel",
5090
5892
  inputs: {
@@ -5107,7 +5909,7 @@ const selectRepositoryTool$1 = {
5107
5909
  tags: ["workspace", "repository", "select"],
5108
5910
  tool_call_template: {
5109
5911
  call_template_type: "panel_event",
5110
- event_type: `${PANEL_ID$4}:select-repository`
5912
+ event_type: `${PANEL_ID$5}:select-repository`
5111
5913
  }
5112
5914
  };
5113
5915
  const refreshWorkspaceTool = {
@@ -5132,7 +5934,7 @@ const refreshWorkspaceTool = {
5132
5934
  tags: ["workspace", "refresh"],
5133
5935
  tool_call_template: {
5134
5936
  call_template_type: "panel_event",
5135
- event_type: `${PANEL_ID$4}:refresh-workspace`
5937
+ event_type: `${PANEL_ID$5}:refresh-workspace`
5136
5938
  }
5137
5939
  };
5138
5940
  const openRepositoryTool = {
@@ -5158,21 +5960,21 @@ const openRepositoryTool = {
5158
5960
  tags: ["workspace", "repository", "open"],
5159
5961
  tool_call_template: {
5160
5962
  call_template_type: "panel_event",
5161
- event_type: `${PANEL_ID$4}:open-repository`
5963
+ event_type: `${PANEL_ID$5}:open-repository`
5162
5964
  }
5163
5965
  };
5164
5966
  const workspaceRepositoriesPanelTools = [
5165
- selectRepositoryTool$1,
5967
+ selectRepositoryTool$2,
5166
5968
  refreshWorkspaceTool,
5167
5969
  openRepositoryTool
5168
5970
  ];
5169
5971
  const workspaceRepositoriesPanelToolsMetadata = {
5170
- id: PANEL_ID$4,
5972
+ id: PANEL_ID$5,
5171
5973
  name: "Workspace Repositories Panel",
5172
5974
  description: "Tools provided by the workspace repositories panel",
5173
5975
  tools: workspaceRepositoriesPanelTools
5174
5976
  };
5175
- const PANEL_ID$3 = "industry-theme.workspaces-list";
5977
+ const PANEL_ID$4 = "industry-theme.workspaces-list";
5176
5978
  const filterWorkspacesTool = {
5177
5979
  name: "filter_workspaces",
5178
5980
  description: "Filter the workspaces list by workspace name, description, or repository names within workspaces",
@@ -5196,7 +5998,7 @@ const filterWorkspacesTool = {
5196
5998
  tags: ["filter", "search", "workspaces"],
5197
5999
  tool_call_template: {
5198
6000
  call_template_type: "panel_event",
5199
- event_type: `${PANEL_ID$3}:filter`
6001
+ event_type: `${PANEL_ID$4}:filter`
5200
6002
  }
5201
6003
  };
5202
6004
  const selectWorkspaceTool = {
@@ -5222,7 +6024,7 @@ const selectWorkspaceTool = {
5222
6024
  tags: ["select", "workspace", "navigation"],
5223
6025
  tool_call_template: {
5224
6026
  call_template_type: "panel_event",
5225
- event_type: `${PANEL_ID$3}:select-workspace`
6027
+ event_type: `${PANEL_ID$4}:select-workspace`
5226
6028
  }
5227
6029
  };
5228
6030
  const openWorkspaceTool = {
@@ -5248,7 +6050,7 @@ const openWorkspaceTool = {
5248
6050
  tags: ["open", "workspace", "window"],
5249
6051
  tool_call_template: {
5250
6052
  call_template_type: "panel_event",
5251
- event_type: `${PANEL_ID$3}:open-workspace`
6053
+ event_type: `${PANEL_ID$4}:open-workspace`
5252
6054
  }
5253
6055
  };
5254
6056
  const createWorkspaceTool = {
@@ -5279,7 +6081,7 @@ const createWorkspaceTool = {
5279
6081
  tags: ["create", "workspace", "new"],
5280
6082
  tool_call_template: {
5281
6083
  call_template_type: "panel_event",
5282
- event_type: `${PANEL_ID$3}:create-workspace`
6084
+ event_type: `${PANEL_ID$4}:create-workspace`
5283
6085
  }
5284
6086
  };
5285
6087
  const workspacesListPanelTools = [
@@ -5289,11 +6091,154 @@ const workspacesListPanelTools = [
5289
6091
  createWorkspaceTool
5290
6092
  ];
5291
6093
  const workspacesListPanelToolsMetadata = {
5292
- id: PANEL_ID$3,
6094
+ id: PANEL_ID$4,
5293
6095
  name: "Workspaces List Panel",
5294
6096
  description: "Tools for browsing and managing workspaces",
5295
6097
  tools: workspacesListPanelTools
5296
6098
  };
6099
+ const PANEL_ID$3 = "industry-theme.workspace-collection";
6100
+ const filterRepositoriesTool = {
6101
+ name: "filter_workspace_collection",
6102
+ description: "Filters repositories in the workspace collection by search term",
6103
+ inputs: {
6104
+ type: "object",
6105
+ properties: {
6106
+ filter: {
6107
+ type: "string",
6108
+ description: "Search term to filter repositories by name, owner, or description"
6109
+ }
6110
+ },
6111
+ required: ["filter"]
6112
+ },
6113
+ outputs: {
6114
+ type: "object",
6115
+ properties: {
6116
+ success: { type: "boolean" },
6117
+ matchCount: { type: "number" }
6118
+ }
6119
+ },
6120
+ tags: ["workspace", "repository", "filter", "search"],
6121
+ tool_call_template: {
6122
+ call_template_type: "panel_event",
6123
+ event_type: `${PANEL_ID$3}:filter`
6124
+ }
6125
+ };
6126
+ const selectRepositoryTool$1 = {
6127
+ name: "select_collection_repository",
6128
+ description: "Selects a repository in the workspace collection panel",
6129
+ inputs: {
6130
+ type: "object",
6131
+ properties: {
6132
+ repositoryKey: {
6133
+ type: "string",
6134
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6135
+ }
6136
+ },
6137
+ required: ["repositoryKey"]
6138
+ },
6139
+ outputs: {
6140
+ type: "object",
6141
+ properties: {
6142
+ success: { type: "boolean" },
6143
+ message: { type: "string" }
6144
+ }
6145
+ },
6146
+ tags: ["workspace", "repository", "select"],
6147
+ tool_call_template: {
6148
+ call_template_type: "panel_event",
6149
+ event_type: `${PANEL_ID$3}:select-repository`
6150
+ }
6151
+ };
6152
+ const navigateRepositoryTool = {
6153
+ name: "navigate_collection_repository",
6154
+ description: "Navigates to the full repository page for a repository in the workspace",
6155
+ inputs: {
6156
+ type: "object",
6157
+ properties: {
6158
+ repositoryKey: {
6159
+ type: "string",
6160
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6161
+ }
6162
+ },
6163
+ required: ["repositoryKey"]
6164
+ },
6165
+ outputs: {
6166
+ type: "object",
6167
+ properties: {
6168
+ success: { type: "boolean" },
6169
+ message: { type: "string" }
6170
+ }
6171
+ },
6172
+ tags: ["workspace", "repository", "navigate", "open"],
6173
+ tool_call_template: {
6174
+ call_template_type: "panel_event",
6175
+ event_type: `${PANEL_ID$3}:navigate-repository`
6176
+ }
6177
+ };
6178
+ const removeRepositoryTool = {
6179
+ name: "remove_collection_repository",
6180
+ description: "Removes a repository from the current workspace",
6181
+ inputs: {
6182
+ type: "object",
6183
+ properties: {
6184
+ repositoryKey: {
6185
+ type: "string",
6186
+ description: 'Repository identifier in "owner/repo" format or just the repository name'
6187
+ }
6188
+ },
6189
+ required: ["repositoryKey"]
6190
+ },
6191
+ outputs: {
6192
+ type: "object",
6193
+ properties: {
6194
+ success: { type: "boolean" },
6195
+ message: { type: "string" }
6196
+ }
6197
+ },
6198
+ tags: ["workspace", "repository", "remove", "delete"],
6199
+ tool_call_template: {
6200
+ call_template_type: "panel_event",
6201
+ event_type: `${PANEL_ID$3}:remove-repository`
6202
+ }
6203
+ };
6204
+ const refreshWorkspaceCollectionTool = {
6205
+ name: "refresh_workspace_collection",
6206
+ description: "Refreshes the workspace collection repository list",
6207
+ inputs: {
6208
+ type: "object",
6209
+ properties: {
6210
+ force: {
6211
+ type: "boolean",
6212
+ description: "Force refresh even if data is fresh"
6213
+ }
6214
+ }
6215
+ },
6216
+ outputs: {
6217
+ type: "object",
6218
+ properties: {
6219
+ success: { type: "boolean" },
6220
+ repositoryCount: { type: "number" }
6221
+ }
6222
+ },
6223
+ tags: ["workspace", "refresh"],
6224
+ tool_call_template: {
6225
+ call_template_type: "panel_event",
6226
+ event_type: `${PANEL_ID$3}:refresh-workspace`
6227
+ }
6228
+ };
6229
+ const workspaceCollectionPanelTools = [
6230
+ filterRepositoriesTool,
6231
+ selectRepositoryTool$1,
6232
+ navigateRepositoryTool,
6233
+ removeRepositoryTool,
6234
+ refreshWorkspaceCollectionTool
6235
+ ];
6236
+ const workspaceCollectionPanelToolsMetadata = {
6237
+ id: PANEL_ID$3,
6238
+ name: "Workspace Collection Panel",
6239
+ description: "Tools provided by the browser-based workspace collection panel",
6240
+ tools: workspaceCollectionPanelTools
6241
+ };
5297
6242
  const PANEL_ID$2 = "industry-theme.github-starred";
5298
6243
  const filterStarredTool$1 = {
5299
6244
  name: "filter_starred_repositories",
@@ -5752,6 +6697,26 @@ const panels = [
5752
6697
  console.log("Workspaces List Panel unmounting");
5753
6698
  }
5754
6699
  },
6700
+ {
6701
+ metadata: {
6702
+ id: "industry-theme.workspace-collection",
6703
+ name: "Workspace Collection",
6704
+ icon: "FolderOpen",
6705
+ version: "0.1.0",
6706
+ author: "Industry Theme",
6707
+ description: "Browse repositories in a workspace (browser)",
6708
+ slices: ["workspace", "workspaceRepositories"],
6709
+ tools: workspaceCollectionPanelTools
6710
+ },
6711
+ component: WorkspaceCollectionPanel,
6712
+ onMount: async (context) => {
6713
+ console.log("Workspace Collection Panel mounted");
6714
+ console.log("Current scope:", context.currentScope.type);
6715
+ },
6716
+ onUnmount: async (_context) => {
6717
+ console.log("Workspace Collection Panel unmounting");
6718
+ }
6719
+ },
5755
6720
  {
5756
6721
  metadata: {
5757
6722
  id: "industry-theme.github-starred",
@@ -5838,6 +6803,8 @@ export {
5838
6803
  UserProfilePanel,
5839
6804
  UserProfilePanelPreview,
5840
6805
  WorkspaceCard,
6806
+ WorkspaceCollectionPanel,
6807
+ WorkspaceCollectionPanelPreview,
5841
6808
  WorkspaceRepositoriesPanel,
5842
6809
  WorkspacesListPanel,
5843
6810
  WorkspacesListPanelPreview,
@@ -5847,6 +6814,7 @@ export {
5847
6814
  createWorkspaceTool,
5848
6815
  filterProjectsTool as filterGitHubProjectsTool,
5849
6816
  filterProjectsTool$1 as filterProjectsTool,
6817
+ filterRepositoriesTool,
5850
6818
  filterStarredTool$1 as filterStarredTool,
5851
6819
  filterStarredTool as filterUserStarredTool,
5852
6820
  filterWorkspacesTool,
@@ -5856,17 +6824,21 @@ export {
5856
6824
  githubStarredPanelToolsMetadata,
5857
6825
  localProjectsPanelTools,
5858
6826
  localProjectsPanelToolsMetadata,
6827
+ navigateRepositoryTool,
5859
6828
  onPackageLoad,
5860
6829
  onPackageUnload,
5861
6830
  openProjectTool,
5862
6831
  openRepositoryTool,
5863
6832
  openWorkspaceTool,
5864
6833
  panels,
6834
+ refreshWorkspaceCollectionTool,
5865
6835
  refreshWorkspaceTool,
6836
+ removeRepositoryTool,
6837
+ selectRepositoryTool$1 as selectCollectionRepositoryTool,
5866
6838
  selectOrganizationTool,
5867
6839
  selectProjectRepositoryTool,
5868
6840
  selectProjectTool,
5869
- selectRepositoryTool$1 as selectRepositoryTool,
6841
+ selectRepositoryTool$2 as selectRepositoryTool,
5870
6842
  selectStarredRepositoryTool,
5871
6843
  selectRepositoryTool as selectUserRepositoryTool,
5872
6844
  selectWorkspaceTool,
@@ -5875,6 +6847,8 @@ export {
5875
6847
  userProfilePanelToolsMetadata,
5876
6848
  viewOrganizationsTool,
5877
6849
  viewStarredTool,
6850
+ workspaceCollectionPanelTools,
6851
+ workspaceCollectionPanelToolsMetadata,
5878
6852
  workspaceRepositoriesPanelTools,
5879
6853
  workspaceRepositoriesPanelToolsMetadata,
5880
6854
  workspacesListPanelTools,