fix: disable native touch panning on mobile terminal and archive specs

- Change mobile terminal CSS to use touch-action: none and
  overscroll-behavior: none so the custom touch handler owns swipes
- Archive completed/partial OpenSpec specs to
  openspec/changes/archive/2026-06-14-completed-specs-archive/
- Regenerate project maps

Quality gates: npm run typecheck, npm run lint (apps/web)
This commit is contained in:
Developer
2026-06-14 18:07:01 +00:00
parent 896674195c
commit c8db6ce933
580 changed files with 4678 additions and 4333 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
dir: apps
## role
Contains the main application entry points and top-level configurations for different deployable targets.
Container directory for all deployable application entry points in the project.
## parent
index: ./.pi-map.index.md
map: ./.pi-map.md
+2 -2
View File
@@ -4,10 +4,10 @@ dir: apps
index: apps/.pi-map.index.md
## role
Contains the main deployable applications or entry points for the project.
Container directory for all deployable application entry points in the project.
## files
## arch
Typically follows a multi-app workspace pattern where each subdirectory is an independent executable or service sharing common libraries.
Monorepo-style top-level organization following workspace/package boundary pattern with likely separate deployable units per subdirectory.
## tags
-
## symbols
+1 -1
View File
@@ -2,7 +2,7 @@
dir: apps/web
## role
Frontend web application providing a browser-based UI with code editing, terminal, and routing capabilities for the "headquarter" project.
Frontend web application providing the browser-based user interface for the project, built with React/Vite and served via nginx.
## parent
index: apps/.pi-map.index.md
map: apps/.pi-map.md
+2 -2
View File
@@ -4,7 +4,7 @@ dir: apps/web
index: apps/web/.pi-map.index.md
## role
Frontend web application providing a browser-based UI with code editing, terminal, and routing capabilities for the "headquarter" project.
Frontend web application providing the browser-based user interface for the project, built with React/Vite and served via nginx.
## files
- .env.example | Template file defining example environment variables for frontend API and application URL configuration
- .eslintrc.cjs | Configures ESLint for a TypeScript browser project with modern ECMAScript module support | dep: @typescript-eslint/parser, @typescript-eslint/eslint-plugin, eslint
@@ -16,7 +16,7 @@ Frontend web application providing a browser-based UI with code editing, termina
- tsconfig.json | TypeScript configuration file for a React project using Vite with modern ES2020 target and bundler module resolution | dep: typescript, react, vite
- vite.config.ts | Configures Vite build tool for a React project with custom dev server port and Vitest test settings. | dep: vite, @vitejs/plugin-react
## arch
Modern React SPA built with Vite and TypeScript, containerized via multi-stage Docker with nginx serving, featuring client-side routing, optimized static asset delivery, and development tooling (ESLint, Vitest).
Modern SPA architecture using Vite for bundling, TypeScript for type safety, React for UI components, with containerized nginx deployment and environment-driven configuration.
## tags
react, eslint, vite, typescript, dom, application, nginx, web
## symbols
+1 -1
View File
@@ -10,7 +10,7 @@ Provides the core web application entry point, routing infrastructure, and share
- router.tsx | Defines the React Router configuration for a web application with protected routes, nested layouts, and redirects. | exp: AppRouter | dep: react-router-dom, ./components/app-shell, ./components/protected-route, ./pages/DashboardPage, ./pages/PlaceholderPage, ./pages/ProfilePage, ./pages/ProjectsPage, ./pages/GitRepositoriesPage, ./pages/GitHistoryPage, ./pages/ProjectSettingsPage, ./pages/SettingsPage, ./pages/TerminalPage, ./pages/ToolWorkshopPage, ./pages/SshKeysPage, ./pages/ConfigProfilesPage, ./pages/SessionsPage, ./pages/WorkspacesPage, ./pages/WorkspaceDetailPage
- types.ts | Defines TypeScript type definitions for user sessions, projects, repositories, and workspaces in an application. | exp: SessionUser, SessionPayload, Project, WorkspaceSummary, RepositorySummary, ProjectWithRepos
## arch
Modular React SPA with provider-based dependency injection, declarative routing with nested layouts and route guards, and centralized TypeScript type definitions.
Implements a modular React SPA architecture using React Router v6 with nested route layouts, protected route guards via authentication/session providers, and centralized TypeScript domain modeling for cross-cutting concerns.
## tags
pages, styles, css, router, react, session, dom, project
## symbols
+1 -1
View File
@@ -2,7 +2,7 @@
dir: apps/web/src/styles
## role
Provides the complete visual design system and styling foundation for the web application, including themes, tokens, utilities, and component-specific styles.
Provides the complete visual design system and styling foundation for the web application, encompassing global styles, theme tokens, utility classes, and component-specific styles.
## parent
index: apps/web/src/.pi-map.index.md
map: apps/web/src/.pi-map.md
+4 -4
View File
@@ -4,16 +4,16 @@ dir: apps/web/src/styles
index: apps/web/src/styles/.pi-map.index.md
## role
Provides the complete visual design system and styling foundation for the web application, including themes, tokens, utilities, and component-specific styles.
Provides the complete visual design system and styling foundation for the web application, encompassing global styles, theme tokens, utility classes, and component-specific styles.
## files
- global.css | Defines global CSS styles for a web application shell layout, navigation, cards, forms, dialogs, settings pages, and responsive design patterns. | dep: CSS custom properties (CSS variables: --border, --panel, --brand, --muted, --ink, --bg, --danger, --success, --warning, --font-size-xs, --font-size-sm, --space-2, --space-3, --space-4, --space-5)
- syntax-highlight.css | Stylesheet for a syntax highlighting component with toolbar, line numbers, code display, and Prism.js theme integration | dep: Prism.js
- tokens.css | Defines a comprehensive CSS design token system with light/dark themes, spacing scales, breakpoints, and fluid typography for a web application.
- utilities.css | Provides responsive CSS utility classes and component styles for a web application including layout, terminal, session navigation, and mobile-specific adaptations. | dep: CSS custom properties (--space-*, --border, --bg, --muted, --brand, --danger, --danger-light, --success, --text, --text-xs, --text-sm), xterm.js (terminal library)
- utilities.css | Provides a comprehensive CSS utility system for responsive layouts, terminal interfaces, and UI components with mobile-first design patterns. | dep: CSS custom properties (--space-*, --border, --bg, --muted, --success, --text, --brand, --danger, --danger-light), xterm.js (terminal library)
## arch
Token-driven CSS architecture using CSS custom properties for light/dark theming, utility-first responsive patterns, and modular separation of concerns across global base styles, design tokens, syntax highlighting, and adaptive utilities.
Token-driven CSS architecture using CSS custom properties for themeable design system with mobile-first responsive utilities, separate component-specific stylesheets, and light/dark mode support.
## tags
space, global, css, web, application, danger, syntax, text
space, global, css, design, danger, syntax, defines, web
## symbols
-
## workflows
+27 -10
View File
@@ -564,6 +564,14 @@ a.nav-item,
width: 100% !important;
}
/* On mobile the custom touch handler scrolls the buffer; disable native
panning/overscroll so swipe gestures are not forwarded to a scrollbar. */
.terminal-wrapper.mobile .terminal-container,
.terminal-wrapper.mobile .terminal-container .xterm-viewport {
touch-action: none;
overscroll-behavior: none;
}
/* xterm.js manages its own positioning and sizing */
.terminal-container canvas {
@@ -1771,7 +1779,7 @@ a.nav-item,
/* Disable zoom on mobile terminal */
@media (max-width: 767px) {
.mobile-terminal-wrapper {
touch-action: pan-y;
touch-action: none;
-webkit-text-size-adjust: none;
}
@@ -1781,9 +1789,14 @@ a.nav-item,
}
.terminal-container {
touch-action: pan-y;
touch-action: none;
padding: 0;
}
.terminal-wrapper.mobile .terminal-container .xterm-viewport {
touch-action: none;
overscroll-behavior: none;
}
}
/* Animations */
@@ -2280,8 +2293,9 @@ a.nav-item,
}
.mobile-edit-code {
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
Consolas, monospace;
font-family:
"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
monospace;
font-size: 0.8125rem;
}
@@ -2440,8 +2454,9 @@ a.nav-item,
}
.mobile-form-code {
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
Consolas, monospace;
font-family:
"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
monospace;
font-size: 0.8125rem;
}
@@ -2694,8 +2709,9 @@ a.nav-item,
border-radius: 8px;
overflow-x: auto;
font-size: 0.8125rem;
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
Consolas, monospace;
font-family:
"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
monospace;
margin: var(--space-2) 0 0 0;
}
@@ -2715,8 +2731,9 @@ a.nav-item,
}
.mobile-preview-mapping {
font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco,
Consolas, monospace;
font-family:
"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
monospace;
font-size: 0.8125rem;
color: var(--muted);
margin-top: var(--space-1);