refactor: organize frontend components into features/ directories

Moved 43 component files into 9 feature domains:
- features/git/ — commit-dialog, commit-panel, file-editor, git-mount-editor,
  git-toolbar, merge-dialog
- features/project/ — repositories-settings-tab, repository-create-dialog
- features/terminal/ — special-keys-panel, special-keys-strip,
  terminal-session-tabs, terminal
- features/workspace/ — workspace-card, workspace-create-form,
  workspace-header, workspace-instance-chips
- features/session/ — create-session-form, session-card, session-list
- features/tool/ — instance-list, manifest-editor, start-tool-fab,
  start-tool-modal, tool-starter, tools-bottom-sheet
- features/notification/ — event-toast-bridge, notification-center,
  notification-item
- features/settings/ — settings-tab-layout
- features/mobile/ — mobile-action-sheet, mobile-detail-view, mobile-edit-view,
  mobile-fab, mobile-list-view, mobile-nav, mobile-page-header,
  mobile-terminal-header, mobile-terminal-wrapper

Updated all imports across pages and components.
Root components/ now only contains generic UI pieces:
app-shell, code-editor, data-states, icon, protected-route, syntax-highlighter.

Quality gates: verified no remaining old imports.
This commit is contained in:
2026-06-04 12:37:24 +02:00
parent 7224afafd1
commit 1021d61be3
54 changed files with 31 additions and 31 deletions
@@ -3,7 +3,7 @@ import { useSearchParams } from "react-router-dom";
import { apiClient } from "../api/client";
import { useAuth } from "../state/auth";
import { CodeEditor } from "../components/code-editor";
import { CommitDialog } from "../components/commit-dialog";
import { CommitDialog } from "../components/features/git/commit-dialog";
import { Icon } from "../components/icon";
import { SyntaxHighlighter } from "../components/syntax-highlighter";
import { detectLanguage } from "../utils/language";
+5 -5
View File
@@ -3,10 +3,10 @@ import { ErrorState, LoadingState } from "../components/data-states";
import { Icon } from "../components/icon";
import { useMobileViewport } from "../hooks/use-mobile-viewport";
import { extractErrorMessage } from "../utils/errors";
import { MobileListView } from "../components/mobile-list-view";
import { MobileDetailView } from "../components/mobile-detail-view";
import { MobileEditView } from "../components/mobile-edit-view";
import { MobileFAB } from "../components/mobile-fab";
import { MobileListView } from "../components/features/mobile/mobile-list-view";
import { MobileDetailView } from "../components/features/mobile/mobile-detail-view";
import { MobileEditView } from "../components/features/mobile/mobile-edit-view";
import { MobileFAB } from "../components/features/mobile/mobile-fab";
import {
createConfigProfile,
deleteConfigProfile,
@@ -21,7 +21,7 @@ import {
import { listProjects } from "../api/projects";
import type { ProjectWithRepos } from "../types";
import { listToolTypes, type ToolType } from "../api/tool-types";
import { GitMountEditor } from "../components/git-mount-editor";
import { GitMountEditor } from "../components/features/git/git-mount-editor";
type Status = "loading" | "ready" | "error";
type MobileView = "list" | "detail" | "edit";
+1 -1
View File
@@ -9,7 +9,7 @@ import {
type InstanceHealth,
} from "../api/sessions";
import { ErrorState, LoadingState } from "../components/data-states";
import { SessionList } from "../components/session-list";
import { SessionList } from "../components/features/session/session-list";
import { useInstanceActions } from "../hooks/use-instance-actions";
type HomeStatus = "loading" | "ready" | "error";
+1 -1
View File
@@ -8,7 +8,7 @@ import {
import type { GitRepository } from "../api/git-repositories";
import { EmptyState, ErrorState, LoadingState } from "../components/data-states";
import { Icon } from "../components/icon";
import { RepositoryCreateDialog } from "../components/repository-create-dialog";
import { RepositoryCreateDialog } from "../components/features/project/repository-create-dialog";
import { useAsyncData } from "../hooks/use-async-data";
export const GitRepositoriesPage = () => {
+2 -2
View File
@@ -1,7 +1,7 @@
import React, { useState, useEffect } from "react";
import { useParams, Link, useNavigate, Routes, Route } from "react-router-dom";
import { SettingsTabLayout } from "../components/settings-tab-layout";
import { RepositoriesSettingsTab } from "../components/repositories-settings-tab";
import { SettingsTabLayout } from "../components/features/settings/settings-tab-layout";
import { RepositoriesSettingsTab } from "../components/features/project/repositories-settings-tab";
import { apiClient } from "../api/client";
import { Project } from "../types";
+1 -1
View File
@@ -17,7 +17,7 @@ import {
LoadingState,
} from "../components/data-states";
import { Icon } from "../components/icon";
import { WorkspaceCreateForm } from "../components/workspace-create-form";
import { WorkspaceCreateForm } from "../components/features/workspace/workspace-create-form";
import { useAsyncData } from "../hooks/use-async-data";
import type { ProjectWithRepos, WorkspaceSummary } from "../types";
+5 -5
View File
@@ -12,11 +12,11 @@ import {
type GitRepository,
type GitStatus,
} from "../api/git-repositories";
import { CommitPanel } from "../components/commit-panel";
import { FileEditor } from "../components/file-editor";
import { GitToolbar } from "../components/git-toolbar";
import { InstanceList } from "../components/instance-list";
import { WorkspaceHeader } from "../components/workspace-header";
import { CommitPanel } from "../components/features/git/commit-panel";
import { FileEditor } from "../components/features/git/file-editor";
import { GitToolbar } from "../components/features/git/git-toolbar";
import { InstanceList } from "../components/features/tool/instance-list";
import { WorkspaceHeader } from "../components/features/workspace/workspace-header";
import { listToolTypes } from "../api/tool-types";
import type { ToolType } from "../api/tool-types";
+2 -2
View File
@@ -7,8 +7,8 @@ import {
} from "../api/sessions";
import { getUserConfig } from "../api/settings";
import { ErrorState, LoadingState } from "../components/data-states";
import { SessionList } from "../components/session-list";
import { SessionCard } from "../components/session-card";
import { SessionList } from "../components/features/session/session-list";
import { SessionCard } from "../components/features/session/session-card";
import { useInstanceActions } from "../hooks/use-instance-actions";
import type { InstanceHealth } from "../api/sessions";
+4 -4
View File
@@ -1,13 +1,13 @@
import React, { useCallback, useEffect, useRef, useState } from "react";
import { useNavigate, useParams } from "react-router-dom";
import { TerminalComponent, type TerminalRef } from "../components/terminal";
import { TerminalComponent, type TerminalRef } from "../components/features/terminal/terminal";
import {
TerminalSessionTabs,
type TerminalSessionInfo,
} from "../components/terminal-session-tabs";
} from "../components/features/terminal/terminal-session-tabs";
import { Icon } from "../components/icon";
import { SpecialKeysStrip } from "../components/special-keys-strip";
import { SpecialKeysPanel } from "../components/special-keys-panel";
import { SpecialKeysStrip } from "../components/features/terminal/special-keys-strip";
import { SpecialKeysPanel } from "../components/features/terminal/special-keys-panel";
import { useMobileViewport } from "../hooks/use-mobile-viewport";
import { useAutoHide } from "../hooks/use-auto-hide";
import { useVirtualKeyboard } from "../hooks/use-virtual-keyboard";
+5 -5
View File
@@ -3,10 +3,10 @@ import { ErrorState, LoadingState } from "../components/data-states";
import { Icon } from "../components/icon";
import { useMobileViewport } from "../hooks/use-mobile-viewport";
import { extractErrorMessage } from "../utils/errors";
import { MobileListView } from "../components/mobile-list-view";
import { MobileDetailView } from "../components/mobile-detail-view";
import { MobileEditView } from "../components/mobile-edit-view";
import { MobileFAB } from "../components/mobile-fab";
import { MobileListView } from "../components/features/mobile/mobile-list-view";
import { MobileDetailView } from "../components/features/mobile/mobile-detail-view";
import { MobileEditView } from "../components/features/mobile/mobile-edit-view";
import { MobileFAB } from "../components/features/mobile/mobile-fab";
import {
createToolType,
deleteToolType,
@@ -24,7 +24,7 @@ import {
updateToolDefinition,
type ToolDefinitionManifest,
} from "../api/tool_definitions";
import { ManifestEditor } from "../components/manifest-editor";
import { ManifestEditor } from "../components/features/tool/manifest-editor";
type Status = "loading" | "ready" | "error";
type MobileView = "list" | "detail" | "edit";
+1 -1
View File
@@ -8,7 +8,7 @@ import { useWorkspaceFiles } from "../hooks/use-workspace-files";
import { useWorkspaceGit } from "../hooks/use-workspace-git";
import { useWorkspaceInstances } from "../hooks/use-workspace-instances";
import { useMobileViewport } from "../hooks/use-mobile-viewport";
import { ToolStarter } from "../components/tool-starter";
import { ToolStarter } from "../components/features/tool/tool-starter";
import type { FileEntry } from "../api/workspace-files";
import type { Workspace } from "../types/workspace";
+3 -3
View File
@@ -4,9 +4,9 @@ import { useState } from "react";
import { Icon } from "../components/icon";
import { useWorkspaces } from "../hooks/use-workspaces";
import { useWorkspaceActions } from "../hooks/use-workspace-actions";
import { WorkspaceCard } from "../components/workspace-card";
import { WorkspaceCreateForm } from "../components/workspace-create-form";
import { ToolStarter } from "../components/tool-starter";
import { WorkspaceCard } from "../components/features/workspace/workspace-card";
import { WorkspaceCreateForm } from "../components/features/workspace/workspace-create-form";
import { ToolStarter } from "../components/features/tool/tool-starter";
import type { Workspace } from "../types/workspace";
export function WorkspacesPage() {