• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

agentic-dev-library / thumbcode / 21961208242

12 Feb 2026 07:29PM UTC coverage: 51.569% (-13.4%) from 64.947%
21961208242

push

github

web-flow
feat: complete Expo → Capacitor/Vite migration (#130)

## Summary

Full framework migration from Expo/React Native to Vite + Capacitor + React Router:

- **Framework**: Expo SDK 52 → Vite 6 + Capacitor 7
- **Routing**: expo-router → react-router-dom v7
- **Styling**: NativeWind → Tailwind CSS v4
- **Testing**: Jest → Vitest + @testing-library/react
- **Components**: React Native primitives → HTML/JSX (View→div, Text→span, etc.)
- **Build**: Metro bundler → Vite with HMR

### Key changes
- Removed all React Native and Expo dependencies
- Migrated 50+ components from RN to web HTML/JSX
- Rewrote 70 test files (844 tests passing)
- Replaced deploy-gh-pages.yml: Astro docs → Vite static site deployment
- Added android-release.yml: per-architecture debug APKs on GitHub releases
- Added ABI splits to build.gradle (armeabi-v7a, arm64-v8a, x86_64, universal)
- Fixed all biome lint, TypeScript, and E2E test issues
- Deleted dead `app/` directory (old Expo Router screens)

### CI Status
All critical checks passing: Lint & Type Check, Run Tests (844 passing), Build Web, Build Web + Capacitor Sync, E2E Tests (Web), Security Scan, CodeQL, Validate PR.

1329 of 2944 branches covered (45.14%)

Branch coverage included in aggregate %.

138 of 866 new or added lines in 82 files covered. (15.94%)

120 existing lines in 23 files now uncovered.

2188 of 3876 relevant lines covered (56.45%)

9.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/components/project/ProjectFileExplorer.tsx
1
/**
2
 * ProjectFileExplorer
3
 *
4
 * Displays a file tree for the project's local working directory.
5
 */
6

7
import { FileTree, type FileNode as FileTreeNode } from '@/components/code';
8
import { Badge } from '@/components/display';
9
import { HStack, VStack } from '@/components/layout';
10
import { Text } from '@/components/ui';
11
import { organicBorderRadius } from '@/lib/organic-styles';
12

13
interface ProjectFileExplorerProps {
14
  fileNodes: FileTreeNode[];
15
  isLoading: boolean;
16
  selectedFile: string | null;
17
  onSelectFile: (path: string) => void;
18
}
19

20
export function ProjectFileExplorer({
21
  fileNodes,
22
  isLoading,
23
  selectedFile,
24
  onSelectFile,
25
}: Readonly<ProjectFileExplorerProps>) {
UNCOV
26
  return (
×
27
    <VStack spacing="md">
28
      <div className="bg-surface p-4" style={organicBorderRadius.card}>
29
        <HStack justify="between" align="center" className="mb-3">
30
          <Text weight="semibold" className="text-white">
31
            Files
32
          </Text>
33
          {selectedFile && <Badge variant="secondary">Selected</Badge>}
×
34
        </HStack>
35

36
        {isLoading ? (
×
37
          <Text className="text-neutral-500">Loading files…</Text>
38
        ) : (
39
          <FileTree
40
            data={fileNodes}
41
            selectedPath={selectedFile || undefined}
×
42
            onSelectFile={(path) => onSelectFile(path)}
×
43
            showStatus={false}
44
          />
45
        )}
46
      </div>
47
    </VStack>
48
  );
49
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc