diff --git a/CLAUDE.md b/CLAUDE.md index 41407a44..afc67f1a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,7 +35,7 @@ When user says "COM": 1. Increment version in BOTH `package.json` AND `CLAUDE.md` (verify they match with `grep version package.json && grep Version CLAUDE.md`) 2. Run: `git add -A && git commit -m "chore: bump version to X.XXXX" && git push && npm run build && systemctl --user restart claudeman-web` -**Version**: 0.1525 (must match `package.json` for npm publish) +**Version**: 0.1526 (must match `package.json` for npm publish) ## Project Overview diff --git a/package.json b/package.json index a97b33fa..6758a2ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claudeman", - "version": "0.1525", + "version": "0.1526", "description": "The missing control plane for Claude Code - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/public/app.js b/src/web/public/app.js index 0e52a645..58c2d12b 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -14575,6 +14575,17 @@ class ClaudemanApp { modal.querySelectorAll('.modal-tabs .modal-tab-btn').forEach(btn => { btn.onclick = () => this.switchCaseModalTab(btn.dataset.tab); }); + // Scroll-into-view on focus for mobile keyboard visibility + modal.querySelectorAll('input[type="text"]').forEach(input => { + if (!input._mobileScrollWired) { + input._mobileScrollWired = true; + input.addEventListener('focus', () => { + if (window.innerWidth <= 430) { + setTimeout(() => input.scrollIntoView({ behavior: 'smooth', block: 'center' }), 300); + } + }); + } + }); modal.classList.add('active'); document.getElementById('newCaseName').focus(); } @@ -14606,10 +14617,19 @@ class ClaudemanApp { } async submitCaseModal() { - if (this.caseModalTab === 'case-create') { - await this.createCase(); - } else { - await this.linkCase(); + const btn = document.getElementById('caseModalSubmit'); + const originalText = btn.textContent; + btn.classList.add('loading'); + btn.textContent = this.caseModalTab === 'case-create' ? 'Creating...' : 'Linking...'; + try { + if (this.caseModalTab === 'case-create') { + await this.createCase(); + } else { + await this.linkCase(); + } + } finally { + btn.classList.remove('loading'); + btn.textContent = originalText; } } @@ -14771,8 +14791,12 @@ class ClaudemanApp { showCreateCaseFromMobile() { // Close mobile picker first this.closeMobileCasePicker(); - // Open the create case modal + // Open the create case modal with slide-up animation this.showCreateCaseModal(); + const modal = document.getElementById('createCaseModal'); + modal.classList.add('from-mobile'); + // Remove animation class after it plays + setTimeout(() => modal.classList.remove('from-mobile'), 300); } renderScreenSessions() { diff --git a/src/web/public/index.html b/src/web/public/index.html index 7750c560..51551f6c 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -1110,25 +1110,25 @@