Commit Graph
531 Commits
Author SHA1 Message Date
t8y2 2b2d789c2c fix: add keyboard shortcut hint on data-unavailable page and make Mod+R work
When app restarts, table data shows "data unavailable" but Mod+R didn't
work because the DataGrid component wasn't mounted. Fixed by handling
the reload emit directly in handleModRTarget. Also added kbd-styled
shortcut hint (⌘R / Ctrl+R) on the data-unavailable placeholder.
2026-06-07 10:02:34 +08:00
skyler 795806186d Merge pull request #804 from serenez/fix/528-detail-dialog-ui
fix(grid): polish cell/row/column detail dialogs (#528)
2026-06-07 09:30:38 +08:00
vrustxandClaude Opus 4.8 fe0f34a6d9 fix(grid): polish cell/row/column detail dialogs (#528)
Address the follow-up UI feedback on the data detail dialogs:

- cell detail: toggle between raw value and formatted JSON inside a single
  value area (via a "format JSON" button) instead of stacking the value,
  formatted value and formatted JSON blocks, removing the redundancy.
- kill horizontal scrollbars: add break-words to the formatted-value block,
  and constrain row/column detail value columns with w-full max-w-0 so long
  unbroken values wrap instead of overflowing the table.
- row detail: column name uses break-words instead of break-all to stop long
  names from wrapping character-by-character.
- unify footer button layout across the three detail dialogs (bulk-copy
  actions on the left, copy-name on the right).
- add a search box to row & column detail to filter fields by name / value /
  row number (filterDataGridDetailFields + unit tests).
- i18n: add detailSearchPlaceholder / detailSearchNoMatch for all 6 locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 01:48:05 +08:00
t8y2 3eefe87380 feat(settings): allow disabling update reminders 2026-06-07 01:07:31 +08:00
Caisinandcaisin 8c0fe3a6e7 Expose forwarded database port for local testing (#803)
Database connection context menus now show a copy action when the connection has enabled transport layers. The action starts or reuses the ordered transport chain, copies the final local forwarding port, and keeps runtime config cached so later disconnect cleanup can stop the created tunnel.

Constraint: Local testing sometimes needs external tools to connect through DBX's generated proxy/tunnel endpoint

Rejected: Copy full host:port endpoint | user specifically asked for the port and existing tunnel host is always localhost

Rejected: Require an active pool before copying | local test workflows may need the tunnel before opening the DBX connection

Confidence: high

Scope-risk: moderate

Tested: pnpm test -- packages/app-tests/connectionTransport.test.ts (ran full app-tests: 862 passed)

Tested: pnpm typecheck

Tested: pnpm exec oxlint --vue-plugin apps/desktop/src/components/sidebar/TreeItem.vue apps/desktop/src/lib/connectionTransport.ts apps/desktop/src/lib/api.ts apps/desktop/src/lib/tauri.ts apps/desktop/src/lib/http.ts

Tested: cargo check -p dbx-core -p dbx-web

Tested: cargo check -p dbx

Tested: cargo fmt --check --all

Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-06-07 01:00:34 +08:00
e9ee982843 Preserve ordered SSH and proxy connection layers (#802)
* Preserve ordered SSH and proxy connection layers

Replace separate SSH/proxy connection fields with ordered transport_layers while keeping legacy migration and secret fallback paths intact. The UI now edits SSH tunnel/proxy layers in configured order without a global SSH enable gate.

Constraint: Existing saved SSH tunnels, proxy settings, and secret-store keys must continue to load through migration.
Rejected: Folding proxy fields into SshTunnelConfig | mixes proxy semantics into an SSH-specific structure.
Confidence: high
Scope-risk: moderate
Directive: Keep SSH/proxy structs provider-specific; put cross-layer chaining in transport_layer_tunnel orchestration.
Tested: git diff --check; cargo fmt --check; cargo check --workspace; cargo test -p dbx-core --lib; vue-tsc --noEmit --project apps/desktop/tsconfig.json; tsc -p packages/node-core/tsconfig.json --noEmit; oxlint --vue-plugin apps/desktop/src; tsx --tsconfig apps/desktop/tsconfig.json --test packages/app-tests/*.test.ts; tsx --test packages/node-core/tests/*.test.ts
Not-tested: Live external SSH/proxy/database endpoint integration.

* Keep ordered transport changes CI-format clean

Constraint: CI pnpm check failed only on oxfmt formatting for two desktop TypeScript files
Confidence: high
Scope-risk: narrow
Directive: Keep generated/editor config changes out of this PR fix commit
Tested: PATH="/Volumes/data/code/rust/dbx/node_modules/.bin:/Users/hekx/.codex/tmp/arg0/codex-arg0nuL34n:/Users/hekx/.cargo/bin:/Users/hekx/.local/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/libpq/bin:/Volumes/data/Users/hekx/.opencode/bin:/Users/hekx/.bun/bin:/Volumes/data/sdks/flutter/bin:/Volumes/data/Users/hekx/.cargo/bin:/Users/hekx/.local/bin:/opt/homebrew/opt/llvm/bin:/opt/homebrew/opt/libpq/bin:/Volumes/data/Users/hekx/.opencode/bin:/Users/hekx/.bun/bin:/Volumes/data/Users/hekx/Library/pnpm:/Volumes/data/sdks/flutter/bin:/Volumes/data/Users/hekx/.cargo/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/pkg/env/global/bin:/opt/X11/bin:/Library/Apple/usr/bin:/Applications/Wireshark.app/Contents/MacOS:/usr/local/go/bin:/opt/homebrew/bin:/opt/podman/bin:/Applications/Ghostty.app/Contents/MacOS" rtk node scripts/run-check.mjs
Not-tested: GitHub Actions rerun not observed locally

* Keep Rust checks warning-clean

Constraint: cargo clippy --workspace --all-targets --all-features -- -D warnings failed across core, web, and tauri crates
Rejected: Broad workspace-level clippy suppression | kept allows local to long-argument command/API boundaries
Confidence: high
Scope-risk: moderate
Directive: Preserve src-tauri/tauri.conf.json as an unrelated local change outside this commit
Tested: rtk cargo clippy --workspace --all-targets --all-features -- -D warnings
Not-tested: Full GitHub Actions rerun not observed locally

* Reuse existing proxy tunnels on retry

Proxy tunnel startup now mirrors SSH tunnel behavior by returning the existing local port for an active connection id instead of replacing the managed handle. A second map check aborts a just-spawned duplicate handle if a concurrent retry won the race before insertion, preventing orphaned listeners while keeping the change narrow.

Constraint: Reviewer requested proxy tunnel behavior align with SSH local-port reuse

Rejected: Always overwrite and abort the previous handle | less consistent with SSH behavior and churns listeners during retries

Confidence: high

Scope-risk: narrow

Tested: cargo fmt --check --all

Tested: cargo test -p dbx-core db::proxy_tunnel::tests::start_tunnel_reuses_existing_local_port

Tested: cargo clippy -p dbx-core --all-targets -- -D warnings

---------

Co-authored-by: hekx <hekx@momandeMac-mini.local>
Co-authored-by: caisin <caisin@caisins-Mac-mini.local>
2026-06-06 23:22:29 +08:00
t8y2 85e2cf1f2f fix: stabilize custom theme integration 2026-06-06 21:04:19 +08:00
polempandSam a067ee8d76 feat: custom theme system with PostgreSQL PL/pgSQL highlighting fix
- Fix PostgreSQL function highlighting by disabling doubleDollarQuotedStrings
  in extended PostgreSQL dialect, enabling PL/pgSQL syntax highlighting
  inside $ blocks
- Add complete custom editor theme system with multi-theme management
  (create, rename, duplicate, delete), visual color editor (12 colors),
  JSON import/export, real-time preview, and 12 preset color schemes
- Add background/foreground color customization with system theme defaults
- Optimize EditorSettingsDialog layout: 2-column grid with font selector
  taking available space and theme dropdown grouped with custom theme button
- Add i18n support for custom theme UI (en, zh-CN, zh-TW, es)
- Fix Tauri production build by adding custom-protocol feature
- Update .gitignore for temporary build artifacts

Closes t8y2#788

Co-authored-by: Sam <14344444@@qq.com>
2026-06-06 20:59:21 +08:00
t8y2 0b07f05f72 fix(grid): prevent grid from intercepting clipboard in native inputs and cell detail
- Add data-native-clipboard to cell detail panel so Cmd+C copies selected text
- Skip onGridPaste when event target is a native input element
2026-06-06 20:49:32 +08:00
t8y2 2b5300722f feat: optimize tab result lifecycle caching 2026-06-06 20:30:35 +08:00
t8y2 b226b445d6 fix(export): preserve MySQL bit literals in SQL export 2026-06-06 19:03:21 +08:00
t8y2 f2924a3725 feat: support hive and mongodb transfers 2026-06-06 17:35:59 +08:00
t8y2 e504d0c175 fix: sync transpose cell detail selection 2026-06-06 17:06:33 +08:00
t8y2 fcf5ad7261 fix(grid): align canvas cell state rendering 2026-06-06 16:33:40 +08:00
t8y2 631584bed1 fix(mongo): align table grid controls 2026-06-06 15:41:18 +08:00
t8y2 6bcc85233c fix(grid): show local column filters in filter popover 2026-06-06 14:04:52 +08:00
t8y2 7acd1625a9 fix(web): support encrypted config import over HTTP 2026-06-06 13:12:28 +08:00
t8y2 7cfdcff8c7 fix(grid): prevent canvas selection from rendering black 2026-06-06 11:50:39 +08:00
t8y2 fecefb1589 fix(grid): refine total row counting 2026-06-06 11:13:47 +08:00
André Mácola 11a6a59eb4 feat: add pt-BR localization support and locale option (#797) 2026-06-06 09:15:09 +08:00
t8y2 2ee51327bd fix: remove ellipsis on canvas cell text truncation 2026-06-06 00:55:14 +08:00
t8y2 012b03cac5 fix: prevent grid paste handler from intercepting paste in edit mode
When a cell is in edit mode, the native paste event was bubbling up to
the grid root's @paste handler, which called preventDefault() and wrote
values directly to the data model instead of the edit input. This caused
the "Pasted!" toast to appear but the input content remained unchanged.

Adding @paste.stop on edit inputs allows the browser's default paste
behavior to insert text into the input field, properly updating editValue
via v-model.
2026-06-06 00:34:09 +08:00
t8y2 44d6f167ea fix: show full tab title immediately when opening table from sidebar
Set tableMeta early so tabDisplayTitle can render the @database suffix
right away instead of waiting for loadTableMeta to complete.
2026-06-06 00:05:13 +08:00
t8y2 bcafb9bc93 Revert "feat: support multiple desktop windows"
This reverts commit 642fa39bb8.
2026-06-06 00:01:38 +08:00
t8y2 642fa39bb8 feat: support multiple desktop windows 2026-06-05 20:45:00 +08:00
Francesco Lucarelli 28e8a77fa3 Fix typecheck mismatch by mapping rqlite to sqlite and add Italian locale (#787)
Thanks for adding Italian locale support and fixing the rqlite dialect mapping, @fraluc06!
2026-06-05 18:48:14 +08:00
skyler d2166e080c Merge pull request #782 from sunny0826/feat/kwdb
feat: add KWDB support
2026-06-05 18:16:17 +08:00
t8y2 ee94157055 fix(desktop): add color fallbacks for legacy webviews 2026-06-05 18:07:11 +08:00
Xudong Guo 9b15843e1a feat: add KWDB support 2026-06-05 16:55:38 +08:00
t8y2 8942356eed fix: sort sidebar metadata nodes consistently 2026-06-05 16:44:41 +08:00
t8y2 bbe51d409c fix(grid): preserve structured filter conditions on refresh and rollback
The toolbar refresh, rollback, and post-save reload were passing only
the manual WHERE input to the reload event, discarding structured filter
conditions added via the filter builder popover. Changed all three call
sites to use currentWhereInput() which combines both filter sources.
2026-06-05 15:15:23 +08:00
t8y2 a2c9503a3d perf(sidebar): reduce tree selection overhead 2026-06-05 14:30:25 +08:00
t8y2 b4a207fc6b feat(redis): add fetch-all keys button and incremental namespace tree merging
- Add "Fetch All" button alongside "Load More" to continuously SCAN until all keys loaded
- Add stop button and scan progress display during fetch-all
- Implement mergeKeysIntoRedisKeyTree for incremental namespace tree building
- Add toast notifications for empty form validation in key detail panel
- Add i18n translations for new UI elements (zh-CN, zh-TW, en, es)
- Add unit tests for incremental tree merge covering 6 scenarios
2026-06-05 13:57:26 +08:00
t8y2 e780e66e41 fix(sql): improve kingbase metadata loading and dangerous sql confirmation 2026-06-05 12:48:29 +08:00
DengQingNian 47ddbd5ce7 feat(ui): 支持预览postgres的Geometry数据为图形
为 cell detail 面板中的 PostGIS geometry/geography 列添加基于 Canvas 的几何图形预览弹窗
2026-06-05 12:41:19 +08:00
t8y2 ea45e1c331 feat(redis): add copy insert statement button for Redis key value migration
Generates a Redis insert command (SET/RPUSH/SADD/ZADD/HSET/XADD/JSON.SET) from
the current key's value and copies it to clipboard. Supports TTL, pagination
hints, and binary value handling.
2026-06-05 12:15:53 +08:00
t8y2 6dadb4ddb7 fix(redis): prevent unmount-on-hide lag when switching from command to detail panel
Setting unmountOnHide to false on the Tabs component avoids re-mounting
RedisValueViewer and its heavy async initialisation (API calls + Shiki
highlighting) each time the user switches back from the CLI panel.
2026-06-05 12:04:25 +08:00
DengQingNian dd24f1241e fix(ui): replace DialogScrollContent with scrollable DialogContent for transfer dialog search input
Replace DialogScrollContent with DialogContent + custom scrollable container to fix focus issue with search input in transfer dialog.
2026-06-05 01:34:01 +08:00
t8y2 0887b96236 feat: add rqlite database support 2026-06-05 01:02:07 +08:00
t8y2 a799958328 feat: add driver runtime manager 2026-06-04 23:20:15 +08:00
t8y2 a8c08cd7e9 fix(i18n): add missing structureEditor.copySql locale key
TableStructureEditor.vue references t("structureEditor.copySql") but
the key was missing from all locale files, causing raw key text display.
2026-06-04 22:10:58 +08:00
t8y2 cbcd5dc6e5 feat(access): enable table structure editing for Access databases
- Add accessCapabilities based on UCanAccess DDL support testing
- CREATE TABLE, ADD COLUMN, CREATE INDEX are supported
- DROP COLUMN, ALTER COLUMN, RENAME COLUMN, DROP INDEX are not supported
- Use H2 SQL dialect for generated DDL
2026-06-04 22:10:51 +08:00
t8y2 25188bc5c5 fix: enhance fitCanvasText function with caching and improve text fitting logic 2026-06-04 21:32:59 +08:00
t8y2 5e21b74487 fix: prevent bigint precision loss in structured filter value parsing
When parseFilterValue converts numeric strings to JS Number, integers
exceeding Number.MAX_SAFE_INTEGER lose precision (e.g. 2062449923745665025
becomes 2062449923745665024). Keep them as strings so the Rust backend can
parse them exactly via serde_json::Number.
2026-06-04 20:33:46 +08:00
t8y2 120566b1fd fix: improve JDBC dialect handling 2026-06-04 19:40:52 +08:00
t8y2 01c8072d97 fix: support MongoDB Atlas SRV connections in form mode
Add an "SRV (MongoDB Atlas)" toggle in the MongoDB connection form.
When enabled, the backend uses mongodb+srv:// scheme and omits the
port, matching the behavior of pasting a mongodb+srv:// URL directly.
2026-06-04 16:01:31 +08:00
t8y2 43de1d6d0a fix: satisfy grid tooltip prop contract 2026-06-04 15:19:27 +08:00
t8y2 9935f8e7fe fix: improve iris schema metadata completion 2026-06-04 15:09:56 +08:00
t8y2 c8539bcc32 perf: replace column header Tooltip with hand-rolled LightTooltip 2026-06-04 14:25:41 +08:00
t8y2 293600d9b4 fix: pass connection query timeout to execute_batch so ALTER respects configured timeout
Previously execute_batch always used the hardcoded 30s default timeout,
ignoring the user's query_timeout_secs connection setting. This caused
long-running ALTER TABLE statements on large tables to time out even
when the user configured a longer timeout or disabled it entirely.
2026-06-04 13:54:20 +08:00