From b463a5abf883fec2e650f55e61ae904fd2a5e60a Mon Sep 17 00:00:00 2001 From: Pavitra Golchha Date: Fri, 8 May 2026 02:51:10 +0530 Subject: [PATCH 01/52] docs: add Tailwind v4 migration design spec --- ...2026-05-08-tailwind-v4-migration-design.md | 105 +++++++ index.html | 2 +- package.json | 1 + public/favicon.ico | Bin 26987 -> 0 bytes public/icon.ico | Bin 0 -> 16330 bytes src-tauri/Cargo.lock | 295 ++++++++++++------ src-tauri/Cargo.toml | 2 + src-tauri/icons/128x128.png | Bin 6449 -> 4328 bytes src-tauri/icons/128x128@2x.png | Bin 14248 -> 9094 bytes src-tauri/icons/32x32.png | Bin 1508 -> 1125 bytes src-tauri/icons/64x64.png | Bin 0 -> 2238 bytes src-tauri/icons/Square107x107Logo.png | Bin 5237 -> 3501 bytes src-tauri/icons/Square142x142Logo.png | Bin 7423 -> 4683 bytes src-tauri/icons/Square150x150Logo.png | Bin 7840 -> 4950 bytes src-tauri/icons/Square284x284Logo.png | Bin 15870 -> 10406 bytes src-tauri/icons/Square30x30Logo.png | Bin 1423 -> 1027 bytes src-tauri/icons/Square310x310Logo.png | Bin 17250 -> 11594 bytes src-tauri/icons/Square44x44Logo.png | Bin 2063 -> 1583 bytes src-tauri/icons/Square71x71Logo.png | Bin 3281 -> 2454 bytes src-tauri/icons/Square89x89Logo.png | Bin 3990 -> 2929 bytes src-tauri/icons/StoreLogo.png | Bin 2249 -> 1756 bytes .../android/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../icons/android/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1789 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 5393 bytes .../android/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 1436 bytes .../icons/android/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1698 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 3652 bytes .../android/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 1382 bytes .../android/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3711 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 7439 bytes .../mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 2645 bytes .../android/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5672 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 12158 bytes .../mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 4021 bytes .../android/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7686 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 19069 bytes .../mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 5050 bytes .../android/values/ic_launcher_background.xml | 4 + src-tauri/icons/icon.icns | Bin 170167 -> 140201 bytes src-tauri/icons/icon.ico | Bin 26987 -> 16330 bytes src-tauri/icons/icon.png | Bin 29898 -> 19874 bytes src-tauri/icons/ios/AppIcon-20x20@1x.png | Bin 0 -> 535 bytes src-tauri/icons/ios/AppIcon-20x20@2x-1.png | Bin 0 -> 1057 bytes src-tauri/icons/ios/AppIcon-20x20@2x.png | Bin 0 -> 1057 bytes src-tauri/icons/ios/AppIcon-20x20@3x.png | Bin 0 -> 1486 bytes src-tauri/icons/ios/AppIcon-29x29@1x.png | Bin 0 -> 831 bytes src-tauri/icons/ios/AppIcon-29x29@2x-1.png | Bin 0 -> 1533 bytes src-tauri/icons/ios/AppIcon-29x29@2x.png | Bin 0 -> 1533 bytes src-tauri/icons/ios/AppIcon-29x29@3x.png | Bin 0 -> 2005 bytes src-tauri/icons/ios/AppIcon-40x40@1x.png | Bin 0 -> 1057 bytes src-tauri/icons/ios/AppIcon-40x40@2x-1.png | Bin 0 -> 1976 bytes src-tauri/icons/ios/AppIcon-40x40@2x.png | Bin 0 -> 1976 bytes src-tauri/icons/ios/AppIcon-40x40@3x.png | Bin 0 -> 2672 bytes src-tauri/icons/ios/AppIcon-512@2x.png | Bin 0 -> 51139 bytes src-tauri/icons/ios/AppIcon-60x60@2x.png | Bin 0 -> 2672 bytes src-tauri/icons/ios/AppIcon-60x60@3x.png | Bin 0 -> 4032 bytes src-tauri/icons/ios/AppIcon-76x76@1x.png | Bin 0 -> 1847 bytes src-tauri/icons/ios/AppIcon-76x76@2x.png | Bin 0 -> 3585 bytes src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png | Bin 0 -> 3770 bytes src-tauri/src/adb_commands.rs | 122 ++++++-- src-tauri/src/lib.rs | 71 ++++- src-tauri/src/server.rs | 25 +- src-tauri/src/settings.rs | 42 +++ src-tauri/tauri.conf.json | 4 + src/App.tsx | 54 ++-- src/SettingsPanel.tsx | 79 +++++ src/main.css | 181 +++++++++++ 67 files changed, 843 insertions(+), 149 deletions(-) create mode 100644 docs/superpowers/specs/2026-05-08-tailwind-v4-migration-design.md delete mode 100644 public/favicon.ico create mode 100644 public/icon.ico create mode 100644 src-tauri/icons/64x64.png create mode 100644 src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 src-tauri/icons/android/mipmap-hdpi/ic_launcher.png create mode 100644 src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png create mode 100644 src-tauri/icons/android/mipmap-mdpi/ic_launcher.png create mode 100644 src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png create mode 100644 src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png create mode 100644 src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png create mode 100644 src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png create mode 100644 src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 src-tauri/icons/android/values/ic_launcher_background.xml create mode 100644 src-tauri/icons/ios/AppIcon-20x20@1x.png create mode 100644 src-tauri/icons/ios/AppIcon-20x20@2x-1.png create mode 100644 src-tauri/icons/ios/AppIcon-20x20@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-20x20@3x.png create mode 100644 src-tauri/icons/ios/AppIcon-29x29@1x.png create mode 100644 src-tauri/icons/ios/AppIcon-29x29@2x-1.png create mode 100644 src-tauri/icons/ios/AppIcon-29x29@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-29x29@3x.png create mode 100644 src-tauri/icons/ios/AppIcon-40x40@1x.png create mode 100644 src-tauri/icons/ios/AppIcon-40x40@2x-1.png create mode 100644 src-tauri/icons/ios/AppIcon-40x40@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-40x40@3x.png create mode 100644 src-tauri/icons/ios/AppIcon-512@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-60x60@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-60x60@3x.png create mode 100644 src-tauri/icons/ios/AppIcon-76x76@1x.png create mode 100644 src-tauri/icons/ios/AppIcon-76x76@2x.png create mode 100644 src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png create mode 100644 src-tauri/src/settings.rs create mode 100644 src/SettingsPanel.tsx diff --git a/docs/superpowers/specs/2026-05-08-tailwind-v4-migration-design.md b/docs/superpowers/specs/2026-05-08-tailwind-v4-migration-design.md new file mode 100644 index 0000000..7a5bb03 --- /dev/null +++ b/docs/superpowers/specs/2026-05-08-tailwind-v4-migration-design.md @@ -0,0 +1,105 @@ +# Tailwind v4 Migration Design + +**Date:** 2026-05-08 +**Branch:** feat/adb-path-detection + +## Goal + +Replace the hand-written `src/main.css` (~230 lines) with Tailwind CSS v4 utility classes inlined directly in JSX. Delete all named CSS classes. Keep visual fidelity — same purple theme, same Jost Variable font, same layout. + +## Approach + +**Option A — Full inline utilities.** No `@apply`, no named classes. Tailwind v4 with the official Vite plugin. `main.css` becomes a 2-line stub that imports Tailwind and registers design tokens via `@theme`. + +## Installation + +``` +npm install tailwindcss @tailwindcss/vite +``` + +Update `vite.config.ts` (create if absent) to add the Tailwind Vite plugin: + +```ts +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' + +export default defineConfig({ + plugins: [tailwindcss(), react()], +}) +``` + +## `src/main.css` (final contents) + +```css +@import "tailwindcss"; +@import "@fontsource-variable/jost"; + +@theme { + --font-sans: 'Jost Variable', sans-serif; + --color-primary: #4629a0; + --color-primary-dark: #3a2080; + --color-primary-light: #ede8ff; +} +``` + +The `` in `index.html` is unchanged. + +## `App.tsx` Class Mapping + +| Old | New Tailwind classes | +|-----|---------------------| +| `.app-shell` | `flex flex-col h-screen` | +| `header` element | `flex items-center gap-2 px-4 py-2 border-b border-gray-200` | +| `.app-title` | `text-sm font-semibold text-primary` | +| `.settings-btn` | `bg-transparent border-none cursor-pointer text-xl p-1 rounded text-gray-500 hover:bg-primary-light hover:text-primary data-[active=true]:bg-primary-light data-[active=true]:text-primary` | +| `main` element | `flex-1 flex flex-col gap-4 p-4` | +| `footer` element | `flex justify-between items-center gap-2 px-4 py-2 border-t border-gray-200` | +| `.version-badge` | `text-xs text-gray-400` | +| `style={{flexGrow:1}}` spacers | `className="flex-1"` | +| `.card` | `border border-gray-200 rounded-2xl w-fit` | +| `.card .title` | `border-b border-gray-200 px-4 py-2` | +| `.card .body` | `px-4 py-2` | + +### `LocalServerStatus` component + +The CSS `::before` pseudo-element colored dot is replaced with an explicit `` toggled by `isServerRunning`: + +```tsx +
+ +

{isServerRunning ? 'Local server is running' : 'Local server is not running'}

+
+``` + +## `SettingsPanel.tsx` Class Mapping + +| Old | New Tailwind classes | +|-----|---------------------| +| `.settings-panel` | `flex-1 flex flex-col bg-purple-50 border-t-2 border-primary` | +| `.settings-form` | `flex-1 flex flex-col p-4 gap-3` | +| `.settings-fields` | `flex-1 flex flex-col gap-3` | +| `.settings-field` wrapper | `flex flex-col gap-1` | +| `.settings-field label` | `text-xs text-gray-500` | +| `select`, `input` | `font-sans text-sm px-2 py-1.5 border border-gray-200 rounded-lg outline-none focus:border-primary disabled:bg-gray-100 disabled:text-gray-400 disabled:cursor-not-allowed w-full` | +| `.settings-path-row` | `flex gap-2` (input gets `flex-1`) | +| `.settings-path-row button` | `font-sans text-xs px-3 py-1.5 border border-gray-200 rounded-lg bg-gray-100 cursor-pointer whitespace-nowrap hover:enabled:bg-gray-200 disabled:text-gray-400 disabled:cursor-not-allowed` | +| `.settings-actions` | `flex items-center gap-2 pt-3 border-t border-purple-100` | +| `button[type=submit]` | `font-sans text-sm px-4 py-1.5 bg-primary text-white border-none rounded-lg cursor-pointer hover:bg-primary-dark` | +| `.settings-done-btn` | `font-sans text-sm px-4 py-1.5 bg-transparent border border-purple-100 rounded-lg cursor-pointer text-gray-500 ml-auto hover:bg-primary-light hover:text-primary` | +| `.saved-msg` | `text-xs text-green-600` | +| `.detected-path` | `text-xs text-gray-500 font-mono break-all py-1` | + +## Files Changed + +1. `package.json` — add `tailwindcss`, `@tailwindcss/vite` +2. `vite.config.ts` — create with Tailwind + React plugins +3. `src/main.css` — replace with `@import` + `@theme` block +4. `src/App.tsx` — inline all Tailwind classes, replace spacer divs, rewrite `LocalServerStatus` +5. `src/SettingsPanel.tsx` — inline all Tailwind classes + +## Out of Scope + +- Visual redesign — pixel-fidelity with current design is the goal +- Adding new UI components +- Any Rust / Tauri backend changes diff --git a/index.html b/index.html index ad6c40f..6b96cc0 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + Kodular Starter diff --git a/package.json b/package.json index cb7e536..e31cf5f 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "version": "0.1.0", "type": "module", "scripts": { + "typecheck": "tsc --noEmit", "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index 2afb3e4aa50e3c78b0a417e25fb3aae2f6678a07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26987 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�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