claude-code-hub 0.21.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +5 -5
  2. package/public/app.js +18 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-code-hub",
3
- "version": "0.21.0",
3
+ "version": "0.22.0",
4
4
  "description": "Unified hub for Claude Code tools — Marketplace + Kanban in one PWA",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -35,10 +35,10 @@
35
35
  },
36
36
  "homepage": "https://github.com/NikiforovAll/claude-code-hub#readme",
37
37
  "dependencies": {
38
- "claude-code-cost": "^0.12.0",
39
- "claude-code-kanban": "^4.15.0",
40
- "claude-code-marketplace": "^0.12.0",
41
- "claude-code-memory-explorer": "^0.9.0",
38
+ "claude-code-cost": "^0.12.1",
39
+ "claude-code-kanban": "^4.17.0",
40
+ "claude-code-marketplace": "^0.12.1",
41
+ "claude-code-memory-explorer": "^0.9.1",
42
42
  "express": "^4.21.0",
43
43
  "open": "^10.1.0"
44
44
  },
package/public/app.js CHANGED
@@ -227,8 +227,15 @@ function listenKeys() {
227
227
  return;
228
228
  }
229
229
  // While the palette is open the input owns the keyboard — don't let tab shortcuts fire
230
- // mid-path (Alt+digit especially, since Windows paths contain digits).
231
- if (palette.open) return;
230
+ // mid-path (Alt+digit especially, since Windows paths contain digits). Escape still closes:
231
+ // bound here as well as on the input so it works wherever focus landed in the hub document.
232
+ if (palette.open) {
233
+ if (e.key === 'Escape') {
234
+ e.preventDefault();
235
+ closePalette();
236
+ }
237
+ return;
238
+ }
232
239
  if (e.altKey && !e.ctrlKey && !e.shiftKey && !e.metaKey) {
233
240
  const digit = parseInt(e.key, 10);
234
241
  if (digit >= 1 && digit <= 9) {
@@ -417,6 +424,10 @@ function openPalette() {
417
424
  palette.sel = 0;
418
425
  input.value = '';
419
426
  document.getElementById('palette').hidden = false;
427
+ // Ctrl+Alt+P usually arrives forwarded from a focused iframe. Without inert the sub-app can keep
428
+ // or take focus back, and then Escape is handled inside it — the palette stays open and only the
429
+ // sub-app's own focus visibly changes.
430
+ setIframesInert(true);
420
431
  renderPalette();
421
432
  input.focus();
422
433
  // Stale-while-revalidate: the cached list renders instantly, recency refreshes when this lands.
@@ -430,9 +441,14 @@ function openPalette() {
430
441
  function closePalette() {
431
442
  palette.open = false;
432
443
  document.getElementById('palette').hidden = true;
444
+ setIframesInert(false);
433
445
  iframes[activeApp]?.focus();
434
446
  }
435
447
 
448
+ function setIframesInert(on) {
449
+ for (const iframe of Object.values(iframes)) iframe.inert = on;
450
+ }
451
+
436
452
  function movePaletteSel(delta) {
437
453
  const n = palette.rows.length;
438
454
  if (n === 0) return;