diff --git a/.planning/phases/10-ux-interaction/10-12-SUMMARY.md b/.planning/phases/10-ux-interaction/10-12-SUMMARY.md new file mode 100644 index 0000000..b1e29f0 --- /dev/null +++ b/.planning/phases/10-ux-interaction/10-12-SUMMARY.md @@ -0,0 +1,114 @@ +--- +phase: 10 +plan: 12 +subsystem: frontend/ui +tags: [refactor, icons, svg, appicon, code-05] +dependency_graph: + requires: [10-01] + provides: [CODE-05-complete] + affects: [all-vue-components] +tech_stack: + patterns: [AppIcon component, named icon registry, stroke icon system] +key_files: + modified: + - frontend/src/components/ui/SearchableModelSelect.vue + - frontend/src/components/settings/SettingsCloudTab.vue + - frontend/src/components/settings/SettingsAccountTab.vue + - frontend/src/components/cloud/CloudProviderTreeItem.vue + - frontend/src/components/cloud/CloudFolderTreeItem.vue + - frontend/src/components/cloud/CloudCredentialModal.vue + - frontend/src/components/auth/TotpEnrollment.vue + - frontend/src/views/CloudStorageView.vue + - frontend/src/views/SettingsView.vue + - frontend/src/views/AccountView.vue + - frontend/src/views/DocumentView.vue + - frontend/src/views/SharedView.vue + - frontend/src/views/admin/AdminAiView.vue + - frontend/src/views/admin/AdminUsersView.vue +decisions: + - Clipboard icons in TotpEnrollment and BackupCodesDisplay kept as inline SVG — path uses Heroicons v2 stroke-width=1.5 variant not in AppIcon registry + - Loading spinners in CloudCredentialModal, DocumentPreviewModal, UploadProgress kept — they use circle+fill elements, not stroke icons + - BackupCodesDisplay.vue kept as-is — no matching AppIcon for its clipboard path +metrics: + duration: ~25 minutes + completed: 2026-06-16 + tasks: 2 + files: 14 +--- + +# Phase 10 Plan 12: SVG-to-AppIcon Migration (Tasks 3+4) Summary + +**One-liner:** Completed CODE-05 SVG migration — all 14 remaining cloud/settings/view files migrated from inline stroke SVGs to ``, leaving zero migratable inline SVGs in the codebase. + +## What Was Built + +CODE-05 completion: replaced every remaining inline `` stroke icon block across cloud components, settings components, auth components, and all view files with the `` component introduced in plan 10-01. + +### Task 3 — Cloud / Settings / UI files (commit bbb9db7) + +| File | Icons migrated | +|------|----------------| +| `SearchableModelSelect.vue` | `chevronDown`, `pencilEdit` | +| `SettingsCloudTab.vue` | `cloud`, `warning` (x2) | +| `CloudProviderTreeItem.vue` | `cloud` | +| `CloudFolderTreeItem.vue` | `folder`, `fileDoc` | + +### Task 4 — View files + additional out-of-scope files (commit 20835bc) + +| File | Icons migrated | +|------|----------------| +| `CloudStorageView.vue` | `cloud` | +| `SettingsView.vue` | `checkCircle`, `exclamationCircle`, `x` (x2) | +| `AccountView.vue` | `checkMark` | +| `AdminAiView.vue` | `chevronDown` | +| `AdminUsersView.vue` | `copy`, `check`, `refresh` | +| `SettingsAccountTab.vue` | `checkMark` | +| `TotpEnrollment.vue` | `checkMark` | +| `CloudCredentialModal.vue` | `x`, `chevronRight` | +| `DocumentView.vue` | `warning` | +| `SharedView.vue` | `document` | + +## Final SVG Count + +``` +grep -rE '` + `fill="currentColor"` path) — not a stroke icon | +| `DocumentPreviewModal.vue` | 31 | Loading spinner — pre-existing exception from plan 10-12 task 2 | +| `UploadProgress.vue` | 69 | Loading spinner variant — pre-existing exception from plan 10-12 task 2 | + +## Commits + +| Hash | Description | +|------|-------------| +| cb41753 | Task 1: sidebar + layout + TreeItem SVGs (prior agent) | +| 939ea79 | Task 2: folder/document/upload/sharing SVGs (prior agent) | +| bbb9db7 | Task 3: cloud/settings/UI SVGs | +| 20835bc | Task 4: view-level SVGs + additional files | + +## Deviations from Plan + +**Auto-added out-of-scope files (Rule 2 — completeness):** +- `SettingsAccountTab.vue`, `TotpEnrollment.vue`, `BackupCodesDisplay.vue`, `CloudCredentialModal.vue`, `DocumentView.vue`, `SharedView.vue` — these had inline SVGs confirmed by grep but were not in the original plan scope. Migrated all that had matching AppIcon names; documented the rest as exceptions. + +No bugs found. No architectural changes. Plan executed as specified. + +## Threat Flags + +None — this plan makes no changes to API surface, auth paths, network endpoints, or DB schema. Pure UI refactor. + +## Self-Check: PASSED + +- All 14 modified files exist on disk +- Commits bbb9db7 and 20835bc verified in git log +- Final migratable inline SVG count: 0 diff --git a/frontend/src/components/admin/AdminSidebar.vue b/frontend/src/components/admin/AdminSidebar.vue index e147f8e..1a8c040 100644 --- a/frontend/src/components/admin/AdminSidebar.vue +++ b/frontend/src/components/admin/AdminSidebar.vue @@ -11,10 +11,7 @@ class="nav-link" :class="{ 'nav-link-active': $route.path === '/admin' }" > - - - + Overview @@ -23,10 +20,7 @@ class="nav-link" :class="{ 'nav-link-active': $route.path.startsWith('/admin/users') }" > - - - + Users @@ -35,10 +29,7 @@ class="nav-link" :class="{ 'nav-link-active': $route.path.startsWith('/admin/quotas') }" > - - - + Quotas @@ -47,10 +38,7 @@ class="nav-link" :class="{ 'nav-link-active': $route.path.startsWith('/admin/ai') }" > - - - + AI Config @@ -59,10 +47,7 @@ class="nav-link" :class="{ 'nav-link-active': $route.path.startsWith('/admin/audit') }" > - - - + Audit Log @@ -78,10 +63,7 @@ aria-label="Sign out" class="text-gray-400 hover:text-gray-600 transition-colors" > - - - + @@ -91,6 +73,7 @@

{{ error }}

- - - + Authenticator connected.

@@ -111,6 +109,7 @@ import { ref } from 'vue' import QRCode from 'qrcode' import * as api from '../../api/client.js' import { useToastStore } from '../../stores/toast.js' +import AppIcon from '../ui/AppIcon.vue' import AppSpinner from '../ui/AppSpinner.vue' import BackupCodesDisplay from './BackupCodesDisplay.vue' diff --git a/frontend/src/components/cloud/CloudCredentialModal.vue b/frontend/src/components/cloud/CloudCredentialModal.vue index 5c7e3e3..c230a89 100644 --- a/frontend/src/components/cloud/CloudCredentialModal.vue +++ b/frontend/src/components/cloud/CloudCredentialModal.vue @@ -16,9 +16,7 @@ aria-label="Close modal" class="text-gray-400 hover:text-gray-600 transition-colors" > - - - + @@ -73,13 +71,11 @@ @click="showAdvanced = !showAdvanced" class="text-xs text-indigo-600 hover:text-indigo-800 font-medium transition-colors flex items-center gap-1" > - - - + /> Advanced: custom WebDAV endpoint
@@ -188,6 +184,7 @@