- Added fixed height and padding to "Granted" labels to match button sizes
- Prevents layout jumping when transitioning between button and granted state
- Small buttons use height 22px, large buttons use height 38px
- Centered the footer text in DashboardSettingsView permissions section
- Consistent visual appearance across all permission UI elements
Implemented natural momentum scrolling that feels like native macOS:
- Fixed velocity calculation to use recent movement instead of total
- Added macOS-like deceleration curve with variable friction
- Smooth start with gentle initial deceleration, then gradual slowdown
- Fractional scroll accumulation prevents small movements from being lost
- Removed debug logging for clean production code
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Replaced touch events with pointer events using setPointerCapture() to solve
the issue where touch scrolling would break when DOM is rebuilt during scroll.
- Use pointer events with setPointerCapture() for touch devices only
- Keep wheel events for desktop trackpad/mouse scrolling
- Add touch-action: none CSS to prevent browser scroll interference
- Include 5px movement threshold to avoid interfering with text selection
- Remove momentum scrolling temporarily for simplicity
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added withAnimation wrapper to all state changes in CLIInstaller
- Added small delay before checking installation status to allow view to settle
- Updated permission text to say "AppleScript automation"
- All state transitions now animate smoothly with 0.3s easeInOut
- Fixed the "CLI tool is installed" text popping in without animation
- Removed white bordered containers
- Simplified explanation text to be more concise
- Removed redundant labels and icons
- Made layout more compact
- Cleaner, more minimal design
- Add scroll accumulator to handle small deltaY values from slow trackpad movements
- Accumulate scroll deltas until they reach at least one line height
- Preserve fractional remainder for next scroll event
- Fixes issue where slow two-finger scrolling would not register movement
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix DOM terminal rendering with proper innerHTML generation
- Add comprehensive test content including logs, tables, git history, docker status
- Implement proper ANSI color code handling for wide character compatibility
- Add auto-scroll to bottom functionality
- Replace individual line element management with bulk innerHTML updates
- Fix \r\n line ending handling for proper terminal behavior
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixed quote escaping for AppleScript commands (single quotes now properly escaped)
- Added separate escaping for keystroke commands vs regular AppleScript
- Created AccessibilityPermissionManager to handle accessibility permission requests
- Updated WelcomeView to show both Automation and Accessibility permissions
- Updated DashboardSettingsView permissions section with both permission types
- Added proper system dialog triggering using AXIsProcessTrustedWithOptions
- Added NSAppleEventsUsageDescription to Info.plist
- Improved error handling with specific messages for accessibility permission errors
- Clear UI differentiation between which terminals need which permissions
- Created ResponsiveTerminal Lit component with mobile touch scrolling
- Implements XTerm.js with custom scaling algorithm for different viewport sizes
- Added setViewportSize() method for testing content reflow without regeneration
- Fixed mobile viewport issues using 100dvh for proper height calculation
- Added debounced ResizeObserver to prevent resize loops
- Component uses Tailwind classes and aggressive XTerm CSS constraints
- Test page allows switching viewport dimensions to observe content reflow
- Touch handlers scoped only to terminal content, not affecting external UI
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add CLI command handling to VibeTunnelApp.swift for spawn-terminal command
- Remove all distributed notification code from TerminalLauncher
- Update Rust tty-fwd to invoke VibeTunnel CLI instead of sending notifications
- Add --vibetunnel-path parameter to tty-fwd server
- Update RustServer to pass VibeTunnel executable path to tty-fwd
- Fix terminal launcher improvements from user updates
- Add timeout handling for CLI spawn operations
This approach bypasses macOS 15 distributed notification restrictions and provides more reliable terminal spawning.
- Force add shared scheme to track OS_ACTIVITY_MODE=disable setting
- Update .gitignore to allow shared schemes while ignoring user schemes
- This suppresses network framework log spam for all developers