@industry-theme/alexandria-panels 0.1.9 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/mocks/panelContext.d.ts +41 -0
- package/dist/mocks/panelContext.d.ts.map +1 -1
- package/dist/panels/GitHubProjectsPanel/GitHubProjectsPanel.stories.d.ts +34 -0
- package/dist/panels/GitHubProjectsPanel/GitHubProjectsPanel.stories.d.ts.map +1 -0
- package/dist/panels/GitHubProjectsPanel/index.d.ts +11 -0
- package/dist/panels/GitHubProjectsPanel/index.d.ts.map +1 -0
- package/dist/panels/GitHubProjectsPanel/tools.d.ts +32 -0
- package/dist/panels/GitHubProjectsPanel/tools.d.ts.map +1 -0
- package/dist/panels/GitHubProjectsPanel/types.d.ts +74 -0
- package/dist/panels/GitHubProjectsPanel/types.d.ts.map +1 -0
- package/dist/panels/GitHubStarredPanel/GitHubStarredPanel.stories.d.ts +26 -0
- package/dist/panels/GitHubStarredPanel/GitHubStarredPanel.stories.d.ts.map +1 -0
- package/dist/panels/GitHubStarredPanel/index.d.ts +12 -0
- package/dist/panels/GitHubStarredPanel/index.d.ts.map +1 -0
- package/dist/panels/GitHubStarredPanel/tools.d.ts +28 -0
- package/dist/panels/GitHubStarredPanel/tools.d.ts.map +1 -0
- package/dist/panels/GitHubStarredPanel/types.d.ts +64 -0
- package/dist/panels/GitHubStarredPanel/types.d.ts.map +1 -0
- package/dist/panels/LocalProjectsPanel/LocalProjectCard.d.ts.map +1 -1
- package/dist/panels/WorkspacesListPanel/index.d.ts.map +1 -1
- package/dist/panels/WorkspacesListPanel/types.d.ts +2 -0
- package/dist/panels/WorkspacesListPanel/types.d.ts.map +1 -1
- package/dist/panels/shared/GitHubRepositoryCard.d.ts +26 -0
- package/dist/panels/shared/GitHubRepositoryCard.d.ts.map +1 -0
- package/dist/panels/shared/github-types.d.ts +51 -0
- package/dist/panels/shared/github-types.d.ts.map +1 -0
- package/dist/panels.bundle.js +1693 -1012
- package/dist/panels.bundle.js.map +1 -1
- package/dist/tools/index.d.ts +0 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools.bundle.js +0 -97
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/panels/DependenciesPanel/DependenciesPanel.stories.d.ts +0 -59
- package/dist/panels/DependenciesPanel/DependenciesPanel.stories.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/components/DependencyInfoModal.d.ts +0 -8
- package/dist/panels/DependenciesPanel/components/DependencyInfoModal.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/components/DependencyRow.d.ts +0 -8
- package/dist/panels/DependenciesPanel/components/DependencyRow.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/components/FilterBar.d.ts +0 -17
- package/dist/panels/DependenciesPanel/components/FilterBar.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/components/index.d.ts +0 -4
- package/dist/panels/DependenciesPanel/components/index.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/index.d.ts +0 -7
- package/dist/panels/DependenciesPanel/index.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/tools.d.ts +0 -35
- package/dist/panels/DependenciesPanel/tools.d.ts.map +0 -1
- package/dist/panels/DependenciesPanel/types.d.ts +0 -36
- package/dist/panels/DependenciesPanel/types.d.ts.map +0 -1
package/dist/panels.bundle.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
try {
|
|
4
4
|
if (typeof document != "undefined") {
|
|
5
5
|
var elementStyle = document.createElement("style");
|
|
6
|
-
elementStyle.appendChild(document.createTextNode("/* Container query for responsive LocalProjectCard */\n.local-projects-panel {\n container-type: inline-size;\n container-name: local-projects;\n height: 100%;\n}\n\n/* Compact mode when container is 400px or less */\n@container local-projects (max-width: 400px) {\n .local-projects-panel {\n padding: 8px !important;\n gap: 8px !important;\n }\n\n .local-projects-list {\n gap: 8px !important;\n }\n\n .local-project-card {\n padding: 8px !important;\n }\n}"));
|
|
6
|
+
elementStyle.appendChild(document.createTextNode("/* Container query for responsive LocalProjectCard */\n.local-projects-panel {\n container-type: inline-size;\n container-name: local-projects;\n height: 100%;\n}\n\n/* Animated underline that grows from left on hover */\n.local-project-card .project-name-underline {\n position: relative;\n text-decoration: none;\n}\n\n.local-project-card .project-name-underline::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: -3px;\n width: 0;\n height: 2px;\n background-color: var(--underline-color);\n transition: width 0.2s ease-out;\n}\n\n.local-project-card:hover .project-name-underline::after {\n width: 100%;\n}\n\n/* Compact mode when container is 400px or less */\n@container local-projects (max-width: 400px) {\n .local-projects-panel {\n padding: 8px !important;\n gap: 8px !important;\n }\n\n .local-projects-list {\n gap: 8px !important;\n }\n\n .local-project-card {\n padding: 8px !important;\n }\n}"));
|
|
7
7
|
document.head.appendChild(elementStyle);
|
|
8
8
|
}
|
|
9
9
|
} catch (e) {
|
|
@@ -140,46 +140,7 @@ 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$
|
|
144
|
-
[
|
|
145
|
-
"path",
|
|
146
|
-
{
|
|
147
|
-
d: "M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",
|
|
148
|
-
key: "lc1i9w"
|
|
149
|
-
}
|
|
150
|
-
],
|
|
151
|
-
["path", { d: "m7 16.5-4.74-2.85", key: "1o9zyk" }],
|
|
152
|
-
["path", { d: "m7 16.5 5-3", key: "va8pkn" }],
|
|
153
|
-
["path", { d: "M7 16.5v5.17", key: "jnp8gn" }],
|
|
154
|
-
[
|
|
155
|
-
"path",
|
|
156
|
-
{
|
|
157
|
-
d: "M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",
|
|
158
|
-
key: "8zsnat"
|
|
159
|
-
}
|
|
160
|
-
],
|
|
161
|
-
["path", { d: "m17 16.5-5-3", key: "8arw3v" }],
|
|
162
|
-
["path", { d: "m17 16.5 4.74-2.85", key: "8rfmw" }],
|
|
163
|
-
["path", { d: "M17 16.5v5.17", key: "k6z78m" }],
|
|
164
|
-
[
|
|
165
|
-
"path",
|
|
166
|
-
{
|
|
167
|
-
d: "M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",
|
|
168
|
-
key: "1xygjf"
|
|
169
|
-
}
|
|
170
|
-
],
|
|
171
|
-
["path", { d: "M12 8 7.26 5.15", key: "1vbdud" }],
|
|
172
|
-
["path", { d: "m12 8 4.74-2.85", key: "3rx089" }],
|
|
173
|
-
["path", { d: "M12 13.5V8", key: "1io7kd" }]
|
|
174
|
-
];
|
|
175
|
-
const Boxes = createLucideIcon("boxes", __iconNode$l);
|
|
176
|
-
/**
|
|
177
|
-
* @license lucide-react v0.552.0 - ISC
|
|
178
|
-
*
|
|
179
|
-
* This source code is licensed under the ISC license.
|
|
180
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
181
|
-
*/
|
|
182
|
-
const __iconNode$k = [
|
|
143
|
+
const __iconNode$q = [
|
|
183
144
|
["path", { d: "M10 12h4", key: "a56b0p" }],
|
|
184
145
|
["path", { d: "M10 8h4", key: "1sr2af" }],
|
|
185
146
|
["path", { d: "M14 21v-3a2 2 0 0 0-4 0v3", key: "1rgiei" }],
|
|
@@ -192,83 +153,111 @@ const __iconNode$k = [
|
|
|
192
153
|
],
|
|
193
154
|
["path", { d: "M6 21V5a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v16", key: "16ra0t" }]
|
|
194
155
|
];
|
|
195
|
-
const Building2 = createLucideIcon("building-2", __iconNode$
|
|
156
|
+
const Building2 = createLucideIcon("building-2", __iconNode$q);
|
|
196
157
|
/**
|
|
197
158
|
* @license lucide-react v0.552.0 - ISC
|
|
198
159
|
*
|
|
199
160
|
* This source code is licensed under the ISC license.
|
|
200
161
|
* See the LICENSE file in the root directory of this source tree.
|
|
201
162
|
*/
|
|
202
|
-
const __iconNode$
|
|
203
|
-
const Check = createLucideIcon("check", __iconNode$
|
|
163
|
+
const __iconNode$p = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
164
|
+
const Check = createLucideIcon("check", __iconNode$p);
|
|
204
165
|
/**
|
|
205
166
|
* @license lucide-react v0.552.0 - ISC
|
|
206
167
|
*
|
|
207
168
|
* This source code is licensed under the ISC license.
|
|
208
169
|
* See the LICENSE file in the root directory of this source tree.
|
|
209
170
|
*/
|
|
210
|
-
const __iconNode$
|
|
171
|
+
const __iconNode$o = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
|
|
172
|
+
const ChevronDown = createLucideIcon("chevron-down", __iconNode$o);
|
|
173
|
+
/**
|
|
174
|
+
* @license lucide-react v0.552.0 - ISC
|
|
175
|
+
*
|
|
176
|
+
* This source code is licensed under the ISC license.
|
|
177
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
178
|
+
*/
|
|
179
|
+
const __iconNode$n = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
180
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$n);
|
|
181
|
+
/**
|
|
182
|
+
* @license lucide-react v0.552.0 - ISC
|
|
183
|
+
*
|
|
184
|
+
* This source code is licensed under the ISC license.
|
|
185
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
186
|
+
*/
|
|
187
|
+
const __iconNode$m = [
|
|
211
188
|
["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
|
|
212
|
-
["
|
|
213
|
-
["
|
|
189
|
+
["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
|
|
190
|
+
["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
|
|
214
191
|
];
|
|
215
|
-
const
|
|
192
|
+
const CircleAlert = createLucideIcon("circle-alert", __iconNode$m);
|
|
216
193
|
/**
|
|
217
194
|
* @license lucide-react v0.552.0 - ISC
|
|
218
195
|
*
|
|
219
196
|
* This source code is licensed under the ISC license.
|
|
220
197
|
* See the LICENSE file in the root directory of this source tree.
|
|
221
198
|
*/
|
|
222
|
-
const __iconNode$
|
|
199
|
+
const __iconNode$l = [
|
|
223
200
|
["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
|
|
224
201
|
["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" }]
|
|
225
202
|
];
|
|
226
|
-
const Copy = createLucideIcon("copy", __iconNode$
|
|
203
|
+
const Copy = createLucideIcon("copy", __iconNode$l);
|
|
227
204
|
/**
|
|
228
205
|
* @license lucide-react v0.552.0 - ISC
|
|
229
206
|
*
|
|
230
207
|
* This source code is licensed under the ISC license.
|
|
231
208
|
* See the LICENSE file in the root directory of this source tree.
|
|
232
209
|
*/
|
|
233
|
-
const __iconNode$
|
|
210
|
+
const __iconNode$k = [
|
|
234
211
|
["path", { d: "M10 12h.01", key: "1kxr2c" }],
|
|
235
212
|
["path", { d: "M18 20V6a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v14", key: "36qu9e" }],
|
|
236
213
|
["path", { d: "M2 20h20", key: "owomy5" }]
|
|
237
214
|
];
|
|
238
|
-
const DoorClosed = createLucideIcon("door-closed", __iconNode$
|
|
215
|
+
const DoorClosed = createLucideIcon("door-closed", __iconNode$k);
|
|
239
216
|
/**
|
|
240
217
|
* @license lucide-react v0.552.0 - ISC
|
|
241
218
|
*
|
|
242
219
|
* This source code is licensed under the ISC license.
|
|
243
220
|
* See the LICENSE file in the root directory of this source tree.
|
|
244
221
|
*/
|
|
245
|
-
const __iconNode$
|
|
222
|
+
const __iconNode$j = [
|
|
223
|
+
["path", { d: "M12 15V3", key: "m9g1x1" }],
|
|
224
|
+
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
|
|
225
|
+
["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
|
|
226
|
+
];
|
|
227
|
+
const Download = createLucideIcon("download", __iconNode$j);
|
|
228
|
+
/**
|
|
229
|
+
* @license lucide-react v0.552.0 - ISC
|
|
230
|
+
*
|
|
231
|
+
* This source code is licensed under the ISC license.
|
|
232
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
233
|
+
*/
|
|
234
|
+
const __iconNode$i = [
|
|
246
235
|
["path", { d: "M15 3h6v6", key: "1q9fwt" }],
|
|
247
236
|
["path", { d: "M10 14 21 3", key: "gplh6r" }],
|
|
248
237
|
["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
|
|
249
238
|
];
|
|
250
|
-
const ExternalLink = createLucideIcon("external-link", __iconNode$
|
|
239
|
+
const ExternalLink = createLucideIcon("external-link", __iconNode$i);
|
|
251
240
|
/**
|
|
252
241
|
* @license lucide-react v0.552.0 - ISC
|
|
253
242
|
*
|
|
254
243
|
* This source code is licensed under the ISC license.
|
|
255
244
|
* See the LICENSE file in the root directory of this source tree.
|
|
256
245
|
*/
|
|
257
|
-
const __iconNode$
|
|
246
|
+
const __iconNode$h = [
|
|
258
247
|
["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }],
|
|
259
248
|
["path", { d: "M3 7V5a2 2 0 0 1 2-2h2", key: "aa7l1z" }],
|
|
260
249
|
["path", { d: "M17 3h2a2 2 0 0 1 2 2v2", key: "4qcy5o" }],
|
|
261
250
|
["path", { d: "M21 17v2a2 2 0 0 1-2 2h-2", key: "6vwrx8" }],
|
|
262
251
|
["path", { d: "M7 21H5a2 2 0 0 1-2-2v-2", key: "ioqczr" }]
|
|
263
252
|
];
|
|
264
|
-
const Focus = createLucideIcon("focus", __iconNode$
|
|
253
|
+
const Focus = createLucideIcon("focus", __iconNode$h);
|
|
265
254
|
/**
|
|
266
255
|
* @license lucide-react v0.552.0 - ISC
|
|
267
256
|
*
|
|
268
257
|
* This source code is licensed under the ISC license.
|
|
269
258
|
* See the LICENSE file in the root directory of this source tree.
|
|
270
259
|
*/
|
|
271
|
-
const __iconNode$
|
|
260
|
+
const __iconNode$g = [
|
|
272
261
|
[
|
|
273
262
|
"path",
|
|
274
263
|
{
|
|
@@ -280,14 +269,14 @@ const __iconNode$d = [
|
|
|
280
269
|
["path", { d: "M18 19c-2.8 0-5-2.2-5-5v8", key: "pkpw2h" }],
|
|
281
270
|
["circle", { cx: "20", cy: "19", r: "2", key: "1obnsp" }]
|
|
282
271
|
];
|
|
283
|
-
const FolderGit2 = createLucideIcon("folder-git-2", __iconNode$
|
|
272
|
+
const FolderGit2 = createLucideIcon("folder-git-2", __iconNode$g);
|
|
284
273
|
/**
|
|
285
274
|
* @license lucide-react v0.552.0 - ISC
|
|
286
275
|
*
|
|
287
276
|
* This source code is licensed under the ISC license.
|
|
288
277
|
* See the LICENSE file in the root directory of this source tree.
|
|
289
278
|
*/
|
|
290
|
-
const __iconNode$
|
|
279
|
+
const __iconNode$f = [
|
|
291
280
|
[
|
|
292
281
|
"path",
|
|
293
282
|
{
|
|
@@ -296,14 +285,14 @@ const __iconNode$c = [
|
|
|
296
285
|
}
|
|
297
286
|
]
|
|
298
287
|
];
|
|
299
|
-
const FolderOpen = createLucideIcon("folder-open", __iconNode$
|
|
288
|
+
const FolderOpen = createLucideIcon("folder-open", __iconNode$f);
|
|
300
289
|
/**
|
|
301
290
|
* @license lucide-react v0.552.0 - ISC
|
|
302
291
|
*
|
|
303
292
|
* This source code is licensed under the ISC license.
|
|
304
293
|
* See the LICENSE file in the root directory of this source tree.
|
|
305
294
|
*/
|
|
306
|
-
const __iconNode$
|
|
295
|
+
const __iconNode$e = [
|
|
307
296
|
[
|
|
308
297
|
"path",
|
|
309
298
|
{
|
|
@@ -312,14 +301,28 @@ const __iconNode$b = [
|
|
|
312
301
|
}
|
|
313
302
|
]
|
|
314
303
|
];
|
|
315
|
-
const Folder = createLucideIcon("folder", __iconNode$
|
|
304
|
+
const Folder = createLucideIcon("folder", __iconNode$e);
|
|
305
|
+
/**
|
|
306
|
+
* @license lucide-react v0.552.0 - ISC
|
|
307
|
+
*
|
|
308
|
+
* This source code is licensed under the ISC license.
|
|
309
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
310
|
+
*/
|
|
311
|
+
const __iconNode$d = [
|
|
312
|
+
["circle", { cx: "12", cy: "18", r: "3", key: "1mpf1b" }],
|
|
313
|
+
["circle", { cx: "6", cy: "6", r: "3", key: "1lh9wr" }],
|
|
314
|
+
["circle", { cx: "18", cy: "6", r: "3", key: "1h7g24" }],
|
|
315
|
+
["path", { d: "M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9", key: "1uq4wg" }],
|
|
316
|
+
["path", { d: "M12 12v3", key: "158kv8" }]
|
|
317
|
+
];
|
|
318
|
+
const GitFork = createLucideIcon("git-fork", __iconNode$d);
|
|
316
319
|
/**
|
|
317
320
|
* @license lucide-react v0.552.0 - ISC
|
|
318
321
|
*
|
|
319
322
|
* This source code is licensed under the ISC license.
|
|
320
323
|
* See the LICENSE file in the root directory of this source tree.
|
|
321
324
|
*/
|
|
322
|
-
const __iconNode$
|
|
325
|
+
const __iconNode$c = [
|
|
323
326
|
["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
|
|
324
327
|
[
|
|
325
328
|
"path",
|
|
@@ -329,14 +332,14 @@ const __iconNode$a = [
|
|
|
329
332
|
}
|
|
330
333
|
]
|
|
331
334
|
];
|
|
332
|
-
const House = createLucideIcon("house", __iconNode$
|
|
335
|
+
const House = createLucideIcon("house", __iconNode$c);
|
|
333
336
|
/**
|
|
334
337
|
* @license lucide-react v0.552.0 - ISC
|
|
335
338
|
*
|
|
336
339
|
* This source code is licensed under the ISC license.
|
|
337
340
|
* See the LICENSE file in the root directory of this source tree.
|
|
338
341
|
*/
|
|
339
|
-
const __iconNode$
|
|
342
|
+
const __iconNode$b = [
|
|
340
343
|
[
|
|
341
344
|
"path",
|
|
342
345
|
{
|
|
@@ -359,52 +362,44 @@ const __iconNode$9 = [
|
|
|
359
362
|
}
|
|
360
363
|
]
|
|
361
364
|
];
|
|
362
|
-
const Layers = createLucideIcon("layers", __iconNode$
|
|
365
|
+
const Layers = createLucideIcon("layers", __iconNode$b);
|
|
363
366
|
/**
|
|
364
367
|
* @license lucide-react v0.552.0 - ISC
|
|
365
368
|
*
|
|
366
369
|
* This source code is licensed under the ISC license.
|
|
367
370
|
* See the LICENSE file in the root directory of this source tree.
|
|
368
371
|
*/
|
|
369
|
-
const __iconNode$
|
|
370
|
-
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$
|
|
372
|
+
const __iconNode$a = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
|
|
373
|
+
const LoaderCircle = createLucideIcon("loader-circle", __iconNode$a);
|
|
371
374
|
/**
|
|
372
375
|
* @license lucide-react v0.552.0 - ISC
|
|
373
376
|
*
|
|
374
377
|
* This source code is licensed under the ISC license.
|
|
375
378
|
* See the LICENSE file in the root directory of this source tree.
|
|
376
379
|
*/
|
|
377
|
-
const __iconNode$
|
|
378
|
-
["
|
|
379
|
-
["path", { d: "
|
|
380
|
+
const __iconNode$9 = [
|
|
381
|
+
["rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2", key: "1w4ew1" }],
|
|
382
|
+
["path", { d: "M7 11V7a5 5 0 0 1 10 0v4", key: "fwvmzm" }]
|
|
380
383
|
];
|
|
381
|
-
const
|
|
384
|
+
const Lock = createLucideIcon("lock", __iconNode$9);
|
|
382
385
|
/**
|
|
383
386
|
* @license lucide-react v0.552.0 - ISC
|
|
384
387
|
*
|
|
385
388
|
* This source code is licensed under the ISC license.
|
|
386
389
|
* See the LICENSE file in the root directory of this source tree.
|
|
387
390
|
*/
|
|
388
|
-
const __iconNode$
|
|
389
|
-
[
|
|
390
|
-
|
|
391
|
-
{
|
|
392
|
-
d: "M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",
|
|
393
|
-
key: "1a0edw"
|
|
394
|
-
}
|
|
395
|
-
],
|
|
396
|
-
["path", { d: "M12 22V12", key: "d0xqtd" }],
|
|
397
|
-
["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
|
|
398
|
-
["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
|
|
391
|
+
const __iconNode$8 = [
|
|
392
|
+
["path", { d: "M8 6L12 2L16 6", key: "1yvkyx" }],
|
|
393
|
+
["path", { d: "M12 2V22", key: "r89rzk" }]
|
|
399
394
|
];
|
|
400
|
-
const
|
|
395
|
+
const MoveUp = createLucideIcon("move-up", __iconNode$8);
|
|
401
396
|
/**
|
|
402
397
|
* @license lucide-react v0.552.0 - ISC
|
|
403
398
|
*
|
|
404
399
|
* This source code is licensed under the ISC license.
|
|
405
400
|
* See the LICENSE file in the root directory of this source tree.
|
|
406
401
|
*/
|
|
407
|
-
const __iconNode$
|
|
402
|
+
const __iconNode$7 = [
|
|
408
403
|
[
|
|
409
404
|
"path",
|
|
410
405
|
{
|
|
@@ -413,57 +408,81 @@ const __iconNode$5 = [
|
|
|
413
408
|
}
|
|
414
409
|
]
|
|
415
410
|
];
|
|
416
|
-
const Pen = createLucideIcon("pen", __iconNode$
|
|
411
|
+
const Pen = createLucideIcon("pen", __iconNode$7);
|
|
417
412
|
/**
|
|
418
413
|
* @license lucide-react v0.552.0 - ISC
|
|
419
414
|
*
|
|
420
415
|
* This source code is licensed under the ISC license.
|
|
421
416
|
* See the LICENSE file in the root directory of this source tree.
|
|
422
417
|
*/
|
|
423
|
-
const __iconNode$
|
|
418
|
+
const __iconNode$6 = [
|
|
424
419
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
425
420
|
["path", { d: "M12 5v14", key: "s699le" }]
|
|
426
421
|
];
|
|
427
|
-
const Plus = createLucideIcon("plus", __iconNode$
|
|
422
|
+
const Plus = createLucideIcon("plus", __iconNode$6);
|
|
428
423
|
/**
|
|
429
424
|
* @license lucide-react v0.552.0 - ISC
|
|
430
425
|
*
|
|
431
426
|
* This source code is licensed under the ISC license.
|
|
432
427
|
* See the LICENSE file in the root directory of this source tree.
|
|
433
428
|
*/
|
|
434
|
-
const __iconNode$
|
|
435
|
-
["path", { d: "
|
|
436
|
-
["path", { d: "
|
|
437
|
-
["path", { d: "M7 21h10", key: "1b0cd5" }],
|
|
438
|
-
["path", { d: "M12 3v18", key: "108xh3" }],
|
|
439
|
-
["path", { d: "M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2", key: "3gwbw2" }]
|
|
429
|
+
const __iconNode$5 = [
|
|
430
|
+
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
431
|
+
["path", { d: "M3 3v5h5", key: "1xhq8a" }]
|
|
440
432
|
];
|
|
441
|
-
const
|
|
433
|
+
const RotateCcw = createLucideIcon("rotate-ccw", __iconNode$5);
|
|
442
434
|
/**
|
|
443
435
|
* @license lucide-react v0.552.0 - ISC
|
|
444
436
|
*
|
|
445
437
|
* This source code is licensed under the ISC license.
|
|
446
438
|
* See the LICENSE file in the root directory of this source tree.
|
|
447
439
|
*/
|
|
448
|
-
const __iconNode$
|
|
440
|
+
const __iconNode$4 = [
|
|
449
441
|
["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
|
|
450
442
|
["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
|
|
451
443
|
];
|
|
452
|
-
const Search = createLucideIcon("search", __iconNode$
|
|
444
|
+
const Search = createLucideIcon("search", __iconNode$4);
|
|
453
445
|
/**
|
|
454
446
|
* @license lucide-react v0.552.0 - ISC
|
|
455
447
|
*
|
|
456
448
|
* This source code is licensed under the ISC license.
|
|
457
449
|
* See the LICENSE file in the root directory of this source tree.
|
|
458
450
|
*/
|
|
459
|
-
const __iconNode$
|
|
451
|
+
const __iconNode$3 = [
|
|
452
|
+
[
|
|
453
|
+
"path",
|
|
454
|
+
{
|
|
455
|
+
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",
|
|
456
|
+
key: "r04s7s"
|
|
457
|
+
}
|
|
458
|
+
]
|
|
459
|
+
];
|
|
460
|
+
const Star = createLucideIcon("star", __iconNode$3);
|
|
461
|
+
/**
|
|
462
|
+
* @license lucide-react v0.552.0 - ISC
|
|
463
|
+
*
|
|
464
|
+
* This source code is licensed under the ISC license.
|
|
465
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
466
|
+
*/
|
|
467
|
+
const __iconNode$2 = [
|
|
460
468
|
["path", { d: "M10 11v6", key: "nco0om" }],
|
|
461
469
|
["path", { d: "M14 11v6", key: "outv1u" }],
|
|
462
470
|
["path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6", key: "miytrc" }],
|
|
463
471
|
["path", { d: "M3 6h18", key: "d0wm0j" }],
|
|
464
472
|
["path", { d: "M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2", key: "e791ji" }]
|
|
465
473
|
];
|
|
466
|
-
const Trash2 = createLucideIcon("trash-2", __iconNode$
|
|
474
|
+
const Trash2 = createLucideIcon("trash-2", __iconNode$2);
|
|
475
|
+
/**
|
|
476
|
+
* @license lucide-react v0.552.0 - ISC
|
|
477
|
+
*
|
|
478
|
+
* This source code is licensed under the ISC license.
|
|
479
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
480
|
+
*/
|
|
481
|
+
const __iconNode$1 = [
|
|
482
|
+
["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2", key: "975kel" }],
|
|
483
|
+
["circle", { cx: "12", cy: "7", r: "4", key: "17ys0d" }]
|
|
484
|
+
];
|
|
485
|
+
const User = createLucideIcon("user", __iconNode$1);
|
|
467
486
|
/**
|
|
468
487
|
* @license lucide-react v0.552.0 - ISC
|
|
469
488
|
*
|
|
@@ -546,7 +565,7 @@ const LANGUAGE_COLORS = {
|
|
|
546
565
|
Shell: "#89e051",
|
|
547
566
|
PowerShell: "#012456"
|
|
548
567
|
};
|
|
549
|
-
const getLanguageColor = (language) => {
|
|
568
|
+
const getLanguageColor$1 = (language) => {
|
|
550
569
|
return LANGUAGE_COLORS[language] || "#6e7681";
|
|
551
570
|
};
|
|
552
571
|
const LocalProjectCard = ({
|
|
@@ -566,7 +585,7 @@ const LocalProjectCard = ({
|
|
|
566
585
|
workspacePath,
|
|
567
586
|
userHomePath
|
|
568
587
|
}) => {
|
|
569
|
-
var _a, _b, _c, _d, _e;
|
|
588
|
+
var _a, _b, _c, _d, _e, _f;
|
|
570
589
|
const { theme } = useTheme();
|
|
571
590
|
const [isHovered, setIsHovered] = useState(false);
|
|
572
591
|
const [copiedPath, setCopiedPath] = useState(false);
|
|
@@ -863,6 +882,7 @@ const LocalProjectCard = ({
|
|
|
863
882
|
children: /* @__PURE__ */ jsx(
|
|
864
883
|
"span",
|
|
865
884
|
{
|
|
885
|
+
className: ((_c = entry.github) == null ? void 0 : _c.primaryLanguage) ? "project-name-underline" : void 0,
|
|
866
886
|
style: {
|
|
867
887
|
flex: 1,
|
|
868
888
|
fontSize: `${theme.fontSizes[2]}px`,
|
|
@@ -871,9 +891,7 @@ const LocalProjectCard = ({
|
|
|
871
891
|
overflow: "hidden",
|
|
872
892
|
textOverflow: "ellipsis",
|
|
873
893
|
whiteSpace: "nowrap",
|
|
874
|
-
|
|
875
|
-
textDecorationColor: ((_c = entry.github) == null ? void 0 : _c.primaryLanguage) ? getLanguageColor(entry.github.primaryLanguage) : theme.colors.textSecondary,
|
|
876
|
-
textUnderlineOffset: "3px"
|
|
894
|
+
"--underline-color": ((_d = entry.github) == null ? void 0 : _d.primaryLanguage) ? getLanguageColor$1(entry.github.primaryLanguage) : theme.colors.textSecondary
|
|
877
895
|
},
|
|
878
896
|
children: entry.name
|
|
879
897
|
}
|
|
@@ -905,8 +923,8 @@ const LocalProjectCard = ({
|
|
|
905
923
|
opacity: isHovered ? 0 : 1,
|
|
906
924
|
transition: "opacity 0.15s ease"
|
|
907
925
|
},
|
|
908
|
-
title: ((
|
|
909
|
-
children: ((
|
|
926
|
+
title: ((_e = entry.github) == null ? void 0 : _e.description) || displayPath,
|
|
927
|
+
children: ((_f = entry.github) == null ? void 0 : _f.description) || displayPath
|
|
910
928
|
}
|
|
911
929
|
),
|
|
912
930
|
/* @__PURE__ */ jsx(
|
|
@@ -938,10 +956,10 @@ const LocalProjectCard = ({
|
|
|
938
956
|
}
|
|
939
957
|
);
|
|
940
958
|
};
|
|
941
|
-
const PANEL_ID$
|
|
942
|
-
const createPanelEvent$
|
|
959
|
+
const PANEL_ID$9 = "industry-theme.local-projects";
|
|
960
|
+
const createPanelEvent$4 = (type, payload) => ({
|
|
943
961
|
type,
|
|
944
|
-
source: PANEL_ID$
|
|
962
|
+
source: PANEL_ID$9,
|
|
945
963
|
timestamp: Date.now(),
|
|
946
964
|
payload
|
|
947
965
|
});
|
|
@@ -977,7 +995,7 @@ const LocalProjectsPanelContent = ({
|
|
|
977
995
|
try {
|
|
978
996
|
await panelActions.openRepository(entry);
|
|
979
997
|
setWindowStates((prev) => new Map(prev).set(entry.path, "ready"));
|
|
980
|
-
events.emit(createPanelEvent$
|
|
998
|
+
events.emit(createPanelEvent$4(`${PANEL_ID$9}:repository-opened`, { entry }));
|
|
981
999
|
} catch (error) {
|
|
982
1000
|
console.error("Error opening repository:", error);
|
|
983
1001
|
setWindowStates((prev) => new Map(prev).set(entry.path, "closed"));
|
|
@@ -988,14 +1006,14 @@ const LocalProjectsPanelContent = ({
|
|
|
988
1006
|
useEffect(() => {
|
|
989
1007
|
const unsubscribers = [
|
|
990
1008
|
// Filter event from tools
|
|
991
|
-
events.on(`${PANEL_ID$
|
|
1009
|
+
events.on(`${PANEL_ID$9}:filter`, (event) => {
|
|
992
1010
|
var _a2;
|
|
993
1011
|
if (((_a2 = event.payload) == null ? void 0 : _a2.filter) !== void 0) {
|
|
994
1012
|
setFilter(event.payload.filter);
|
|
995
1013
|
}
|
|
996
1014
|
}),
|
|
997
1015
|
// Select repository event from tools
|
|
998
|
-
events.on(`${PANEL_ID$
|
|
1016
|
+
events.on(`${PANEL_ID$9}:select-repository`, (event) => {
|
|
999
1017
|
var _a2;
|
|
1000
1018
|
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
1001
1019
|
if (identifier) {
|
|
@@ -1004,12 +1022,12 @@ const LocalProjectsPanelContent = ({
|
|
|
1004
1022
|
);
|
|
1005
1023
|
if (entry) {
|
|
1006
1024
|
setSelectedEntry(entry);
|
|
1007
|
-
events.emit(createPanelEvent$
|
|
1025
|
+
events.emit(createPanelEvent$4(`${PANEL_ID$9}:repository-selected`, { entry }));
|
|
1008
1026
|
}
|
|
1009
1027
|
}
|
|
1010
1028
|
}),
|
|
1011
1029
|
// Open repository event from tools
|
|
1012
|
-
events.on(`${PANEL_ID$
|
|
1030
|
+
events.on(`${PANEL_ID$9}:open-repository`, (event) => {
|
|
1013
1031
|
var _a2;
|
|
1014
1032
|
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
1015
1033
|
if (identifier) {
|
|
@@ -1057,7 +1075,7 @@ const LocalProjectsPanelContent = ({
|
|
|
1057
1075
|
};
|
|
1058
1076
|
const handleSelectRepository = (entry) => {
|
|
1059
1077
|
setSelectedEntry(entry);
|
|
1060
|
-
events.emit(createPanelEvent$
|
|
1078
|
+
events.emit(createPanelEvent$4(`${PANEL_ID$9}:repository-selected`, { entry }));
|
|
1061
1079
|
};
|
|
1062
1080
|
const normalizedFilter = filter.trim().toLowerCase();
|
|
1063
1081
|
const filteredAndSortedRepositories = useMemo(() => {
|
|
@@ -1318,10 +1336,10 @@ const LocalProjectsPanelPreview = () => {
|
|
|
1318
1336
|
}
|
|
1319
1337
|
);
|
|
1320
1338
|
};
|
|
1321
|
-
const PANEL_ID$
|
|
1322
|
-
const createPanelEvent$
|
|
1339
|
+
const PANEL_ID$8 = "industry-theme.workspace-repositories";
|
|
1340
|
+
const createPanelEvent$3 = (type, payload) => ({
|
|
1323
1341
|
type,
|
|
1324
|
-
source: PANEL_ID$
|
|
1342
|
+
source: PANEL_ID$8,
|
|
1325
1343
|
timestamp: Date.now(),
|
|
1326
1344
|
payload
|
|
1327
1345
|
});
|
|
@@ -1386,7 +1404,7 @@ const WorkspaceRepositoriesPanelContent = ({
|
|
|
1386
1404
|
(repository) => {
|
|
1387
1405
|
var _a;
|
|
1388
1406
|
events.emit(
|
|
1389
|
-
createPanelEvent$
|
|
1407
|
+
createPanelEvent$3("repository:selected", {
|
|
1390
1408
|
repositoryId: ((_a = repository.github) == null ? void 0 : _a.id) || repository.name,
|
|
1391
1409
|
repository,
|
|
1392
1410
|
repositoryPath: repository.path
|
|
@@ -1399,7 +1417,7 @@ const WorkspaceRepositoriesPanelContent = ({
|
|
|
1399
1417
|
(repository) => {
|
|
1400
1418
|
var _a;
|
|
1401
1419
|
events.emit(
|
|
1402
|
-
createPanelEvent$
|
|
1420
|
+
createPanelEvent$3("repository:opened", {
|
|
1403
1421
|
repositoryId: ((_a = repository.github) == null ? void 0 : _a.id) || repository.name,
|
|
1404
1422
|
repository
|
|
1405
1423
|
})
|
|
@@ -1440,7 +1458,7 @@ const WorkspaceRepositoriesPanelContent = ({
|
|
|
1440
1458
|
);
|
|
1441
1459
|
useEffect(() => {
|
|
1442
1460
|
const unsubscribers = [
|
|
1443
|
-
events.on(`${PANEL_ID$
|
|
1461
|
+
events.on(`${PANEL_ID$8}:select-repository`, (event) => {
|
|
1444
1462
|
var _a;
|
|
1445
1463
|
const path = (_a = event.payload) == null ? void 0 : _a.repositoryPath;
|
|
1446
1464
|
if (path) {
|
|
@@ -1450,7 +1468,7 @@ const WorkspaceRepositoriesPanelContent = ({
|
|
|
1450
1468
|
}
|
|
1451
1469
|
}
|
|
1452
1470
|
}),
|
|
1453
|
-
events.on(`${PANEL_ID$
|
|
1471
|
+
events.on(`${PANEL_ID$8}:open-repository`, (event) => {
|
|
1454
1472
|
var _a;
|
|
1455
1473
|
const path = (_a = event.payload) == null ? void 0 : _a.repositoryPath;
|
|
1456
1474
|
if (path) {
|
|
@@ -2139,10 +2157,10 @@ const WorkspaceCard = ({
|
|
|
2139
2157
|
}
|
|
2140
2158
|
);
|
|
2141
2159
|
};
|
|
2142
|
-
const PANEL_ID$
|
|
2143
|
-
const createPanelEvent = (type, payload) => ({
|
|
2160
|
+
const PANEL_ID$7 = "industry-theme.workspaces-list";
|
|
2161
|
+
const createPanelEvent$2 = (type, payload) => ({
|
|
2144
2162
|
type,
|
|
2145
|
-
source: PANEL_ID$
|
|
2163
|
+
source: PANEL_ID$7,
|
|
2146
2164
|
timestamp: Date.now(),
|
|
2147
2165
|
payload
|
|
2148
2166
|
});
|
|
@@ -2159,7 +2177,6 @@ const WorkspacesListPanelContent = ({
|
|
|
2159
2177
|
const [workspaceRepositories, setWorkspaceRepositories] = useState(
|
|
2160
2178
|
/* @__PURE__ */ new Map()
|
|
2161
2179
|
);
|
|
2162
|
-
const [isCreating, setIsCreating] = useState(false);
|
|
2163
2180
|
const panelActions = actions;
|
|
2164
2181
|
const workspacesSlice = context.getSlice("workspaces");
|
|
2165
2182
|
const workspaces = useMemo(
|
|
@@ -2218,7 +2235,7 @@ const WorkspacesListPanelContent = ({
|
|
|
2218
2235
|
(workspace) => {
|
|
2219
2236
|
setSelectedWorkspaceId(workspace.id);
|
|
2220
2237
|
events.emit(
|
|
2221
|
-
createPanelEvent(`${PANEL_ID$
|
|
2238
|
+
createPanelEvent$2(`${PANEL_ID$7}:workspace:selected`, {
|
|
2222
2239
|
workspaceId: workspace.id,
|
|
2223
2240
|
workspace
|
|
2224
2241
|
})
|
|
@@ -2235,7 +2252,7 @@ const WorkspacesListPanelContent = ({
|
|
|
2235
2252
|
try {
|
|
2236
2253
|
await panelActions.openWorkspace(workspace.id);
|
|
2237
2254
|
events.emit(
|
|
2238
|
-
createPanelEvent(`${PANEL_ID$
|
|
2255
|
+
createPanelEvent$2(`${PANEL_ID$7}:workspace:opened`, {
|
|
2239
2256
|
workspaceId: workspace.id,
|
|
2240
2257
|
workspace
|
|
2241
2258
|
})
|
|
@@ -2259,7 +2276,7 @@ const WorkspacesListPanelContent = ({
|
|
|
2259
2276
|
try {
|
|
2260
2277
|
await panelActions.deleteWorkspace(workspace.id);
|
|
2261
2278
|
events.emit(
|
|
2262
|
-
createPanelEvent(`${PANEL_ID$
|
|
2279
|
+
createPanelEvent$2(`${PANEL_ID$7}:workspace:deleted`, {
|
|
2263
2280
|
workspaceId: workspace.id
|
|
2264
2281
|
})
|
|
2265
2282
|
);
|
|
@@ -2281,33 +2298,15 @@ const WorkspacesListPanelContent = ({
|
|
|
2281
2298
|
},
|
|
2282
2299
|
[panelActions, context]
|
|
2283
2300
|
);
|
|
2284
|
-
const handleCreateWorkspace = useCallback(
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
const name = window.prompt("Enter workspace name:");
|
|
2290
|
-
if (!(name == null ? void 0 : name.trim())) return;
|
|
2291
|
-
try {
|
|
2292
|
-
setIsCreating(true);
|
|
2293
|
-
const workspace = await panelActions.createWorkspace(name.trim());
|
|
2294
|
-
events.emit(
|
|
2295
|
-
createPanelEvent(`${PANEL_ID$4}:workspace:created`, {
|
|
2296
|
-
workspaceId: workspace.id,
|
|
2297
|
-
workspace
|
|
2298
|
-
})
|
|
2299
|
-
);
|
|
2300
|
-
await context.refresh("workspace", "workspaces");
|
|
2301
|
-
} catch (error) {
|
|
2302
|
-
console.error("Failed to create workspace:", error);
|
|
2303
|
-
} finally {
|
|
2304
|
-
setIsCreating(false);
|
|
2305
|
-
}
|
|
2306
|
-
}, [panelActions, events, context]);
|
|
2301
|
+
const handleCreateWorkspace = useCallback(() => {
|
|
2302
|
+
events.emit(
|
|
2303
|
+
createPanelEvent$2(`${PANEL_ID$7}:create-workspace-requested`, {})
|
|
2304
|
+
);
|
|
2305
|
+
}, [events]);
|
|
2307
2306
|
useEffect(() => {
|
|
2308
2307
|
const unsubscribers = [
|
|
2309
2308
|
// Select workspace event from tools
|
|
2310
|
-
events.on(`${PANEL_ID$
|
|
2309
|
+
events.on(`${PANEL_ID$7}:select-workspace`, (event) => {
|
|
2311
2310
|
var _a2;
|
|
2312
2311
|
const workspaceId = (_a2 = event.payload) == null ? void 0 : _a2.workspaceId;
|
|
2313
2312
|
if (workspaceId) {
|
|
@@ -2318,7 +2317,7 @@ const WorkspacesListPanelContent = ({
|
|
|
2318
2317
|
}
|
|
2319
2318
|
}),
|
|
2320
2319
|
// Open workspace event from tools
|
|
2321
|
-
events.on(`${PANEL_ID$
|
|
2320
|
+
events.on(`${PANEL_ID$7}:open-workspace`, (event) => {
|
|
2322
2321
|
var _a2;
|
|
2323
2322
|
const workspaceId = (_a2 = event.payload) == null ? void 0 : _a2.workspaceId;
|
|
2324
2323
|
if (workspaceId) {
|
|
@@ -2330,14 +2329,14 @@ const WorkspacesListPanelContent = ({
|
|
|
2330
2329
|
}),
|
|
2331
2330
|
// Create workspace event from tools
|
|
2332
2331
|
events.on(
|
|
2333
|
-
`${PANEL_ID$
|
|
2332
|
+
`${PANEL_ID$7}:create-workspace`,
|
|
2334
2333
|
async (event) => {
|
|
2335
2334
|
const { name, description } = event.payload || {};
|
|
2336
2335
|
if (name && panelActions.createWorkspace) {
|
|
2337
2336
|
try {
|
|
2338
2337
|
const workspace = await panelActions.createWorkspace(name, { description });
|
|
2339
2338
|
events.emit(
|
|
2340
|
-
createPanelEvent(`${PANEL_ID$
|
|
2339
|
+
createPanelEvent$2(`${PANEL_ID$7}:workspace:created`, {
|
|
2341
2340
|
workspaceId: workspace.id,
|
|
2342
2341
|
workspace
|
|
2343
2342
|
})
|
|
@@ -2454,11 +2453,10 @@ const WorkspacesListPanelContent = ({
|
|
|
2454
2453
|
children: /* @__PURE__ */ jsx(Search, { size: 16 })
|
|
2455
2454
|
}
|
|
2456
2455
|
),
|
|
2457
|
-
|
|
2456
|
+
/* @__PURE__ */ jsx(
|
|
2458
2457
|
"button",
|
|
2459
2458
|
{
|
|
2460
2459
|
onClick: handleCreateWorkspace,
|
|
2461
|
-
disabled: isCreating,
|
|
2462
2460
|
style: {
|
|
2463
2461
|
display: "flex",
|
|
2464
2462
|
alignItems: "center",
|
|
@@ -2469,8 +2467,7 @@ const WorkspacesListPanelContent = ({
|
|
|
2469
2467
|
border: `1px solid ${theme.colors.border}`,
|
|
2470
2468
|
backgroundColor: theme.colors.primary,
|
|
2471
2469
|
color: theme.colors.background,
|
|
2472
|
-
cursor:
|
|
2473
|
-
opacity: isCreating ? 0.6 : 1,
|
|
2470
|
+
cursor: "pointer",
|
|
2474
2471
|
transition: "all 0.15s ease"
|
|
2475
2472
|
},
|
|
2476
2473
|
title: "Create new workspace",
|
|
@@ -2624,929 +2621,1445 @@ const WorkspacesListPanelPreview = () => {
|
|
|
2624
2621
|
}
|
|
2625
2622
|
);
|
|
2626
2623
|
};
|
|
2627
|
-
const
|
|
2628
|
-
|
|
2629
|
-
|
|
2624
|
+
const GitHubRepositoryCard = ({
|
|
2625
|
+
repository,
|
|
2626
|
+
localRepo,
|
|
2627
|
+
onClone,
|
|
2628
|
+
onOpen,
|
|
2629
|
+
isLoading = false,
|
|
2630
|
+
isSelected = false,
|
|
2631
|
+
onSelect
|
|
2630
2632
|
}) => {
|
|
2631
2633
|
const { theme } = useTheme();
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
2635
|
+
const isCloned = Boolean(localRepo);
|
|
2636
|
+
const handleClone = useCallback(
|
|
2637
|
+
(e) => {
|
|
2638
|
+
e.stopPropagation();
|
|
2639
|
+
if (onClone && !isLoading) {
|
|
2640
|
+
onClone(repository);
|
|
2641
|
+
}
|
|
2642
|
+
},
|
|
2643
|
+
[onClone, repository, isLoading]
|
|
2644
|
+
);
|
|
2645
|
+
const handleOpen = useCallback(
|
|
2646
|
+
(e) => {
|
|
2647
|
+
e.stopPropagation();
|
|
2648
|
+
if (onOpen && localRepo && !isLoading) {
|
|
2649
|
+
onOpen(localRepo.path);
|
|
2650
|
+
}
|
|
2651
|
+
},
|
|
2652
|
+
[onOpen, localRepo, isLoading]
|
|
2653
|
+
);
|
|
2654
|
+
const handleClick = useCallback(() => {
|
|
2655
|
+
if (onSelect) {
|
|
2656
|
+
onSelect(repository);
|
|
2657
|
+
}
|
|
2658
|
+
}, [onSelect, repository]);
|
|
2659
|
+
const handleOpenOnGitHub = useCallback(
|
|
2660
|
+
(e) => {
|
|
2661
|
+
e.stopPropagation();
|
|
2662
|
+
window.open(repository.html_url, "_blank", "noopener,noreferrer");
|
|
2663
|
+
},
|
|
2664
|
+
[repository.html_url]
|
|
2665
|
+
);
|
|
2666
|
+
const getRelativeTime = (dateString) => {
|
|
2667
|
+
const date = new Date(dateString);
|
|
2668
|
+
const now = /* @__PURE__ */ new Date();
|
|
2669
|
+
const diffMs = now.getTime() - date.getTime();
|
|
2670
|
+
const diffDays = Math.floor(diffMs / (1e3 * 60 * 60 * 24));
|
|
2671
|
+
if (diffDays === 0) return "today";
|
|
2672
|
+
if (diffDays === 1) return "yesterday";
|
|
2673
|
+
if (diffDays < 7) return `${diffDays} days ago`;
|
|
2674
|
+
if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;
|
|
2675
|
+
if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;
|
|
2676
|
+
return `${Math.floor(diffDays / 365)} years ago`;
|
|
2677
|
+
};
|
|
2678
|
+
return /* @__PURE__ */ jsxs(
|
|
2634
2679
|
"div",
|
|
2635
2680
|
{
|
|
2681
|
+
onClick: handleClick,
|
|
2682
|
+
onMouseEnter: () => setIsHovered(true),
|
|
2683
|
+
onMouseLeave: () => setIsHovered(false),
|
|
2636
2684
|
style: {
|
|
2637
|
-
position: "fixed",
|
|
2638
|
-
top: 0,
|
|
2639
|
-
left: 0,
|
|
2640
|
-
right: 0,
|
|
2641
|
-
bottom: 0,
|
|
2642
|
-
backgroundColor: theme.colors.muted,
|
|
2643
|
-
zIndex: theme.zIndices[4],
|
|
2644
2685
|
display: "flex",
|
|
2645
|
-
alignItems: "
|
|
2646
|
-
|
|
2686
|
+
alignItems: "flex-start",
|
|
2687
|
+
gap: "12px",
|
|
2688
|
+
padding: "12px",
|
|
2689
|
+
borderRadius: "8px",
|
|
2690
|
+
backgroundColor: isSelected ? `${theme.colors.primary}15` : isHovered ? theme.colors.backgroundTertiary : "transparent",
|
|
2691
|
+
border: `1px solid ${isSelected ? theme.colors.primary : "transparent"}`,
|
|
2692
|
+
cursor: onSelect ? "pointer" : "default",
|
|
2693
|
+
transition: "background-color 0.15s, border-color 0.15s"
|
|
2647
2694
|
},
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2658
|
-
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
|
|
2667
|
-
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2690
|
-
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
|
|
2695
|
+
children: [
|
|
2696
|
+
/* @__PURE__ */ jsx(
|
|
2697
|
+
RepositoryAvatar,
|
|
2698
|
+
{
|
|
2699
|
+
owner: repository.owner.login,
|
|
2700
|
+
customAvatarUrl: repository.owner.avatar_url,
|
|
2701
|
+
size: 40
|
|
2702
|
+
}
|
|
2703
|
+
),
|
|
2704
|
+
/* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
2705
|
+
/* @__PURE__ */ jsxs(
|
|
2706
|
+
"div",
|
|
2707
|
+
{
|
|
2708
|
+
style: {
|
|
2709
|
+
display: "flex",
|
|
2710
|
+
alignItems: "center",
|
|
2711
|
+
gap: "8px",
|
|
2712
|
+
marginBottom: "4px"
|
|
2713
|
+
},
|
|
2714
|
+
children: [
|
|
2715
|
+
/* @__PURE__ */ jsx(
|
|
2716
|
+
"span",
|
|
2717
|
+
{
|
|
2718
|
+
style: {
|
|
2719
|
+
fontSize: `${theme.fontSizes[2]}px`,
|
|
2720
|
+
fontWeight: theme.fontWeights.semibold,
|
|
2721
|
+
fontFamily: theme.fonts.body,
|
|
2722
|
+
color: isCloned ? "#10b981" : theme.colors.text,
|
|
2723
|
+
overflow: "hidden",
|
|
2724
|
+
textOverflow: "ellipsis",
|
|
2725
|
+
whiteSpace: "nowrap"
|
|
2726
|
+
},
|
|
2727
|
+
title: repository.full_name,
|
|
2728
|
+
children: repository.name
|
|
2729
|
+
}
|
|
2730
|
+
),
|
|
2731
|
+
repository.private && /* @__PURE__ */ jsx("span", { title: "Private repository", children: /* @__PURE__ */ jsx(
|
|
2732
|
+
Lock,
|
|
2733
|
+
{
|
|
2734
|
+
size: 12,
|
|
2735
|
+
style: { color: theme.colors.textSecondary, flexShrink: 0 }
|
|
2736
|
+
}
|
|
2737
|
+
) }),
|
|
2738
|
+
repository.fork && /* @__PURE__ */ jsx("span", { title: "Forked repository", children: /* @__PURE__ */ jsx(
|
|
2739
|
+
GitFork,
|
|
2740
|
+
{
|
|
2741
|
+
size: 12,
|
|
2742
|
+
style: { color: theme.colors.textSecondary, flexShrink: 0 }
|
|
2743
|
+
}
|
|
2744
|
+
) })
|
|
2745
|
+
]
|
|
2746
|
+
}
|
|
2747
|
+
),
|
|
2748
|
+
/* @__PURE__ */ jsx(
|
|
2749
|
+
"div",
|
|
2750
|
+
{
|
|
2751
|
+
style: {
|
|
2752
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
2753
|
+
fontFamily: theme.fonts.body,
|
|
2754
|
+
color: theme.colors.textSecondary,
|
|
2755
|
+
marginBottom: "4px"
|
|
2756
|
+
},
|
|
2757
|
+
children: repository.owner.login
|
|
2758
|
+
}
|
|
2759
|
+
),
|
|
2760
|
+
repository.description && /* @__PURE__ */ jsx(
|
|
2761
|
+
"div",
|
|
2762
|
+
{
|
|
2763
|
+
style: {
|
|
2764
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
2765
|
+
fontFamily: theme.fonts.body,
|
|
2766
|
+
color: theme.colors.textSecondary,
|
|
2767
|
+
lineHeight: theme.lineHeights.body,
|
|
2768
|
+
overflow: "hidden",
|
|
2769
|
+
textOverflow: "ellipsis",
|
|
2770
|
+
display: "-webkit-box",
|
|
2771
|
+
WebkitLineClamp: 2,
|
|
2772
|
+
WebkitBoxOrient: "vertical",
|
|
2773
|
+
marginBottom: "8px"
|
|
2774
|
+
},
|
|
2775
|
+
children: repository.description
|
|
2776
|
+
}
|
|
2777
|
+
),
|
|
2778
|
+
/* @__PURE__ */ jsxs(
|
|
2779
|
+
"div",
|
|
2780
|
+
{
|
|
2781
|
+
style: {
|
|
2782
|
+
display: "flex",
|
|
2783
|
+
alignItems: "center",
|
|
2784
|
+
gap: "12px",
|
|
2785
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
2786
|
+
fontFamily: theme.fonts.body,
|
|
2787
|
+
color: theme.colors.textSecondary
|
|
2788
|
+
},
|
|
2789
|
+
children: [
|
|
2790
|
+
repository.language && /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
|
|
2694
2791
|
/* @__PURE__ */ jsx(
|
|
2695
|
-
"
|
|
2792
|
+
"span",
|
|
2696
2793
|
{
|
|
2697
|
-
onClick: onClose,
|
|
2698
2794
|
style: {
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
},
|
|
2705
|
-
children: /* @__PURE__ */ jsx(X, { size: 20 })
|
|
2706
|
-
}
|
|
2707
|
-
)
|
|
2708
|
-
]
|
|
2709
|
-
}
|
|
2710
|
-
),
|
|
2711
|
-
/* @__PURE__ */ jsxs(
|
|
2712
|
-
"div",
|
|
2713
|
-
{
|
|
2714
|
-
style: {
|
|
2715
|
-
padding: `${theme.space[4]}px`,
|
|
2716
|
-
overflow: "auto",
|
|
2717
|
-
flex: 1
|
|
2718
|
-
},
|
|
2719
|
-
children: [
|
|
2720
|
-
/* @__PURE__ */ jsxs(
|
|
2721
|
-
Section,
|
|
2722
|
-
{
|
|
2723
|
-
icon: /* @__PURE__ */ jsx(Package, { size: 18 }),
|
|
2724
|
-
title: "Dependency Types",
|
|
2725
|
-
theme,
|
|
2726
|
-
children: [
|
|
2727
|
-
/* @__PURE__ */ jsx(
|
|
2728
|
-
InfoItem,
|
|
2729
|
-
{
|
|
2730
|
-
badge: { text: "prod", color: theme.colors.primary },
|
|
2731
|
-
title: "Production Dependencies",
|
|
2732
|
-
description: "Required for your application to run in production. These are bundled with your app and affect its size and security.",
|
|
2733
|
-
theme
|
|
2734
|
-
}
|
|
2735
|
-
),
|
|
2736
|
-
/* @__PURE__ */ jsx(
|
|
2737
|
-
InfoItem,
|
|
2738
|
-
{
|
|
2739
|
-
badge: { text: "dev", color: theme.colors.secondary },
|
|
2740
|
-
title: "Development Dependencies",
|
|
2741
|
-
description: "Only needed during development (build tools, testing, linters). Not included in production builds.",
|
|
2742
|
-
theme
|
|
2743
|
-
}
|
|
2744
|
-
),
|
|
2745
|
-
/* @__PURE__ */ jsx(
|
|
2746
|
-
InfoItem,
|
|
2747
|
-
{
|
|
2748
|
-
badge: { text: "peer", color: theme.colors.accent },
|
|
2749
|
-
title: "Peer Dependencies",
|
|
2750
|
-
description: "Expected to be provided by the consumer of your package. Important for library authors to specify compatibility.",
|
|
2751
|
-
theme
|
|
2752
|
-
}
|
|
2753
|
-
)
|
|
2754
|
-
]
|
|
2795
|
+
width: "8px",
|
|
2796
|
+
height: "8px",
|
|
2797
|
+
borderRadius: "50%",
|
|
2798
|
+
backgroundColor: getLanguageColor(repository.language)
|
|
2799
|
+
}
|
|
2755
2800
|
}
|
|
2756
2801
|
),
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2802
|
+
repository.language
|
|
2803
|
+
] }),
|
|
2804
|
+
repository.stargazers_count !== void 0 && repository.stargazers_count > 0 && /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
|
|
2805
|
+
/* @__PURE__ */ jsx(Star, { size: 12 }),
|
|
2806
|
+
formatNumber(repository.stargazers_count)
|
|
2807
|
+
] }),
|
|
2808
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
2809
|
+
"Updated ",
|
|
2810
|
+
getRelativeTime(repository.pushed_at || repository.updated_at)
|
|
2811
|
+
] })
|
|
2812
|
+
]
|
|
2813
|
+
}
|
|
2814
|
+
)
|
|
2815
|
+
] }),
|
|
2816
|
+
/* @__PURE__ */ jsxs(
|
|
2817
|
+
"div",
|
|
2818
|
+
{
|
|
2819
|
+
style: {
|
|
2820
|
+
display: "flex",
|
|
2821
|
+
alignItems: "center",
|
|
2822
|
+
gap: "8px",
|
|
2823
|
+
flexShrink: 0
|
|
2824
|
+
},
|
|
2825
|
+
children: [
|
|
2826
|
+
/* @__PURE__ */ jsx(
|
|
2827
|
+
"button",
|
|
2828
|
+
{
|
|
2829
|
+
type: "button",
|
|
2830
|
+
onClick: handleOpenOnGitHub,
|
|
2831
|
+
style: {
|
|
2832
|
+
display: "flex",
|
|
2833
|
+
alignItems: "center",
|
|
2834
|
+
justifyContent: "center",
|
|
2835
|
+
width: "32px",
|
|
2836
|
+
height: "32px",
|
|
2837
|
+
borderRadius: "6px",
|
|
2838
|
+
border: `1px solid ${theme.colors.border}`,
|
|
2839
|
+
backgroundColor: "transparent",
|
|
2840
|
+
color: theme.colors.textSecondary,
|
|
2841
|
+
cursor: "pointer",
|
|
2842
|
+
transition: "background-color 0.15s, color 0.15s"
|
|
2843
|
+
},
|
|
2844
|
+
title: "Open on GitHub",
|
|
2845
|
+
onMouseEnter: (e) => {
|
|
2846
|
+
e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
|
|
2847
|
+
e.currentTarget.style.color = theme.colors.text;
|
|
2848
|
+
},
|
|
2849
|
+
onMouseLeave: (e) => {
|
|
2850
|
+
e.currentTarget.style.backgroundColor = "transparent";
|
|
2851
|
+
e.currentTarget.style.color = theme.colors.textSecondary;
|
|
2852
|
+
},
|
|
2853
|
+
children: /* @__PURE__ */ jsx(ExternalLink, { size: 16 })
|
|
2854
|
+
}
|
|
2855
|
+
),
|
|
2856
|
+
isCloned ? /* @__PURE__ */ jsxs(
|
|
2857
|
+
"button",
|
|
2858
|
+
{
|
|
2859
|
+
type: "button",
|
|
2860
|
+
onClick: handleOpen,
|
|
2861
|
+
disabled: isLoading || !onOpen,
|
|
2862
|
+
style: {
|
|
2863
|
+
display: "flex",
|
|
2864
|
+
alignItems: "center",
|
|
2865
|
+
gap: "6px",
|
|
2866
|
+
padding: "6px 12px",
|
|
2867
|
+
borderRadius: "6px",
|
|
2868
|
+
border: "none",
|
|
2869
|
+
backgroundColor: "#10b981",
|
|
2870
|
+
color: "#ffffff",
|
|
2871
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
2872
|
+
fontWeight: theme.fontWeights.medium,
|
|
2873
|
+
fontFamily: theme.fonts.body,
|
|
2874
|
+
cursor: isLoading || !onOpen ? "not-allowed" : "pointer",
|
|
2875
|
+
opacity: isLoading || !onOpen ? 0.6 : 1,
|
|
2876
|
+
transition: "opacity 0.15s"
|
|
2877
|
+
},
|
|
2878
|
+
title: "Open in workspace",
|
|
2879
|
+
children: [
|
|
2880
|
+
/* @__PURE__ */ jsx(FolderOpen, { size: 14 }),
|
|
2881
|
+
"Open"
|
|
2882
|
+
]
|
|
2883
|
+
}
|
|
2884
|
+
) : /* @__PURE__ */ jsxs(
|
|
2885
|
+
"button",
|
|
2886
|
+
{
|
|
2887
|
+
type: "button",
|
|
2888
|
+
onClick: handleClone,
|
|
2889
|
+
disabled: isLoading || !onClone,
|
|
2890
|
+
style: {
|
|
2891
|
+
display: "flex",
|
|
2892
|
+
alignItems: "center",
|
|
2893
|
+
gap: "6px",
|
|
2894
|
+
padding: "6px 12px",
|
|
2895
|
+
borderRadius: "6px",
|
|
2896
|
+
border: "none",
|
|
2897
|
+
backgroundColor: theme.colors.primary,
|
|
2898
|
+
color: theme.colors.background,
|
|
2899
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
2900
|
+
fontWeight: theme.fontWeights.medium,
|
|
2901
|
+
fontFamily: theme.fonts.body,
|
|
2902
|
+
cursor: isLoading || !onClone ? "not-allowed" : "pointer",
|
|
2903
|
+
opacity: isLoading || !onClone ? 0.6 : 1,
|
|
2904
|
+
transition: "opacity 0.15s"
|
|
2905
|
+
},
|
|
2906
|
+
title: "Clone repository",
|
|
2907
|
+
children: [
|
|
2908
|
+
/* @__PURE__ */ jsx(Download, { size: 14 }),
|
|
2909
|
+
"Clone"
|
|
2910
|
+
]
|
|
2911
|
+
}
|
|
2912
|
+
)
|
|
2913
|
+
]
|
|
2914
|
+
}
|
|
2915
|
+
)
|
|
2916
|
+
]
|
|
2791
2917
|
}
|
|
2792
|
-
)
|
|
2918
|
+
);
|
|
2919
|
+
};
|
|
2920
|
+
function getLanguageColor(language) {
|
|
2921
|
+
const colors = {
|
|
2922
|
+
TypeScript: "#3178c6",
|
|
2923
|
+
JavaScript: "#f7df1e",
|
|
2924
|
+
Python: "#3572A5",
|
|
2925
|
+
Rust: "#dea584",
|
|
2926
|
+
Go: "#00ADD8",
|
|
2927
|
+
Java: "#b07219",
|
|
2928
|
+
Ruby: "#701516",
|
|
2929
|
+
PHP: "#4F5D95",
|
|
2930
|
+
"C++": "#f34b7d",
|
|
2931
|
+
C: "#555555",
|
|
2932
|
+
"C#": "#178600",
|
|
2933
|
+
Swift: "#F05138",
|
|
2934
|
+
Kotlin: "#A97BFF",
|
|
2935
|
+
Shell: "#89e051",
|
|
2936
|
+
HTML: "#e34c26",
|
|
2937
|
+
CSS: "#563d7c",
|
|
2938
|
+
Vue: "#41b883",
|
|
2939
|
+
Svelte: "#ff3e00"
|
|
2940
|
+
};
|
|
2941
|
+
return colors[language] || "#8b949e";
|
|
2942
|
+
}
|
|
2943
|
+
function formatNumber(num) {
|
|
2944
|
+
if (num >= 1e6) {
|
|
2945
|
+
return `${(num / 1e6).toFixed(1)}M`;
|
|
2946
|
+
}
|
|
2947
|
+
if (num >= 1e3) {
|
|
2948
|
+
return `${(num / 1e3).toFixed(1)}K`;
|
|
2949
|
+
}
|
|
2950
|
+
return num.toString();
|
|
2951
|
+
}
|
|
2952
|
+
const PANEL_ID$6 = "industry-theme.github-starred";
|
|
2953
|
+
const createPanelEvent$1 = (type, payload) => ({
|
|
2954
|
+
type,
|
|
2955
|
+
source: PANEL_ID$6,
|
|
2956
|
+
timestamp: Date.now(),
|
|
2957
|
+
payload
|
|
2958
|
+
});
|
|
2959
|
+
const GitHubStarredPanel = (props) => {
|
|
2960
|
+
return /* @__PURE__ */ jsx(GitHubStarredPanelContent, { ...props });
|
|
2793
2961
|
};
|
|
2794
|
-
const
|
|
2795
|
-
|
|
2796
|
-
|
|
2962
|
+
const GitHubStarredPanelContent = ({
|
|
2963
|
+
context,
|
|
2964
|
+
actions,
|
|
2965
|
+
events
|
|
2966
|
+
}) => {
|
|
2967
|
+
var _a, _b, _c;
|
|
2968
|
+
const { theme } = useTheme();
|
|
2969
|
+
const [filter, setFilter] = useState("");
|
|
2970
|
+
const [selectedRepo, setSelectedRepo] = useState(null);
|
|
2971
|
+
const starredSlice = context.getSlice("githubStarred");
|
|
2972
|
+
const localReposSlice = context.getSlice("alexandriaRepositories");
|
|
2973
|
+
const repositories = useMemo(
|
|
2974
|
+
() => {
|
|
2975
|
+
var _a2;
|
|
2976
|
+
return ((_a2 = starredSlice == null ? void 0 : starredSlice.data) == null ? void 0 : _a2.repositories) || [];
|
|
2977
|
+
},
|
|
2978
|
+
[(_a = starredSlice == null ? void 0 : starredSlice.data) == null ? void 0 : _a.repositories]
|
|
2979
|
+
);
|
|
2980
|
+
const loading = (starredSlice == null ? void 0 : starredSlice.loading) ?? false;
|
|
2981
|
+
const error = (_b = starredSlice == null ? void 0 : starredSlice.data) == null ? void 0 : _b.error;
|
|
2982
|
+
const localRepos = useMemo(
|
|
2983
|
+
() => {
|
|
2984
|
+
var _a2;
|
|
2985
|
+
return ((_a2 = localReposSlice == null ? void 0 : localReposSlice.data) == null ? void 0 : _a2.repositories) || [];
|
|
2986
|
+
},
|
|
2987
|
+
[(_c = localReposSlice == null ? void 0 : localReposSlice.data) == null ? void 0 : _c.repositories]
|
|
2988
|
+
);
|
|
2989
|
+
const panelActions = actions;
|
|
2990
|
+
const localRepoMap = useMemo(() => {
|
|
2991
|
+
const map = /* @__PURE__ */ new Map();
|
|
2992
|
+
localRepos.forEach((entry) => {
|
|
2993
|
+
var _a2, _b2, _c2;
|
|
2994
|
+
if ((_a2 = entry.github) == null ? void 0 : _a2.id) {
|
|
2995
|
+
map.set(entry.github.id, {
|
|
2996
|
+
path: entry.path,
|
|
2997
|
+
name: entry.name,
|
|
2998
|
+
githubFullName: entry.github.id,
|
|
2999
|
+
githubId: entry.github.id
|
|
3000
|
+
});
|
|
3001
|
+
}
|
|
3002
|
+
if (((_b2 = entry.github) == null ? void 0 : _b2.owner) && ((_c2 = entry.github) == null ? void 0 : _c2.name)) {
|
|
3003
|
+
const fullName = `${entry.github.owner}/${entry.github.name}`;
|
|
3004
|
+
map.set(fullName, {
|
|
3005
|
+
path: entry.path,
|
|
3006
|
+
name: entry.name,
|
|
3007
|
+
githubFullName: fullName
|
|
3008
|
+
});
|
|
3009
|
+
}
|
|
3010
|
+
map.set(entry.name, {
|
|
3011
|
+
path: entry.path,
|
|
3012
|
+
name: entry.name
|
|
3013
|
+
});
|
|
3014
|
+
});
|
|
3015
|
+
return map;
|
|
3016
|
+
}, [localRepos]);
|
|
3017
|
+
const normalizedFilter = filter.trim().toLowerCase();
|
|
3018
|
+
const filteredRepositories = useMemo(() => {
|
|
3019
|
+
if (!normalizedFilter) {
|
|
3020
|
+
return repositories;
|
|
3021
|
+
}
|
|
3022
|
+
return repositories.filter((repo) => {
|
|
3023
|
+
var _a2;
|
|
3024
|
+
const haystack = [
|
|
3025
|
+
repo.name,
|
|
3026
|
+
repo.full_name,
|
|
3027
|
+
((_a2 = repo.owner) == null ? void 0 : _a2.login) ?? "",
|
|
3028
|
+
repo.description ?? "",
|
|
3029
|
+
repo.language ?? ""
|
|
3030
|
+
].join(" ").toLowerCase();
|
|
3031
|
+
return haystack.includes(normalizedFilter);
|
|
3032
|
+
});
|
|
3033
|
+
}, [repositories, normalizedFilter]);
|
|
3034
|
+
const sortedRepositories = useMemo(() => {
|
|
3035
|
+
return [...filteredRepositories].sort(
|
|
3036
|
+
(a, b) => a.name.localeCompare(b.name, void 0, { sensitivity: "base" })
|
|
3037
|
+
);
|
|
3038
|
+
}, [filteredRepositories]);
|
|
3039
|
+
const handleClone = useCallback(
|
|
3040
|
+
async (repo) => {
|
|
3041
|
+
if (panelActions.cloneRepository) {
|
|
3042
|
+
await panelActions.cloneRepository(repo);
|
|
3043
|
+
events.emit(
|
|
3044
|
+
createPanelEvent$1(`${PANEL_ID$6}:repository-cloned`, {
|
|
3045
|
+
repository: repo
|
|
3046
|
+
})
|
|
3047
|
+
);
|
|
3048
|
+
}
|
|
3049
|
+
},
|
|
3050
|
+
[panelActions, events]
|
|
3051
|
+
);
|
|
3052
|
+
const handleOpen = useCallback(
|
|
3053
|
+
async (localPath) => {
|
|
3054
|
+
if (panelActions.openRepository) {
|
|
3055
|
+
await panelActions.openRepository(localPath);
|
|
3056
|
+
}
|
|
3057
|
+
},
|
|
3058
|
+
[panelActions]
|
|
3059
|
+
);
|
|
3060
|
+
const handleSelect = useCallback(
|
|
3061
|
+
(repo) => {
|
|
3062
|
+
setSelectedRepo(repo);
|
|
3063
|
+
events.emit(
|
|
3064
|
+
createPanelEvent$1(`${PANEL_ID$6}:repository-selected`, { repository: repo })
|
|
3065
|
+
);
|
|
3066
|
+
},
|
|
3067
|
+
[events]
|
|
3068
|
+
);
|
|
3069
|
+
const handleRefresh = useCallback(async () => {
|
|
3070
|
+
if (panelActions.refreshStarred) {
|
|
3071
|
+
await panelActions.refreshStarred();
|
|
3072
|
+
}
|
|
3073
|
+
}, [panelActions]);
|
|
3074
|
+
useEffect(() => {
|
|
3075
|
+
const unsubscribers = [
|
|
3076
|
+
events.on(`${PANEL_ID$6}:filter`, (event) => {
|
|
3077
|
+
var _a2;
|
|
3078
|
+
setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
|
|
3079
|
+
}),
|
|
3080
|
+
events.on(`${PANEL_ID$6}:select-repository`, (event) => {
|
|
3081
|
+
var _a2;
|
|
3082
|
+
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
3083
|
+
if (identifier) {
|
|
3084
|
+
const repo = repositories.find(
|
|
3085
|
+
(r) => r.name === identifier || r.full_name === identifier || r.full_name.toLowerCase() === identifier.toLowerCase()
|
|
3086
|
+
);
|
|
3087
|
+
if (repo) {
|
|
3088
|
+
handleSelect(repo);
|
|
3089
|
+
}
|
|
3090
|
+
}
|
|
3091
|
+
}),
|
|
3092
|
+
events.on(`${PANEL_ID$6}:clone-repository`, (event) => {
|
|
3093
|
+
var _a2;
|
|
3094
|
+
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
3095
|
+
if (identifier) {
|
|
3096
|
+
const repo = repositories.find(
|
|
3097
|
+
(r) => r.name === identifier || r.full_name === identifier || r.full_name.toLowerCase() === identifier.toLowerCase()
|
|
3098
|
+
);
|
|
3099
|
+
if (repo) {
|
|
3100
|
+
void handleClone(repo);
|
|
3101
|
+
}
|
|
3102
|
+
}
|
|
3103
|
+
})
|
|
3104
|
+
];
|
|
3105
|
+
return () => {
|
|
3106
|
+
unsubscribers.forEach((unsub) => unsub());
|
|
3107
|
+
};
|
|
3108
|
+
}, [events, repositories, handleSelect, handleClone]);
|
|
3109
|
+
const baseContainerStyle = {
|
|
3110
|
+
display: "flex",
|
|
3111
|
+
flexDirection: "column",
|
|
3112
|
+
height: "100%",
|
|
3113
|
+
backgroundColor: theme.colors.backgroundSecondary
|
|
3114
|
+
};
|
|
3115
|
+
if (loading && repositories.length === 0) {
|
|
3116
|
+
return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
|
|
3117
|
+
"div",
|
|
3118
|
+
{
|
|
3119
|
+
style: {
|
|
3120
|
+
flex: 1,
|
|
3121
|
+
display: "flex",
|
|
3122
|
+
alignItems: "center",
|
|
3123
|
+
justifyContent: "center",
|
|
3124
|
+
padding: "32px",
|
|
3125
|
+
textAlign: "center"
|
|
3126
|
+
},
|
|
3127
|
+
children: /* @__PURE__ */ jsxs(
|
|
3128
|
+
"div",
|
|
3129
|
+
{
|
|
3130
|
+
style: {
|
|
3131
|
+
display: "flex",
|
|
3132
|
+
flexDirection: "column",
|
|
3133
|
+
alignItems: "center",
|
|
3134
|
+
gap: "16px"
|
|
3135
|
+
},
|
|
3136
|
+
children: [
|
|
3137
|
+
/* @__PURE__ */ jsx(
|
|
3138
|
+
LoaderCircle,
|
|
3139
|
+
{
|
|
3140
|
+
size: 32,
|
|
3141
|
+
style: { color: theme.colors.textSecondary },
|
|
3142
|
+
className: "animate-spin"
|
|
3143
|
+
}
|
|
3144
|
+
),
|
|
3145
|
+
/* @__PURE__ */ jsx(
|
|
3146
|
+
"h3",
|
|
3147
|
+
{
|
|
3148
|
+
style: {
|
|
3149
|
+
margin: 0,
|
|
3150
|
+
color: theme.colors.text,
|
|
3151
|
+
fontSize: `${theme.fontSizes[3]}px`,
|
|
3152
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3153
|
+
fontFamily: theme.fonts.body
|
|
3154
|
+
},
|
|
3155
|
+
children: "Loading starred repositories..."
|
|
3156
|
+
}
|
|
3157
|
+
)
|
|
3158
|
+
]
|
|
3159
|
+
}
|
|
3160
|
+
)
|
|
3161
|
+
}
|
|
3162
|
+
) });
|
|
3163
|
+
}
|
|
3164
|
+
if (error && repositories.length === 0) {
|
|
3165
|
+
return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
|
|
3166
|
+
"div",
|
|
3167
|
+
{
|
|
3168
|
+
style: {
|
|
3169
|
+
flex: 1,
|
|
3170
|
+
display: "flex",
|
|
3171
|
+
alignItems: "center",
|
|
3172
|
+
justifyContent: "center",
|
|
3173
|
+
padding: "32px",
|
|
3174
|
+
textAlign: "center"
|
|
3175
|
+
},
|
|
3176
|
+
children: /* @__PURE__ */ jsxs(
|
|
3177
|
+
"div",
|
|
3178
|
+
{
|
|
3179
|
+
style: {
|
|
3180
|
+
display: "flex",
|
|
3181
|
+
flexDirection: "column",
|
|
3182
|
+
alignItems: "center",
|
|
3183
|
+
gap: "16px",
|
|
3184
|
+
maxWidth: "360px"
|
|
3185
|
+
},
|
|
3186
|
+
children: [
|
|
3187
|
+
/* @__PURE__ */ jsx(
|
|
3188
|
+
CircleAlert,
|
|
3189
|
+
{
|
|
3190
|
+
size: 32,
|
|
3191
|
+
style: { color: theme.colors.error || "#ef4444" }
|
|
3192
|
+
}
|
|
3193
|
+
),
|
|
3194
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
3195
|
+
/* @__PURE__ */ jsx(
|
|
3196
|
+
"h3",
|
|
3197
|
+
{
|
|
3198
|
+
style: {
|
|
3199
|
+
margin: 0,
|
|
3200
|
+
marginBottom: "8px",
|
|
3201
|
+
color: theme.colors.text,
|
|
3202
|
+
fontSize: `${theme.fontSizes[3]}px`,
|
|
3203
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3204
|
+
fontFamily: theme.fonts.body
|
|
3205
|
+
},
|
|
3206
|
+
children: "Unable to load repositories"
|
|
3207
|
+
}
|
|
3208
|
+
),
|
|
3209
|
+
/* @__PURE__ */ jsx(
|
|
3210
|
+
"p",
|
|
3211
|
+
{
|
|
3212
|
+
style: {
|
|
3213
|
+
margin: 0,
|
|
3214
|
+
color: theme.colors.textSecondary,
|
|
3215
|
+
lineHeight: theme.lineHeights.body,
|
|
3216
|
+
fontFamily: theme.fonts.body
|
|
3217
|
+
},
|
|
3218
|
+
children: error
|
|
3219
|
+
}
|
|
3220
|
+
)
|
|
3221
|
+
] }),
|
|
3222
|
+
/* @__PURE__ */ jsxs(
|
|
3223
|
+
"button",
|
|
3224
|
+
{
|
|
3225
|
+
type: "button",
|
|
3226
|
+
onClick: handleRefresh,
|
|
3227
|
+
style: {
|
|
3228
|
+
display: "inline-flex",
|
|
3229
|
+
alignItems: "center",
|
|
3230
|
+
gap: "8px",
|
|
3231
|
+
padding: "10px 18px",
|
|
3232
|
+
borderRadius: "6px",
|
|
3233
|
+
border: "none",
|
|
3234
|
+
backgroundColor: theme.colors.primary,
|
|
3235
|
+
color: theme.colors.background,
|
|
3236
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3237
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3238
|
+
fontFamily: theme.fonts.body,
|
|
3239
|
+
cursor: "pointer"
|
|
3240
|
+
},
|
|
3241
|
+
children: [
|
|
3242
|
+
/* @__PURE__ */ jsx(RotateCcw, { size: 16 }),
|
|
3243
|
+
"Try again"
|
|
3244
|
+
]
|
|
3245
|
+
}
|
|
3246
|
+
)
|
|
3247
|
+
]
|
|
3248
|
+
}
|
|
3249
|
+
)
|
|
3250
|
+
}
|
|
3251
|
+
) });
|
|
3252
|
+
}
|
|
3253
|
+
return /* @__PURE__ */ jsxs(
|
|
3254
|
+
"div",
|
|
2797
3255
|
{
|
|
2798
3256
|
style: {
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
marginBottom: `${theme.space[3]}px`,
|
|
2803
|
-
display: "flex",
|
|
2804
|
-
alignItems: "center",
|
|
2805
|
-
gap: `${theme.space[2]}px`
|
|
3257
|
+
...baseContainerStyle,
|
|
3258
|
+
padding: "16px",
|
|
3259
|
+
gap: "12px"
|
|
2806
3260
|
},
|
|
2807
3261
|
children: [
|
|
2808
|
-
|
|
2809
|
-
|
|
3262
|
+
/* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
|
|
3263
|
+
/* @__PURE__ */ jsx(
|
|
3264
|
+
Search,
|
|
3265
|
+
{
|
|
3266
|
+
size: 16,
|
|
3267
|
+
style: {
|
|
3268
|
+
position: "absolute",
|
|
3269
|
+
top: "50%",
|
|
3270
|
+
left: "12px",
|
|
3271
|
+
transform: "translateY(-50%)",
|
|
3272
|
+
color: theme.colors.textSecondary,
|
|
3273
|
+
pointerEvents: "none"
|
|
3274
|
+
}
|
|
3275
|
+
}
|
|
3276
|
+
),
|
|
3277
|
+
/* @__PURE__ */ jsx(
|
|
3278
|
+
"input",
|
|
3279
|
+
{
|
|
3280
|
+
type: "text",
|
|
3281
|
+
value: filter,
|
|
3282
|
+
placeholder: "Filter starred repositories...",
|
|
3283
|
+
onChange: (event) => setFilter(event.target.value),
|
|
3284
|
+
style: {
|
|
3285
|
+
width: "100%",
|
|
3286
|
+
padding: "8px 12px 8px 36px",
|
|
3287
|
+
borderRadius: "6px",
|
|
3288
|
+
border: `1px solid ${theme.colors.border}`,
|
|
3289
|
+
backgroundColor: theme.colors.background,
|
|
3290
|
+
color: theme.colors.text,
|
|
3291
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3292
|
+
fontFamily: theme.fonts.body,
|
|
3293
|
+
outline: "none"
|
|
3294
|
+
}
|
|
3295
|
+
}
|
|
3296
|
+
)
|
|
3297
|
+
] }),
|
|
3298
|
+
error && repositories.length > 0 && /* @__PURE__ */ jsxs(
|
|
3299
|
+
"div",
|
|
3300
|
+
{
|
|
3301
|
+
style: {
|
|
3302
|
+
display: "flex",
|
|
3303
|
+
alignItems: "center",
|
|
3304
|
+
gap: "8px",
|
|
3305
|
+
padding: "10px 14px",
|
|
3306
|
+
borderRadius: "6px",
|
|
3307
|
+
backgroundColor: `${theme.colors.error || "#ef4444"}20`,
|
|
3308
|
+
color: theme.colors.error || "#ef4444",
|
|
3309
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3310
|
+
fontFamily: theme.fonts.body
|
|
3311
|
+
},
|
|
3312
|
+
children: [
|
|
3313
|
+
/* @__PURE__ */ jsx(CircleAlert, { size: 16 }),
|
|
3314
|
+
/* @__PURE__ */ jsx("span", { children: error })
|
|
3315
|
+
]
|
|
3316
|
+
}
|
|
3317
|
+
),
|
|
3318
|
+
/* @__PURE__ */ jsxs(
|
|
3319
|
+
"div",
|
|
3320
|
+
{
|
|
3321
|
+
style: {
|
|
3322
|
+
flex: 1,
|
|
3323
|
+
overflowY: "auto",
|
|
3324
|
+
display: "flex",
|
|
3325
|
+
flexDirection: "column",
|
|
3326
|
+
gap: "4px"
|
|
3327
|
+
},
|
|
3328
|
+
children: [
|
|
3329
|
+
sortedRepositories.map((repo) => /* @__PURE__ */ jsx(
|
|
3330
|
+
GitHubRepositoryCard,
|
|
3331
|
+
{
|
|
3332
|
+
repository: repo,
|
|
3333
|
+
localRepo: localRepoMap.get(repo.full_name),
|
|
3334
|
+
onClone: handleClone,
|
|
3335
|
+
onOpen: handleOpen,
|
|
3336
|
+
onSelect: handleSelect,
|
|
3337
|
+
isSelected: (selectedRepo == null ? void 0 : selectedRepo.id) === repo.id
|
|
3338
|
+
},
|
|
3339
|
+
repo.id
|
|
3340
|
+
)),
|
|
3341
|
+
sortedRepositories.length === 0 && repositories.length > 0 && /* @__PURE__ */ jsx(
|
|
3342
|
+
"div",
|
|
3343
|
+
{
|
|
3344
|
+
style: {
|
|
3345
|
+
padding: "32px",
|
|
3346
|
+
textAlign: "center",
|
|
3347
|
+
color: theme.colors.textSecondary
|
|
3348
|
+
},
|
|
3349
|
+
children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories match your filter." })
|
|
3350
|
+
}
|
|
3351
|
+
),
|
|
3352
|
+
repositories.length === 0 && !loading && /* @__PURE__ */ jsxs(
|
|
3353
|
+
"div",
|
|
3354
|
+
{
|
|
3355
|
+
style: {
|
|
3356
|
+
padding: "32px",
|
|
3357
|
+
textAlign: "center",
|
|
3358
|
+
color: theme.colors.textSecondary
|
|
3359
|
+
},
|
|
3360
|
+
children: [
|
|
3361
|
+
/* @__PURE__ */ jsx(
|
|
3362
|
+
Star,
|
|
3363
|
+
{
|
|
3364
|
+
size: 32,
|
|
3365
|
+
style: { marginBottom: "12px", opacity: 0.5 }
|
|
3366
|
+
}
|
|
3367
|
+
),
|
|
3368
|
+
/* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "You haven't starred any repositories yet." })
|
|
3369
|
+
]
|
|
3370
|
+
}
|
|
3371
|
+
)
|
|
3372
|
+
]
|
|
3373
|
+
}
|
|
3374
|
+
)
|
|
2810
3375
|
]
|
|
2811
3376
|
}
|
|
2812
|
-
)
|
|
2813
|
-
|
|
3377
|
+
);
|
|
3378
|
+
};
|
|
3379
|
+
const GitHubStarredPanelPreview = () => {
|
|
3380
|
+
const { theme } = useTheme();
|
|
3381
|
+
return /* @__PURE__ */ jsxs(
|
|
2814
3382
|
"div",
|
|
2815
3383
|
{
|
|
2816
3384
|
style: {
|
|
3385
|
+
padding: "12px",
|
|
3386
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
3387
|
+
fontFamily: theme.fonts.body,
|
|
3388
|
+
color: theme.colors.text,
|
|
2817
3389
|
display: "flex",
|
|
2818
3390
|
flexDirection: "column",
|
|
2819
|
-
gap:
|
|
3391
|
+
gap: "8px"
|
|
2820
3392
|
},
|
|
2821
|
-
children
|
|
3393
|
+
children: [
|
|
3394
|
+
/* @__PURE__ */ jsxs(
|
|
3395
|
+
"div",
|
|
3396
|
+
{
|
|
3397
|
+
style: {
|
|
3398
|
+
display: "flex",
|
|
3399
|
+
alignItems: "center",
|
|
3400
|
+
gap: "6px",
|
|
3401
|
+
fontWeight: theme.fontWeights.semibold
|
|
3402
|
+
},
|
|
3403
|
+
children: [
|
|
3404
|
+
/* @__PURE__ */ jsx(Star, { size: 16, style: { color: "#f59e0b" } }),
|
|
3405
|
+
/* @__PURE__ */ jsx("span", { children: "Starred Repositories" })
|
|
3406
|
+
]
|
|
3407
|
+
}
|
|
3408
|
+
),
|
|
3409
|
+
/* @__PURE__ */ jsx(
|
|
3410
|
+
"div",
|
|
3411
|
+
{
|
|
3412
|
+
style: {
|
|
3413
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
3414
|
+
fontFamily: theme.fonts.body,
|
|
3415
|
+
color: theme.colors.textSecondary,
|
|
3416
|
+
marginTop: "4px"
|
|
3417
|
+
},
|
|
3418
|
+
children: "Browse your starred GitHub repositories"
|
|
3419
|
+
}
|
|
3420
|
+
)
|
|
3421
|
+
]
|
|
2822
3422
|
}
|
|
2823
|
-
)
|
|
2824
|
-
|
|
2825
|
-
const
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
gap: `${theme.space[2]}px`,
|
|
2842
|
-
marginBottom: `${theme.space[1]}px`
|
|
2843
|
-
},
|
|
2844
|
-
children: [
|
|
2845
|
-
/* @__PURE__ */ jsx(
|
|
2846
|
-
"span",
|
|
2847
|
-
{
|
|
2848
|
-
style: {
|
|
2849
|
-
padding: `${theme.space[1]}px ${theme.space[2]}px`,
|
|
2850
|
-
borderRadius: `${theme.radii[1]}px`,
|
|
2851
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
2852
|
-
fontWeight: theme.fontWeights.medium,
|
|
2853
|
-
backgroundColor: `${badge.color}20`,
|
|
2854
|
-
color: badge.color
|
|
2855
|
-
},
|
|
2856
|
-
children: badge.text
|
|
2857
|
-
}
|
|
2858
|
-
),
|
|
2859
|
-
/* @__PURE__ */ jsx(
|
|
2860
|
-
"span",
|
|
2861
|
-
{
|
|
2862
|
-
style: {
|
|
2863
|
-
fontSize: `${theme.fontSizes[1]}px`,
|
|
2864
|
-
fontWeight: theme.fontWeights.medium,
|
|
2865
|
-
color: theme.colors.text
|
|
2866
|
-
},
|
|
2867
|
-
children: title
|
|
2868
|
-
}
|
|
2869
|
-
)
|
|
2870
|
-
]
|
|
2871
|
-
}
|
|
2872
|
-
),
|
|
2873
|
-
/* @__PURE__ */ jsx(
|
|
2874
|
-
"div",
|
|
2875
|
-
{
|
|
2876
|
-
style: {
|
|
2877
|
-
fontSize: `${theme.fontSizes[1]}px`,
|
|
2878
|
-
color: theme.colors.textSecondary,
|
|
2879
|
-
lineHeight: theme.lineHeights.relaxed
|
|
2880
|
-
},
|
|
2881
|
-
children: description
|
|
2882
|
-
}
|
|
2883
|
-
)
|
|
2884
|
-
]
|
|
2885
|
-
}
|
|
2886
|
-
);
|
|
2887
|
-
const DependencyRow = ({ dependency }) => {
|
|
3423
|
+
);
|
|
3424
|
+
};
|
|
3425
|
+
const PANEL_ID$5 = "industry-theme.github-projects";
|
|
3426
|
+
const createPanelEvent = (type, payload) => ({
|
|
3427
|
+
type,
|
|
3428
|
+
source: PANEL_ID$5,
|
|
3429
|
+
timestamp: Date.now(),
|
|
3430
|
+
payload
|
|
3431
|
+
});
|
|
3432
|
+
const GitHubProjectsPanel = (props) => {
|
|
3433
|
+
return /* @__PURE__ */ jsx(GitHubProjectsPanelContent, { ...props });
|
|
3434
|
+
};
|
|
3435
|
+
const GitHubProjectsPanelContent = ({
|
|
3436
|
+
context,
|
|
3437
|
+
actions,
|
|
3438
|
+
events
|
|
3439
|
+
}) => {
|
|
3440
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2888
3441
|
const { theme } = useTheme();
|
|
2889
|
-
const [
|
|
2890
|
-
const [
|
|
2891
|
-
const
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2908
|
-
|
|
2909
|
-
|
|
2910
|
-
|
|
2911
|
-
|
|
2912
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2915
|
-
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
|
|
2922
|
-
|
|
2923
|
-
|
|
2924
|
-
|
|
3442
|
+
const [filter, setFilter] = useState("");
|
|
3443
|
+
const [collapsedSections, setCollapsedSections] = useState(/* @__PURE__ */ new Set());
|
|
3444
|
+
const [selectedRepo, setSelectedRepo] = useState(null);
|
|
3445
|
+
const projectsSlice = context.getSlice("githubProjects");
|
|
3446
|
+
const localReposSlice = context.getSlice("alexandriaRepositories");
|
|
3447
|
+
const userRepositories = useMemo(
|
|
3448
|
+
() => {
|
|
3449
|
+
var _a2;
|
|
3450
|
+
return ((_a2 = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _a2.userRepositories) || [];
|
|
3451
|
+
},
|
|
3452
|
+
[(_a = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _a.userRepositories]
|
|
3453
|
+
);
|
|
3454
|
+
const organizations = useMemo(
|
|
3455
|
+
() => {
|
|
3456
|
+
var _a2;
|
|
3457
|
+
return ((_a2 = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _a2.organizations) || [];
|
|
3458
|
+
},
|
|
3459
|
+
[(_b = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _b.organizations]
|
|
3460
|
+
);
|
|
3461
|
+
const orgRepositories = useMemo(
|
|
3462
|
+
() => {
|
|
3463
|
+
var _a2;
|
|
3464
|
+
return ((_a2 = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _a2.orgRepositories) || {};
|
|
3465
|
+
},
|
|
3466
|
+
[(_c = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _c.orgRepositories]
|
|
3467
|
+
);
|
|
3468
|
+
const currentUser = (_d = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _d.currentUser;
|
|
3469
|
+
const loading = (projectsSlice == null ? void 0 : projectsSlice.loading) ?? false;
|
|
3470
|
+
const error = (_e = projectsSlice == null ? void 0 : projectsSlice.data) == null ? void 0 : _e.error;
|
|
3471
|
+
const localRepos = useMemo(
|
|
3472
|
+
() => {
|
|
3473
|
+
var _a2;
|
|
3474
|
+
return ((_a2 = localReposSlice == null ? void 0 : localReposSlice.data) == null ? void 0 : _a2.repositories) || [];
|
|
3475
|
+
},
|
|
3476
|
+
[(_f = localReposSlice == null ? void 0 : localReposSlice.data) == null ? void 0 : _f.repositories]
|
|
3477
|
+
);
|
|
3478
|
+
const panelActions = actions;
|
|
3479
|
+
const localRepoMap = useMemo(() => {
|
|
3480
|
+
const map = /* @__PURE__ */ new Map();
|
|
3481
|
+
localRepos.forEach((entry) => {
|
|
3482
|
+
var _a2, _b2, _c2;
|
|
3483
|
+
if ((_a2 = entry.github) == null ? void 0 : _a2.id) {
|
|
3484
|
+
map.set(entry.github.id, {
|
|
3485
|
+
path: entry.path,
|
|
3486
|
+
name: entry.name,
|
|
3487
|
+
githubFullName: entry.github.id,
|
|
3488
|
+
githubId: entry.github.id
|
|
3489
|
+
});
|
|
3490
|
+
}
|
|
3491
|
+
if (((_b2 = entry.github) == null ? void 0 : _b2.owner) && ((_c2 = entry.github) == null ? void 0 : _c2.name)) {
|
|
3492
|
+
const fullName = `${entry.github.owner}/${entry.github.name}`;
|
|
3493
|
+
map.set(fullName, {
|
|
3494
|
+
path: entry.path,
|
|
3495
|
+
name: entry.name,
|
|
3496
|
+
githubFullName: fullName
|
|
3497
|
+
});
|
|
3498
|
+
}
|
|
3499
|
+
map.set(entry.name, {
|
|
3500
|
+
path: entry.path,
|
|
3501
|
+
name: entry.name
|
|
3502
|
+
});
|
|
3503
|
+
});
|
|
3504
|
+
return map;
|
|
3505
|
+
}, [localRepos]);
|
|
3506
|
+
const normalizedFilter = filter.trim().toLowerCase();
|
|
3507
|
+
const filterRepos = useCallback(
|
|
3508
|
+
(repos) => {
|
|
3509
|
+
if (!normalizedFilter) return repos;
|
|
3510
|
+
return repos.filter((repo) => {
|
|
3511
|
+
var _a2;
|
|
3512
|
+
const haystack = [
|
|
3513
|
+
repo.name,
|
|
3514
|
+
repo.full_name,
|
|
3515
|
+
((_a2 = repo.owner) == null ? void 0 : _a2.login) ?? "",
|
|
3516
|
+
repo.description ?? "",
|
|
3517
|
+
repo.language ?? ""
|
|
3518
|
+
].join(" ").toLowerCase();
|
|
3519
|
+
return haystack.includes(normalizedFilter);
|
|
3520
|
+
});
|
|
3521
|
+
},
|
|
3522
|
+
[normalizedFilter]
|
|
3523
|
+
);
|
|
3524
|
+
const filteredUserRepos = useMemo(
|
|
3525
|
+
() => filterRepos(userRepositories),
|
|
3526
|
+
[filterRepos, userRepositories]
|
|
3527
|
+
);
|
|
3528
|
+
const filteredOrgRepos = useMemo(() => {
|
|
3529
|
+
const result = {};
|
|
3530
|
+
for (const [orgLogin, repos] of Object.entries(orgRepositories)) {
|
|
3531
|
+
const filtered = filterRepos(repos);
|
|
3532
|
+
if (filtered.length > 0) {
|
|
3533
|
+
result[orgLogin] = filtered;
|
|
3534
|
+
}
|
|
2925
3535
|
}
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
await navigator.clipboard.writeText(copyText);
|
|
2933
|
-
setCopied(true);
|
|
2934
|
-
setTimeout(() => setCopied(false), 2e3);
|
|
2935
|
-
} catch (err) {
|
|
2936
|
-
console.error("Failed to copy:", err);
|
|
3536
|
+
return result;
|
|
3537
|
+
}, [filterRepos, orgRepositories]);
|
|
3538
|
+
const allRepositories = useMemo(() => {
|
|
3539
|
+
const all = [...userRepositories];
|
|
3540
|
+
for (const repos of Object.values(orgRepositories)) {
|
|
3541
|
+
all.push(...repos);
|
|
2937
3542
|
}
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
3543
|
+
return all;
|
|
3544
|
+
}, [userRepositories, orgRepositories]);
|
|
3545
|
+
const hasData = userRepositories.length > 0 || organizations.length > 0 || Object.keys(orgRepositories).length > 0;
|
|
3546
|
+
const handleClone = useCallback(
|
|
3547
|
+
async (repo) => {
|
|
3548
|
+
if (panelActions.cloneRepository) {
|
|
3549
|
+
await panelActions.cloneRepository(repo);
|
|
3550
|
+
events.emit(
|
|
3551
|
+
createPanelEvent(`${PANEL_ID$5}:repository-cloned`, {
|
|
3552
|
+
repository: repo
|
|
3553
|
+
})
|
|
3554
|
+
);
|
|
3555
|
+
}
|
|
3556
|
+
},
|
|
3557
|
+
[panelActions, events]
|
|
3558
|
+
);
|
|
3559
|
+
const handleOpen = useCallback(
|
|
3560
|
+
async (localPath) => {
|
|
3561
|
+
if (panelActions.openRepository) {
|
|
3562
|
+
await panelActions.openRepository(localPath);
|
|
3563
|
+
}
|
|
3564
|
+
},
|
|
3565
|
+
[panelActions]
|
|
3566
|
+
);
|
|
3567
|
+
const handleSelect = useCallback(
|
|
3568
|
+
(repo) => {
|
|
3569
|
+
setSelectedRepo(repo);
|
|
3570
|
+
events.emit(
|
|
3571
|
+
createPanelEvent(`${PANEL_ID$5}:repository-selected`, { repository: repo })
|
|
3572
|
+
);
|
|
3573
|
+
},
|
|
3574
|
+
[events]
|
|
3575
|
+
);
|
|
3576
|
+
const handleRefresh = useCallback(async () => {
|
|
3577
|
+
if (panelActions.refreshProjects) {
|
|
3578
|
+
await panelActions.refreshProjects();
|
|
3579
|
+
}
|
|
3580
|
+
}, [panelActions]);
|
|
3581
|
+
const toggleSection = useCallback((owner) => {
|
|
3582
|
+
setCollapsedSections((prev) => {
|
|
3583
|
+
const next = new Set(prev);
|
|
3584
|
+
if (next.has(owner)) {
|
|
3585
|
+
next.delete(owner);
|
|
3586
|
+
} else {
|
|
3587
|
+
next.add(owner);
|
|
3588
|
+
}
|
|
3589
|
+
return next;
|
|
3590
|
+
});
|
|
3591
|
+
}, []);
|
|
3592
|
+
useEffect(() => {
|
|
3593
|
+
const unsubscribers = [
|
|
3594
|
+
events.on(`${PANEL_ID$5}:filter`, (event) => {
|
|
3595
|
+
var _a2;
|
|
3596
|
+
setFilter(((_a2 = event.payload) == null ? void 0 : _a2.filter) || "");
|
|
3597
|
+
}),
|
|
3598
|
+
events.on(`${PANEL_ID$5}:toggle-section`, (event) => {
|
|
3599
|
+
var _a2;
|
|
3600
|
+
const owner = (_a2 = event.payload) == null ? void 0 : _a2.owner;
|
|
3601
|
+
if (owner) {
|
|
3602
|
+
toggleSection(owner);
|
|
3603
|
+
}
|
|
3604
|
+
}),
|
|
3605
|
+
events.on(`${PANEL_ID$5}:select-repository`, (event) => {
|
|
3606
|
+
var _a2;
|
|
3607
|
+
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
3608
|
+
if (identifier) {
|
|
3609
|
+
const repo = allRepositories.find(
|
|
3610
|
+
(r) => r.name === identifier || r.full_name === identifier || r.full_name.toLowerCase() === identifier.toLowerCase()
|
|
3611
|
+
);
|
|
3612
|
+
if (repo) {
|
|
3613
|
+
handleSelect(repo);
|
|
3614
|
+
}
|
|
3615
|
+
}
|
|
3616
|
+
}),
|
|
3617
|
+
events.on(`${PANEL_ID$5}:clone-repository`, (event) => {
|
|
3618
|
+
var _a2;
|
|
3619
|
+
const identifier = (_a2 = event.payload) == null ? void 0 : _a2.identifier;
|
|
3620
|
+
if (identifier) {
|
|
3621
|
+
const repo = allRepositories.find(
|
|
3622
|
+
(r) => r.name === identifier || r.full_name === identifier || r.full_name.toLowerCase() === identifier.toLowerCase()
|
|
3623
|
+
);
|
|
3624
|
+
if (repo) {
|
|
3625
|
+
void handleClone(repo);
|
|
3626
|
+
}
|
|
3627
|
+
}
|
|
3628
|
+
})
|
|
3629
|
+
];
|
|
3630
|
+
return () => {
|
|
3631
|
+
unsubscribers.forEach((unsub) => unsub());
|
|
3632
|
+
};
|
|
3633
|
+
}, [events, allRepositories, toggleSection, handleSelect, handleClone]);
|
|
3634
|
+
const baseContainerStyle = {
|
|
2942
3635
|
display: "flex",
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
backgroundColor: "transparent",
|
|
2947
|
-
cursor: "pointer",
|
|
2948
|
-
transition: "all 0.15s ease",
|
|
2949
|
-
opacity: isHovered ? 1 : 0,
|
|
2950
|
-
pointerEvents: isHovered ? "auto" : "none"
|
|
3636
|
+
flexDirection: "column",
|
|
3637
|
+
height: "100%",
|
|
3638
|
+
backgroundColor: theme.colors.backgroundSecondary
|
|
2951
3639
|
};
|
|
2952
|
-
|
|
2953
|
-
"div",
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
},
|
|
2966
|
-
onMouseEnter: () => setIsHovered(true),
|
|
2967
|
-
onMouseLeave: () => setIsHovered(false),
|
|
2968
|
-
children: [
|
|
2969
|
-
/* @__PURE__ */ jsxs(
|
|
3640
|
+
if (loading && !hasData) {
|
|
3641
|
+
return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
|
|
3642
|
+
"div",
|
|
3643
|
+
{
|
|
3644
|
+
style: {
|
|
3645
|
+
flex: 1,
|
|
3646
|
+
display: "flex",
|
|
3647
|
+
alignItems: "center",
|
|
3648
|
+
justifyContent: "center",
|
|
3649
|
+
padding: "32px",
|
|
3650
|
+
textAlign: "center"
|
|
3651
|
+
},
|
|
3652
|
+
children: /* @__PURE__ */ jsxs(
|
|
2970
3653
|
"div",
|
|
2971
3654
|
{
|
|
2972
3655
|
style: {
|
|
2973
3656
|
display: "flex",
|
|
3657
|
+
flexDirection: "column",
|
|
2974
3658
|
alignItems: "center",
|
|
2975
|
-
gap:
|
|
2976
|
-
flex: 1,
|
|
2977
|
-
minWidth: 0
|
|
3659
|
+
gap: "16px"
|
|
2978
3660
|
},
|
|
2979
3661
|
children: [
|
|
2980
|
-
/* @__PURE__ */ jsx("span", { style: getDependencyTypeBadgeStyle(dependency.dependencyType), children: dependency.dependencyType === "production" ? "prod" : dependency.dependencyType === "development" ? "dev" : "peer" }),
|
|
2981
3662
|
/* @__PURE__ */ jsx(
|
|
2982
|
-
|
|
3663
|
+
LoaderCircle,
|
|
2983
3664
|
{
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
overflow: "hidden",
|
|
2988
|
-
textOverflow: "ellipsis",
|
|
2989
|
-
whiteSpace: "nowrap"
|
|
2990
|
-
},
|
|
2991
|
-
children: dependency.name
|
|
3665
|
+
size: 32,
|
|
3666
|
+
style: { color: theme.colors.textSecondary },
|
|
3667
|
+
className: "animate-spin"
|
|
2992
3668
|
}
|
|
2993
3669
|
),
|
|
2994
3670
|
/* @__PURE__ */ jsx(
|
|
2995
|
-
"
|
|
3671
|
+
"h3",
|
|
2996
3672
|
{
|
|
2997
|
-
href: `https://www.npmjs.com/package/${dependency.name}`,
|
|
2998
|
-
target: "_blank",
|
|
2999
|
-
rel: "noopener noreferrer",
|
|
3000
3673
|
style: {
|
|
3001
|
-
|
|
3002
|
-
color: theme.colors.
|
|
3003
|
-
|
|
3004
|
-
|
|
3674
|
+
margin: 0,
|
|
3675
|
+
color: theme.colors.text,
|
|
3676
|
+
fontSize: `${theme.fontSizes[3]}px`,
|
|
3677
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3678
|
+
fontFamily: theme.fonts.body
|
|
3005
3679
|
},
|
|
3006
|
-
|
|
3007
|
-
children: /* @__PURE__ */ jsx(ExternalLink, { size: 12 })
|
|
3680
|
+
children: "Loading your repositories..."
|
|
3008
3681
|
}
|
|
3009
3682
|
)
|
|
3010
3683
|
]
|
|
3011
3684
|
}
|
|
3012
|
-
)
|
|
3013
|
-
|
|
3685
|
+
)
|
|
3686
|
+
}
|
|
3687
|
+
) });
|
|
3688
|
+
}
|
|
3689
|
+
if (error && !hasData) {
|
|
3690
|
+
return /* @__PURE__ */ jsx("div", { style: baseContainerStyle, children: /* @__PURE__ */ jsx(
|
|
3691
|
+
"div",
|
|
3692
|
+
{
|
|
3693
|
+
style: {
|
|
3694
|
+
flex: 1,
|
|
3695
|
+
display: "flex",
|
|
3696
|
+
alignItems: "center",
|
|
3697
|
+
justifyContent: "center",
|
|
3698
|
+
padding: "32px",
|
|
3699
|
+
textAlign: "center"
|
|
3700
|
+
},
|
|
3701
|
+
children: /* @__PURE__ */ jsxs(
|
|
3014
3702
|
"div",
|
|
3015
3703
|
{
|
|
3016
3704
|
style: {
|
|
3017
3705
|
display: "flex",
|
|
3706
|
+
flexDirection: "column",
|
|
3018
3707
|
alignItems: "center",
|
|
3019
|
-
gap: "
|
|
3708
|
+
gap: "16px",
|
|
3709
|
+
maxWidth: "360px"
|
|
3020
3710
|
},
|
|
3021
3711
|
children: [
|
|
3022
3712
|
/* @__PURE__ */ jsx(
|
|
3023
|
-
|
|
3713
|
+
CircleAlert,
|
|
3024
3714
|
{
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
style: {
|
|
3028
|
-
...actionButtonStyle,
|
|
3029
|
-
color: copied ? theme.colors.success || "#10b981" : theme.colors.textSecondary
|
|
3030
|
-
},
|
|
3031
|
-
title: copied ? "Copied!" : `Copy ${dependency.name}@${dependency.version}`,
|
|
3032
|
-
children: copied ? /* @__PURE__ */ jsx(Check, { size: 12 }) : /* @__PURE__ */ jsx(Copy, { size: 12 })
|
|
3715
|
+
size: 32,
|
|
3716
|
+
style: { color: theme.colors.error || "#ef4444" }
|
|
3033
3717
|
}
|
|
3034
3718
|
),
|
|
3035
|
-
/* @__PURE__ */
|
|
3036
|
-
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3041
|
-
|
|
3042
|
-
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
3048
|
-
counts
|
|
3049
|
-
}) => {
|
|
3050
|
-
const { theme } = useTheme();
|
|
3051
|
-
const availableFilters = [
|
|
3052
|
-
...counts.peer > 0 ? ["peer"] : [],
|
|
3053
|
-
...counts.production > 0 ? ["production"] : [],
|
|
3054
|
-
...counts.development > 0 ? ["development"] : []
|
|
3055
|
-
];
|
|
3056
|
-
const showFilters = availableFilters.length > 1;
|
|
3057
|
-
return /* @__PURE__ */ jsxs(
|
|
3058
|
-
"div",
|
|
3059
|
-
{
|
|
3060
|
-
style: {
|
|
3061
|
-
display: "flex",
|
|
3062
|
-
flexDirection: "column",
|
|
3063
|
-
gap: `${theme.space[2]}px`
|
|
3064
|
-
},
|
|
3065
|
-
children: [
|
|
3066
|
-
/* @__PURE__ */ jsxs(
|
|
3067
|
-
"div",
|
|
3068
|
-
{
|
|
3069
|
-
style: {
|
|
3070
|
-
position: "relative",
|
|
3071
|
-
display: "flex",
|
|
3072
|
-
alignItems: "center"
|
|
3073
|
-
},
|
|
3074
|
-
children: [
|
|
3075
|
-
/* @__PURE__ */ jsx(
|
|
3076
|
-
Search,
|
|
3077
|
-
{
|
|
3078
|
-
size: 14,
|
|
3079
|
-
style: {
|
|
3080
|
-
position: "absolute",
|
|
3081
|
-
left: `${theme.space[3]}px`,
|
|
3082
|
-
color: theme.colors.textSecondary,
|
|
3083
|
-
pointerEvents: "none"
|
|
3719
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
3720
|
+
/* @__PURE__ */ jsx(
|
|
3721
|
+
"h3",
|
|
3722
|
+
{
|
|
3723
|
+
style: {
|
|
3724
|
+
margin: 0,
|
|
3725
|
+
marginBottom: "8px",
|
|
3726
|
+
color: theme.colors.text,
|
|
3727
|
+
fontSize: `${theme.fontSizes[3]}px`,
|
|
3728
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3729
|
+
fontFamily: theme.fonts.body
|
|
3730
|
+
},
|
|
3731
|
+
children: "Unable to load repositories"
|
|
3084
3732
|
}
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3096
|
-
padding: `${theme.space[2]}px ${theme.space[5]}px`,
|
|
3097
|
-
borderRadius: `${theme.radii[2]}px`,
|
|
3098
|
-
border: `1px solid ${theme.colors.border}`,
|
|
3099
|
-
backgroundColor: theme.colors.backgroundSecondary,
|
|
3100
|
-
color: theme.colors.text,
|
|
3101
|
-
fontSize: `${theme.fontSizes[1]}px`,
|
|
3102
|
-
fontFamily: theme.fonts.body,
|
|
3103
|
-
outline: "none",
|
|
3104
|
-
transition: "all 0.2s"
|
|
3733
|
+
),
|
|
3734
|
+
/* @__PURE__ */ jsx(
|
|
3735
|
+
"p",
|
|
3736
|
+
{
|
|
3737
|
+
style: {
|
|
3738
|
+
margin: 0,
|
|
3739
|
+
color: theme.colors.textSecondary,
|
|
3740
|
+
lineHeight: theme.lineHeights.body,
|
|
3741
|
+
fontFamily: theme.fonts.body
|
|
3742
|
+
},
|
|
3743
|
+
children: error
|
|
3105
3744
|
}
|
|
3106
|
-
|
|
3107
|
-
),
|
|
3108
|
-
|
|
3745
|
+
)
|
|
3746
|
+
] }),
|
|
3747
|
+
/* @__PURE__ */ jsxs(
|
|
3109
3748
|
"button",
|
|
3110
3749
|
{
|
|
3111
|
-
|
|
3750
|
+
type: "button",
|
|
3751
|
+
onClick: handleRefresh,
|
|
3112
3752
|
style: {
|
|
3113
|
-
|
|
3114
|
-
right: `${theme.space[2]}px`,
|
|
3115
|
-
padding: `${theme.space[1]}px`,
|
|
3116
|
-
display: "flex",
|
|
3753
|
+
display: "inline-flex",
|
|
3117
3754
|
alignItems: "center",
|
|
3118
|
-
|
|
3119
|
-
|
|
3755
|
+
gap: "8px",
|
|
3756
|
+
padding: "10px 18px",
|
|
3757
|
+
borderRadius: "6px",
|
|
3120
3758
|
border: "none",
|
|
3121
|
-
|
|
3122
|
-
|
|
3759
|
+
backgroundColor: theme.colors.primary,
|
|
3760
|
+
color: theme.colors.background,
|
|
3761
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3762
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3763
|
+
fontFamily: theme.fonts.body,
|
|
3764
|
+
cursor: "pointer"
|
|
3123
3765
|
},
|
|
3124
|
-
|
|
3125
|
-
|
|
3766
|
+
children: [
|
|
3767
|
+
/* @__PURE__ */ jsx(RotateCcw, { size: 16 }),
|
|
3768
|
+
"Try again"
|
|
3769
|
+
]
|
|
3126
3770
|
}
|
|
3127
3771
|
)
|
|
3128
3772
|
]
|
|
3129
3773
|
}
|
|
3130
|
-
)
|
|
3131
|
-
showFilters && /* @__PURE__ */ jsx("div", { style: { display: "flex", gap: `${theme.space[1]}px`, width: "100%" }, children: availableFilters.map((type) => {
|
|
3132
|
-
const isActive = activeFilters.has(type);
|
|
3133
|
-
return /* @__PURE__ */ jsxs(
|
|
3134
|
-
"button",
|
|
3135
|
-
{
|
|
3136
|
-
onClick: () => onToggleFilter(type),
|
|
3137
|
-
style: {
|
|
3138
|
-
flex: 1,
|
|
3139
|
-
padding: `${theme.space[1]}px ${theme.space[2]}px`,
|
|
3140
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
3141
|
-
fontWeight: theme.fontWeights.medium,
|
|
3142
|
-
fontFamily: theme.fonts.body,
|
|
3143
|
-
borderRadius: `${theme.radii[1]}px`,
|
|
3144
|
-
border: `1px solid ${isActive ? theme.colors.primary : theme.colors.border}`,
|
|
3145
|
-
backgroundColor: isActive ? `${theme.colors.primary}20` : theme.colors.backgroundSecondary,
|
|
3146
|
-
color: isActive ? theme.colors.primary : theme.colors.text,
|
|
3147
|
-
cursor: "pointer",
|
|
3148
|
-
transition: "all 0.2s"
|
|
3149
|
-
},
|
|
3150
|
-
children: [
|
|
3151
|
-
type === "production" ? "Prod" : type === "development" ? "Dev" : "Peer",
|
|
3152
|
-
/* @__PURE__ */ jsxs(
|
|
3153
|
-
"span",
|
|
3154
|
-
{
|
|
3155
|
-
style: { marginLeft: `${theme.space[1]}px`, opacity: 0.7 },
|
|
3156
|
-
children: [
|
|
3157
|
-
"(",
|
|
3158
|
-
counts[type],
|
|
3159
|
-
")"
|
|
3160
|
-
]
|
|
3161
|
-
}
|
|
3162
|
-
)
|
|
3163
|
-
]
|
|
3164
|
-
},
|
|
3165
|
-
type
|
|
3166
|
-
);
|
|
3167
|
-
}) })
|
|
3168
|
-
]
|
|
3169
|
-
}
|
|
3170
|
-
);
|
|
3171
|
-
};
|
|
3172
|
-
const dependencyTypeOrder = {
|
|
3173
|
-
peer: 0,
|
|
3174
|
-
production: 1,
|
|
3175
|
-
development: 2
|
|
3176
|
-
};
|
|
3177
|
-
function extractDependencies(packageLayer) {
|
|
3178
|
-
const { dependencies, devDependencies, peerDependencies } = packageLayer.packageData;
|
|
3179
|
-
const items = [];
|
|
3180
|
-
if (dependencies) {
|
|
3181
|
-
Object.entries(dependencies).forEach(([name, version]) => {
|
|
3182
|
-
items.push({ name, version, dependencyType: "production" });
|
|
3183
|
-
});
|
|
3184
|
-
}
|
|
3185
|
-
if (devDependencies) {
|
|
3186
|
-
Object.entries(devDependencies).forEach(([name, version]) => {
|
|
3187
|
-
items.push({ name, version, dependencyType: "development" });
|
|
3188
|
-
});
|
|
3189
|
-
}
|
|
3190
|
-
if (peerDependencies) {
|
|
3191
|
-
Object.entries(peerDependencies).forEach(([name, version]) => {
|
|
3192
|
-
items.push({ name, version, dependencyType: "peer" });
|
|
3193
|
-
});
|
|
3194
|
-
}
|
|
3195
|
-
return items.sort((a, b) => {
|
|
3196
|
-
const typeCompare = dependencyTypeOrder[a.dependencyType] - dependencyTypeOrder[b.dependencyType];
|
|
3197
|
-
if (typeCompare !== 0) return typeCompare;
|
|
3198
|
-
return a.name.localeCompare(b.name);
|
|
3199
|
-
});
|
|
3200
|
-
}
|
|
3201
|
-
const DependenciesPanelContent = ({
|
|
3202
|
-
context
|
|
3203
|
-
}) => {
|
|
3204
|
-
var _a;
|
|
3205
|
-
const { theme } = useTheme();
|
|
3206
|
-
const [selectedPackagePath, setSelectedPackagePath] = useState(
|
|
3207
|
-
null
|
|
3208
|
-
);
|
|
3209
|
-
const [activeFilters, setActiveFilters] = useState(/* @__PURE__ */ new Set());
|
|
3210
|
-
const [searchQuery, setSearchQuery] = useState("");
|
|
3211
|
-
const [showInfoModal, setShowInfoModal] = useState(false);
|
|
3212
|
-
const packagesSlice = context.getSlice("packages");
|
|
3213
|
-
const isLoading = context.isSliceLoading("packages");
|
|
3214
|
-
const hasPackages = context.hasSlice("packages");
|
|
3215
|
-
const packages = useMemo(() => {
|
|
3216
|
-
var _a2;
|
|
3217
|
-
return ((_a2 = packagesSlice == null ? void 0 : packagesSlice.data) == null ? void 0 : _a2.packages) ?? [];
|
|
3218
|
-
}, [(_a = packagesSlice == null ? void 0 : packagesSlice.data) == null ? void 0 : _a.packages]);
|
|
3219
|
-
const effectiveSelectedPath = useMemo(() => {
|
|
3220
|
-
if (selectedPackagePath !== null) return selectedPackagePath;
|
|
3221
|
-
if (packages.length === 1) return packages[0].packageData.path;
|
|
3222
|
-
const rootPackage = packages.find((p) => p.packageData.path === "");
|
|
3223
|
-
if (rootPackage) return "";
|
|
3224
|
-
return null;
|
|
3225
|
-
}, [selectedPackagePath, packages]);
|
|
3226
|
-
const selectedPackage = useMemo(() => {
|
|
3227
|
-
if (effectiveSelectedPath === null) return null;
|
|
3228
|
-
return packages.find((p) => p.packageData.path === effectiveSelectedPath);
|
|
3229
|
-
}, [effectiveSelectedPath, packages]);
|
|
3230
|
-
const dependencyItems = useMemo(() => {
|
|
3231
|
-
if (!selectedPackage) return [];
|
|
3232
|
-
return extractDependencies(selectedPackage);
|
|
3233
|
-
}, [selectedPackage]);
|
|
3234
|
-
const counts = useMemo(() => {
|
|
3235
|
-
return {
|
|
3236
|
-
all: dependencyItems.length,
|
|
3237
|
-
production: dependencyItems.filter((d) => d.dependencyType === "production").length,
|
|
3238
|
-
development: dependencyItems.filter(
|
|
3239
|
-
(d) => d.dependencyType === "development"
|
|
3240
|
-
).length,
|
|
3241
|
-
peer: dependencyItems.filter((d) => d.dependencyType === "peer").length
|
|
3242
|
-
};
|
|
3243
|
-
}, [dependencyItems]);
|
|
3244
|
-
const handleToggleFilter = (type) => {
|
|
3245
|
-
setActiveFilters((prev) => {
|
|
3246
|
-
const next = new Set(prev);
|
|
3247
|
-
if (next.has(type)) {
|
|
3248
|
-
next.delete(type);
|
|
3249
|
-
} else {
|
|
3250
|
-
next.add(type);
|
|
3251
|
-
}
|
|
3252
|
-
return next;
|
|
3253
|
-
});
|
|
3254
|
-
};
|
|
3255
|
-
const filteredDependencies = useMemo(() => {
|
|
3256
|
-
let filtered = [...dependencyItems];
|
|
3257
|
-
if (searchQuery.trim()) {
|
|
3258
|
-
const query = searchQuery.toLowerCase();
|
|
3259
|
-
filtered = filtered.filter(
|
|
3260
|
-
(dep) => dep.name.toLowerCase().includes(query)
|
|
3261
|
-
);
|
|
3262
|
-
}
|
|
3263
|
-
const allTypes = ["production", "development", "peer"];
|
|
3264
|
-
const availableTypes = allTypes.filter((t) => counts[t] > 0);
|
|
3265
|
-
const isAllSelected = activeFilters.size === 0 || availableTypes.every((t) => activeFilters.has(t));
|
|
3266
|
-
if (!isAllSelected && activeFilters.size > 0) {
|
|
3267
|
-
filtered = filtered.filter((dep) => activeFilters.has(dep.dependencyType));
|
|
3268
|
-
}
|
|
3269
|
-
return filtered;
|
|
3270
|
-
}, [dependencyItems, searchQuery, activeFilters, counts]);
|
|
3271
|
-
if (isLoading) {
|
|
3272
|
-
return /* @__PURE__ */ jsx(
|
|
3273
|
-
"div",
|
|
3274
|
-
{
|
|
3275
|
-
style: {
|
|
3276
|
-
padding: `${theme.space[3]}px`,
|
|
3277
|
-
height: "100%",
|
|
3278
|
-
display: "flex",
|
|
3279
|
-
alignItems: "center",
|
|
3280
|
-
justifyContent: "center",
|
|
3281
|
-
color: theme.colors.textSecondary,
|
|
3282
|
-
backgroundColor: theme.colors.background,
|
|
3283
|
-
fontFamily: theme.fonts.body
|
|
3284
|
-
},
|
|
3285
|
-
children: "Loading packages..."
|
|
3774
|
+
)
|
|
3286
3775
|
}
|
|
3287
|
-
);
|
|
3776
|
+
) });
|
|
3288
3777
|
}
|
|
3289
|
-
|
|
3778
|
+
const renderSectionHeader = (owner, repoCount, icon, isOrg = false) => {
|
|
3779
|
+
const isCollapsed = collapsedSections.has(owner);
|
|
3290
3780
|
return /* @__PURE__ */ jsxs(
|
|
3291
|
-
"
|
|
3781
|
+
"button",
|
|
3292
3782
|
{
|
|
3783
|
+
type: "button",
|
|
3784
|
+
onClick: () => toggleSection(owner),
|
|
3293
3785
|
style: {
|
|
3294
|
-
|
|
3295
|
-
height: "100%",
|
|
3786
|
+
width: "100%",
|
|
3296
3787
|
display: "flex",
|
|
3297
|
-
flexDirection: "column",
|
|
3298
3788
|
alignItems: "center",
|
|
3299
|
-
justifyContent: "
|
|
3300
|
-
|
|
3301
|
-
color: theme.colors.textSecondary,
|
|
3789
|
+
justifyContent: "space-between",
|
|
3790
|
+
padding: "10px 12px",
|
|
3302
3791
|
backgroundColor: theme.colors.background,
|
|
3303
|
-
|
|
3792
|
+
border: "none",
|
|
3793
|
+
borderRadius: "6px",
|
|
3794
|
+
cursor: "pointer",
|
|
3795
|
+
textAlign: "left",
|
|
3796
|
+
marginBottom: isCollapsed ? "0" : "8px"
|
|
3797
|
+
},
|
|
3798
|
+
onMouseEnter: (e) => {
|
|
3799
|
+
e.currentTarget.style.backgroundColor = theme.colors.backgroundTertiary;
|
|
3800
|
+
},
|
|
3801
|
+
onMouseLeave: (e) => {
|
|
3802
|
+
e.currentTarget.style.backgroundColor = theme.colors.background;
|
|
3304
3803
|
},
|
|
3305
3804
|
children: [
|
|
3306
|
-
/* @__PURE__ */
|
|
3307
|
-
|
|
3805
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px" }, children: [
|
|
3806
|
+
isCollapsed ? /* @__PURE__ */ jsx(ChevronRight, { size: 16, color: theme.colors.textSecondary }) : /* @__PURE__ */ jsx(ChevronDown, { size: 16, color: theme.colors.textSecondary }),
|
|
3807
|
+
icon,
|
|
3808
|
+
/* @__PURE__ */ jsx(
|
|
3809
|
+
"span",
|
|
3810
|
+
{
|
|
3811
|
+
style: {
|
|
3812
|
+
fontSize: `${theme.fontSizes[2]}px`,
|
|
3813
|
+
fontWeight: theme.fontWeights.semibold,
|
|
3814
|
+
fontFamily: theme.fonts.body,
|
|
3815
|
+
color: theme.colors.text
|
|
3816
|
+
},
|
|
3817
|
+
children: owner
|
|
3818
|
+
}
|
|
3819
|
+
),
|
|
3820
|
+
isOrg && /* @__PURE__ */ jsx(
|
|
3821
|
+
"span",
|
|
3822
|
+
{
|
|
3823
|
+
style: {
|
|
3824
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
3825
|
+
fontFamily: theme.fonts.body,
|
|
3826
|
+
color: theme.colors.textSecondary,
|
|
3827
|
+
backgroundColor: theme.colors.backgroundSecondary,
|
|
3828
|
+
padding: "2px 6px",
|
|
3829
|
+
borderRadius: "3px"
|
|
3830
|
+
},
|
|
3831
|
+
children: "org"
|
|
3832
|
+
}
|
|
3833
|
+
)
|
|
3834
|
+
] }),
|
|
3835
|
+
/* @__PURE__ */ jsxs(
|
|
3836
|
+
"span",
|
|
3837
|
+
{
|
|
3838
|
+
style: {
|
|
3839
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
3840
|
+
fontFamily: theme.fonts.body,
|
|
3841
|
+
color: theme.colors.textSecondary
|
|
3842
|
+
},
|
|
3843
|
+
children: [
|
|
3844
|
+
repoCount,
|
|
3845
|
+
" ",
|
|
3846
|
+
repoCount === 1 ? "repo" : "repos"
|
|
3847
|
+
]
|
|
3848
|
+
}
|
|
3849
|
+
)
|
|
3308
3850
|
]
|
|
3309
3851
|
}
|
|
3310
3852
|
);
|
|
3311
|
-
}
|
|
3853
|
+
};
|
|
3312
3854
|
return /* @__PURE__ */ jsxs(
|
|
3313
3855
|
"div",
|
|
3314
3856
|
{
|
|
3315
3857
|
style: {
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
|
|
3319
|
-
backgroundColor: theme.colors.background,
|
|
3320
|
-
color: theme.colors.text,
|
|
3321
|
-
fontFamily: theme.fonts.body,
|
|
3322
|
-
overflow: "hidden"
|
|
3858
|
+
...baseContainerStyle,
|
|
3859
|
+
padding: "16px",
|
|
3860
|
+
gap: "12px"
|
|
3323
3861
|
},
|
|
3324
3862
|
children: [
|
|
3325
|
-
/* @__PURE__ */ jsxs(
|
|
3863
|
+
/* @__PURE__ */ jsxs("div", { style: { position: "relative" }, children: [
|
|
3864
|
+
/* @__PURE__ */ jsx(
|
|
3865
|
+
Search,
|
|
3866
|
+
{
|
|
3867
|
+
size: 16,
|
|
3868
|
+
style: {
|
|
3869
|
+
position: "absolute",
|
|
3870
|
+
top: "50%",
|
|
3871
|
+
left: "12px",
|
|
3872
|
+
transform: "translateY(-50%)",
|
|
3873
|
+
color: theme.colors.textSecondary,
|
|
3874
|
+
pointerEvents: "none"
|
|
3875
|
+
}
|
|
3876
|
+
}
|
|
3877
|
+
),
|
|
3878
|
+
/* @__PURE__ */ jsx(
|
|
3879
|
+
"input",
|
|
3880
|
+
{
|
|
3881
|
+
type: "text",
|
|
3882
|
+
value: filter,
|
|
3883
|
+
placeholder: "Filter repositories...",
|
|
3884
|
+
onChange: (event) => setFilter(event.target.value),
|
|
3885
|
+
style: {
|
|
3886
|
+
width: "100%",
|
|
3887
|
+
padding: "8px 12px 8px 36px",
|
|
3888
|
+
borderRadius: "6px",
|
|
3889
|
+
border: `1px solid ${theme.colors.border}`,
|
|
3890
|
+
backgroundColor: theme.colors.background,
|
|
3891
|
+
color: theme.colors.text,
|
|
3892
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3893
|
+
fontFamily: theme.fonts.body,
|
|
3894
|
+
outline: "none"
|
|
3895
|
+
}
|
|
3896
|
+
}
|
|
3897
|
+
)
|
|
3898
|
+
] }),
|
|
3899
|
+
error && hasData && /* @__PURE__ */ jsxs(
|
|
3326
3900
|
"div",
|
|
3327
3901
|
{
|
|
3328
3902
|
style: {
|
|
3329
|
-
flexShrink: 0,
|
|
3330
|
-
padding: `${theme.space[3]}px`,
|
|
3331
|
-
paddingBottom: `${theme.space[2]}px`,
|
|
3332
3903
|
display: "flex",
|
|
3333
|
-
|
|
3334
|
-
gap:
|
|
3335
|
-
|
|
3904
|
+
alignItems: "center",
|
|
3905
|
+
gap: "8px",
|
|
3906
|
+
padding: "10px 14px",
|
|
3907
|
+
borderRadius: "6px",
|
|
3908
|
+
backgroundColor: `${theme.colors.error || "#ef4444"}20`,
|
|
3909
|
+
color: theme.colors.error || "#ef4444",
|
|
3910
|
+
fontSize: `${theme.fontSizes[1]}px`,
|
|
3911
|
+
fontFamily: theme.fonts.body
|
|
3336
3912
|
},
|
|
3337
3913
|
children: [
|
|
3338
|
-
/* @__PURE__ */
|
|
3339
|
-
|
|
3340
|
-
{
|
|
3341
|
-
style: {
|
|
3342
|
-
display: "flex",
|
|
3343
|
-
alignItems: "center",
|
|
3344
|
-
justifyContent: "space-between"
|
|
3345
|
-
},
|
|
3346
|
-
children: [
|
|
3347
|
-
/* @__PURE__ */ jsx(
|
|
3348
|
-
"h3",
|
|
3349
|
-
{
|
|
3350
|
-
style: {
|
|
3351
|
-
fontSize: `${theme.fontSizes[2]}px`,
|
|
3352
|
-
fontWeight: theme.fontWeights.semibold,
|
|
3353
|
-
color: theme.colors.text,
|
|
3354
|
-
display: "flex",
|
|
3355
|
-
alignItems: "center",
|
|
3356
|
-
gap: `${theme.space[2]}px`,
|
|
3357
|
-
margin: 0
|
|
3358
|
-
},
|
|
3359
|
-
children: packages.length > 1 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3360
|
-
/* @__PURE__ */ jsx(Boxes, { size: 16 }),
|
|
3361
|
-
"Monorepo Dependencies",
|
|
3362
|
-
/* @__PURE__ */ jsxs(
|
|
3363
|
-
"span",
|
|
3364
|
-
{
|
|
3365
|
-
style: {
|
|
3366
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
3367
|
-
fontWeight: theme.fontWeights.body,
|
|
3368
|
-
color: theme.colors.textSecondary
|
|
3369
|
-
},
|
|
3370
|
-
children: [
|
|
3371
|
-
"(",
|
|
3372
|
-
packages.length,
|
|
3373
|
-
")"
|
|
3374
|
-
]
|
|
3375
|
-
}
|
|
3376
|
-
)
|
|
3377
|
-
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3378
|
-
/* @__PURE__ */ jsx(Package, { size: 16 }),
|
|
3379
|
-
"Dependencies"
|
|
3380
|
-
] })
|
|
3381
|
-
}
|
|
3382
|
-
),
|
|
3383
|
-
/* @__PURE__ */ jsxs(
|
|
3384
|
-
"button",
|
|
3385
|
-
{
|
|
3386
|
-
onClick: () => setShowInfoModal(true),
|
|
3387
|
-
style: {
|
|
3388
|
-
padding: `${theme.space[1]}px ${theme.space[2]}px`,
|
|
3389
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
3390
|
-
fontWeight: theme.fontWeights.medium,
|
|
3391
|
-
fontFamily: theme.fonts.body,
|
|
3392
|
-
borderRadius: `${theme.radii[1]}px`,
|
|
3393
|
-
border: `1px solid ${theme.colors.border}`,
|
|
3394
|
-
backgroundColor: theme.colors.backgroundSecondary,
|
|
3395
|
-
color: theme.colors.primary,
|
|
3396
|
-
cursor: "pointer",
|
|
3397
|
-
display: "flex",
|
|
3398
|
-
alignItems: "center",
|
|
3399
|
-
gap: `${theme.space[1]}px`,
|
|
3400
|
-
transition: "all 0.2s"
|
|
3401
|
-
},
|
|
3402
|
-
children: [
|
|
3403
|
-
/* @__PURE__ */ jsx(CircleQuestionMark, { size: 12 }),
|
|
3404
|
-
"Learn More"
|
|
3405
|
-
]
|
|
3406
|
-
}
|
|
3407
|
-
)
|
|
3408
|
-
]
|
|
3409
|
-
}
|
|
3410
|
-
),
|
|
3411
|
-
packages.length > 1 && /* @__PURE__ */ jsx(
|
|
3412
|
-
"select",
|
|
3413
|
-
{
|
|
3414
|
-
value: effectiveSelectedPath ?? "__none__",
|
|
3415
|
-
onChange: (e) => setSelectedPackagePath(e.target.value === "__none__" ? null : e.target.value),
|
|
3416
|
-
style: {
|
|
3417
|
-
width: "100%",
|
|
3418
|
-
padding: `${theme.space[2]}px`,
|
|
3419
|
-
borderRadius: `${theme.radii[1]}px`,
|
|
3420
|
-
border: `1px solid ${theme.colors.border}`,
|
|
3421
|
-
backgroundColor: theme.colors.backgroundSecondary,
|
|
3422
|
-
color: theme.colors.text,
|
|
3423
|
-
fontSize: `${theme.fontSizes[1]}px`,
|
|
3424
|
-
fontFamily: theme.fonts.body,
|
|
3425
|
-
cursor: "pointer"
|
|
3426
|
-
},
|
|
3427
|
-
children: packages.map((pkg) => /* @__PURE__ */ jsxs("option", { value: pkg.packageData.path, children: [
|
|
3428
|
-
pkg.packageData.name,
|
|
3429
|
-
" (",
|
|
3430
|
-
pkg.packageData.path || "root",
|
|
3431
|
-
")"
|
|
3432
|
-
] }, pkg.packageData.path || "__root__"))
|
|
3433
|
-
}
|
|
3434
|
-
),
|
|
3435
|
-
packages.length === 1 && selectedPackage && /* @__PURE__ */ jsxs(
|
|
3436
|
-
"div",
|
|
3437
|
-
{
|
|
3438
|
-
style: {
|
|
3439
|
-
fontSize: `${theme.fontSizes[0]}px`,
|
|
3440
|
-
color: theme.colors.textSecondary
|
|
3441
|
-
},
|
|
3442
|
-
children: [
|
|
3443
|
-
selectedPackage.packageData.name,
|
|
3444
|
-
" • ",
|
|
3445
|
-
dependencyItems.length,
|
|
3446
|
-
" dependencies"
|
|
3447
|
-
]
|
|
3448
|
-
}
|
|
3449
|
-
),
|
|
3450
|
-
selectedPackage && dependencyItems.length > 0 && /* @__PURE__ */ jsx(
|
|
3451
|
-
FilterBar,
|
|
3452
|
-
{
|
|
3453
|
-
activeFilters,
|
|
3454
|
-
onToggleFilter: handleToggleFilter,
|
|
3455
|
-
searchQuery,
|
|
3456
|
-
onSearchChange: setSearchQuery,
|
|
3457
|
-
counts
|
|
3458
|
-
}
|
|
3459
|
-
)
|
|
3914
|
+
/* @__PURE__ */ jsx(CircleAlert, { size: 16 }),
|
|
3915
|
+
/* @__PURE__ */ jsx("span", { children: error })
|
|
3460
3916
|
]
|
|
3461
3917
|
}
|
|
3462
3918
|
),
|
|
3463
|
-
|
|
3919
|
+
/* @__PURE__ */ jsxs(
|
|
3464
3920
|
"div",
|
|
3465
3921
|
{
|
|
3466
3922
|
style: {
|
|
3467
3923
|
flex: 1,
|
|
3468
|
-
|
|
3469
|
-
|
|
3924
|
+
overflowY: "auto",
|
|
3925
|
+
display: "flex",
|
|
3926
|
+
flexDirection: "column",
|
|
3927
|
+
gap: "16px"
|
|
3470
3928
|
},
|
|
3471
3929
|
children: [
|
|
3472
|
-
/* @__PURE__ */ jsxs(
|
|
3930
|
+
filteredUserRepos.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
3931
|
+
renderSectionHeader(
|
|
3932
|
+
currentUser || "Your Repositories",
|
|
3933
|
+
filteredUserRepos.length,
|
|
3934
|
+
/* @__PURE__ */ jsx(User, { size: 16, color: theme.colors.textSecondary })
|
|
3935
|
+
),
|
|
3936
|
+
!collapsedSections.has(currentUser || "Your Repositories") && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: filteredUserRepos.sort(
|
|
3937
|
+
(a, b) => a.name.localeCompare(b.name, void 0, { sensitivity: "base" })
|
|
3938
|
+
).map((repo) => /* @__PURE__ */ jsx(
|
|
3939
|
+
GitHubRepositoryCard,
|
|
3940
|
+
{
|
|
3941
|
+
repository: repo,
|
|
3942
|
+
localRepo: localRepoMap.get(repo.full_name),
|
|
3943
|
+
onClone: handleClone,
|
|
3944
|
+
onOpen: handleOpen,
|
|
3945
|
+
onSelect: handleSelect,
|
|
3946
|
+
isSelected: (selectedRepo == null ? void 0 : selectedRepo.id) === repo.id
|
|
3947
|
+
},
|
|
3948
|
+
repo.id
|
|
3949
|
+
)) })
|
|
3950
|
+
] }),
|
|
3951
|
+
organizations.map((org) => {
|
|
3952
|
+
const repos = filteredOrgRepos[org.login];
|
|
3953
|
+
if (!repos || repos.length === 0) return null;
|
|
3954
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
3955
|
+
renderSectionHeader(
|
|
3956
|
+
org.login,
|
|
3957
|
+
repos.length,
|
|
3958
|
+
/* @__PURE__ */ jsx(Building2, { size: 16, color: theme.colors.textSecondary }),
|
|
3959
|
+
true
|
|
3960
|
+
),
|
|
3961
|
+
!collapsedSections.has(org.login) && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: repos.sort(
|
|
3962
|
+
(a, b) => a.name.localeCompare(b.name, void 0, { sensitivity: "base" })
|
|
3963
|
+
).map((repo) => /* @__PURE__ */ jsx(
|
|
3964
|
+
GitHubRepositoryCard,
|
|
3965
|
+
{
|
|
3966
|
+
repository: repo,
|
|
3967
|
+
localRepo: localRepoMap.get(repo.full_name),
|
|
3968
|
+
onClone: handleClone,
|
|
3969
|
+
onOpen: handleOpen,
|
|
3970
|
+
onSelect: handleSelect,
|
|
3971
|
+
isSelected: (selectedRepo == null ? void 0 : selectedRepo.id) === repo.id
|
|
3972
|
+
},
|
|
3973
|
+
repo.id
|
|
3974
|
+
)) })
|
|
3975
|
+
] }, org.id);
|
|
3976
|
+
}),
|
|
3977
|
+
filteredUserRepos.length === 0 && Object.keys(filteredOrgRepos).length === 0 && hasData && /* @__PURE__ */ jsx(
|
|
3473
3978
|
"div",
|
|
3474
3979
|
{
|
|
3475
3980
|
style: {
|
|
3476
|
-
|
|
3477
|
-
|
|
3478
|
-
|
|
3981
|
+
padding: "32px",
|
|
3982
|
+
textAlign: "center",
|
|
3983
|
+
color: theme.colors.textSecondary
|
|
3479
3984
|
},
|
|
3480
|
-
children:
|
|
3481
|
-
"Showing ",
|
|
3482
|
-
filteredDependencies.length,
|
|
3483
|
-
" of ",
|
|
3484
|
-
dependencyItems.length,
|
|
3485
|
-
" dependencies"
|
|
3486
|
-
]
|
|
3985
|
+
children: /* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories match your filter." })
|
|
3487
3986
|
}
|
|
3488
3987
|
),
|
|
3489
|
-
/* @__PURE__ */
|
|
3988
|
+
!hasData && !loading && /* @__PURE__ */ jsxs(
|
|
3490
3989
|
"div",
|
|
3491
3990
|
{
|
|
3492
3991
|
style: {
|
|
3493
|
-
|
|
3494
|
-
|
|
3495
|
-
|
|
3992
|
+
padding: "32px",
|
|
3993
|
+
textAlign: "center",
|
|
3994
|
+
color: theme.colors.textSecondary
|
|
3496
3995
|
},
|
|
3497
|
-
children:
|
|
3498
|
-
|
|
3499
|
-
|
|
3500
|
-
|
|
3501
|
-
|
|
3502
|
-
|
|
3503
|
-
|
|
3504
|
-
|
|
3505
|
-
|
|
3506
|
-
|
|
3507
|
-
}
|
|
3508
|
-
) : filteredDependencies.map((dep) => /* @__PURE__ */ jsx(
|
|
3509
|
-
DependencyRow,
|
|
3510
|
-
{
|
|
3511
|
-
dependency: dep
|
|
3512
|
-
},
|
|
3513
|
-
`${dep.name}-${dep.dependencyType}`
|
|
3514
|
-
))
|
|
3996
|
+
children: [
|
|
3997
|
+
/* @__PURE__ */ jsx(
|
|
3998
|
+
FolderGit2,
|
|
3999
|
+
{
|
|
4000
|
+
size: 32,
|
|
4001
|
+
style: { marginBottom: "12px", opacity: 0.5 }
|
|
4002
|
+
}
|
|
4003
|
+
),
|
|
4004
|
+
/* @__PURE__ */ jsx("p", { style: { margin: 0 }, children: "No repositories found." })
|
|
4005
|
+
]
|
|
3515
4006
|
}
|
|
3516
4007
|
)
|
|
3517
4008
|
]
|
|
3518
4009
|
}
|
|
3519
|
-
)
|
|
3520
|
-
|
|
4010
|
+
)
|
|
4011
|
+
]
|
|
4012
|
+
}
|
|
4013
|
+
);
|
|
4014
|
+
};
|
|
4015
|
+
const GitHubProjectsPanelPreview = () => {
|
|
4016
|
+
const { theme } = useTheme();
|
|
4017
|
+
return /* @__PURE__ */ jsxs(
|
|
4018
|
+
"div",
|
|
4019
|
+
{
|
|
4020
|
+
style: {
|
|
4021
|
+
padding: "12px",
|
|
4022
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
4023
|
+
fontFamily: theme.fonts.body,
|
|
4024
|
+
color: theme.colors.text,
|
|
4025
|
+
display: "flex",
|
|
4026
|
+
flexDirection: "column",
|
|
4027
|
+
gap: "8px"
|
|
4028
|
+
},
|
|
4029
|
+
children: [
|
|
4030
|
+
/* @__PURE__ */ jsxs(
|
|
3521
4031
|
"div",
|
|
3522
4032
|
{
|
|
3523
4033
|
style: {
|
|
3524
|
-
flex: 1,
|
|
3525
4034
|
display: "flex",
|
|
3526
4035
|
alignItems: "center",
|
|
3527
|
-
|
|
3528
|
-
|
|
3529
|
-
fontSize: `${theme.fontSizes[1]}px`
|
|
4036
|
+
gap: "6px",
|
|
4037
|
+
fontWeight: theme.fontWeights.semibold
|
|
3530
4038
|
},
|
|
3531
|
-
children:
|
|
4039
|
+
children: [
|
|
4040
|
+
/* @__PURE__ */ jsx(FolderGit2, { size: 16, style: { color: theme.colors.primary } }),
|
|
4041
|
+
/* @__PURE__ */ jsx("span", { children: "GitHub Projects" })
|
|
4042
|
+
]
|
|
3532
4043
|
}
|
|
3533
4044
|
),
|
|
3534
4045
|
/* @__PURE__ */ jsx(
|
|
3535
|
-
|
|
4046
|
+
"div",
|
|
3536
4047
|
{
|
|
3537
|
-
|
|
3538
|
-
|
|
4048
|
+
style: {
|
|
4049
|
+
fontSize: `${theme.fontSizes[0]}px`,
|
|
4050
|
+
fontFamily: theme.fonts.body,
|
|
4051
|
+
color: theme.colors.textSecondary,
|
|
4052
|
+
marginTop: "4px"
|
|
4053
|
+
},
|
|
4054
|
+
children: "Your repositories and organization projects"
|
|
3539
4055
|
}
|
|
3540
4056
|
)
|
|
3541
4057
|
]
|
|
3542
4058
|
}
|
|
3543
4059
|
);
|
|
3544
4060
|
};
|
|
3545
|
-
const
|
|
3546
|
-
|
|
3547
|
-
};
|
|
3548
|
-
const PANEL_ID$3 = "industry-theme.local-projects";
|
|
3549
|
-
const filterProjectsTool = {
|
|
4061
|
+
const PANEL_ID$4 = "industry-theme.local-projects";
|
|
4062
|
+
const filterProjectsTool$1 = {
|
|
3550
4063
|
name: "filter_projects",
|
|
3551
4064
|
description: "Filter the local projects list by name, owner, or path",
|
|
3552
4065
|
inputs: {
|
|
@@ -3569,7 +4082,7 @@ const filterProjectsTool = {
|
|
|
3569
4082
|
tags: ["filter", "search", "projects"],
|
|
3570
4083
|
tool_call_template: {
|
|
3571
4084
|
call_template_type: "panel_event",
|
|
3572
|
-
event_type: `${PANEL_ID$
|
|
4085
|
+
event_type: `${PANEL_ID$4}:filter`
|
|
3573
4086
|
}
|
|
3574
4087
|
};
|
|
3575
4088
|
const selectProjectTool = {
|
|
@@ -3595,7 +4108,7 @@ const selectProjectTool = {
|
|
|
3595
4108
|
tags: ["select", "project", "navigation"],
|
|
3596
4109
|
tool_call_template: {
|
|
3597
4110
|
call_template_type: "panel_event",
|
|
3598
|
-
event_type: `${PANEL_ID$
|
|
4111
|
+
event_type: `${PANEL_ID$4}:select-repository`
|
|
3599
4112
|
}
|
|
3600
4113
|
};
|
|
3601
4114
|
const openProjectTool = {
|
|
@@ -3621,21 +4134,21 @@ const openProjectTool = {
|
|
|
3621
4134
|
tags: ["open", "project", "workspace"],
|
|
3622
4135
|
tool_call_template: {
|
|
3623
4136
|
call_template_type: "panel_event",
|
|
3624
|
-
event_type: `${PANEL_ID$
|
|
4137
|
+
event_type: `${PANEL_ID$4}:open-repository`
|
|
3625
4138
|
}
|
|
3626
4139
|
};
|
|
3627
4140
|
const localProjectsPanelTools = [
|
|
3628
|
-
filterProjectsTool,
|
|
4141
|
+
filterProjectsTool$1,
|
|
3629
4142
|
selectProjectTool,
|
|
3630
4143
|
openProjectTool
|
|
3631
4144
|
];
|
|
3632
4145
|
const localProjectsPanelToolsMetadata = {
|
|
3633
|
-
id: PANEL_ID$
|
|
4146
|
+
id: PANEL_ID$4,
|
|
3634
4147
|
name: "Local Projects Panel",
|
|
3635
4148
|
description: "Tools for browsing and managing local Alexandria repositories",
|
|
3636
4149
|
tools: localProjectsPanelTools
|
|
3637
4150
|
};
|
|
3638
|
-
const PANEL_ID$
|
|
4151
|
+
const PANEL_ID$3 = "industry-theme.workspace-repositories";
|
|
3639
4152
|
const selectRepositoryTool = {
|
|
3640
4153
|
name: "select_workspace_repository",
|
|
3641
4154
|
description: "Selects a repository in the workspace panel",
|
|
@@ -3659,7 +4172,7 @@ const selectRepositoryTool = {
|
|
|
3659
4172
|
tags: ["workspace", "repository", "select"],
|
|
3660
4173
|
tool_call_template: {
|
|
3661
4174
|
call_template_type: "panel_event",
|
|
3662
|
-
event_type: `${PANEL_ID$
|
|
4175
|
+
event_type: `${PANEL_ID$3}:select-repository`
|
|
3663
4176
|
}
|
|
3664
4177
|
};
|
|
3665
4178
|
const refreshWorkspaceTool = {
|
|
@@ -3684,7 +4197,7 @@ const refreshWorkspaceTool = {
|
|
|
3684
4197
|
tags: ["workspace", "refresh"],
|
|
3685
4198
|
tool_call_template: {
|
|
3686
4199
|
call_template_type: "panel_event",
|
|
3687
|
-
event_type: `${PANEL_ID$
|
|
4200
|
+
event_type: `${PANEL_ID$3}:refresh-workspace`
|
|
3688
4201
|
}
|
|
3689
4202
|
};
|
|
3690
4203
|
const openRepositoryTool = {
|
|
@@ -3710,7 +4223,7 @@ const openRepositoryTool = {
|
|
|
3710
4223
|
tags: ["workspace", "repository", "open"],
|
|
3711
4224
|
tool_call_template: {
|
|
3712
4225
|
call_template_type: "panel_event",
|
|
3713
|
-
event_type: `${PANEL_ID$
|
|
4226
|
+
event_type: `${PANEL_ID$3}:open-repository`
|
|
3714
4227
|
}
|
|
3715
4228
|
};
|
|
3716
4229
|
const workspaceRepositoriesPanelTools = [
|
|
@@ -3719,12 +4232,12 @@ const workspaceRepositoriesPanelTools = [
|
|
|
3719
4232
|
openRepositoryTool
|
|
3720
4233
|
];
|
|
3721
4234
|
const workspaceRepositoriesPanelToolsMetadata = {
|
|
3722
|
-
id: PANEL_ID$
|
|
4235
|
+
id: PANEL_ID$3,
|
|
3723
4236
|
name: "Workspace Repositories Panel",
|
|
3724
4237
|
description: "Tools provided by the workspace repositories panel",
|
|
3725
4238
|
tools: workspaceRepositoriesPanelTools
|
|
3726
4239
|
};
|
|
3727
|
-
const PANEL_ID$
|
|
4240
|
+
const PANEL_ID$2 = "industry-theme.workspaces-list";
|
|
3728
4241
|
const filterWorkspacesTool = {
|
|
3729
4242
|
name: "filter_workspaces",
|
|
3730
4243
|
description: "Filter the workspaces list by workspace name, description, or repository names within workspaces",
|
|
@@ -3748,7 +4261,7 @@ const filterWorkspacesTool = {
|
|
|
3748
4261
|
tags: ["filter", "search", "workspaces"],
|
|
3749
4262
|
tool_call_template: {
|
|
3750
4263
|
call_template_type: "panel_event",
|
|
3751
|
-
event_type: `${PANEL_ID$
|
|
4264
|
+
event_type: `${PANEL_ID$2}:filter`
|
|
3752
4265
|
}
|
|
3753
4266
|
};
|
|
3754
4267
|
const selectWorkspaceTool = {
|
|
@@ -3774,7 +4287,7 @@ const selectWorkspaceTool = {
|
|
|
3774
4287
|
tags: ["select", "workspace", "navigation"],
|
|
3775
4288
|
tool_call_template: {
|
|
3776
4289
|
call_template_type: "panel_event",
|
|
3777
|
-
event_type: `${PANEL_ID$
|
|
4290
|
+
event_type: `${PANEL_ID$2}:select-workspace`
|
|
3778
4291
|
}
|
|
3779
4292
|
};
|
|
3780
4293
|
const openWorkspaceTool = {
|
|
@@ -3800,7 +4313,7 @@ const openWorkspaceTool = {
|
|
|
3800
4313
|
tags: ["open", "workspace", "window"],
|
|
3801
4314
|
tool_call_template: {
|
|
3802
4315
|
call_template_type: "panel_event",
|
|
3803
|
-
event_type: `${PANEL_ID$
|
|
4316
|
+
event_type: `${PANEL_ID$2}:open-workspace`
|
|
3804
4317
|
}
|
|
3805
4318
|
};
|
|
3806
4319
|
const createWorkspaceTool = {
|
|
@@ -3831,7 +4344,7 @@ const createWorkspaceTool = {
|
|
|
3831
4344
|
tags: ["create", "workspace", "new"],
|
|
3832
4345
|
tool_call_template: {
|
|
3833
4346
|
call_template_type: "panel_event",
|
|
3834
|
-
event_type: `${PANEL_ID$
|
|
4347
|
+
event_type: `${PANEL_ID$2}:create-workspace`
|
|
3835
4348
|
}
|
|
3836
4349
|
};
|
|
3837
4350
|
const workspacesListPanelTools = [
|
|
@@ -3841,21 +4354,119 @@ const workspacesListPanelTools = [
|
|
|
3841
4354
|
createWorkspaceTool
|
|
3842
4355
|
];
|
|
3843
4356
|
const workspacesListPanelToolsMetadata = {
|
|
3844
|
-
id: PANEL_ID$
|
|
4357
|
+
id: PANEL_ID$2,
|
|
3845
4358
|
name: "Workspaces List Panel",
|
|
3846
4359
|
description: "Tools for browsing and managing workspaces",
|
|
3847
4360
|
tools: workspacesListPanelTools
|
|
3848
4361
|
};
|
|
3849
|
-
const PANEL_ID = "
|
|
3850
|
-
const
|
|
3851
|
-
name: "
|
|
3852
|
-
description: "Filter the
|
|
4362
|
+
const PANEL_ID$1 = "industry-theme.github-starred";
|
|
4363
|
+
const filterStarredTool = {
|
|
4364
|
+
name: "filter_starred_repositories",
|
|
4365
|
+
description: "Filter the starred repositories list by repository name, owner, language, or description",
|
|
4366
|
+
inputs: {
|
|
4367
|
+
type: "object",
|
|
4368
|
+
properties: {
|
|
4369
|
+
filter: {
|
|
4370
|
+
type: "string",
|
|
4371
|
+
description: "Search term to filter repositories (matches name, owner, language, or description)"
|
|
4372
|
+
}
|
|
4373
|
+
},
|
|
4374
|
+
required: ["filter"]
|
|
4375
|
+
},
|
|
4376
|
+
outputs: {
|
|
4377
|
+
type: "object",
|
|
4378
|
+
properties: {
|
|
4379
|
+
success: { type: "boolean" },
|
|
4380
|
+
message: { type: "string" }
|
|
4381
|
+
}
|
|
4382
|
+
},
|
|
4383
|
+
tags: ["filter", "search", "starred", "github"],
|
|
4384
|
+
tool_call_template: {
|
|
4385
|
+
call_template_type: "panel_event",
|
|
4386
|
+
event_type: `${PANEL_ID$1}:filter`
|
|
4387
|
+
}
|
|
4388
|
+
};
|
|
4389
|
+
const selectStarredRepositoryTool = {
|
|
4390
|
+
name: "select_starred_repository",
|
|
4391
|
+
description: "Select a starred repository by its name or full name (owner/repo)",
|
|
4392
|
+
inputs: {
|
|
4393
|
+
type: "object",
|
|
4394
|
+
properties: {
|
|
4395
|
+
identifier: {
|
|
4396
|
+
type: "string",
|
|
4397
|
+
description: "Repository identifier - can be the repository name or full name (owner/repo)"
|
|
4398
|
+
}
|
|
4399
|
+
},
|
|
4400
|
+
required: ["identifier"]
|
|
4401
|
+
},
|
|
4402
|
+
outputs: {
|
|
4403
|
+
type: "object",
|
|
4404
|
+
properties: {
|
|
4405
|
+
success: { type: "boolean" },
|
|
4406
|
+
message: { type: "string" },
|
|
4407
|
+
repository: {
|
|
4408
|
+
type: "object",
|
|
4409
|
+
description: "The selected repository data"
|
|
4410
|
+
}
|
|
4411
|
+
}
|
|
4412
|
+
},
|
|
4413
|
+
tags: ["select", "starred", "github", "repository"],
|
|
4414
|
+
tool_call_template: {
|
|
4415
|
+
call_template_type: "panel_event",
|
|
4416
|
+
event_type: `${PANEL_ID$1}:select-repository`
|
|
4417
|
+
}
|
|
4418
|
+
};
|
|
4419
|
+
const cloneStarredRepositoryTool = {
|
|
4420
|
+
name: "clone_starred_repository",
|
|
4421
|
+
description: "Clone a starred repository to the local machine",
|
|
4422
|
+
inputs: {
|
|
4423
|
+
type: "object",
|
|
4424
|
+
properties: {
|
|
4425
|
+
identifier: {
|
|
4426
|
+
type: "string",
|
|
4427
|
+
description: "Repository identifier - can be the repository name or full name (owner/repo)"
|
|
4428
|
+
}
|
|
4429
|
+
},
|
|
4430
|
+
required: ["identifier"]
|
|
4431
|
+
},
|
|
4432
|
+
outputs: {
|
|
4433
|
+
type: "object",
|
|
4434
|
+
properties: {
|
|
4435
|
+
success: { type: "boolean" },
|
|
4436
|
+
message: { type: "string" },
|
|
4437
|
+
localPath: {
|
|
4438
|
+
type: "string",
|
|
4439
|
+
description: "Path where the repository was cloned"
|
|
4440
|
+
}
|
|
4441
|
+
}
|
|
4442
|
+
},
|
|
4443
|
+
tags: ["clone", "starred", "github", "repository"],
|
|
4444
|
+
tool_call_template: {
|
|
4445
|
+
call_template_type: "panel_event",
|
|
4446
|
+
event_type: `${PANEL_ID$1}:clone-repository`
|
|
4447
|
+
}
|
|
4448
|
+
};
|
|
4449
|
+
const githubStarredPanelTools = [
|
|
4450
|
+
filterStarredTool,
|
|
4451
|
+
selectStarredRepositoryTool,
|
|
4452
|
+
cloneStarredRepositoryTool
|
|
4453
|
+
];
|
|
4454
|
+
const githubStarredPanelToolsMetadata = {
|
|
4455
|
+
id: PANEL_ID$1,
|
|
4456
|
+
name: "GitHub Starred Panel",
|
|
4457
|
+
description: "Tools for browsing and managing starred GitHub repositories",
|
|
4458
|
+
tools: githubStarredPanelTools
|
|
4459
|
+
};
|
|
4460
|
+
const PANEL_ID = "industry-theme.github-projects";
|
|
4461
|
+
const filterProjectsTool = {
|
|
4462
|
+
name: "filter_github_projects",
|
|
4463
|
+
description: "Filter the GitHub projects list by repository name, owner, language, or description",
|
|
3853
4464
|
inputs: {
|
|
3854
4465
|
type: "object",
|
|
3855
4466
|
properties: {
|
|
3856
4467
|
filter: {
|
|
3857
4468
|
type: "string",
|
|
3858
|
-
description: "Search term to filter
|
|
4469
|
+
description: "Search term to filter repositories (matches name, owner, language, or description)"
|
|
3859
4470
|
}
|
|
3860
4471
|
},
|
|
3861
4472
|
required: ["filter"]
|
|
@@ -3867,75 +4478,110 @@ const filterDependenciesTool = {
|
|
|
3867
4478
|
message: { type: "string" }
|
|
3868
4479
|
}
|
|
3869
4480
|
},
|
|
3870
|
-
tags: ["filter", "search", "
|
|
4481
|
+
tags: ["filter", "search", "projects", "github"],
|
|
3871
4482
|
tool_call_template: {
|
|
3872
4483
|
call_template_type: "panel_event",
|
|
3873
4484
|
event_type: `${PANEL_ID}:filter`
|
|
3874
4485
|
}
|
|
3875
4486
|
};
|
|
3876
|
-
const
|
|
3877
|
-
name: "
|
|
3878
|
-
description: "
|
|
4487
|
+
const toggleOwnerSectionTool = {
|
|
4488
|
+
name: "toggle_owner_section",
|
|
4489
|
+
description: "Expand or collapse an owner section (user or organization) in the projects panel",
|
|
4490
|
+
inputs: {
|
|
4491
|
+
type: "object",
|
|
4492
|
+
properties: {
|
|
4493
|
+
owner: {
|
|
4494
|
+
type: "string",
|
|
4495
|
+
description: "The owner name (username or organization login) to toggle"
|
|
4496
|
+
}
|
|
4497
|
+
},
|
|
4498
|
+
required: ["owner"]
|
|
4499
|
+
},
|
|
4500
|
+
outputs: {
|
|
4501
|
+
type: "object",
|
|
4502
|
+
properties: {
|
|
4503
|
+
success: { type: "boolean" },
|
|
4504
|
+
message: { type: "string" },
|
|
4505
|
+
collapsed: { type: "boolean" }
|
|
4506
|
+
}
|
|
4507
|
+
},
|
|
4508
|
+
tags: ["toggle", "section", "projects", "github"],
|
|
4509
|
+
tool_call_template: {
|
|
4510
|
+
call_template_type: "panel_event",
|
|
4511
|
+
event_type: `${PANEL_ID}:toggle-section`
|
|
4512
|
+
}
|
|
4513
|
+
};
|
|
4514
|
+
const selectProjectRepositoryTool = {
|
|
4515
|
+
name: "select_project_repository",
|
|
4516
|
+
description: "Select a project repository by its name or full name (owner/repo)",
|
|
3879
4517
|
inputs: {
|
|
3880
4518
|
type: "object",
|
|
3881
4519
|
properties: {
|
|
3882
|
-
|
|
4520
|
+
identifier: {
|
|
3883
4521
|
type: "string",
|
|
3884
|
-
|
|
3885
|
-
description: "The dependency type to filter by"
|
|
4522
|
+
description: "Repository identifier - can be the repository name or full name (owner/repo)"
|
|
3886
4523
|
}
|
|
3887
4524
|
},
|
|
3888
|
-
required: ["
|
|
4525
|
+
required: ["identifier"]
|
|
3889
4526
|
},
|
|
3890
4527
|
outputs: {
|
|
3891
4528
|
type: "object",
|
|
3892
4529
|
properties: {
|
|
3893
4530
|
success: { type: "boolean" },
|
|
3894
|
-
|
|
4531
|
+
message: { type: "string" },
|
|
4532
|
+
repository: {
|
|
4533
|
+
type: "object",
|
|
4534
|
+
description: "The selected repository data"
|
|
4535
|
+
}
|
|
3895
4536
|
}
|
|
3896
4537
|
},
|
|
3897
|
-
tags: ["
|
|
4538
|
+
tags: ["select", "projects", "github", "repository"],
|
|
3898
4539
|
tool_call_template: {
|
|
3899
4540
|
call_template_type: "panel_event",
|
|
3900
|
-
event_type: `${PANEL_ID}:select-
|
|
4541
|
+
event_type: `${PANEL_ID}:select-repository`
|
|
3901
4542
|
}
|
|
3902
4543
|
};
|
|
3903
|
-
const
|
|
3904
|
-
name: "
|
|
3905
|
-
description: "
|
|
4544
|
+
const cloneProjectRepositoryTool = {
|
|
4545
|
+
name: "clone_project_repository",
|
|
4546
|
+
description: "Clone a project repository to the local machine",
|
|
3906
4547
|
inputs: {
|
|
3907
4548
|
type: "object",
|
|
3908
4549
|
properties: {
|
|
3909
|
-
|
|
4550
|
+
identifier: {
|
|
3910
4551
|
type: "string",
|
|
3911
|
-
description: "
|
|
4552
|
+
description: "Repository identifier - can be the repository name or full name (owner/repo)"
|
|
3912
4553
|
}
|
|
3913
4554
|
},
|
|
3914
|
-
required: ["
|
|
4555
|
+
required: ["identifier"]
|
|
3915
4556
|
},
|
|
3916
4557
|
outputs: {
|
|
3917
4558
|
type: "object",
|
|
3918
4559
|
properties: {
|
|
3919
4560
|
success: { type: "boolean" },
|
|
3920
|
-
|
|
4561
|
+
message: { type: "string" },
|
|
4562
|
+
localPath: {
|
|
4563
|
+
type: "string",
|
|
4564
|
+
description: "Path where the repository was cloned"
|
|
4565
|
+
}
|
|
3921
4566
|
}
|
|
3922
4567
|
},
|
|
3923
|
-
tags: ["
|
|
4568
|
+
tags: ["clone", "projects", "github", "repository"],
|
|
3924
4569
|
tool_call_template: {
|
|
3925
4570
|
call_template_type: "panel_event",
|
|
3926
|
-
event_type: `${PANEL_ID}:
|
|
4571
|
+
event_type: `${PANEL_ID}:clone-repository`
|
|
3927
4572
|
}
|
|
3928
4573
|
};
|
|
3929
|
-
const
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
4574
|
+
const githubProjectsPanelTools = [
|
|
4575
|
+
filterProjectsTool,
|
|
4576
|
+
toggleOwnerSectionTool,
|
|
4577
|
+
selectProjectRepositoryTool,
|
|
4578
|
+
cloneProjectRepositoryTool
|
|
3933
4579
|
];
|
|
3934
|
-
const
|
|
4580
|
+
const githubProjectsPanelToolsMetadata = {
|
|
3935
4581
|
id: PANEL_ID,
|
|
3936
|
-
name: "
|
|
3937
|
-
description: "Tools for
|
|
3938
|
-
tools:
|
|
4582
|
+
name: "GitHub Projects Panel",
|
|
4583
|
+
description: "Tools for browsing and managing your GitHub repositories and organization repositories",
|
|
4584
|
+
tools: githubProjectsPanelTools
|
|
3939
4585
|
};
|
|
3940
4586
|
const panels = [
|
|
3941
4587
|
{
|
|
@@ -4004,21 +4650,46 @@ const panels = [
|
|
|
4004
4650
|
},
|
|
4005
4651
|
{
|
|
4006
4652
|
metadata: {
|
|
4007
|
-
id: "
|
|
4008
|
-
name: "
|
|
4009
|
-
icon: "
|
|
4653
|
+
id: "industry-theme.github-starred",
|
|
4654
|
+
name: "Starred",
|
|
4655
|
+
icon: "Star",
|
|
4010
4656
|
version: "0.1.0",
|
|
4011
|
-
author: "
|
|
4012
|
-
description: "
|
|
4013
|
-
slices: ["
|
|
4014
|
-
tools:
|
|
4657
|
+
author: "Industry Theme",
|
|
4658
|
+
description: "Browse your starred GitHub repositories",
|
|
4659
|
+
slices: ["githubStarred", "alexandriaRepositories"],
|
|
4660
|
+
tools: githubStarredPanelTools
|
|
4661
|
+
},
|
|
4662
|
+
component: GitHubStarredPanel,
|
|
4663
|
+
onMount: async (context) => {
|
|
4664
|
+
console.log("GitHub Starred Panel mounted");
|
|
4665
|
+
if (context.hasSlice("githubStarred") && !context.isSliceLoading("githubStarred")) {
|
|
4666
|
+
await context.refresh(void 0, "githubStarred");
|
|
4667
|
+
}
|
|
4668
|
+
},
|
|
4669
|
+
onUnmount: async (_context) => {
|
|
4670
|
+
console.log("GitHub Starred Panel unmounting");
|
|
4671
|
+
}
|
|
4672
|
+
},
|
|
4673
|
+
{
|
|
4674
|
+
metadata: {
|
|
4675
|
+
id: "industry-theme.github-projects",
|
|
4676
|
+
name: "GitHub Projects",
|
|
4677
|
+
icon: "FolderGit2",
|
|
4678
|
+
version: "0.1.0",
|
|
4679
|
+
author: "Industry Theme",
|
|
4680
|
+
description: "Your repositories and organization projects",
|
|
4681
|
+
slices: ["githubProjects", "alexandriaRepositories"],
|
|
4682
|
+
tools: githubProjectsPanelTools
|
|
4015
4683
|
},
|
|
4016
|
-
component:
|
|
4017
|
-
onMount: async (
|
|
4018
|
-
console.log("
|
|
4684
|
+
component: GitHubProjectsPanel,
|
|
4685
|
+
onMount: async (context) => {
|
|
4686
|
+
console.log("GitHub Projects Panel mounted");
|
|
4687
|
+
if (context.hasSlice("githubProjects") && !context.isSliceLoading("githubProjects")) {
|
|
4688
|
+
await context.refresh(void 0, "githubProjects");
|
|
4689
|
+
}
|
|
4019
4690
|
},
|
|
4020
4691
|
onUnmount: async (_context) => {
|
|
4021
|
-
console.log("
|
|
4692
|
+
console.log("GitHub Projects Panel unmounting");
|
|
4022
4693
|
}
|
|
4023
4694
|
}
|
|
4024
4695
|
];
|
|
@@ -4029,7 +4700,11 @@ const onPackageUnload = async () => {
|
|
|
4029
4700
|
console.log("Alexandria Panels package unloading");
|
|
4030
4701
|
};
|
|
4031
4702
|
export {
|
|
4032
|
-
|
|
4703
|
+
GitHubProjectsPanel,
|
|
4704
|
+
GitHubProjectsPanelPreview,
|
|
4705
|
+
GitHubRepositoryCard,
|
|
4706
|
+
GitHubStarredPanel,
|
|
4707
|
+
GitHubStarredPanelPreview,
|
|
4033
4708
|
LocalProjectCard,
|
|
4034
4709
|
LocalProjectsPanel,
|
|
4035
4710
|
LocalProjectsPanelPreview,
|
|
@@ -4038,12 +4713,17 @@ export {
|
|
|
4038
4713
|
WorkspaceRepositoriesPanel,
|
|
4039
4714
|
WorkspacesListPanel,
|
|
4040
4715
|
WorkspacesListPanelPreview,
|
|
4716
|
+
cloneProjectRepositoryTool,
|
|
4717
|
+
cloneStarredRepositoryTool,
|
|
4041
4718
|
createWorkspaceTool,
|
|
4042
|
-
|
|
4043
|
-
|
|
4044
|
-
|
|
4045
|
-
filterProjectsTool,
|
|
4719
|
+
filterProjectsTool as filterGitHubProjectsTool,
|
|
4720
|
+
filterProjectsTool$1 as filterProjectsTool,
|
|
4721
|
+
filterStarredTool,
|
|
4046
4722
|
filterWorkspacesTool,
|
|
4723
|
+
githubProjectsPanelTools,
|
|
4724
|
+
githubProjectsPanelToolsMetadata,
|
|
4725
|
+
githubStarredPanelTools,
|
|
4726
|
+
githubStarredPanelToolsMetadata,
|
|
4047
4727
|
localProjectsPanelTools,
|
|
4048
4728
|
localProjectsPanelToolsMetadata,
|
|
4049
4729
|
onPackageLoad,
|
|
@@ -4053,11 +4733,12 @@ export {
|
|
|
4053
4733
|
openWorkspaceTool,
|
|
4054
4734
|
panels,
|
|
4055
4735
|
refreshWorkspaceTool,
|
|
4056
|
-
|
|
4057
|
-
selectPackageTool,
|
|
4736
|
+
selectProjectRepositoryTool,
|
|
4058
4737
|
selectProjectTool,
|
|
4059
4738
|
selectRepositoryTool,
|
|
4739
|
+
selectStarredRepositoryTool,
|
|
4060
4740
|
selectWorkspaceTool,
|
|
4741
|
+
toggleOwnerSectionTool,
|
|
4061
4742
|
workspaceRepositoriesPanelTools,
|
|
4062
4743
|
workspaceRepositoriesPanelToolsMetadata,
|
|
4063
4744
|
workspacesListPanelTools,
|