claude-code-marketplace 0.2.0 → 0.2.1
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/README.md +2 -0
- package/package.json +1 -1
- package/public/app.js +23 -4
- package/public/index.html +1 -0
- package/public/style.css +34 -64
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
A web-based dashboard for browsing, installing, and managing [Claude Code](https://docs.anthropic.com/en/docs/claude-code) plugins across multiple marketplaces.
|
|
4
4
|
|
|
5
|
+
[](https://www.npmjs.com/package/claude-code-marketplace)
|
|
6
|
+
|
|
5
7
|
<p align="center">
|
|
6
8
|
<img src="assets/main-dark.png" alt="Marketplace — dark theme" width="100%">
|
|
7
9
|
</p>
|
package/package.json
CHANGED
package/public/app.js
CHANGED
|
@@ -101,10 +101,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
101
101
|
});
|
|
102
102
|
|
|
103
103
|
const savedTheme = localStorage.getItem('theme');
|
|
104
|
-
if (savedTheme === '
|
|
105
|
-
document.body.classList.add('light');
|
|
106
|
-
} else if (savedTheme === 'dark') {
|
|
104
|
+
if (savedTheme === 'dark') {
|
|
107
105
|
document.body.classList.add('dark-forced');
|
|
106
|
+
} else {
|
|
107
|
+
document.body.classList.add('light');
|
|
108
108
|
}
|
|
109
109
|
syncHljsTheme();
|
|
110
110
|
|
|
@@ -225,7 +225,9 @@ function renderTree() {
|
|
|
225
225
|
return;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
const allIds = marketplaces.map((m) => `m_${safeId(m.name)}`);
|
|
229
|
+
const allExpanded = allIds.length > 0 && allIds.every((id) => expandedNodes.has(id));
|
|
230
|
+
let html = `<div class="tree-expand-toggle" id="toggleExpandBtn" onclick="toggleExpandAll()">${allExpanded ? 'Collapse All' : 'Expand All'}</div>`;
|
|
229
231
|
|
|
230
232
|
for (const m of marketplaces) {
|
|
231
233
|
const mid = safeId(m.name);
|
|
@@ -810,6 +812,17 @@ function toggleChildren(id) {
|
|
|
810
812
|
}
|
|
811
813
|
}
|
|
812
814
|
|
|
815
|
+
function toggleExpandAll() {
|
|
816
|
+
const allIds = marketplaces.map((m) => `m_${safeId(m.name)}`);
|
|
817
|
+
const collapse = allIds.length > 0 && allIds.every((id) => expandedNodes.has(id));
|
|
818
|
+
for (const id of allIds) {
|
|
819
|
+
if (collapse) expandedNodes.delete(id);
|
|
820
|
+
else expandedNodes.add(id);
|
|
821
|
+
}
|
|
822
|
+
saveExpandedNodes();
|
|
823
|
+
renderTree();
|
|
824
|
+
}
|
|
825
|
+
|
|
813
826
|
function findPlugin(id) {
|
|
814
827
|
for (const m of marketplaces) {
|
|
815
828
|
const p = m.plugins.find((p) => p.fullId === id);
|
|
@@ -998,6 +1011,12 @@ function handleKeydown(e) {
|
|
|
998
1011
|
return;
|
|
999
1012
|
}
|
|
1000
1013
|
|
|
1014
|
+
if (matchKey(e, 'e')) {
|
|
1015
|
+
e.preventDefault();
|
|
1016
|
+
toggleExpandAll();
|
|
1017
|
+
return;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1001
1020
|
if (matchKey(e, 'r')) {
|
|
1002
1021
|
e.preventDefault();
|
|
1003
1022
|
refresh();
|
package/public/index.html
CHANGED
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
<tr><td><kbd>?</kbd></td><td>Show keyboard shortcuts</td></tr>
|
|
111
111
|
<tr><td><kbd>/</kbd></td><td>Focus search</td></tr>
|
|
112
112
|
<tr><td><kbd>S</kbd></td><td>Focus scope filter</td></tr>
|
|
113
|
+
<tr><td><kbd>E</kbd></td><td>Expand / Collapse all</td></tr>
|
|
113
114
|
<tr><td><kbd>R</kbd></td><td>Refresh data</td></tr>
|
|
114
115
|
<tr><td><kbd>Esc</kbd></td><td>Close panel / blur input</td></tr>
|
|
115
116
|
</table>
|
package/public/style.css
CHANGED
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
--scope-user-dim: rgba(196, 149, 106, 0.18);
|
|
32
32
|
--scope-project: #7ab5a0;
|
|
33
33
|
--scope-project-dim: rgba(122, 181, 160, 0.18);
|
|
34
|
-
--scope-local: #
|
|
35
|
-
--scope-local-dim: rgba(
|
|
34
|
+
--scope-local: #8a9bb5;
|
|
35
|
+
--scope-local-dim: rgba(138, 155, 181, 0.18);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
body.light {
|
|
@@ -57,43 +57,12 @@ body.light {
|
|
|
57
57
|
--plan: #5a7a5a;
|
|
58
58
|
--plan-dim: rgba(90, 122, 90, 0.15);
|
|
59
59
|
|
|
60
|
-
--scope-user: #
|
|
61
|
-
--scope-user-dim: rgba(
|
|
60
|
+
--scope-user: #8a7055;
|
|
61
|
+
--scope-user-dim: rgba(138, 112, 85, 0.12);
|
|
62
62
|
--scope-project: #4d8a72;
|
|
63
63
|
--scope-project-dim: rgba(77, 138, 114, 0.15);
|
|
64
|
-
--scope-local: #
|
|
65
|
-
--scope-local-dim: rgba(
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
@media (prefers-color-scheme: light) {
|
|
69
|
-
body:not(.dark-forced) {
|
|
70
|
-
--bg-deep: #e8e6e3;
|
|
71
|
-
--bg-surface: #f4f3f1;
|
|
72
|
-
--bg-elevated: #dddbd8;
|
|
73
|
-
--bg-hover: #d2d0cc;
|
|
74
|
-
--border: #a09b94;
|
|
75
|
-
--text-primary: #0a0a0a;
|
|
76
|
-
--text-secondary: #444444;
|
|
77
|
-
--text-tertiary: #666666;
|
|
78
|
-
--text-muted: #888888;
|
|
79
|
-
--accent-text: #b85a20;
|
|
80
|
-
--accent-dim: rgba(232, 111, 51, 0.18);
|
|
81
|
-
--accent-glow: rgba(232, 111, 51, 0.5);
|
|
82
|
-
--success: #1a8a5a;
|
|
83
|
-
--success-dim: rgba(26, 138, 90, 0.15);
|
|
84
|
-
--warning: #b07d0a;
|
|
85
|
-
--warning-dim: rgba(176, 125, 10, 0.15);
|
|
86
|
-
--error: #c53030;
|
|
87
|
-
--error-dim: rgba(197, 48, 48, 0.15);
|
|
88
|
-
--plan: #5a7a5a;
|
|
89
|
-
--plan-dim: rgba(90, 122, 90, 0.15);
|
|
90
|
-
--scope-user: #9a6d3a;
|
|
91
|
-
--scope-user-dim: rgba(154, 109, 58, 0.15);
|
|
92
|
-
--scope-project: #4d8a72;
|
|
93
|
-
--scope-project-dim: rgba(77, 138, 114, 0.15);
|
|
94
|
-
--scope-local: #b07d0a;
|
|
95
|
-
--scope-local-dim: rgba(176, 125, 10, 0.15);
|
|
96
|
-
}
|
|
64
|
+
--scope-local: #6b7d96;
|
|
65
|
+
--scope-local-dim: rgba(107, 125, 150, 0.12);
|
|
97
66
|
}
|
|
98
67
|
|
|
99
68
|
/* === RESET === */
|
|
@@ -110,7 +79,7 @@ body {
|
|
|
110
79
|
background: var(--bg-deep);
|
|
111
80
|
color: var(--text-primary);
|
|
112
81
|
line-height: 1.5;
|
|
113
|
-
height: 100vh;
|
|
82
|
+
height: calc(100vh / 1.2);
|
|
114
83
|
display: flex;
|
|
115
84
|
zoom: 1.2;
|
|
116
85
|
flex-direction: column;
|
|
@@ -303,6 +272,7 @@ body {
|
|
|
303
272
|
.main-layout {
|
|
304
273
|
display: flex;
|
|
305
274
|
flex: 1;
|
|
275
|
+
min-height: 0;
|
|
306
276
|
overflow: hidden;
|
|
307
277
|
}
|
|
308
278
|
|
|
@@ -316,8 +286,22 @@ body {
|
|
|
316
286
|
min-width: 400px;
|
|
317
287
|
}
|
|
318
288
|
|
|
289
|
+
.tree-expand-toggle {
|
|
290
|
+
padding: 4px 12px;
|
|
291
|
+
font-size: 10px;
|
|
292
|
+
color: var(--text-muted);
|
|
293
|
+
cursor: pointer;
|
|
294
|
+
text-transform: uppercase;
|
|
295
|
+
letter-spacing: 0.5px;
|
|
296
|
+
font-family: var(--mono);
|
|
297
|
+
}
|
|
298
|
+
.tree-expand-toggle:hover {
|
|
299
|
+
color: var(--accent);
|
|
300
|
+
}
|
|
301
|
+
|
|
319
302
|
.tree-container {
|
|
320
303
|
flex: 1;
|
|
304
|
+
min-height: 0;
|
|
321
305
|
overflow-y: auto;
|
|
322
306
|
overflow-x: hidden;
|
|
323
307
|
}
|
|
@@ -459,65 +443,51 @@ body {
|
|
|
459
443
|
border-color: rgba(196, 149, 106, 0.4);
|
|
460
444
|
color: rgba(196, 149, 106, 0.5);
|
|
461
445
|
}
|
|
462
|
-
.scope-toggle.user.active
|
|
463
|
-
background: var(--scope-user-dim);
|
|
464
|
-
color: var(--scope-user);
|
|
465
|
-
border-color: var(--scope-user);
|
|
466
|
-
}
|
|
446
|
+
.scope-toggle.user.active,
|
|
467
447
|
.scope-toggle.user.disabled {
|
|
468
448
|
background: var(--scope-user-dim);
|
|
469
449
|
color: var(--scope-user);
|
|
470
450
|
border-color: var(--scope-user);
|
|
471
|
-
opacity: 0.4;
|
|
472
|
-
text-decoration: line-through;
|
|
473
451
|
}
|
|
474
452
|
|
|
475
453
|
.scope-toggle.project {
|
|
476
454
|
border-color: rgba(122, 181, 160, 0.4);
|
|
477
455
|
color: rgba(122, 181, 160, 0.5);
|
|
478
456
|
}
|
|
479
|
-
.scope-toggle.project.active
|
|
480
|
-
background: var(--scope-project-dim);
|
|
481
|
-
color: var(--scope-project);
|
|
482
|
-
border-color: var(--scope-project);
|
|
483
|
-
}
|
|
457
|
+
.scope-toggle.project.active,
|
|
484
458
|
.scope-toggle.project.disabled {
|
|
485
459
|
background: var(--scope-project-dim);
|
|
486
460
|
color: var(--scope-project);
|
|
487
461
|
border-color: var(--scope-project);
|
|
488
|
-
opacity: 0.4;
|
|
489
|
-
text-decoration: line-through;
|
|
490
462
|
}
|
|
491
463
|
|
|
492
464
|
.scope-toggle.local {
|
|
493
|
-
border-color: rgba(
|
|
494
|
-
color: rgba(
|
|
495
|
-
}
|
|
496
|
-
.scope-toggle.local.active {
|
|
497
|
-
background: var(--scope-local-dim);
|
|
498
|
-
color: var(--scope-local);
|
|
499
|
-
border-color: var(--scope-local);
|
|
465
|
+
border-color: rgba(138, 155, 181, 0.4);
|
|
466
|
+
color: rgba(138, 155, 181, 0.5);
|
|
500
467
|
}
|
|
468
|
+
.scope-toggle.local.active,
|
|
501
469
|
.scope-toggle.local.disabled {
|
|
502
470
|
background: var(--scope-local-dim);
|
|
503
471
|
color: var(--scope-local);
|
|
504
472
|
border-color: var(--scope-local);
|
|
473
|
+
}
|
|
474
|
+
.scope-toggle.disabled {
|
|
505
475
|
opacity: 0.4;
|
|
506
476
|
text-decoration: line-through;
|
|
507
477
|
}
|
|
508
478
|
|
|
509
479
|
/* Light theme: boost inactive scope contrast further */
|
|
510
480
|
body.light .scope-toggle.user {
|
|
511
|
-
border-color: rgba(
|
|
512
|
-
color: rgba(
|
|
481
|
+
border-color: rgba(138, 112, 85, 0.4);
|
|
482
|
+
color: rgba(138, 112, 85, 0.5);
|
|
513
483
|
}
|
|
514
484
|
body.light .scope-toggle.project {
|
|
515
485
|
border-color: rgba(77, 138, 114, 0.5);
|
|
516
486
|
color: rgba(77, 138, 114, 0.6);
|
|
517
487
|
}
|
|
518
488
|
body.light .scope-toggle.local {
|
|
519
|
-
border-color: rgba(
|
|
520
|
-
color: rgba(
|
|
489
|
+
border-color: rgba(107, 125, 150, 0.4);
|
|
490
|
+
color: rgba(107, 125, 150, 0.5);
|
|
521
491
|
}
|
|
522
492
|
|
|
523
493
|
/* === BADGES === */
|
|
@@ -652,7 +622,7 @@ body.light .scope-toggle.local {
|
|
|
652
622
|
.tree-desc-inline {
|
|
653
623
|
font-size: 11px;
|
|
654
624
|
color: var(--text-muted);
|
|
655
|
-
opacity: 0.
|
|
625
|
+
opacity: 0.95;
|
|
656
626
|
white-space: nowrap;
|
|
657
627
|
overflow: hidden;
|
|
658
628
|
text-overflow: ellipsis;
|