From af965c22c87de323cd9a963f17c7e813f6b4433b Mon Sep 17 00:00:00 2001 From: Yash Date: Tue, 31 Mar 2026 21:04:53 +0530 Subject: [PATCH 01/14] feat: add settings components for theme mode, color variant, developer mode, update checks, version info, and preview --- src/components/settings/CheckForUpdates.tsx | 115 ++++++++ src/components/settings/ColorVariant.tsx | 58 ++++ src/components/settings/DeveloperMode.tsx | 43 +++ src/components/settings/Header.tsx | 14 + src/components/settings/Preview.tsx | 27 ++ src/components/settings/ThemeMode.tsx | 62 ++++ src/components/settings/Version.tsx | 25 ++ src/components/settings/index.tsx | 7 + src/pages/Settings.tsx | 312 +------------------- 9 files changed, 360 insertions(+), 303 deletions(-) create mode 100644 src/components/settings/CheckForUpdates.tsx create mode 100644 src/components/settings/ColorVariant.tsx create mode 100644 src/components/settings/DeveloperMode.tsx create mode 100644 src/components/settings/Header.tsx create mode 100644 src/components/settings/Preview.tsx create mode 100644 src/components/settings/ThemeMode.tsx create mode 100644 src/components/settings/Version.tsx create mode 100644 src/components/settings/index.tsx diff --git a/src/components/settings/CheckForUpdates.tsx b/src/components/settings/CheckForUpdates.tsx new file mode 100644 index 0000000..44d67a5 --- /dev/null +++ b/src/components/settings/CheckForUpdates.tsx @@ -0,0 +1,115 @@ +import { Button } from '@/components/ui/button' +import { useUpdater } from '@/hooks/useUpdater'; +import { AlertCircle, CheckCircle2, Download, Info, Loader2, RefreshCw } from 'lucide-react' + +export default function CheckForUpdates() { + const { status, updateInfo, downloadProgress, error: updateError, checkForUpdates, downloadAndInstall, relaunchApp } = useUpdater(); + return ( +
+
+
+ +
+

Updates

+

+ Check for new versions of RelWave +

+
+
+ + {status === "idle" || status === "up-to-date" || status === "error" || status === "dev-mode" ? ( + + ) : status === "checking" ? ( + + ) : null} +
+ + {/* Status messages */} + {status === "up-to-date" && ( +
+
+ +

You're running the latest version.

+
+
+ )} + + {status === "dev-mode" && ( +
+
+ +

Update checks are disabled in development mode.

+
+
+ )} + + {status === "error" && updateError && ( +
+
+ +

{updateError}

+
+
+ )} + + {status === "available" && updateInfo && ( +
+
+
+
+

v{updateInfo.version} available

+ {updateInfo.body && ( +

{updateInfo.body}

+ )} +
+ +
+
+
+ )} + + {status === "downloading" && ( +
+
+ Downloading update... + {downloadProgress}% +
+
+
+
+
+ )} + + {status === "ready" && ( +
+
+
+ +

Update downloaded. Restart to apply.

+
+ +
+
+ )} +
+ ) +} diff --git a/src/components/settings/ColorVariant.tsx b/src/components/settings/ColorVariant.tsx new file mode 100644 index 0000000..c0a3141 --- /dev/null +++ b/src/components/settings/ColorVariant.tsx @@ -0,0 +1,58 @@ +import { useThemeVariant } from '@/hooks/useThemeVariant'; +import { themeVariants, ThemeVariant } from "@/lib/themes"; +import { Check, Palette } from 'lucide-react'; + +export default function ColorVariant() { + + const { variant, setVariant } = useThemeVariant(); + return ( +
+
+ +
+

Accent Color

+

+ Select your preferred color theme +

+
+
+ +
+ {Object.entries(themeVariants).map(([key, config]) => { + const isActive = variant === key; + + return ( + + ); + })} +
+
+ ) +} \ No newline at end of file diff --git a/src/components/settings/DeveloperMode.tsx b/src/components/settings/DeveloperMode.tsx new file mode 100644 index 0000000..f4bf38a --- /dev/null +++ b/src/components/settings/DeveloperMode.tsx @@ -0,0 +1,43 @@ +import { Bug, Code2 } from 'lucide-react' +import React from 'react' +import { Switch } from '../ui/switch' +import { useDeveloperMode } from '@/hooks/useDeveloperMode'; + +export default function DeveloperMode() { + const { isEnabled: devModeEnabled, setIsEnabled: setDevModeEnabled } = useDeveloperMode(); + return ( +
+
+
+ +
+

Developer Mode

+

+ Enable developer tools and context menu options +

+
+
+ +
+ + {devModeEnabled && ( +
+
+ +
+

Developer features enabled:

+
    +
  • Right-click context menu with Inspect, Reload, Back/Forward
  • +
  • Access to browser developer tools (F12)
  • +
  • Keyboard shortcuts for navigation
  • +
+
+
+
+ )} +
+ ) +} diff --git a/src/components/settings/Header.tsx b/src/components/settings/Header.tsx new file mode 100644 index 0000000..aedb874 --- /dev/null +++ b/src/components/settings/Header.tsx @@ -0,0 +1,14 @@ +export default function Header() { + return ( +
+
+
+

Settings

+

+ Customize your app appearance +

+
+
+
+ ) +} diff --git a/src/components/settings/Preview.tsx b/src/components/settings/Preview.tsx new file mode 100644 index 0000000..a8e6472 --- /dev/null +++ b/src/components/settings/Preview.tsx @@ -0,0 +1,27 @@ +import { Button } from '../ui/button' + +export default function Preview() { + return ( +
+

Preview

+
+
+ + + +
+
+

+ This is a preview of how text and UI elements will look with your selected theme. +

+
+
+
+ ) +} diff --git a/src/components/settings/ThemeMode.tsx b/src/components/settings/ThemeMode.tsx new file mode 100644 index 0000000..1cf197a --- /dev/null +++ b/src/components/settings/ThemeMode.tsx @@ -0,0 +1,62 @@ +import { Theme } from '@tauri-apps/api/window'; +import { Check, LucideProps, Monitor, Moon, Sun } from 'lucide-react'; +import { useTheme } from "@/components/common/ThemeProvider"; + +export default function ThemeMode() { + const { theme, setTheme } = useTheme(); + const themeOptions = [ + { value: "light", label: "Light", icon: Sun }, + { value: "dark", label: "Dark", icon: Moon }, + { value: "system", label: "System", icon: Monitor }, + ]; + + return ( +
+
+ +
+

Theme Mode

+

+ Choose between light and dark mode +

+
+
+ +
+ {themeOptions.map((option) => { + const Icon = option.icon; + const isActive = theme === option.value; + + return ( + + ); + })} +
+
+ ) +} + diff --git a/src/components/settings/Version.tsx b/src/components/settings/Version.tsx new file mode 100644 index 0000000..be7cedd --- /dev/null +++ b/src/components/settings/Version.tsx @@ -0,0 +1,25 @@ +import { getVersion } from '@tauri-apps/api/app'; +import { Info } from 'lucide-react' +import { useEffect, useState } from 'react' + +export default function Version() { + + const [appVersion, setAppVersion] = useState(""); + + useEffect(() => { + getVersion().then(setAppVersion).catch(() => setAppVersion("unknown")); + }, []); + return ( +
+
+ +
+

About

+

+ RelWave v{appVersion || "—"} +

+
+
+
+ ) +} diff --git a/src/components/settings/index.tsx b/src/components/settings/index.tsx new file mode 100644 index 0000000..70ae1b9 --- /dev/null +++ b/src/components/settings/index.tsx @@ -0,0 +1,7 @@ +export { default as Header } from './Header' +export { default as ThemeMode } from './ThemeMode' +export { default as ColorVariant } from './ColorVariant' +export {default as DeveloperMode} from './DeveloperMode' +export {default as CheckForUpdates} from './CheckForUpdates' +export {default as Version} from './Version' +export {default as Preview} from './Preview' \ No newline at end of file diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index ddef297..6a49043 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -1,329 +1,35 @@ -import { useState, useEffect } from "react"; -import { getVersion } from "@tauri-apps/api/app"; -import { useTheme } from "@/components/common/ThemeProvider"; -import { useThemeVariant } from "@/hooks/useThemeVariant"; -import { useDeveloperMode } from "@/hooks/useDeveloperMode"; -import { useUpdater } from "@/hooks/useUpdater"; -import { themeVariants, ThemeVariant } from "@/lib/themes"; -import { Button } from "@/components/ui/button"; -import { Switch } from "@/components/ui/switch"; -import { Palette, Moon, Sun, Monitor, Check, Code2, Bug, RefreshCw, Download, Loader2, CheckCircle2, AlertCircle, Info } from "lucide-react"; import VerticalIconBar from "@/components/common/VerticalIconBar"; +import { CheckForUpdates, ColorVariant, DeveloperMode, Header, Preview, ThemeMode, Version } from "@/components/settings"; const Settings = () => { - const { theme, setTheme } = useTheme(); - const { variant, setVariant } = useThemeVariant(); - const { isEnabled: devModeEnabled, setIsEnabled: setDevModeEnabled } = useDeveloperMode(); - const { status, updateInfo, downloadProgress, error: updateError, checkForUpdates, downloadAndInstall, relaunchApp } = useUpdater(); - - const [appVersion, setAppVersion] = useState(""); - - useEffect(() => { - getVersion().then(setAppVersion).catch(() => setAppVersion("unknown")); - }, []); - - const themeOptions = [ - { value: "light", label: "Light", icon: Sun }, - { value: "dark", label: "Dark", icon: Moon }, - { value: "system", label: "System", icon: Monitor }, - ] as const; - return (
-
+
{/* Header */} -
-
-
-

Settings

-

- Customize your app appearance -

-
-
-
+
{/* Content */}
{/* Theme Mode Section */} -
-
- -
-

Theme Mode

-

- Choose between light and dark mode -

-
-
- -
- {themeOptions.map((option) => { - const Icon = option.icon; - const isActive = theme === option.value; - - return ( - - ); - })} -
-
+ {/* Color Variant Section */} -
-
- -
-

Accent Color

-

- Select your preferred color theme -

-
-
- -
- {Object.entries(themeVariants).map(([key, config]) => { - const isActive = variant === key; - - return ( - - ); - })} -
-
+ {/* Developer Mode Section */} -
-
-
- -
-

Developer Mode

-

- Enable developer tools and context menu options -

-
-
- -
- - {devModeEnabled && ( -
-
- -
-

Developer features enabled:

-
    -
  • Right-click context menu with Inspect, Reload, Back/Forward
  • -
  • Access to browser developer tools (F12)
  • -
  • Keyboard shortcuts for navigation
  • -
-
-
-
- )} -
+ {/* Updates Section */} -
-
-
- -
-

Updates

-

- Check for new versions of RelWave -

-
-
- - {status === "idle" || status === "up-to-date" || status === "error" || status === "dev-mode" ? ( - - ) : status === "checking" ? ( - - ) : null} -
- - {/* Status messages */} - {status === "up-to-date" && ( -
-
- -

You're running the latest version.

-
-
- )} - - {status === "dev-mode" && ( -
-
- -

Update checks are disabled in development mode.

-
-
- )} - - {status === "error" && updateError && ( -
-
- -

{updateError}

-
-
- )} - - {status === "available" && updateInfo && ( -
-
-
-
-

v{updateInfo.version} available

- {updateInfo.body && ( -

{updateInfo.body}

- )} -
- -
-
-
- )} - - {status === "downloading" && ( -
-
- Downloading update... - {downloadProgress}% -
-
-
-
-
- )} - - {status === "ready" && ( -
-
-
- -

Update downloaded. Restart to apply.

-
- -
-
- )} -
+ {/* About Section */} -
-
- -
-

About

-

- RelWave v{appVersion || "—"} -

-
-
-
+ {/* Preview Section */} -
-

Preview

-
-
- - - -
-
-

- This is a preview of how text and UI elements will look with your selected theme. -

-
-
-
+
From aea3f6ddb0718a0c06a5c81a74879fda48e09a26 Mon Sep 17 00:00:00 2001 From: Yash Date: Tue, 31 Mar 2026 21:23:19 +0530 Subject: [PATCH 02/14] feat: randomize welcome message in WelcomeView component --- README.md | 21 ++++++++++++++++----- src/components/home/WelcomeView.tsx | 6 ++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e2d4728..e53db9d 100644 --- a/README.md +++ b/README.md @@ -103,17 +103,19 @@ For a comprehensive breakdown of all features, see the [Feature Reference](FEATU - pnpm - Rust toolchain (for Tauri) +RelWave uses separate package manifests for the app and the bridge, so install dependencies in both locations. + #### Development ```bash git clone https://github.com/Relwave/relwave-app.git cd relwave-app -# Install frontend dependencies +# Install app dependencies pnpm install # Install bridge dependencies -cd bridge && pnpm install && cd .. +pnpm --dir bridge install # Start development mode pnpm tauri dev @@ -121,10 +123,17 @@ pnpm tauri dev #### Production Build +Install both dependency sets first: + +```bash +pnpm install +pnpm --dir bridge install +``` + **Windows:** ```bash -pnpm run package-bridge +pnpm run bridge:package pnpm tauri build ``` @@ -133,10 +142,12 @@ pnpm tauri build ```bash sudo apt install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf -pnpm --dir bridge run build:pkg:linux +pnpm run bridge:package pnpm tauri build ``` +The root `bridge:package` script delegates to the platform-specific bridge packaging command in `bridge/package.json` and prepares the bundled SQLite native binary in `src-tauri/resources/`. + ## Documentation ### Architecture @@ -206,7 +217,7 @@ relwave-app/ └── src-tauri/ # Tauri backend (Rust) ├── src/ # Application entry point ├── capabilities/ # Permission definitions - └── resources/ # Bundled bridge executable + └── resources/ # Bundled bridge executable and SQLite native binding ``` ### Configuration diff --git a/src/components/home/WelcomeView.tsx b/src/components/home/WelcomeView.tsx index 8dac1ad..516f98f 100644 --- a/src/components/home/WelcomeView.tsx +++ b/src/components/home/WelcomeView.tsx @@ -13,7 +13,6 @@ import { cn } from "@/lib/utils"; import { WelcomeViewProps } from "./types"; import { formatRelativeTime } from "./utils"; import { DiscoveredDatabasesCard } from "./DiscoveredDatabasesCard"; -import { DiscoveredDatabase } from "@/types/database"; const DB_COLORS: Record = { postgresql: { bg: "bg-blue-500/10", text: "text-blue-500" }, @@ -40,6 +39,9 @@ export function WelcomeView({ onDatabaseHover, onDiscoveredDatabaseAdd, }: WelcomeViewProps) { + + const texts = ['Welcome to Relwave', 'Good to see you again!', 'Ready to dive into your data?', 'Your database companion awaits!', 'Let’s explore your data together!']; + const randomText = texts[Math.floor(Math.random() * texts.length)]; return (
{/* Welcome Header */} @@ -49,7 +51,7 @@ export function WelcomeView({
-

Welcome to RelWave

+

{randomText}

Select a connection or add a new one

From 28d2f791bd25c69f8aff98c990ce725e07da200c Mon Sep 17 00:00:00 2001 From: Yash Date: Tue, 31 Mar 2026 23:45:08 +0530 Subject: [PATCH 03/14] refactor: Complete Refactor of file structure --- src/assets/react.svg | 1 - .../{feedback => }/BridgeFailed.tsx | 0 .../{feedback => }/BridgeLoader.tsx | 0 .../{common => }/CommandPalette.tsx | 4 +- src/components/{common => }/ConfirmDialog.tsx | 0 src/components/{common => }/DataTable.tsx | 4 +- .../{common => }/DeveloperContextMenu.tsx | 2 +- .../{common => }/FloatingActionButton.tsx | 0 src/components/{common => }/ModeToggle.tsx | 2 +- .../{common => }/RemoteConfigDialog.tsx | 6 +-- src/components/{common => }/SlideOutPanel.tsx | 0 src/components/{common => }/ThemeProvider.tsx | 0 src/components/{common => }/TitleBar.tsx | 0 .../{common => }/UpdateNotification.tsx | 4 +- .../{common => }/VerticalIconBar.tsx | 2 +- src/components/common/index.ts | 3 -- src/components/feedback/index.ts | 2 - .../chart/components}/ChartConfigPanel.tsx | 2 +- .../chart/components}/ChartRenderer.tsx | 10 ++-- .../chart/components}/ChartVisualization.tsx | 6 +-- .../chart/components}/index.ts | 0 .../components}/ContentViewerPanel.tsx | 4 +- .../database/components}/EditRowDialog.tsx | 4 +- .../components}/ExpandableBottomPanel.tsx | 0 .../database/components}/InsertDataDialog.tsx | 6 +-- .../database/components}/MigrationsPanel.tsx | 2 +- .../components}/TablesExplorerPanel.tsx | 5 +- .../database/components}/index.ts | 0 .../database}/hooks/useCachedData.ts | 0 .../database}/hooks/useDatabaseDetails.ts | 4 +- .../database}/hooks/useDiscoveredDatabases.ts | 2 +- .../database}/hooks/useExport.ts | 2 +- .../database/types.ts} | 0 .../components}/AnnotationLayer.tsx | 0 .../components}/ERDiagramContent.tsx | 13 +++--- .../er-diagram/components}/ERDiagramPanel.tsx | 4 +- .../er-diagram/components}/TableNode.tsx | 8 ++-- .../er-diagram/components}/index.ts | 0 .../er-diagram}/hooks/useERDiagramData.ts | 8 ++-- .../er-diagram/types.ts} | 0 .../git/components}/GitStatusBar.tsx | 10 ++-- .../git/components}/GitStatusPanel.tsx | 6 +-- .../git}/hooks/useGitAdvanced.ts | 4 +- src/{ => features/git}/hooks/useGitQueries.ts | 2 +- src/{types/git.ts => features/git/types.ts} | 0 .../home/components}/AddConnectionDialog.tsx | 4 +- .../home/components}/ConnectionList.tsx | 2 +- .../home/components}/DatabaseDetail.tsx | 42 ++++++++--------- .../home/components}/DeleteDialog.tsx | 2 +- .../components}/DiscoveredDatabasesCard.tsx | 4 +- .../home/components}/WelcomeView.tsx | 4 +- .../home/components}/index.ts | 6 +-- src/{components => features}/home/types.ts | 2 +- src/{components => features}/home/utils.ts | 0 .../components}/CreateProjectDialog.tsx | 2 +- .../components}/DeleteProjectDialog.tsx | 0 .../components}/ImportProjectDialog.tsx | 2 +- .../project/components}/ProjectDetailView.tsx | 2 +- .../project/components}/ProjectList.tsx | 2 +- .../project/components}/index.ts | 0 .../project}/hooks/useDbQueries.ts | 2 +- .../project}/hooks/useProjectQueries.ts | 2 +- .../project}/hooks/useProjectSync.ts | 6 +-- .../project.ts => features/project/types.ts} | 0 .../components}/BuilderHeader.tsx | 2 +- .../components}/BuilderSidebar.tsx | 3 +- .../components}/BuilderStatusBar.tsx | 0 .../components}/DiagramCanvas.tsx | 6 +-- .../components}/QueryBuilderPanel.tsx | 10 ++-- .../components}/SQLResultsPanel.tsx | 4 +- .../query-builder/components}/index.ts | 2 +- .../query-builder}/hooks/useQueryHistory.ts | 0 .../query-builder/types.ts | 0 .../components}/AddIndexesDialog.tsx | 4 +- .../components}/AlterTableDialog.tsx | 4 +- .../components}/CreateTableDialog.tsx | 2 +- .../components}/DropTableDialog.tsx | 2 +- .../components}/ForeignKeyRow.tsx | 2 +- .../schema-explorer/components}/IndexRow.tsx | 2 +- .../components}/MetaDataPanel.tsx | 2 +- .../components}/SchemaExplorerHeader.tsx | 0 .../components}/SchemaExplorerPanel.tsx | 13 +++--- .../components}/TableDesignerForm.tsx | 6 +-- .../components}/TreeViewPanel.tsx | 6 +-- .../schema-explorer/components}/index.ts | 2 +- .../components}/metadata/ColumnDetails.tsx | 2 +- .../components}/metadata/DatabaseDetails.tsx | 2 +- .../components}/metadata/OtherDetails.tsx | 2 +- .../components}/metadata/SchemaDetails.tsx | 2 +- .../components}/metadata/TableDetails.tsx | 4 +- .../components}/metadata/index.ts | 0 .../hooks/useSchemaExplorerData.ts | 6 +-- .../schema-explorer/types.ts | 2 +- .../settings/components}/CheckForUpdates.tsx | 2 +- .../settings/components}/ColorVariant.tsx | 2 +- .../settings/components}/DeveloperMode.tsx | 4 +- .../settings/components}/Header.tsx | 0 .../settings/components}/Preview.tsx | 2 +- .../settings/components}/ThemeMode.tsx | 2 +- .../settings/components}/Version.tsx | 0 .../settings/components}/index.tsx | 0 .../settings}/hooks/useDeveloperMode.ts | 0 .../settings}/hooks/useThemeVariant.ts | 0 .../settings}/hooks/useUpdater.ts | 0 .../workspace/components}/QueryTabBar.tsx | 2 +- .../workspace/components}/ResultsPanel.tsx | 4 +- .../components}/SQLWorkspacePanel.tsx | 12 ++--- .../workspace/components}/SqlEditor.tsx | 2 +- .../workspace/components}/StatusBar.tsx | 0 .../workspace/components}/WorkspaceHeader.tsx | 0 .../components}/WorkspaceSidebar.tsx | 2 +- .../workspace/components}/index.ts | 2 +- .../workspace/types.ts | 0 src/lib/dataExport.ts | 2 +- src/lib/schemaConverters.ts | 4 +- src/lib/schemaTransformer.ts | 26 +++++------ src/main.tsx | 8 ++-- src/pages/DatabaseDetails.tsx | 46 +++++++++---------- src/pages/Index.tsx | 18 ++++---- src/pages/Projects.tsx | 14 +++--- src/pages/Settings.tsx | 4 +- src/services/bridgeApi.ts | 39 ++++++++++++++-- 122 files changed, 263 insertions(+), 242 deletions(-) delete mode 100644 src/assets/react.svg rename src/components/{feedback => }/BridgeFailed.tsx (100%) rename src/components/{feedback => }/BridgeLoader.tsx (100%) rename src/components/{common => }/CommandPalette.tsx (96%) rename src/components/{common => }/ConfirmDialog.tsx (100%) rename src/components/{common => }/DataTable.tsx (99%) rename src/components/{common => }/DeveloperContextMenu.tsx (98%) rename src/components/{common => }/FloatingActionButton.tsx (100%) rename src/components/{common => }/ModeToggle.tsx (95%) rename src/components/{common => }/RemoteConfigDialog.tsx (98%) rename src/components/{common => }/SlideOutPanel.tsx (100%) rename src/components/{common => }/ThemeProvider.tsx (100%) rename src/components/{common => }/TitleBar.tsx (100%) rename src/components/{common => }/UpdateNotification.tsx (97%) rename src/components/{common => }/VerticalIconBar.tsx (98%) delete mode 100644 src/components/common/index.ts delete mode 100644 src/components/feedback/index.ts rename src/{components/chart => features/chart/components}/ChartConfigPanel.tsx (98%) rename src/{components/chart => features/chart/components}/ChartRenderer.tsx (94%) rename src/{components/chart => features/chart/components}/ChartVisualization.tsx (99%) rename src/{components/chart => features/chart/components}/index.ts (100%) rename src/{components/database => features/database/components}/ContentViewerPanel.tsx (98%) rename src/{components/database => features/database/components}/EditRowDialog.tsx (98%) rename src/{components/database => features/database/components}/ExpandableBottomPanel.tsx (100%) rename src/{components/database => features/database/components}/InsertDataDialog.tsx (98%) rename src/{components/database => features/database/components}/MigrationsPanel.tsx (99%) rename src/{components/database => features/database/components}/TablesExplorerPanel.tsx (98%) rename src/{components/database => features/database/components}/index.ts (100%) rename src/{ => features/database}/hooks/useCachedData.ts (100%) rename src/{ => features/database}/hooks/useDatabaseDetails.ts (99%) rename src/{ => features/database}/hooks/useDiscoveredDatabases.ts (95%) rename src/{ => features/database}/hooks/useExport.ts (99%) rename src/{types/database.ts => features/database/types.ts} (100%) rename src/{components/er-diagram => features/er-diagram/components}/AnnotationLayer.tsx (100%) rename src/{components/er-diagram => features/er-diagram/components}/ERDiagramContent.tsx (98%) rename src/{components/er-diagram => features/er-diagram/components}/ERDiagramPanel.tsx (78%) rename src/{components/er-diagram => features/er-diagram/components}/TableNode.tsx (98%) rename src/{components/er-diagram => features/er-diagram/components}/index.ts (100%) rename src/{ => features/er-diagram}/hooks/useERDiagramData.ts (96%) rename src/{types/schema.ts => features/er-diagram/types.ts} (100%) rename src/{components/common => features/git/components}/GitStatusBar.tsx (98%) rename src/{components/git => features/git/components}/GitStatusPanel.tsx (99%) rename src/{ => features/git}/hooks/useGitAdvanced.ts (97%) rename src/{ => features/git}/hooks/useGitQueries.ts (99%) rename src/{types/git.ts => features/git/types.ts} (100%) rename src/{components/home => features/home/components}/AddConnectionDialog.tsx (99%) rename src/{components/home => features/home/components}/ConnectionList.tsx (99%) rename src/{components/home => features/home/components}/DatabaseDetail.tsx (87%) rename src/{components/home => features/home/components}/DeleteDialog.tsx (95%) rename src/{components/home => features/home/components}/DiscoveredDatabasesCard.tsx (97%) rename src/{components/home => features/home/components}/WelcomeView.tsx (98%) rename src/{components/home => features/home/components}/index.ts (71%) rename src/{components => features}/home/types.ts (96%) rename src/{components => features}/home/utils.ts (100%) rename src/{components/project => features/project/components}/CreateProjectDialog.tsx (98%) rename src/{components/project => features/project/components}/DeleteProjectDialog.tsx (100%) rename src/{components/project => features/project/components}/ImportProjectDialog.tsx (99%) rename src/{components/project => features/project/components}/ProjectDetailView.tsx (99%) rename src/{components/project => features/project/components}/ProjectList.tsx (99%) rename src/{components/project => features/project/components}/index.ts (100%) rename src/{ => features/project}/hooks/useDbQueries.ts (99%) rename src/{ => features/project}/hooks/useProjectQueries.ts (99%) rename src/{ => features/project}/hooks/useProjectSync.ts (93%) rename src/{types/project.ts => features/project/types.ts} (100%) rename src/{components/query-builder => features/query-builder/components}/BuilderHeader.tsx (98%) rename src/{components/query-builder => features/query-builder/components}/BuilderSidebar.tsx (99%) rename src/{components/query-builder => features/query-builder/components}/BuilderStatusBar.tsx (100%) rename src/{components/query-builder => features/query-builder/components}/DiagramCanvas.tsx (96%) rename src/{components/query-builder => features/query-builder/components}/QueryBuilderPanel.tsx (97%) rename src/{components/query-builder => features/query-builder/components}/SQLResultsPanel.tsx (96%) rename src/{components/query-builder => features/query-builder/components}/index.ts (96%) rename src/{ => features/query-builder}/hooks/useQueryHistory.ts (100%) rename src/{components => features}/query-builder/types.ts (100%) rename src/{components/schema-explorer => features/schema-explorer/components}/AddIndexesDialog.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/AlterTableDialog.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/CreateTableDialog.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/DropTableDialog.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/ForeignKeyRow.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/IndexRow.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/MetaDataPanel.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/SchemaExplorerHeader.tsx (100%) rename src/{components/schema-explorer => features/schema-explorer/components}/SchemaExplorerPanel.tsx (96%) rename src/{components/schema-explorer => features/schema-explorer/components}/TableDesignerForm.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/TreeViewPanel.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/index.ts (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/ColumnDetails.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/DatabaseDetails.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/OtherDetails.tsx (98%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/SchemaDetails.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/TableDetails.tsx (99%) rename src/{components/schema-explorer => features/schema-explorer/components}/metadata/index.ts (100%) rename src/{ => features/schema-explorer}/hooks/useSchemaExplorerData.ts (96%) rename src/{components => features}/schema-explorer/types.ts (97%) rename src/{components/settings => features/settings/components}/CheckForUpdates.tsx (98%) rename src/{components/settings => features/settings/components}/ColorVariant.tsx (97%) rename src/{components/settings => features/settings/components}/DeveloperMode.tsx (93%) rename src/{components/settings => features/settings/components}/Header.tsx (100%) rename src/{components/settings => features/settings/components}/Preview.tsx (95%) rename src/{components/settings => features/settings/components}/ThemeMode.tsx (97%) rename src/{components/settings => features/settings/components}/Version.tsx (100%) rename src/{components/settings => features/settings/components}/index.tsx (100%) rename src/{ => features/settings}/hooks/useDeveloperMode.ts (100%) rename src/{ => features/settings}/hooks/useThemeVariant.ts (100%) rename src/{ => features/settings}/hooks/useUpdater.ts (100%) rename src/{components/workspace => features/workspace/components}/QueryTabBar.tsx (98%) rename src/{components/workspace => features/workspace/components}/ResultsPanel.tsx (97%) rename src/{components/workspace => features/workspace/components}/SQLWorkspacePanel.tsx (96%) rename src/{components/workspace => features/workspace/components}/SqlEditor.tsx (98%) rename src/{components/workspace => features/workspace/components}/StatusBar.tsx (100%) rename src/{components/workspace => features/workspace/components}/WorkspaceHeader.tsx (100%) rename src/{components/workspace => features/workspace/components}/WorkspaceSidebar.tsx (99%) rename src/{components/workspace => features/workspace/components}/index.ts (83%) rename src/{components => features}/workspace/types.ts (100%) diff --git a/src/assets/react.svg b/src/assets/react.svg deleted file mode 100644 index 6c87de9..0000000 --- a/src/assets/react.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/components/feedback/BridgeFailed.tsx b/src/components/BridgeFailed.tsx similarity index 100% rename from src/components/feedback/BridgeFailed.tsx rename to src/components/BridgeFailed.tsx diff --git a/src/components/feedback/BridgeLoader.tsx b/src/components/BridgeLoader.tsx similarity index 100% rename from src/components/feedback/BridgeLoader.tsx rename to src/components/BridgeLoader.tsx diff --git a/src/components/common/CommandPalette.tsx b/src/components/CommandPalette.tsx similarity index 96% rename from src/components/common/CommandPalette.tsx rename to src/components/CommandPalette.tsx index 15fab05..f0ea5cb 100644 --- a/src/components/common/CommandPalette.tsx +++ b/src/components/CommandPalette.tsx @@ -71,7 +71,7 @@ export default function CommandPalette({ isOpen, onClose }: CommandPaletteProps) return ( - +
- +
{filteredCommands.length === 0 ? (
diff --git a/src/components/common/ConfirmDialog.tsx b/src/components/ConfirmDialog.tsx similarity index 100% rename from src/components/common/ConfirmDialog.tsx rename to src/components/ConfirmDialog.tsx diff --git a/src/components/common/DataTable.tsx b/src/components/DataTable.tsx similarity index 99% rename from src/components/common/DataTable.tsx rename to src/components/DataTable.tsx index a949ea0..d12e07a 100644 --- a/src/components/common/DataTable.tsx +++ b/src/components/DataTable.tsx @@ -32,7 +32,7 @@ export const DataTable = ({

No results found

-

+

This table is empty or the query returned no data

@@ -80,7 +80,7 @@ export const DataTable = ({ {columns.map((column) => ( {row[column] !== null && row[column] !== undefined ? ( diff --git a/src/components/common/DeveloperContextMenu.tsx b/src/components/DeveloperContextMenu.tsx similarity index 98% rename from src/components/common/DeveloperContextMenu.tsx rename to src/components/DeveloperContextMenu.tsx index 89f41b5..114f66f 100644 --- a/src/components/common/DeveloperContextMenu.tsx +++ b/src/components/DeveloperContextMenu.tsx @@ -17,7 +17,7 @@ import { ClipboardPaste, Scissors, } from "lucide-react"; -import { getDeveloperMode } from "@/hooks/useDeveloperMode"; +import { getDeveloperMode } from "@/features/settings/hooks/useDeveloperMode"; interface DeveloperContextMenuProps { children: React.ReactNode; diff --git a/src/components/common/FloatingActionButton.tsx b/src/components/FloatingActionButton.tsx similarity index 100% rename from src/components/common/FloatingActionButton.tsx rename to src/components/FloatingActionButton.tsx diff --git a/src/components/common/ModeToggle.tsx b/src/components/ModeToggle.tsx similarity index 95% rename from src/components/common/ModeToggle.tsx rename to src/components/ModeToggle.tsx index 4312c7b..ef3d803 100644 --- a/src/components/common/ModeToggle.tsx +++ b/src/components/ModeToggle.tsx @@ -7,7 +7,7 @@ import { DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" -import { useTheme } from "@/components/common/ThemeProvider" +import { useTheme } from "@/components/ThemeProvider" export function ModeToggle() { const { setTheme } = useTheme() diff --git a/src/components/common/RemoteConfigDialog.tsx b/src/components/RemoteConfigDialog.tsx similarity index 98% rename from src/components/common/RemoteConfigDialog.tsx rename to src/components/RemoteConfigDialog.tsx index 11da2f7..c504a10 100644 --- a/src/components/common/RemoteConfigDialog.tsx +++ b/src/components/RemoteConfigDialog.tsx @@ -23,9 +23,9 @@ import { useGitRemoteAdd, useGitRemoteRemove, useGitRemoteSetUrl, -} from "@/hooks/useGitAdvanced"; +} from "@/features/git/hooks/useGitAdvanced"; import { toast } from "sonner"; -import type { GitRemoteInfo } from "@/types/git"; +import type { GitRemoteInfo } from "@/features/git/types"; interface RemoteConfigDialogProps { open: boolean; @@ -95,7 +95,7 @@ export default function RemoteConfigDialog({ -
+
{isLoading && (
diff --git a/src/components/common/SlideOutPanel.tsx b/src/components/SlideOutPanel.tsx similarity index 100% rename from src/components/common/SlideOutPanel.tsx rename to src/components/SlideOutPanel.tsx diff --git a/src/components/common/ThemeProvider.tsx b/src/components/ThemeProvider.tsx similarity index 100% rename from src/components/common/ThemeProvider.tsx rename to src/components/ThemeProvider.tsx diff --git a/src/components/common/TitleBar.tsx b/src/components/TitleBar.tsx similarity index 100% rename from src/components/common/TitleBar.tsx rename to src/components/TitleBar.tsx diff --git a/src/components/common/UpdateNotification.tsx b/src/components/UpdateNotification.tsx similarity index 97% rename from src/components/common/UpdateNotification.tsx rename to src/components/UpdateNotification.tsx index 8d4c080..83bfbf6 100644 --- a/src/components/common/UpdateNotification.tsx +++ b/src/components/UpdateNotification.tsx @@ -1,5 +1,5 @@ import { useEffect } from "react"; -import { useUpdater } from "@/hooks/useUpdater"; +import { useUpdater } from "@/features/settings/hooks/useUpdater"; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Progress } from "@/components/ui/progress"; @@ -155,7 +155,7 @@ export function UpdateCheckerButton() { size="sm" onClick={handleClick} disabled={status === "downloading" || status === "checking" || status === "dev-mode"} - className="min-w-[180px]" + className="min-w-45" > {getButtonContent()} diff --git a/src/components/common/VerticalIconBar.tsx b/src/components/VerticalIconBar.tsx similarity index 98% rename from src/components/common/VerticalIconBar.tsx rename to src/components/VerticalIconBar.tsx index 3441ea8..58c3aed 100644 --- a/src/components/common/VerticalIconBar.tsx +++ b/src/components/VerticalIconBar.tsx @@ -42,7 +42,7 @@ export default function VerticalIconBar({ dbId, activePanel, onPanelChange }: Ve ] : []; return ( -