Skip to content

Feat/UI redesign - #8

Merged
alexnguyen03 merged 92 commits into
devfrom
feat/ui-redesign
Apr 25, 2026
Merged

Feat/UI redesign#8
alexnguyen03 merged 92 commits into
devfrom
feat/ui-redesign

Conversation

@alexnguyen03

Copy link
Copy Markdown
Owner

No description provided.

loadReferencedColumns had refColumnCache in its dep array, causing a
cascade: cache update → new callback → loadAll recreated → useEffect
retriggers loadAll → infinite loop on tab load.

Fix by reading cache via a ref (refColumnCacheRef) inside the callback
so it no longer needs refColumnCache as a dependency.
- Lazy-mount Monaco tabs — only render after first activation,
  preventing N editor instances from loading upfront (~80-150 MB each)
- Fix wheel zoom handler leak in MonacoEditor: store ref and remove
  listener in onDidDispose instead of leaking anonymous function
- Fix QueryCompareModal crash: dispose DiffEditor on unmount before
  React destroys TextModels, preventing 'TextModel got disposed before
  DiffEditorWidget model got reset' error
- Strip version suffixes from all localStorage keys (editor-session,
  project-store, layout-store, etc.) — keys are now unversioned
- Extend LEGACY_STORAGE_KEYS to evict all old versioned entries on
  next startup (v1–v4 variants across all stores)
- BranchSpotlight: wider panel (620px), rounded corners, search bar
  separated with bg-muted header, add empty state message, section
  divider between actions and branch list with branch count badge,
  denser row padding and truncation-safe layout
- ConnectionTree: tighten category button vertical padding py-2 → py-1
- Sidebar: remove explicit bg-transparent from TabsList (inherits correctly)
Add `inputSize` (sm/md/lg/xl) and `variant` (default/ghost) props to
the Input component so callers express intent via tokens rather than
ad-hoc className overrides.

- sm  → h-7 / text-label  (sidebar search bars, inline table cells)
- md  → h-8 / text-small  (default, connection forms)
- lg  → h-9 / text-body   (section headers, export fields)
- xl  → h-10 / text-body  (project hub wizard, card edit forms)
- ghost variant → bg-muted/40 border-input/70 with focus bg-background
  (SettingsView, ShortcutsView, TableInfo filter bars)

Remove hardcoded h-7/h-8/h-9/h-10/h-11 and text-[11px]/text-[12px]/
text-[13px] overrides across 20 files in favor of the new props.
Drop redundant h-7/text-[12px] from rt-cell-input usages in TableInfo
(rt-cell-input already sets height:100% in components.css).
- Input base: rounded-[8px] → rounded-sm (uses --radius-scale-sm token)
- ConnectionTree filter: remove redundant rounded-sm override (now inherited)
- ContextSearchDialog context menu: min-w-[160px] → w-40 canonical class
Each environment option now occupies its own full row with a horizontal
layout: env badge on the left, name and description in the middle,
and checkmark on the right. Removes the broken 2-column grid that caused
overlapping text between adjacent cards.
… all components

Replace ad-hoc h-*, text-[Npx], and px-* overrides on Input with the new
inputSize (sm/md/lg/xl) and variant (default/ghost) props. Also fixes
Button size= props that were accidentally changed by the migration script,
and updates canonical Tailwind class names (pl-5.5, min-w-25).
Collapse the 4-step wizard (basics → environment → connection → review)
into one scrollable form: icon popover + name/description inline at top,
env picker as a 5-badge single-row with tooltips, collapsible connection
and storage sections.
…cordion sections

Consolidates indexes, unique_keys, and constraints tabs into a single
Keys tab with per-section Save/Discard and confirmation modals showing
operation summaries before execution.

- Extract ColumnPickerCell into shared component
- Add operationsList param to useWriteSafetyGuard.guardOperations
- Add CheckConstraintsView, PrimaryKeyView, UniqueConstraintsView, ForeignKeysView
- Expand KeysView from 3 to 6 accordion sections (SQLite gating for UC/FK)
- Delete ConstraintsView monolith
* feat(ZEN-9): add barrel exports for component and store folders

(cherry picked from commit 389251cdf25af7554b5cff775c8dde6de69f7eab)
(cherry picked from commit 37812b6e761feea66cc58d7d7bd39ca3dad9dbc0)

* feat(ZEN-10): split MonacoEditor into focused hooks

(cherry picked from commit 924783bad66aa1a1d39ee7fd2e60109c490d7126)
(cherry picked from commit 80e5d827f4d354e0cf5aa8afc7226925b2f1f527)

* feat(ZEN-11): split ResultPanel and ResultFilterBar into composable units

(cherry picked from commit 83c2f116420d3a52919abc90e0140ba135f87349)
(cherry picked from commit 7409fe2bcc9837b58729e0f8d5cb5325d89f4e3f)

* feat(ZEN-12): consolidate editor domain/UI folder boundaries

(cherry picked from commit 823c6d915e6d13a0b435321c379088a22127a742)
(cherry picked from commit d8fb7685e798c6de64f023040874a467c2730e41)

* fix(ZEN-15): resolve frontend guardrail critical violations

* ci(ZEN-15): harden frontend npm install against network flakes

* fix(ZEN-15): restore frontend build stability and module consistency

* fix frontend tests for project wizard toolbar and row detail

* fix guardrail no-double-unknown-cast in toolbar
…ation

Full design system overhaul: three-tier CSS token system (user-overridable
entry points → semantic → shadcn aliases), density system via data-density
attribute, unified interactive state tokens, user-configurable accent color,
font families, and UI density persisted to backend preferences.
…nd colors

Toolbar center: project button left, server/db absolutely centered, env badge
right — env bg tint derived from token via getEnvironmentBgClass. Env brand
colors centralized in ENVIRONMENT_BRAND (projects.ts) with CSS token-backed
env-badge-* utility classes; EnvironmentBadge no longer hardcodes hex values.
@alexnguyen03
alexnguyen03 merged commit 8e7eef0 into dev Apr 25, 2026
2 checks passed
alexnguyen03 added a commit that referenced this pull request Apr 26, 2026
* feat(ui): hide result panel and disable toggle for non-query tabs

* feat(ui): add VS Code-style command palette

Implements Ctrl+Shift+P command palette overlay with:
- Command registry (lib/commands.ts) with 11 commands across 5 categories
- Full keyboard navigation: arrow keys, Enter to execute, Esc to close
- Live fuzzy search by label, category, or keybinding
- Category grouping with kbd badges
- Search icon in Toolbar wired to open palette
- open-workspace-modal custom event bridge for Workspaces command

* refactor(ui): extract shared ModalBackdrop primitive

Introduces ModalBackdrop component as the single source of truth
for modal overlay styling (bg-black/40, z-9999, fade-in animation).
WorkspaceModal and CommandPalette now both delegate to ModalBackdrop.

* feat(ui): add keyboard navigation to workspace modal

Adds full keyboard support (Up/Down arrows, Enter, Escape) to both
the connection and database lists in WorkspaceModal. Includes:
- Arrow nav with auto-scrolling (scrollIntoView)
- Visual focus indicators (ring-1)
- Hover sync with keyboard index
- Focused pane tracking between connections and databases

* feat(ui): add F5 reload shortcut and connection sync for table views

- Auto-reloads TableInfo sub-tabs (Info/Data/ERD) when the active connection or database changes
- Adds standard F5 shortcut specifically for reloading the focused table view without a full app refresh
- Displays F5 key hint on the reload button tooltip
- Exposes F5 inside keyboard shortcuts list (Ctrl+K Ctrl+B)

* style(ui): align database list items with connection list items

- Replaces simple text rows with composed list items matching the connection layout
- Adds a generic Database icon from Lucide for left visualization
- Updates sizing, padding, and hover/active states to strictly match the left pane

* feat(editor): auto-save query tabs on close and sync rename input styling

* refactor(ui): remove command palette button from toolbar

- Cleans up unused Search/Command Palette trigger and visual dividers from the main Toolbar component

* feat(ui): add Zentro logo to toolbar

- Copies \main-logo.png\ to \rontend/src/assets/images/\
- Includes the logo at the start of the primary application toolbar for brand visibility

* chore(build): set zentro logo with name as appicon

- Replaces the generic \�uild/appicon.png\ with the official \main-logo-with-name.png\
- Reverts the toolbar logo inside \Toolbar.tsx\ back to the icon-only \main-logo.png\ to preserve vertical space

* feat(editor): remove obsolete save prompt from tab bar

- Removes the legacy UI for manually prompting a script name to save, as all query scripts are now automatically saved under their tab name directly to the SavedScriptsPanel
- Cleans up onSaveScript props from TabBar and QueryGroup

* refactor(core): replace hardcoded literal strings with enums/constants globally

This commit creates dedicated constant packages for both frontend (constants.ts) and backend (constants.go) layers. All raw string literals for tab types, event streams, drivers, storage keys, and connection statuses are now synchronized via constants.

* chore(release): 0.0.1

* chore(release): configure commit-and-tag-version and version updater

* feat(ui): add About and Changelog modals to toolbar

Adds AboutModal to display application and developer info, and ChangelogModal for an in-app release notes viewer using react-markdown. Updates Toolbar to open the About modal from the Zentro logo.

* style(ui): redesign ShortcutsView with premium focused-minimalist style

Transforms the shortcuts list into a high-density, categorized grid for better visual scanning and space efficiency, following Zentro's premium design guidelines.

* style(ui): redesign Sidebar with premium action-oriented layout

Implements a segmented tab control, refined typography, and an enhanced empty state with quick-actions and keyboard shortcut hints for a more pro IDE feel.

* style(ui): redesign Sidebar to be ultra-flat and adaptive

Removes container divisions for tabs, switches to Title-case typography, and implements ResizeObserver for an icon-only mode when the sidebar is narrow.

* style(ui): redesign WorkspaceModal with flat seamless aesthetic

Removes legacy headers and hard dividers in favor of a spacious, integrated layout. Enhances visual hierarchy with Title-case typography, subtle focus states, and an adaptive action-oriented header.

* style(design): evolve UI to super-flat philosophy

Removes all shadows across WorkspaceModal, Sidebar, and ShortcutsView. Updates design-system skill to formalize super-flat principles as the new project standard.

* style(ui): increase item spacing in WorkspaceModal

Adds vertical gap between connection and database items to improve legibility and provide more breathing room in the list view.

* style(ui): redesign SettingsView and update design standards

Transforms SettingsView into a super-flat interface with Title-case typography and integrated search. Formalizes these patterns in the frontend-design skill documentation.

* style(ui): redesign ShortcutsView with Super-Flat aesthetic

Updates ShortcutsView to follow the latest design principles: Title-case headers, integrated/flush search bar, increased workspace, and refined typography. Removes all legacy shadow/uppercase styles.

* style(ui): redesign AboutModal with Super-Flat aesthetic

Transforms AboutModal into a spacious, super-flat interface. Removes all legacy shadows, uses extreme rounding (32px), and implements Title-case headers and integrated information cards.

* feat(ui): redesign TableInfo component with super-flat aesthetic

* style(ui): re-index table title

* docs: reorganize changelog by feature modules and apply design system

* style(table-info): unify TableInfo styling with ResultTable shared CSS

- SchemaInfoView: use result-table-tanstack/rt-th/rt-th-label/rt-sort-icon
  classes to match ResultTable header and layout exactly
- ColumnRow: replace Tailwind ad-hoc backgrounds with rt-row-alt/
  rt-row-selected/rt-row-deleted; cells use rt-cell-content/rt-cell-dirty/
  rt-cell-input; row selection shows bg+gutter only (no per-cell border)
- DataTypeCell: adopt rt-cell-content/rt-cell-dirty for view state;
  edit input uses rt-cell-input class; add spellCheck=false
- ResultTable: minor icon/spacing polish aligned with design system
- components.css: sync result-table token usage
- build: update Windows app icon to zentro_logo.ico

* style(table-info): redesign ColumnRow and SchemaInfoView with Tailwind

- ColumnRow: replace rt-class system with Tailwind utility classes;
  selection uses bg-accent/10 tint over border-only approach;
  editing inputs use consistent bg-bg-tertiary border-l-accent pattern;
  dirty cells highlighted with text-success; error row uses Tailwind classes
- SchemaInfoView: replace result-table-tanstack with native table-fixed;
  sticky header with backdrop-blur; ArrowUpDown icon for unsorted columns;
  divide-y dividers for row borders
- DataTypeCell: remove isRowSelected prop; view mode uses Tailwind inline
  text-success for dirty state; edit input uses bg-bg-tertiary pattern
- MonacoEditor: revert nav tracking additions (back to clean focus/blur)
- Toolbar/ShortcutsView: revert nav history keybindings; clean whitespace

* style(ui): standardize button styling across the app

Synchronizes button styles using TableInfo as reference. Updates Button component with danger flag and consistent hover/border/bg logic. Refactors Toolbar, TableInfo, ResultPanel, and ConnectionForm to use the new standard.

* fix(ui): resolve react warnings, promise rejections, and missing favicon

* style(table-info): sync table styling with result grid standard

* feat(ui): standardize modals and fix stacking issues

Integrated createPortal into the Modal component to ensure absolute stacking priority. Fixed table header bleed-through by optimizing the z-index scale and adding support for the z-9999 design token. Standardized confirmation dialogs across TableInfo and ResultPanel.

* fix(editor): resolve result panel bug in production and add tab type migration

* feat(build): update to v0.1.0 and add versioned build scripts

* ci: configure multi-platform build and release workflow

Automatically builds and releases Windows, Linux, and macOS binaries on tag push.

* Add issue templates for bug reports and feature requests

* Add LICENSE and CONTRIBUTING files

* fix: remove hardcoded version from StatusBar

* feat: add NSIS installer support

* ci: integrate SignPath code signing for Windows releases

* fix(ci): merge SignPath submit and download steps into one

* fix(ci): add organization-id and use api-token for SignPath

* fix(ci): update SignPath to v2 pattern using GitHub Artifacts

* ci(signpath): update organization-id and case-sensitive slugs

* ci(release): add github-token to sign-request step

* ci(release): update signing-policy-slug to github-ci

* ci(release): cache wails binary and optimize go setup

* ci(release): switch to manual REST API for SignPath

* ci(release): upgrade wails to 2.11.0

* ci(release): fix artifact configuration slug casing

* ci(release): update artifact configuration slug to initial

* ci(release): improve powershell script for signpath rest api

* ci(release): align with SignPath XML using sample names

* ci(release): fix empty zip issue with verification logs

* ci(release): change signing filenames from sample to zentro

* ci(release): add mandatory digital signature verification

* ci(release): allow non-valid but signed status for test certificates

* ci(release): use curl for download and add sha256 logging

* ci(release): fix linux dependencies for ubuntu 24.04

* ci(release): fix multi-platform artifact upload

* ci(release): use ubuntu-22.04 for linux build to support webkit2gtk-4.0

* chore: prepare v0.1.0-beta release

* feat: add beta-2 release plan with 7 sprint tasks

- Add beta-2-plan.md as overview document
- Add sprint-7: Data Viewing & Export (JSON/BLOB viewer, Export JSON/SQL)
- Add sprint-8: Schema Management (CREATE TABLE, View DDL, DROP, Index)
- Add sprint-9: Data Editing (Add Row inline, Duplicate Rows, Delete with toast)
- Add sprint-10: Query Features (Transaction, Multiple Results, EXPLAIN)
- Add sprint-11: Search & Filter (Table search, Schema search - DONE)
- Add sprint-12: UX Improvements (Formatting, Bookmarks, Snippets - DONE, Compare)
- Add sprint-13: Technical Debt (Password encryption, Tests, Performance)
- Normalize task language: 'Done khi' -> 'Done when'

Known implemented features marked as DONE:
- Schema Search (ConnectionTree.tsx)
- Snippets Backend/UI (TemplateService, TemplatePopover)

* feat: implement Sprint 7 - Data Viewing & Export

- Add JsonViewer component with Monaco Editor for JSON display
- Add BlobViewer component for image/binary preview (not currently used)
- Add auto-detect JSON fields in RowDetailSidebar (by column name patterns)
- Add Export JSON and Export SQL INSERT to backend
- Update ResultPanel with export dropdown menu (CSV, JSON, SQL INSERT)
- Fix React hooks issue in RowDetailSidebar
- Add filename detection to avoid Monaco rendering non-JSON data

* feat(schema): complete sprint 8 - DDL highlight, DropObject INDEX fix, tasks done

* feat(ui): redesign TableInfo to integrate Indexes and DDL as sub-tabs, remove modals

* feat(ui): add Index creation form and persist tab states

* Implement sprint 9 data editing flow

* feat(query): implement multi-result subtabs and refine result panel UI

- Replace separate generated tabs with nested subtabs for multi-statement queries.
- Render EXPLAIN results directly inside the result panel within the subtab.
- Remove standalone reload button, assigning F5 shortcut to reload results instead.
- Integrate action buttons (Save, Discard, Add Row, Duplicate) directly into the Filter Bar for a cleaner layout.
- Use minimalist ghost-styled icon buttons in ResultPanel, matching the Table Data tab aesthetics.
- Add and integrate transaction service capabilities in the backend.

* feat(s12): implement formatter, bookmarks, compare, and shortcut system

* feat(sprint-13): implement technical debt hardening, testing, and release prep

* feat(editor-ui): compact gutter, right-click bookmark toggle, and focus line restyle

* refactor(sidebar): introduce SecondarySidebar with feature-scoped tabs

* Polish bookmark tree and reopen flow

* Improve SQL completion ranking

* Refine editor query selection

* Add Phase 1 project foundation

* Add Phase 2 project hub flow

* Add Phase 3 workspace-aware state

* Polish Phase 3 workspace switching UI

* Refactor project sessions and environment DB switching

* Clean up remaining workspace legacy files

* fix: resolve env switcher flickering in toolbar

- Prevent bootstrapEnvironment from overriding activeEnvironmentKey after switch
- Add setActiveEnvironment in EnvSetupStep.handleBind for consistent state
- Add setActiveProject after setProjectEnvironment for UI sync
- Remove forceUpdate workaround in Toolbar (no longer needed)
- Add project structure documentation

* Defer environment binding until apply

* Refactor project onboarding and centralize runtime connection loading

* simplify: replace flat connection+database list with tree picker in wizard

- Add DatabaseTreePicker component with lazy-loaded database nodes
- Simplify ProjectHub wizard connection step state (removed 200+ lines)
- Remove redundant connection/database state management
- Add filter functionality for searching connections and databases

* feat: add delete project functionality

- Add deleteProject action to projectStore
- Add delete button to project cards in ProjectHub (hover to reveal)
- Immediate deletion with no confirmation

* fix: resolve race condition when switching projects

- Move resetRuntime() call AFTER openProject() completes
- Add project ID guard in connection effect to prevent stale connections
- When resetRuntime triggers the effect, activeProject is already the new project

* refactor: make connection flow project-centric

* fix: defer table info ddl/index loading until tab is opened

* fix: stabilize env switching and quick env actions

* refine project hub and toolbar for lean compact UI

* refine environment switcher modal layout and add reusable tooltip

* feat: add global view mode with UI and backend write guards

* feat: improve view mode toggle indicator in toolbar

* docs: add agents guidance

* feat(layout): move view mode background highlight to status bar

* feat(editor): optimize SQL completion context, cache, and stale cancellation

* feat(editor): auto-alias table suggestions with driver-safe quoting

* refactor project setup trees and responsive connection forms

* refactor connection setup UI to compact provider-first flow

* Refactor provider picker flows and unify modal UI

* feat(toolbar): redesign logo menu with anchored two-level submenus

* refactor(frontend): standardize modal system, design tokens, and UI layering

* refactor(fe): standardize platform boundary, modal dialogs, and quality guardrails

* refactor(fe): unify command registry and remove legacy tokens

* refactor(frontend): eliminate explicit any across core modules

* refactor(frontend): close phase-1 debt boundaries and quality gates

* feat(be): add typed v2 events, backend guardrails, and quality workflow

* refactor(be): split app and query services into modular units

* refactor(be): decompose schema and drivers into focused modules

* refactor(ui): split large components into focused modules

- ResultPanel (1056→498 lines): extract useResultEditing, useResultKeyboard, useResultExport hooks
- ProjectHub (829→204 lines): extract ProjectWizard and ProjectCard into project/ subfolder
- Toolbar (717→309 lines): extract AppMenu with self-contained flyout and keyboard nav into toolbar/

Fixes modal close-on-click bug by passing contentClassName to ModalBackdrop.
Fixes ProjectWizard width (460px entry / 840px wizard) per surface.

* refactor(be): complete phase-2 decomposition and harden query cancellation

* test(be): add integration coverage for query and connection lifecycles

* refactor(ui): enum-ify component states and string literals

* refactor(ui): extract individual settings panels into subcomponents

* refactor(editor): split monolithic editorStore into modular slices

* refactor(fe): route clipboard flows through wails runtime service

* refactor: feature-sliced FE shell and plugin/license extension architecture

* feat: add query runtime state machine, guarded execution, and local perf telemetry foundation

* feat(dx): add query harness, telemetry export opt-in, and incremental result strategy

* feat(query-dx): add result exploration UX and background export jobs

* feat(query-dx): add deterministic compare and persistent tab query context

* feat(query-dx): complete phase 2 result virtualization and export reliability

* feat(phase3): add telemetry pipeline gates and entitlement-ready query UX

* feat(phase3): harden startup recovery and add policy/contribution platform

* refactor(result-panel): remove secondary quick filter/jump/bookmark footer

* chore(skills): standardize zentro skills for wails architecture

* feat(editor): render sql table suggestions with styled html docs

* refactor(architecture): split monaco completion and app facades

* feat(monaco): show column data type in dot suggestions

* feat(monaco): add FK-based join snippet suggestions with consistent jo activation

* feat(editor): ctrl/cmd+click table navigation with inline picker and hover hint

* feat(editor): add hover quick view and tailwind base table

* feat(editor): add mru ctrl+tab switcher with release-to-activate

* fix(editor): align ctrl+enter query execution with run action

* refactor(ui): standardize border radius to rounded-md

* fix(result): prevent update-depth loops in panel and table

* feat(editor): add Monaco-powered result filter suggestions

* Fix result filter UX on enter, error state, and focus retention

* Simplify filter tooltip and reveal actions on hover

* refactor(result-panel): move controls to toolbar and fix F5 rerun behavior

* feat(export): use native save dialog when exporting results

* refactor(status-bar): remove project/connection/driver fields from UI

* feat(frontend): add Ctrl+E context search quick open dialog

* feat(ui): add fade-in animation for modal backdrop

* feat(startup): simplify project hub layout and open last updated on close

* feat(result-table): upgrade grid UX and interactions

* fix(filter-sql): build WHERE from active statement without legacy wrapper

* feat(ui): improve env picker hover and reconnect feedback

* feat(editor): support scoped format and sql clause folding

* feat(sql): persist schema context for suggestion and execution

* fix(editor): unify execute behavior and isolate filter execution

* fix(result-table): use stable unique column ids for header DnD

* feat(editor): move toolbar vertical and remove new-tab action

* feat(editor): refine template popover and append actions

* refactor connection tree to category-first explorer UI

* chore remove TemplateDialog component

* refactor project create-load flow with portable storage and per-project session restore

* polish project hub and connection import UX; stabilize reconnect behavior

* feat(ui): refine env UX and toolbar alignment

* feat(shortcuts): add toggle view mode binding and env tone updates

* fix(editor): prioritize SQL Ctrl+Space and polish picker metadata

* refactor(project-card): show setup badge only when needed

* Refine connection picker and result table UX

* Fix result row action visibility and editability gating

* Fix SQL alias column suggestions across statement and schema context

* Refine result table sizing and sticky index column

* refine settings/shortcuts UI and lock system tab rename

* feat: scope scripts by project and harden tab autosave flows

* fix: append history query to active editor tab

* refactor(storage): keep latest frontend store keys and drop legacy paths

* refactor: remove workspace layer for project-centric lifecycle

* docs: update changelog and release notes for v0.2.0-beta

* fix(ci): satisfy guardrails and stabilize ERD build typing

* ci: restore go.sum tracking and prep dist placeholder for backend vet

* fix(ci): track wailsjs bindings for frontend type resolution

* test: align toolbar project mock and result-table header assertions

* feat(beta3): modularize ResultTable and improve table reload resilience (#2)

* feat(query): add write safety guards and prod double confirmation

* feat: add rule-based keybindings and postgres bootstrap

* Refine explorer schema UX and add connection edit/delete actions

* chore(editor): snapshot current result/tableinfo changes before toolbar refactor

* feat(table-info): flatten tabs and unify contextual toolbar layout

* fix(table-info): avoid rendering ResultPanel custom render actions in data toolbar

* fix(result-panel): normalize pending edit state to prevent data-tab crash

* fix(result-panel): keep hook order stable when result is not ready

* refactor(table-info): use 4-2-4 grid toolbar layout and remove tab scrollbar

* feat: revamp write safety settings and env port config

* style: compact table rows and center index columns

* feat: improve result paging and add advanced export options

* fix(table-info): auto-recover table metadata after reload

* refactor(result-table): split table logic into modular hooks

* fix(shortcuts): remove unsafe double cast in key capture

* feat: SQL-only git tracking with manual commit and close-flush (#3)

* feat(query): add write safety guards and prod double confirmation

* feat: add rule-based keybindings and postgres bootstrap

* Refine explorer schema UX and add connection edit/delete actions

* chore(editor): snapshot current result/tableinfo changes before toolbar refactor

* feat(table-info): flatten tabs and unify contextual toolbar layout

* fix(table-info): avoid rendering ResultPanel custom render actions in data toolbar

* fix(result-panel): normalize pending edit state to prevent data-tab crash

* fix(result-panel): keep hook order stable when result is not ready

* refactor(table-info): use 4-2-4 grid toolbar layout and remove tab scrollbar

* feat: revamp write safety settings and env port config

* style: compact table rows and center index columns

* feat: improve result paging and add advanced export options

* fix(table-info): auto-recover table metadata after reload

* refactor(result-table): split table logic into modular hooks

* fix(shortcuts): remove unsafe double cast in key capture

* feat: add SQL git tracking timeline with manual and close-flush commits

* fix(frontend): replace prompt with PromptModal for manual git commit

* fix(frontend): remove stale useScriptStore reference in QueryGroup

* chore(ai): configure native Claude Code workflow

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* chore(ai): configure native Claude Code workflow

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(guardrails): replace native buttons with Button component, fix double cast and comment triggers

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(a11y): add role=button and keyboard handler to threshold div in SettingsData

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* feat(ui): shadcn migration phase 1 + schema/index fixes (#5)

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* fix(ui): remove editing cell borders for native enterprise look

Remove primary-colored borders/rings from inline table cell inputs across
ResultTable and TableInfo views; use subtle bg tint for editing/dirty states.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(schema): fix DropIndex signature and identifier quoting

Add tableName param to DropIndex (required by MySQL/SQL Server syntax),
and quote all identifiers in CreateIndex/DropIndex DDL per driver dialect.

* fix(guardrails): replace native controls and fix double-cast violation

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* fix(fe): satisfy frontend guardrails for control buttons (#6)

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* fix(ui): remove editing cell borders for native enterprise look

Remove primary-colored borders/rings from inline table cell inputs across
ResultTable and TableInfo views; use subtle bg tint for editing/dirty states.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(schema): fix DropIndex signature and identifier quoting

Add tableName param to DropIndex (required by MySQL/SQL Server syntax),
and quote all identifiers in CreateIndex/DropIndex DDL per driver dialect.

* fix(guardrails): replace native controls and fix double-cast violation

* feat(source-control): add diff preview and footer commit

* feat(core): streamline source control workflow and auto-commit

Unify source control UX around changes/history and branch spotlight flow.

Add per-project auto_commit_on_exit and shutdown commit behavior for git_repo_path.

Enable double-click open-to-query from changes/history file lists.

* fix(fe): satisfy guardrails by replacing native button controls

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* Feat/table info constraints behavior (#7)

* feat(table-info): add constraints tab and unify table behaviors

* feat(explorer): add full table context menu with drop/truncate and export flow

* feat(constraints): implement full foreign key CRUD flow

* fix(constraints): break infinite re-render loop in ConstraintsView

loadReferencedColumns had refColumnCache in its dep array, causing a
cascade: cache update → new callback → loadAll recreated → useEffect
retriggers loadAll → infinite loop on tab load.

Fix by reading cache via a ref (refColumnCacheRef) inside the callback
so it no longer needs refColumnCache as a dependency.

* Feat/UI redesign (#8)

* feat(table-info): add constraints tab and unify table behaviors

* feat(explorer): add full table context menu with drop/truncate and export flow

* feat(constraints): implement full foreign key CRUD flow

* fix(constraints): break infinite re-render loop in ConstraintsView

loadReferencedColumns had refColumnCache in its dep array, causing a
cascade: cache update → new callback → loadAll recreated → useEffect
retriggers loadAll → infinite loop on tab load.

Fix by reading cache via a ref (refColumnCacheRef) inside the callback
so it no longer needs refColumnCache as a dependency.

* feat: start UI redesign foundation

* feat(project-hub): inline edit, explorer action, and icon popover picker

* feat(ui): apply RingUI-inspired tokens and primitive styling refresh

* fix(perf): reduce memory usage and fix Monaco lifecycle leaks

- Lazy-mount Monaco tabs — only render after first activation,
  preventing N editor instances from loading upfront (~80-150 MB each)
- Fix wheel zoom handler leak in MonacoEditor: store ref and remove
  listener in onDidDispose instead of leaking anonymous function
- Fix QueryCompareModal crash: dispose DiffEditor on unmount before
  React destroys TextModels, preventing 'TextModel got disposed before
  DiffEditorWidget model got reset' error
- Strip version suffixes from all localStorage keys (editor-session,
  project-store, layout-store, etc.) — keys are now unversioned
- Extend LEGACY_STORAGE_KEYS to evict all old versioned entries on
  next startup (v1–v4 variants across all stores)

* feat(ui): polish sidebar and branch spotlight styling

- BranchSpotlight: wider panel (620px), rounded corners, search bar
  separated with bg-muted header, add empty state message, section
  divider between actions and branch list with branch count badge,
  denser row padding and truncation-safe layout
- ConnectionTree: tighten category button vertical padding py-2 → py-1
- Sidebar: remove explicit bg-transparent from TabsList (inherits correctly)

* feat(ui): normalize Input styling with inputSize and variant props

Add `inputSize` (sm/md/lg/xl) and `variant` (default/ghost) props to
the Input component so callers express intent via tokens rather than
ad-hoc className overrides.

- sm  → h-7 / text-label  (sidebar search bars, inline table cells)
- md  → h-8 / text-small  (default, connection forms)
- lg  → h-9 / text-body   (section headers, export fields)
- xl  → h-10 / text-body  (project hub wizard, card edit forms)
- ghost variant → bg-muted/40 border-input/70 with focus bg-background
  (SettingsView, ShortcutsView, TableInfo filter bars)

Remove hardcoded h-7/h-8/h-9/h-10/h-11 and text-[11px]/text-[12px]/
text-[13px] overrides across 20 files in favor of the new props.
Drop redundant h-7/text-[12px] from rt-cell-input usages in TableInfo
(rt-cell-input already sets height:100% in components.css).

* feat(ui): switch Input radius to rounded-sm, minor class cleanups

- Input base: rounded-[8px] → rounded-sm (uses --radius-scale-sm token)
- ConnectionTree filter: remove redundant rounded-sm override (now inherited)
- ContextSearchDialog context menu: min-w-[160px] → w-40 canonical class

* fix(ui): fix ProjectWizard environment picker layout to single column

Each environment option now occupies its own full row with a horizontal
layout: env badge on the left, name and description in the middle,
and checkmark on the right. Removes the broken 2-column grid that caused
overlapping text between adjacent cards.

* feat(ui): normalize Input styling with inputSize/variant props across all components

Replace ad-hoc h-*, text-[Npx], and px-* overrides on Input with the new
inputSize (sm/md/lg/xl) and variant (default/ghost) props. Also fixes
Button size= props that were accidentally changed by the migration script,
and updates canonical Tailwind class names (pl-5.5, min-w-25).

* feat(ui): replace ProjectWizard multi-step flow with single-screen form

Collapse the 4-step wizard (basics → environment → connection → review)
into one scrollable form: icon popover + name/description inline at top,
env picker as a 5-badge single-row with tooltips, collapsible connection
and storage sections.

* Sync provider filter toolbar with connection/database filter style

* Refine UI consistency across toolbar, connection picker, and shared controls

* Refine env switching UX and enforce bound-env shortcut guard

* feat(ui): replace ConstraintsView monolith with 6 independent Keys accordion sections

Consolidates indexes, unique_keys, and constraints tabs into a single
Keys tab with per-section Save/Discard and confirmation modals showing
operation summaries before execution.

- Extract ColumnPickerCell into shared component
- Add operationsList param to useWriteSafetyGuard.guardOperations
- Add CheckConstraintsView, PrimaryKeyView, UniqueConstraintsView, ForeignKeysView
- Expand KeysView from 3 to 6 accordion sections (SQLite gating for UC/FK)
- Delete ConstraintsView monolith

* Fix FK ref schema/table options visibility in table info view

* refactor table info panels and align shadcn table/accordion behavior

* refactor table info panels to shadcn table primitives

* refactor(table-info): compact key headers, update sort icons, and show edit cell borders

* feat(result-table): move filtering to server and add order-by bar

* feat(result-filter): add order-by chip builder with execute on add/remove

* Fix result filter base query flow and preserve existing WHERE

* Refine result filter/editor flow and add SQL alias utilities

* Optimize DB connection reuse and remove background ping sessions

* feat: migrate SQL tracking to project repo and harden source control

* fix(table-info): stabilize data filter SQL generation and loading UX

* fix(table-data): use canonical base query for result filter flow

* refactor(result-panel): split modules and fix filter sync update loop

* Refine result context actions and harden table hook memory cleanup

* feat: emit async query row count event

* refactor: remove total row count flow and simplify sidebar filters

* fix(result-panel): make column visibility toggle affect table columns

* feat(result-panel): improve columns popover scrolling and header actions

* feat(result-table): improve row state styling and edited cell highlight

* chore(ui): commit current workspace changes

* Refactor project env config flow and polish connection/env UI

* Improve env/connection UX and add selection state in connection tree

* Improve project wizard env binding flow and fix IndexInfoView update loop

* Refine context search input controls and toggle icon behavior

* remove Restart App action from file menu

* add startup readiness gate for persisted app state

* Fix Data Explorer F5 race cancellation and move result loading bar

* Update table info views, toolbar, app startup, and animation styles

* Enforce unique query names and filename-based script IDs

* Refine row detail JSON copy UX and compact JsonViewer gutter

* fix(bookmarks): load global scope and remap on tab rename

* feat(result-tabs): align result subtabs with query tab style

* feat(ui-table): add sticky header option and use in quick view

* feat(about): show real wails runtime/build info in about modal

* refactor settings telemetry controls and remove export bundle flow

* feat(window): use native traffic lights on macOS, hide custom controls

* feat(result-table): row header selection, drag-select, multi-row INSERT, context menu improvements

* refactor(context-menu): flatten WHERE action and remove By Row PK

Remove the "Generate WHERE" submenu entirely — the single remaining
action (By Selected Values IN) is now a flat top-level item labelled
"Generate WHERE (IN)". Also removes the unused By Row PK handler,
canGenerateWhereByPk variable, and buildWhereClauseByPrimaryKeys import.

* feat(zoom): enable Ctrl+=/- zoom shortcuts and redesign status bar indicator

* feat(row-detail): add field filter input with Esc-to-clear

* refactor(ui): unify Button/Input/Select sizing under shared ControlSize contract

- Add ControlSize ('sm'|'md') to contract.ts with CONTROL_SIZE_CLASS map
- Rewrite Input with size prop (default sm), drop inputSize, fix HTML attr conflict via Omit
- Rewrite SelectTrigger with size prop (default sm) from contract
- Align Button CVA sizes: sm=h-7, md=h-9, add icon-xs/icon-sm/icon-md, remove old 'default'
- Fix import casing (Button→button, Input→input) across all consumers
- Migrate all call sites from inputSize/selectSize/hardcoded sizes to unified size prop

* refactor(ui): redesign sidebar tabs and TableInfo tab bar with active bg highlight

* refactor(ui): shrink toolbar height, downsize toolbar icons to icon-sm, fix WindowControls hover bg

* refactor(ui): restyle DatabaseTreePicker connections as borderless session cards

Replace border-based layout with bg-opacity approach: connection cards use
bg-muted/40 (hover /60) or bg-accent/8 when selected, db items use bg-accent/15,
edit/delete actions revealed on hover via opacity transition.

* Refactor project wizard UI and smooth env-config launch

* Fix env binding overwrite in project wizard

* Improve edit wizard state persistence and save actions

* ZEN-15: Integrate all-agent branch into feat/ui-redesign (#9)

* feat(ZEN-9): add barrel exports for component and store folders

(cherry picked from commit 389251cdf25af7554b5cff775c8dde6de69f7eab)
(cherry picked from commit 37812b6e761feea66cc58d7d7bd39ca3dad9dbc0)

* feat(ZEN-10): split MonacoEditor into focused hooks

(cherry picked from commit 924783bad66aa1a1d39ee7fd2e60109c490d7126)
(cherry picked from commit 80e5d827f4d354e0cf5aa8afc7226925b2f1f527)

* feat(ZEN-11): split ResultPanel and ResultFilterBar into composable units

(cherry picked from commit 83c2f116420d3a52919abc90e0140ba135f87349)
(cherry picked from commit 7409fe2bcc9837b58729e0f8d5cb5325d89f4e3f)

* feat(ZEN-12): consolidate editor domain/UI folder boundaries

(cherry picked from commit 823c6d915e6d13a0b435321c379088a22127a742)
(cherry picked from commit d8fb7685e798c6de64f023040874a467c2730e41)

* fix(ZEN-15): resolve frontend guardrail critical violations

* ci(ZEN-15): harden frontend npm install against network flakes

* fix(ZEN-15): restore frontend build stability and module consistency

* fix frontend tests for project wizard toolbar and row detail

* fix guardrail no-double-unknown-cast in toolbar

* refactor(table-info): align table tabs styling with sidebar pattern

* refactor(ui): normalize typography/tokens and redesign environment badges

* Refine toolbar alignment and quick environment row layout

* Refine sidebar typography and table schema breadcrumb styling

* Fix MSSQL metadata queries and lazy-load table keys tab

* Unify table breadcrumb selector with sidebar select pattern

* Unify result limit select UI and refine tab drag styling

* refactor(row-detail): unify PK cell style with fake input and match editor height

* refactor(sidebar-ui): align tree styles and fix result grid scroll

* refactor(ui): unify context menu components and related editor views

* refactor(project-hub): redesign tabs/list UI and move row actions to context menu

* feat(project-hub): add pin interactions and improve context menu row UX

* chore(project-wizard): apply remaining UI consistency updates

* style: update environment badge pills and testing tone

* feat(design-system): implement v2.0.0 token system with user customization

Full design system overhaul: three-tier CSS token system (user-overridable
entry points → semantic → shadcn aliases), density system via data-density
attribute, unified interactive state tokens, user-configurable accent color,
font families, and UI density persisted to backend preferences.

* refactor(toolbar): redesign center pill layout and centralize env brand colors

Toolbar center: project button left, server/db absolutely centered, env badge
right — env bg tint derived from token via getEnvironmentBgClass. Env brand
colors centralized in ENVIRONMENT_BRAND (projects.ts) with CSS token-backed
env-badge-* utility classes; EnvironmentBadge no longer hardcodes hex values.

* Fix state token usage for selected/hover styles

* Refine status bar typography to lighter compact text

* Sync ConnectionTree selection with active table and viewport scroll

* Refine filter/status UI and stabilize tree-editor sync

* Redesign TemplatePopover using result table CSS design language

* Move stdlib runtime calls to helpers.go to satisfy BE guardrails

* Fix FE guardrail violations: replace native controls with UI kit components

* Fix duplicate AddPrimaryKey export in generated Wails JS bindings

* Fix RowDetailTab test to match click-to-edit div/textarea pattern

* feat(search): script search UI polish + jump-to-line + HoverCard (#10)

* feat(search): universal script search via # prefix in ContextSearchDialog

- Add ScriptSearchResults component with background content loading,
  matched-line display (VSCode-style), and highlight helpers
- ContextSearchDialog: typing '#' switches to script search mode —
  kind filter hides, placeholder updates, matched lines shown
- SavedScriptsPanel: background content cache, first-line preview
  with hover popover, content-aware search with matched lines

* feat(search): script search UI polish + jump-to-line + HoverCard

- ScriptSearchResults: extract MatchedLinesDisplay component (reusable),
  each matched line shows 1-based line number and is individually clickable
  → opens script and jumps editor cursor to that exact line; remove font-mono
- ContextSearchDialog: emit JUMP_TO_LINE_ACTION after opening/switching to
  script tab so clicking a matched line lands the cursor on it
- SavedScriptsPanel: extract ScriptListItem with local previewOpen state;
  whole row is HoverCardTrigger so bg-muted persists while card is open;
  matched lines use MatchedLinesDisplay + same jump-to-line behaviour;
  replace custom native-popover with shadcn HoverCard (openDelay/closeDelay)
- Add hover-card.tsx UI component (@radix-ui/react-hover-card)

* docs: refresh README format and add v0.3.0 changelog

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
alexnguyen03 added a commit that referenced this pull request Apr 28, 2026
* feat(ui): hide result panel and disable toggle for non-query tabs

* feat(ui): add VS Code-style command palette

Implements Ctrl+Shift+P command palette overlay with:
- Command registry (lib/commands.ts) with 11 commands across 5 categories
- Full keyboard navigation: arrow keys, Enter to execute, Esc to close
- Live fuzzy search by label, category, or keybinding
- Category grouping with kbd badges
- Search icon in Toolbar wired to open palette
- open-workspace-modal custom event bridge for Workspaces command

* refactor(ui): extract shared ModalBackdrop primitive

Introduces ModalBackdrop component as the single source of truth
for modal overlay styling (bg-black/40, z-9999, fade-in animation).
WorkspaceModal and CommandPalette now both delegate to ModalBackdrop.

* feat(ui): add keyboard navigation to workspace modal

Adds full keyboard support (Up/Down arrows, Enter, Escape) to both
the connection and database lists in WorkspaceModal. Includes:
- Arrow nav with auto-scrolling (scrollIntoView)
- Visual focus indicators (ring-1)
- Hover sync with keyboard index
- Focused pane tracking between connections and databases

* feat(ui): add F5 reload shortcut and connection sync for table views

- Auto-reloads TableInfo sub-tabs (Info/Data/ERD) when the active connection or database changes
- Adds standard F5 shortcut specifically for reloading the focused table view without a full app refresh
- Displays F5 key hint on the reload button tooltip
- Exposes F5 inside keyboard shortcuts list (Ctrl+K Ctrl+B)

* style(ui): align database list items with connection list items

- Replaces simple text rows with composed list items matching the connection layout
- Adds a generic Database icon from Lucide for left visualization
- Updates sizing, padding, and hover/active states to strictly match the left pane

* feat(editor): auto-save query tabs on close and sync rename input styling

* refactor(ui): remove command palette button from toolbar

- Cleans up unused Search/Command Palette trigger and visual dividers from the main Toolbar component

* feat(ui): add Zentro logo to toolbar

- Copies \main-logo.png\ to \rontend/src/assets/images/\
- Includes the logo at the start of the primary application toolbar for brand visibility

* chore(build): set zentro logo with name as appicon

- Replaces the generic \�uild/appicon.png\ with the official \main-logo-with-name.png\
- Reverts the toolbar logo inside \Toolbar.tsx\ back to the icon-only \main-logo.png\ to preserve vertical space

* feat(editor): remove obsolete save prompt from tab bar

- Removes the legacy UI for manually prompting a script name to save, as all query scripts are now automatically saved under their tab name directly to the SavedScriptsPanel
- Cleans up onSaveScript props from TabBar and QueryGroup

* refactor(core): replace hardcoded literal strings with enums/constants globally

This commit creates dedicated constant packages for both frontend (constants.ts) and backend (constants.go) layers. All raw string literals for tab types, event streams, drivers, storage keys, and connection statuses are now synchronized via constants.

* chore(release): 0.0.1

* chore(release): configure commit-and-tag-version and version updater

* feat(ui): add About and Changelog modals to toolbar

Adds AboutModal to display application and developer info, and ChangelogModal for an in-app release notes viewer using react-markdown. Updates Toolbar to open the About modal from the Zentro logo.

* style(ui): redesign ShortcutsView with premium focused-minimalist style

Transforms the shortcuts list into a high-density, categorized grid for better visual scanning and space efficiency, following Zentro's premium design guidelines.

* style(ui): redesign Sidebar with premium action-oriented layout

Implements a segmented tab control, refined typography, and an enhanced empty state with quick-actions and keyboard shortcut hints for a more pro IDE feel.

* style(ui): redesign Sidebar to be ultra-flat and adaptive

Removes container divisions for tabs, switches to Title-case typography, and implements ResizeObserver for an icon-only mode when the sidebar is narrow.

* style(ui): redesign WorkspaceModal with flat seamless aesthetic

Removes legacy headers and hard dividers in favor of a spacious, integrated layout. Enhances visual hierarchy with Title-case typography, subtle focus states, and an adaptive action-oriented header.

* style(design): evolve UI to super-flat philosophy

Removes all shadows across WorkspaceModal, Sidebar, and ShortcutsView. Updates design-system skill to formalize super-flat principles as the new project standard.

* style(ui): increase item spacing in WorkspaceModal

Adds vertical gap between connection and database items to improve legibility and provide more breathing room in the list view.

* style(ui): redesign SettingsView and update design standards

Transforms SettingsView into a super-flat interface with Title-case typography and integrated search. Formalizes these patterns in the frontend-design skill documentation.

* style(ui): redesign ShortcutsView with Super-Flat aesthetic

Updates ShortcutsView to follow the latest design principles: Title-case headers, integrated/flush search bar, increased workspace, and refined typography. Removes all legacy shadow/uppercase styles.

* style(ui): redesign AboutModal with Super-Flat aesthetic

Transforms AboutModal into a spacious, super-flat interface. Removes all legacy shadows, uses extreme rounding (32px), and implements Title-case headers and integrated information cards.

* feat(ui): redesign TableInfo component with super-flat aesthetic

* style(ui): re-index table title

* docs: reorganize changelog by feature modules and apply design system

* style(table-info): unify TableInfo styling with ResultTable shared CSS

- SchemaInfoView: use result-table-tanstack/rt-th/rt-th-label/rt-sort-icon
  classes to match ResultTable header and layout exactly
- ColumnRow: replace Tailwind ad-hoc backgrounds with rt-row-alt/
  rt-row-selected/rt-row-deleted; cells use rt-cell-content/rt-cell-dirty/
  rt-cell-input; row selection shows bg+gutter only (no per-cell border)
- DataTypeCell: adopt rt-cell-content/rt-cell-dirty for view state;
  edit input uses rt-cell-input class; add spellCheck=false
- ResultTable: minor icon/spacing polish aligned with design system
- components.css: sync result-table token usage
- build: update Windows app icon to zentro_logo.ico

* style(table-info): redesign ColumnRow and SchemaInfoView with Tailwind

- ColumnRow: replace rt-class system with Tailwind utility classes;
  selection uses bg-accent/10 tint over border-only approach;
  editing inputs use consistent bg-bg-tertiary border-l-accent pattern;
  dirty cells highlighted with text-success; error row uses Tailwind classes
- SchemaInfoView: replace result-table-tanstack with native table-fixed;
  sticky header with backdrop-blur; ArrowUpDown icon for unsorted columns;
  divide-y dividers for row borders
- DataTypeCell: remove isRowSelected prop; view mode uses Tailwind inline
  text-success for dirty state; edit input uses bg-bg-tertiary pattern
- MonacoEditor: revert nav tracking additions (back to clean focus/blur)
- Toolbar/ShortcutsView: revert nav history keybindings; clean whitespace

* style(ui): standardize button styling across the app

Synchronizes button styles using TableInfo as reference. Updates Button component with danger flag and consistent hover/border/bg logic. Refactors Toolbar, TableInfo, ResultPanel, and ConnectionForm to use the new standard.

* fix(ui): resolve react warnings, promise rejections, and missing favicon

* style(table-info): sync table styling with result grid standard

* feat(ui): standardize modals and fix stacking issues

Integrated createPortal into the Modal component to ensure absolute stacking priority. Fixed table header bleed-through by optimizing the z-index scale and adding support for the z-9999 design token. Standardized confirmation dialogs across TableInfo and ResultPanel.

* fix(editor): resolve result panel bug in production and add tab type migration

* feat(build): update to v0.1.0 and add versioned build scripts

* ci: configure multi-platform build and release workflow

Automatically builds and releases Windows, Linux, and macOS binaries on tag push.

* Add issue templates for bug reports and feature requests

* Add LICENSE and CONTRIBUTING files

* fix: remove hardcoded version from StatusBar

* feat: add NSIS installer support

* ci: integrate SignPath code signing for Windows releases

* fix(ci): merge SignPath submit and download steps into one

* fix(ci): add organization-id and use api-token for SignPath

* fix(ci): update SignPath to v2 pattern using GitHub Artifacts

* ci(signpath): update organization-id and case-sensitive slugs

* ci(release): add github-token to sign-request step

* ci(release): update signing-policy-slug to github-ci

* ci(release): cache wails binary and optimize go setup

* ci(release): switch to manual REST API for SignPath

* ci(release): upgrade wails to 2.11.0

* ci(release): fix artifact configuration slug casing

* ci(release): update artifact configuration slug to initial

* ci(release): improve powershell script for signpath rest api

* ci(release): align with SignPath XML using sample names

* ci(release): fix empty zip issue with verification logs

* ci(release): change signing filenames from sample to zentro

* ci(release): add mandatory digital signature verification

* ci(release): allow non-valid but signed status for test certificates

* ci(release): use curl for download and add sha256 logging

* ci(release): fix linux dependencies for ubuntu 24.04

* ci(release): fix multi-platform artifact upload

* ci(release): use ubuntu-22.04 for linux build to support webkit2gtk-4.0

* chore: prepare v0.1.0-beta release

* feat: add beta-2 release plan with 7 sprint tasks

- Add beta-2-plan.md as overview document
- Add sprint-7: Data Viewing & Export (JSON/BLOB viewer, Export JSON/SQL)
- Add sprint-8: Schema Management (CREATE TABLE, View DDL, DROP, Index)
- Add sprint-9: Data Editing (Add Row inline, Duplicate Rows, Delete with toast)
- Add sprint-10: Query Features (Transaction, Multiple Results, EXPLAIN)
- Add sprint-11: Search & Filter (Table search, Schema search - DONE)
- Add sprint-12: UX Improvements (Formatting, Bookmarks, Snippets - DONE, Compare)
- Add sprint-13: Technical Debt (Password encryption, Tests, Performance)
- Normalize task language: 'Done khi' -> 'Done when'

Known implemented features marked as DONE:
- Schema Search (ConnectionTree.tsx)
- Snippets Backend/UI (TemplateService, TemplatePopover)

* feat: implement Sprint 7 - Data Viewing & Export

- Add JsonViewer component with Monaco Editor for JSON display
- Add BlobViewer component for image/binary preview (not currently used)
- Add auto-detect JSON fields in RowDetailSidebar (by column name patterns)
- Add Export JSON and Export SQL INSERT to backend
- Update ResultPanel with export dropdown menu (CSV, JSON, SQL INSERT)
- Fix React hooks issue in RowDetailSidebar
- Add filename detection to avoid Monaco rendering non-JSON data

* feat(schema): complete sprint 8 - DDL highlight, DropObject INDEX fix, tasks done

* feat(ui): redesign TableInfo to integrate Indexes and DDL as sub-tabs, remove modals

* feat(ui): add Index creation form and persist tab states

* Implement sprint 9 data editing flow

* feat(query): implement multi-result subtabs and refine result panel UI

- Replace separate generated tabs with nested subtabs for multi-statement queries.
- Render EXPLAIN results directly inside the result panel within the subtab.
- Remove standalone reload button, assigning F5 shortcut to reload results instead.
- Integrate action buttons (Save, Discard, Add Row, Duplicate) directly into the Filter Bar for a cleaner layout.
- Use minimalist ghost-styled icon buttons in ResultPanel, matching the Table Data tab aesthetics.
- Add and integrate transaction service capabilities in the backend.

* feat(s12): implement formatter, bookmarks, compare, and shortcut system

* feat(sprint-13): implement technical debt hardening, testing, and release prep

* feat(editor-ui): compact gutter, right-click bookmark toggle, and focus line restyle

* refactor(sidebar): introduce SecondarySidebar with feature-scoped tabs

* Polish bookmark tree and reopen flow

* Improve SQL completion ranking

* Refine editor query selection

* Add Phase 1 project foundation

* Add Phase 2 project hub flow

* Add Phase 3 workspace-aware state

* Polish Phase 3 workspace switching UI

* Refactor project sessions and environment DB switching

* Clean up remaining workspace legacy files

* fix: resolve env switcher flickering in toolbar

- Prevent bootstrapEnvironment from overriding activeEnvironmentKey after switch
- Add setActiveEnvironment in EnvSetupStep.handleBind for consistent state
- Add setActiveProject after setProjectEnvironment for UI sync
- Remove forceUpdate workaround in Toolbar (no longer needed)
- Add project structure documentation

* Defer environment binding until apply

* Refactor project onboarding and centralize runtime connection loading

* simplify: replace flat connection+database list with tree picker in wizard

- Add DatabaseTreePicker component with lazy-loaded database nodes
- Simplify ProjectHub wizard connection step state (removed 200+ lines)
- Remove redundant connection/database state management
- Add filter functionality for searching connections and databases

* feat: add delete project functionality

- Add deleteProject action to projectStore
- Add delete button to project cards in ProjectHub (hover to reveal)
- Immediate deletion with no confirmation

* fix: resolve race condition when switching projects

- Move resetRuntime() call AFTER openProject() completes
- Add project ID guard in connection effect to prevent stale connections
- When resetRuntime triggers the effect, activeProject is already the new project

* refactor: make connection flow project-centric

* fix: defer table info ddl/index loading until tab is opened

* fix: stabilize env switching and quick env actions

* refine project hub and toolbar for lean compact UI

* refine environment switcher modal layout and add reusable tooltip

* feat: add global view mode with UI and backend write guards

* feat: improve view mode toggle indicator in toolbar

* docs: add agents guidance

* feat(layout): move view mode background highlight to status bar

* feat(editor): optimize SQL completion context, cache, and stale cancellation

* feat(editor): auto-alias table suggestions with driver-safe quoting

* refactor project setup trees and responsive connection forms

* refactor connection setup UI to compact provider-first flow

* Refactor provider picker flows and unify modal UI

* feat(toolbar): redesign logo menu with anchored two-level submenus

* refactor(frontend): standardize modal system, design tokens, and UI layering

* refactor(fe): standardize platform boundary, modal dialogs, and quality guardrails

* refactor(fe): unify command registry and remove legacy tokens

* refactor(frontend): eliminate explicit any across core modules

* refactor(frontend): close phase-1 debt boundaries and quality gates

* feat(be): add typed v2 events, backend guardrails, and quality workflow

* refactor(be): split app and query services into modular units

* refactor(be): decompose schema and drivers into focused modules

* refactor(ui): split large components into focused modules

- ResultPanel (1056→498 lines): extract useResultEditing, useResultKeyboard, useResultExport hooks
- ProjectHub (829→204 lines): extract ProjectWizard and ProjectCard into project/ subfolder
- Toolbar (717→309 lines): extract AppMenu with self-contained flyout and keyboard nav into toolbar/

Fixes modal close-on-click bug by passing contentClassName to ModalBackdrop.
Fixes ProjectWizard width (460px entry / 840px wizard) per surface.

* refactor(be): complete phase-2 decomposition and harden query cancellation

* test(be): add integration coverage for query and connection lifecycles

* refactor(ui): enum-ify component states and string literals

* refactor(ui): extract individual settings panels into subcomponents

* refactor(editor): split monolithic editorStore into modular slices

* refactor(fe): route clipboard flows through wails runtime service

* refactor: feature-sliced FE shell and plugin/license extension architecture

* feat: add query runtime state machine, guarded execution, and local perf telemetry foundation

* feat(dx): add query harness, telemetry export opt-in, and incremental result strategy

* feat(query-dx): add result exploration UX and background export jobs

* feat(query-dx): add deterministic compare and persistent tab query context

* feat(query-dx): complete phase 2 result virtualization and export reliability

* feat(phase3): add telemetry pipeline gates and entitlement-ready query UX

* feat(phase3): harden startup recovery and add policy/contribution platform

* refactor(result-panel): remove secondary quick filter/jump/bookmark footer

* chore(skills): standardize zentro skills for wails architecture

* feat(editor): render sql table suggestions with styled html docs

* refactor(architecture): split monaco completion and app facades

* feat(monaco): show column data type in dot suggestions

* feat(monaco): add FK-based join snippet suggestions with consistent jo activation

* feat(editor): ctrl/cmd+click table navigation with inline picker and hover hint

* feat(editor): add hover quick view and tailwind base table

* feat(editor): add mru ctrl+tab switcher with release-to-activate

* fix(editor): align ctrl+enter query execution with run action

* refactor(ui): standardize border radius to rounded-md

* fix(result): prevent update-depth loops in panel and table

* feat(editor): add Monaco-powered result filter suggestions

* Fix result filter UX on enter, error state, and focus retention

* Simplify filter tooltip and reveal actions on hover

* refactor(result-panel): move controls to toolbar and fix F5 rerun behavior

* feat(export): use native save dialog when exporting results

* refactor(status-bar): remove project/connection/driver fields from UI

* feat(frontend): add Ctrl+E context search quick open dialog

* feat(ui): add fade-in animation for modal backdrop

* feat(startup): simplify project hub layout and open last updated on close

* feat(result-table): upgrade grid UX and interactions

* fix(filter-sql): build WHERE from active statement without legacy wrapper

* feat(ui): improve env picker hover and reconnect feedback

* feat(editor): support scoped format and sql clause folding

* feat(sql): persist schema context for suggestion and execution

* fix(editor): unify execute behavior and isolate filter execution

* fix(result-table): use stable unique column ids for header DnD

* feat(editor): move toolbar vertical and remove new-tab action

* feat(editor): refine template popover and append actions

* refactor connection tree to category-first explorer UI

* chore remove TemplateDialog component

* refactor project create-load flow with portable storage and per-project session restore

* polish project hub and connection import UX; stabilize reconnect behavior

* feat(ui): refine env UX and toolbar alignment

* feat(shortcuts): add toggle view mode binding and env tone updates

* fix(editor): prioritize SQL Ctrl+Space and polish picker metadata

* refactor(project-card): show setup badge only when needed

* Refine connection picker and result table UX

* Fix result row action visibility and editability gating

* Fix SQL alias column suggestions across statement and schema context

* Refine result table sizing and sticky index column

* refine settings/shortcuts UI and lock system tab rename

* feat: scope scripts by project and harden tab autosave flows

* fix: append history query to active editor tab

* refactor(storage): keep latest frontend store keys and drop legacy paths

* refactor: remove workspace layer for project-centric lifecycle

* docs: update changelog and release notes for v0.2.0-beta

* fix(ci): satisfy guardrails and stabilize ERD build typing

* ci: restore go.sum tracking and prep dist placeholder for backend vet

* fix(ci): track wailsjs bindings for frontend type resolution

* test: align toolbar project mock and result-table header assertions

* feat(beta3): modularize ResultTable and improve table reload resilience (#2)

* feat(query): add write safety guards and prod double confirmation

* feat: add rule-based keybindings and postgres bootstrap

* Refine explorer schema UX and add connection edit/delete actions

* chore(editor): snapshot current result/tableinfo changes before toolbar refactor

* feat(table-info): flatten tabs and unify contextual toolbar layout

* fix(table-info): avoid rendering ResultPanel custom render actions in data toolbar

* fix(result-panel): normalize pending edit state to prevent data-tab crash

* fix(result-panel): keep hook order stable when result is not ready

* refactor(table-info): use 4-2-4 grid toolbar layout and remove tab scrollbar

* feat: revamp write safety settings and env port config

* style: compact table rows and center index columns

* feat: improve result paging and add advanced export options

* fix(table-info): auto-recover table metadata after reload

* refactor(result-table): split table logic into modular hooks

* fix(shortcuts): remove unsafe double cast in key capture

* feat: SQL-only git tracking with manual commit and close-flush (#3)

* feat(query): add write safety guards and prod double confirmation

* feat: add rule-based keybindings and postgres bootstrap

* Refine explorer schema UX and add connection edit/delete actions

* chore(editor): snapshot current result/tableinfo changes before toolbar refactor

* feat(table-info): flatten tabs and unify contextual toolbar layout

* fix(table-info): avoid rendering ResultPanel custom render actions in data toolbar

* fix(result-panel): normalize pending edit state to prevent data-tab crash

* fix(result-panel): keep hook order stable when result is not ready

* refactor(table-info): use 4-2-4 grid toolbar layout and remove tab scrollbar

* feat: revamp write safety settings and env port config

* style: compact table rows and center index columns

* feat: improve result paging and add advanced export options

* fix(table-info): auto-recover table metadata after reload

* refactor(result-table): split table logic into modular hooks

* fix(shortcuts): remove unsafe double cast in key capture

* feat: add SQL git tracking timeline with manual and close-flush commits

* fix(frontend): replace prompt with PromptModal for manual git commit

* fix(frontend): remove stale useScriptStore reference in QueryGroup

* chore(ai): configure native Claude Code workflow

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* chore(ai): configure native Claude Code workflow

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(guardrails): replace native buttons with Button component, fix double cast and comment triggers

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(a11y): add role=button and keyboard handler to threshold div in SettingsData

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* feat(ui): shadcn migration phase 1 + schema/index fixes (#5)

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* fix(ui): remove editing cell borders for native enterprise look

Remove primary-colored borders/rings from inline table cell inputs across
ResultTable and TableInfo views; use subtle bg tint for editing/dirty states.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(schema): fix DropIndex signature and identifier quoting

Add tableName param to DropIndex (required by MySQL/SQL Server syntax),
and quote all identifiers in CreateIndex/DropIndex DDL per driver dialect.

* fix(guardrails): replace native controls and fix double-cast violation

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* fix(fe): satisfy frontend guardrails for control buttons (#6)

* feat(frontend): migrate core UI foundation to shadcn/radix

* feat(frontend): phase2 migrate overlay wrapper and query compare select

* chore(frontend): phase3 cleanup modal usage and enforce ui guardrails

* chore(frontend): complete phase3 shadcn cleanup and guardrails

* refactor(frontend): standardize legacy ui to shadcn patterns

* feat(frontend): standardize ui on shadcn primitives

* refactor(frontend): align confirmation tooltip spinner with shadcn patterns

* refactor(frontend): migrate legacy modal overlay toast to shadcn ui

* feat(frontend): enforce strict shadcn alignment and guardrails

* feat(frontend): strict shadcn alignment for target UI surfaces

* feat(app): refine window controls, shortcuts ordering, and update fallback

* refactor sidebar panel architecture and icon tabbar UX

* harmonize primary sidebar filter interactions

* refactor(table-info): unify toolbar and add schema breadcrumb navigation

* feat(table-info): show count badges for unsaved tab changes

* refactor(table-info): use compact switches for pk/null and hide erd badge

* chore: apply latest frontend startup and UI updates

* feat: migrate notifications to sonner and add settings preview

* refactor: standardize ui button interactions with shadcn

* refactor(ui): flat sidebar panels, design token CSS migration, ARIA improvements

- Remove bg-card/separated backgrounds from all sidebar panels
  (ConnectionTree, SavedScriptsPanel, HistoryPanel, GitTimelinePanel,
   SecondarySidebar, PrimaryExplorerPanel, Sidebar) for consistent flat look
- Migrate MonacoEditor table-nav CSS from color-mix() to design tokens
  (--popover, --muted, --border-subtle) for plugin-themable styling
- Complete ARIA listbox pattern with aria-activedescendant, unique option IDs,
  and tabindex on the widget container
- Fix ObjectQuickViewPanel: replace BaseTable with shadcn Table, deduplicate
  empty-state blocks, use nullish coalescing for column keys
- Fix Sidebar tab height mismatch (h-6 → h-8) and restore Toolbar border-bottom
- Add z-sticky semantic token usage in ConnectionTree expanded header

* feat(result-panel): add context menu copy actions and fix dirty-cell bug

- Add Copy Cell Value, Copy with Headers, Copy as JSON to right-click menu
- Fix: double-clicking a cell without editing no longer marks it as dirty
- Fix: editing a cell back to its original value now clears the dirty mark

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* feat: implement 10 workflow improvements from roadmap

- #2 INSERT/UPDATE templates in Ctrl+E context search (action picker)
- #3 Statement-aware multi-result tab labels (SELECT users, UPDATE orders)
- #4 Native DDL: MySQL uses SHOW CREATE TABLE, SQLite uses sqlite_master
- #5 Column visibility toggle in result table toolbar
- #8 ErdView parallel async fetches (Promise.all replaces for...of)
- #12 Auto row count after query completes (no manual click needed)
- #15 Refresh button in Data Sample tab
- #17 Copy as INSERT / Copy as UPDATE context menu actions
- #18 F12 Go To Definition registered in Monaco SQL language
- R2 Fix stale filter bar after re-run via key prop reset

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix: resolve TypeScript errors from workflow improvements commit

- ResultPanel: add missing imports (cn, useConnectionStore), derive
  driver from hook instead of undefined activeProfile variable
- MonacoEditor: unwrap TableNavigationMatch from navigation result
  union type, use ref to hold definition provider for proper cleanup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(ui): update ContextSearchDialog

* fix(ui): remove editing cell borders for native enterprise look

Remove primary-colored borders/rings from inline table cell inputs across
ResultTable and TableInfo views; use subtle bg tint for editing/dirty states.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(schema): fix DropIndex signature and identifier quoting

Add tableName param to DropIndex (required by MySQL/SQL Server syntax),
and quote all identifiers in CreateIndex/DropIndex DDL per driver dialect.

* fix(guardrails): replace native controls and fix double-cast violation

* feat(source-control): add diff preview and footer commit

* feat(core): streamline source control workflow and auto-commit

Unify source control UX around changes/history and branch spotlight flow.

Add per-project auto_commit_on_exit and shutdown commit behavior for git_repo_path.

Enable double-click open-to-query from changes/history file lists.

* fix(fe): satisfy guardrails by replacing native button controls

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>

* Feat/table info constraints behavior (#7)

* feat(table-info): add constraints tab and unify table behaviors

* feat(explorer): add full table context menu with drop/truncate and export flow

* feat(constraints): implement full foreign key CRUD flow

* fix(constraints): break infinite re-render loop in ConstraintsView

loadReferencedColumns had refColumnCache in its dep array, causing a
cascade: cache update → new callback → loadAll recreated → useEffect
retriggers loadAll → infinite loop on tab load.

Fix by reading cache via a ref (refColumnCacheRef) inside the callback
so it no longer needs refColumnCache as a dependency.

* Feat/UI redesign (#8)

* feat(table-info): add constraints tab and unify table behaviors

* feat(explorer): add full table context menu with drop/truncate and export flow

* feat(constraints): implement full foreign key CRUD flow

* fix(constraints): break infinite re-render loop in ConstraintsView

loadReferencedColumns had refColumnCache in its dep array, causing a
cascade: cache update → new callback → loadAll recreated → useEffect
retriggers loadAll → infinite loop on tab load.

Fix by reading cache via a ref (refColumnCacheRef) inside the callback
so it no longer needs refColumnCache as a dependency.

* feat: start UI redesign foundation

* feat(project-hub): inline edit, explorer action, and icon popover picker

* feat(ui): apply RingUI-inspired tokens and primitive styling refresh

* fix(perf): reduce memory usage and fix Monaco lifecycle leaks

- Lazy-mount Monaco tabs — only render after first activation,
  preventing N editor instances from loading upfront (~80-150 MB each)
- Fix wheel zoom handler leak in MonacoEditor: store ref and remove
  listener in onDidDispose instead of leaking anonymous function
- Fix QueryCompareModal crash: dispose DiffEditor on unmount before
  React destroys TextModels, preventing 'TextModel got disposed before
  DiffEditorWidget model got reset' error
- Strip version suffixes from all localStorage keys (editor-session,
  project-store, layout-store, etc.) — keys are now unversioned
- Extend LEGACY_STORAGE_KEYS to evict all old versioned entries on
  next startup (v1–v4 variants across all stores)

* feat(ui): polish sidebar and branch spotlight styling

- BranchSpotlight: wider panel (620px), rounded corners, search bar
  separated with bg-muted header, add empty state message, section
  divider between actions and branch list with branch count badge,
  denser row padding and truncation-safe layout
- ConnectionTree: tighten category button vertical padding py-2 → py-1
- Sidebar: remove explicit bg-transparent from TabsList (inherits correctly)

* feat(ui): normalize Input styling with inputSize and variant props

Add `inputSize` (sm/md/lg/xl) and `variant` (default/ghost) props to
the Input component so callers express intent via tokens rather than
ad-hoc className overrides.

- sm  → h-7 / text-label  (sidebar search bars, inline table cells)
- md  → h-8 / text-small  (default, connection forms)
- lg  → h-9 / text-body   (section headers, export fields)
- xl  → h-10 / text-body  (project hub wizard, card edit forms)
- ghost variant → bg-muted/40 border-input/70 with focus bg-background
  (SettingsView, ShortcutsView, TableInfo filter bars)

Remove hardcoded h-7/h-8/h-9/h-10/h-11 and text-[11px]/text-[12px]/
text-[13px] overrides across 20 files in favor of the new props.
Drop redundant h-7/text-[12px] from rt-cell-input usages in TableInfo
(rt-cell-input already sets height:100% in components.css).

* feat(ui): switch Input radius to rounded-sm, minor class cleanups

- Input base: rounded-[8px] → rounded-sm (uses --radius-scale-sm token)
- ConnectionTree filter: remove redundant rounded-sm override (now inherited)
- ContextSearchDialog context menu: min-w-[160px] → w-40 canonical class

* fix(ui): fix ProjectWizard environment picker layout to single column

Each environment option now occupies its own full row with a horizontal
layout: env badge on the left, name and description in the middle,
and checkmark on the right. Removes the broken 2-column grid that caused
overlapping text between adjacent cards.

* feat(ui): normalize Input styling with inputSize/variant props across all components

Replace ad-hoc h-*, text-[Npx], and px-* overrides on Input with the new
inputSize (sm/md/lg/xl) and variant (default/ghost) props. Also fixes
Button size= props that were accidentally changed by the migration script,
and updates canonical Tailwind class names (pl-5.5, min-w-25).

* feat(ui): replace ProjectWizard multi-step flow with single-screen form

Collapse the 4-step wizard (basics → environment → connection → review)
into one scrollable form: icon popover + name/description inline at top,
env picker as a 5-badge single-row with tooltips, collapsible connection
and storage sections.

* Sync provider filter toolbar with connection/database filter style

* Refine UI consistency across toolbar, connection picker, and shared controls

* Refine env switching UX and enforce bound-env shortcut guard

* feat(ui): replace ConstraintsView monolith with 6 independent Keys accordion sections

Consolidates indexes, unique_keys, and constraints tabs into a single
Keys tab with per-section Save/Discard and confirmation modals showing
operation summaries before execution.

- Extract ColumnPickerCell into shared component
- Add operationsList param to useWriteSafetyGuard.guardOperations
- Add CheckConstraintsView, PrimaryKeyView, UniqueConstraintsView, ForeignKeysView
- Expand KeysView from 3 to 6 accordion sections (SQLite gating for UC/FK)
- Delete ConstraintsView monolith

* Fix FK ref schema/table options visibility in table info view

* refactor table info panels and align shadcn table/accordion behavior

* refactor table info panels to shadcn table primitives

* refactor(table-info): compact key headers, update sort icons, and show edit cell borders

* feat(result-table): move filtering to server and add order-by bar

* feat(result-filter): add order-by chip builder with execute on add/remove

* Fix result filter base query flow and preserve existing WHERE

* Refine result filter/editor flow and add SQL alias utilities

* Optimize DB connection reuse and remove background ping sessions

* feat: migrate SQL tracking to project repo and harden source control

* fix(table-info): stabilize data filter SQL generation and loading UX

* fix(table-data): use canonical base query for result filter flow

* refactor(result-panel): split modules and fix filter sync update loop

* Refine result context actions and harden table hook memory cleanup

* feat: emit async query row count event

* refactor: remove total row count flow and simplify sidebar filters

* fix(result-panel): make column visibility toggle affect table columns

* feat(result-panel): improve columns popover scrolling and header actions

* feat(result-table): improve row state styling and edited cell highlight

* chore(ui): commit current workspace changes

* Refactor project env config flow and polish connection/env UI

* Improve env/connection UX and add selection state in connection tree

* Improve project wizard env binding flow and fix IndexInfoView update loop

* Refine context search input controls and toggle icon behavior

* remove Restart App action from file menu

* add startup readiness gate for persisted app state

* Fix Data Explorer F5 race cancellation and move result loading bar

* Update table info views, toolbar, app startup, and animation styles

* Enforce unique query names and filename-based script IDs

* Refine row detail JSON copy UX and compact JsonViewer gutter

* fix(bookmarks): load global scope and remap on tab rename

* feat(result-tabs): align result subtabs with query tab style

* feat(ui-table): add sticky header option and use in quick view

* feat(about): show real wails runtime/build info in about modal

* refactor settings telemetry controls and remove export bundle flow

* feat(window): use native traffic lights on macOS, hide custom controls

* feat(result-table): row header selection, drag-select, multi-row INSERT, context menu improvements

* refactor(context-menu): flatten WHERE action and remove By Row PK

Remove the "Generate WHERE" submenu entirely — the single remaining
action (By Selected Values IN) is now a flat top-level item labelled
"Generate WHERE (IN)". Also removes the unused By Row PK handler,
canGenerateWhereByPk variable, and buildWhereClauseByPrimaryKeys import.

* feat(zoom): enable Ctrl+=/- zoom shortcuts and redesign status bar indicator

* feat(row-detail): add field filter input with Esc-to-clear

* refactor(ui): unify Button/Input/Select sizing under shared ControlSize contract

- Add ControlSize ('sm'|'md') to contract.ts with CONTROL_SIZE_CLASS map
- Rewrite Input with size prop (default sm), drop inputSize, fix HTML attr conflict via Omit
- Rewrite SelectTrigger with size prop (default sm) from contract
- Align Button CVA sizes: sm=h-7, md=h-9, add icon-xs/icon-sm/icon-md, remove old 'default'
- Fix import casing (Button→button, Input→input) across all consumers
- Migrate all call sites from inputSize/selectSize/hardcoded sizes to unified size prop

* refactor(ui): redesign sidebar tabs and TableInfo tab bar with active bg highlight

* refactor(ui): shrink toolbar height, downsize toolbar icons to icon-sm, fix WindowControls hover bg

* refactor(ui): restyle DatabaseTreePicker connections as borderless session cards

Replace border-based layout with bg-opacity approach: connection cards use
bg-muted/40 (hover /60) or bg-accent/8 when selected, db items use bg-accent/15,
edit/delete actions revealed on hover via opacity transition.

* Refactor project wizard UI and smooth env-config launch

* Fix env binding overwrite in project wizard

* Improve edit wizard state persistence and save actions

* ZEN-15: Integrate all-agent branch into feat/ui-redesign (#9)

* feat(ZEN-9): add barrel exports for component and store folders

(cherry picked from commit 389251cdf25af7554b5cff775c8dde6de69f7eab)
(cherry picked from commit 37812b6e761feea66cc58d7d7bd39ca3dad9dbc0)

* feat(ZEN-10): split MonacoEditor into focused hooks

(cherry picked from commit 924783bad66aa1a1d39ee7fd2e60109c490d7126)
(cherry picked from commit 80e5d827f4d354e0cf5aa8afc7226925b2f1f527)

* feat(ZEN-11): split ResultPanel and ResultFilterBar into composable units

(cherry picked from commit 83c2f116420d3a52919abc90e0140ba135f87349)
(cherry picked from commit 7409fe2bcc9837b58729e0f8d5cb5325d89f4e3f)

* feat(ZEN-12): consolidate editor domain/UI folder boundaries

(cherry picked from commit 823c6d915e6d13a0b435321c379088a22127a742)
(cherry picked from commit d8fb7685e798c6de64f023040874a467c2730e41)

* fix(ZEN-15): resolve frontend guardrail critical violations

* ci(ZEN-15): harden frontend npm install against network flakes

* fix(ZEN-15): restore frontend build stability and module consistency

* fix frontend tests for project wizard toolbar and row detail

* fix guardrail no-double-unknown-cast in toolbar

* refactor(table-info): align table tabs styling with sidebar pattern

* refactor(ui): normalize typography/tokens and redesign environment badges

* Refine toolbar alignment and quick environment row layout

* Refine sidebar typography and table schema breadcrumb styling

* Fix MSSQL metadata queries and lazy-load table keys tab

* Unify table breadcrumb selector with sidebar select pattern

* Unify result limit select UI and refine tab drag styling

* refactor(row-detail): unify PK cell style with fake input and match editor height

* refactor(sidebar-ui): align tree styles and fix result grid scroll

* refactor(ui): unify context menu components and related editor views

* refactor(project-hub): redesign tabs/list UI and move row actions to context menu

* feat(project-hub): add pin interactions and improve context menu row UX

* chore(project-wizard): apply remaining UI consistency updates

* style: update environment badge pills and testing tone

* feat(design-system): implement v2.0.0 token system with user customization

Full design system overhaul: three-tier CSS token system (user-overridable
entry points → semantic → shadcn aliases), density system via data-density
attribute, unified interactive state tokens, user-configurable accent color,
font families, and UI density persisted to backend preferences.

* refactor(toolbar): redesign center pill layout and centralize env brand colors

Toolbar center: project button left, server/db absolutely centered, env badge
right — env bg tint derived from token via getEnvironmentBgClass. Env brand
colors centralized in ENVIRONMENT_BRAND (projects.ts) with CSS token-backed
env-badge-* utility classes; EnvironmentBadge no longer hardcodes hex values.

* Fix state token usage for selected/hover styles

* Refine status bar typography to lighter compact text

* Sync ConnectionTree selection with active table and viewport scroll

* Refine filter/status UI and stabilize tree-editor sync

* Redesign TemplatePopover using result table CSS design language

* Move stdlib runtime calls to helpers.go to satisfy BE guardrails

* Fix FE guardrail violations: replace native controls with UI kit components

* Fix duplicate AddPrimaryKey export in generated Wails JS bindings

* Fix RowDetailTab test to match click-to-edit div/textarea pattern

* feat(search): script search UI polish + jump-to-line + HoverCard (#10)

* feat(search): universal script search via # prefix in ContextSearchDialog

- Add ScriptSearchResults component with background content loading,
  matched-line display (VSCode-style), and highlight helpers
- ContextSearchDialog: typing '#' switches to script search mode —
  kind filter hides, placeholder updates, matched lines shown
- SavedScriptsPanel: background content cache, first-line preview
  with hover popover, content-aware search with matched lines

* feat(search): script search UI polish + jump-to-line + HoverCard

- ScriptSearchResults: extract MatchedLinesDisplay component (reusable),
  each matched line shows 1-based line number and is individually clickable
  → opens script and jumps editor cursor to that exact line; remove font-mono
- ContextSearchDialog: emit JUMP_TO_LINE_ACTION after opening/switching to
  script tab so clicking a matched line lands the cursor on it
- SavedScriptsPanel: extract ScriptListItem with local previewOpen state;
  whole row is HoverCardTrigger so bg-muted persists while card is open;
  matched lines use MatchedLinesDisplay + same jump-to-line behaviour;
  replace custom native-popover with shadcn HoverCard (openDelay/closeDelay)
- Add hover-card.tsx UI component (@radix-ui/react-hover-card)

* docs: refresh README format and add v0.3.0 changelog

* fix(editor): fix space blocked by completion trigger, WHERE alias-aware column suggestions

- Remove space and letter chars from triggerCharacters in SQL and result filter completion providers — space was being consumed by the suggestion popup, blocking normal typing
- ResultFilterBar WHERE completion now uses real schema + query context instead of a virtual single-table schema, so alias-qualified columns (a.col, o.col) are suggested correctly
- In WHERE/HAVING/ON/SET clauses, bare column suggestions are suppressed for sources that have an alias — only alias.column is shown

* fix(release): refresh v0.3.0 notes and retag metadata

* fix(release): publish stable releases as latest

* test(frontend): stabilize toolbar app menu coverage

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant