Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
2d7fb8f
feat(mysql): add visible/invisible index management for MySQL 8.0+
Aias00 Aug 5, 2026
3b20194
refactor: extract index visibility SQL constants
Aias00 Aug 6, 2026
012ce6b
fix(mysql): wire lightweight ALTER INDEX visibility path into ALTER T…
Aias00 Aug 7, 2026
3071b60
fix(mysql): add missing SQLConstants import for SPACE usage
Aias00 Aug 7, 2026
925f102
fix(ci): refresh i18n source hashes after en-US translation updates
Aias00 Aug 10, 2026
ef5bf58
feat(mysql): add invisible column management for MySQL 8.0.23+
Aias00 Aug 5, 2026
6232f00
refactor: use SQL_INVISIBLE constant in column DDL
Aias00 Aug 6, 2026
18c42f4
fix(mysql): emit INVISIBLE before COMMENT in column DDL
Aias00 Aug 7, 2026
4c6521a
fix(ci): refresh i18n source hashes after en-US translation updates
Aias00 Aug 10, 2026
7a9107e
feat(mysql): active InnoDB transaction inspection (MYSQL-OPS-002)
Aias00 Aug 7, 2026
0f3c3e5
fix(client): use {1}-based i18n placeholders (0-based placeholders we…
Aias00 Aug 7, 2026
5f7e7b5
refactor(terminal): refactor terminal shell startup logic with fault-…
liushikuan63 Aug 22, 2026
3167217
refactor(terminal): refactor terminal session manager to support conf…
liushikuan63 Aug 22, 2026
2fe2d63
Merge branch 'main' into feature/mysql-invisible-index-2574
Aias00 Aug 23, 2026
53cecf3
Merge branch 'main' into feature/mysql-active-transaction-2595
Aias00 Aug 23, 2026
24777a0
Merge main into active transaction PR
Aias00 Aug 26, 2026
290e4ee
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Aug 26, 2026
cdd820a
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Aug 26, 2026
0adc262
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Aug 26, 2026
df33556
fix(dm): support EXPLAIN execution plans
haizhi03 Aug 26, 2026
813ec27
Merge remote-tracking branch 'upstream/main' into fix/issue-2762
haizhi03 Aug 26, 2026
291d880
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Aug 27, 2026
44de376
test(dm): cover EXPLAIN statement classification
haizhi03 Aug 28, 2026
6a8950c
fix(dm): preserve EXPLAIN parser statement type
haizhi03 Aug 28, 2026
99704fd
Merge remote-tracking branch 'upstream/main' into fix/dm-explain
haizhi03 Aug 28, 2026
3ac3c27
Merge remote-tracking branch 'origin/fix/dm-explain' into fix/dm-explain
haizhi03 Aug 28, 2026
1515157
Merge branch 'main' into fix/dm-explain
Aias00 Aug 31, 2026
d2ac449
Merge pull request #2771 from haizhi03/fix/dm-explain
Aias00 Aug 31, 2026
7e9b4b4
fix(mysql): bind active transactions to datasource
Aias00 Aug 31, 2026
b5df3ac
fix(mysql): preserve mixed index edits
Aias00 Aug 31, 2026
84e8abb
fix(mysql): handle nullable column metadata
Aias00 Aug 31, 2026
904ad57
feat(ai): add chat history navigation and renaming
openai0229 Aug 31, 2026
f1fd364
Merge pull request #2849 from OtterMind/feat/ai-chat-history-navigation
openai0229 Aug 31, 2026
1f9ed56
fix(result): search custom-rendered column names
openai0229 Aug 31, 2026
da06006
Merge pull request #2851 from OtterMind/fix/result-search-field-name
openai0229 Aug 31, 2026
7c1face
fix(redis): open details on row click
openai0229 Aug 31, 2026
609e995
fix(workspace): align datasource header
openai0229 Aug 31, 2026
b8b3e53
Merge pull request #2853 from OtterMind/fix/redis-row-click
openai0229 Aug 31, 2026
328042b
Merge branch 'main' into fix/workspace-header-alignment
openai0229 Aug 31, 2026
50ba27a
Merge pull request #2854 from OtterMind/fix/workspace-header-alignment
openai0229 Aug 31, 2026
f15b78e
feat(task): show progress in execution log
openai0229 Aug 31, 2026
7bc8060
Merge pull request #2857 from OtterMind/feat/task-log-progress
openai0229 Aug 31, 2026
fbca08b
fix(hive): expose databases through database metadata
openai0229 Aug 31, 2026
e60d300
fix(frontend): increase editor watermark density
openai0229 Sep 1, 2026
9a56777
fix(community): make file save lifecycle deterministic
openai0229 Sep 1, 2026
c839d78
fix(frontend): strengthen datasource identity color backgrounds (#2860)
openai0229 Sep 1, 2026
9ee5b3a
Merge pull request #2859 from OtterMind/fix/community-watermark-density
openai0229 Sep 1, 2026
7ee6f4f
Merge origin/main into feature/mysql-active-transaction-2595
Aias00 Sep 1, 2026
143caca
fix(frontend): keep file save state current
openai0229 Sep 1, 2026
5881399
Merge remote-tracking branch 'origin/main' into fix/community-local-f…
openai0229 Sep 1, 2026
c90ac12
Merge origin/main into feature/mysql-invisible-index-2574
Aias00 Sep 1, 2026
9d18354
Merge origin/main into feature/mysql-invisible-column-2571
Aias00 Sep 1, 2026
2f45f3a
fix(mysql): gate invisible indexes by server version
Aias00 Sep 1, 2026
4e53403
fix(mysql): gate invisible columns by server version
Aias00 Sep 1, 2026
2c9f7e0
fix(client): optimize long result cell rendering (#2863)
openai0229 Sep 1, 2026
27faf0e
fix(community): close local file save races
openai0229 Sep 1, 2026
55ba6cd
Merge remote-tracking branch 'origin/main' into fix/community-local-f…
openai0229 Sep 1, 2026
368aaee
fix(frontend): preserve live file metadata after save
openai0229 Sep 1, 2026
7ef605e
feat(mysql): complete active transaction diagnostics
Aias00 Sep 1, 2026
0866950
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
f953719
fix(mysql): harden active transaction inspection
Aias00 Sep 1, 2026
043bf4b
Merge pull request #2861 from OtterMind/fix/community-local-file-save…
openai0229 Sep 1, 2026
1b136e2
Merge remote-tracking branch 'origin/main' into HEAD
Aias00 Sep 1, 2026
42dade4
fix(i18n): localize dynamic datasource forms
openai0229 Sep 2, 2026
02868f0
fix(mysql): centralize index visibility values and guard unknown vers…
openai0229 Sep 2, 2026
1d780c2
Merge commit 'refs/codex/aias-review/upstream-main' into codex/sync-p…
openai0229 Sep 2, 2026
95bd4a5
Merge remote-tracking branch 'origin/main' into review/pr-2737-delivery
openai0229 Sep 2, 2026
ccb0f05
fix(terminal): make system shell fallback reliable
openai0229 Sep 2, 2026
48ba2c4
Merge pull request #2606 from Aias00/feature/mysql-invisible-index-2574
openai0229 Sep 2, 2026
4b62057
Merge pull request #2864 from OtterMind/codex/fix-i18n-dynamic-dataso…
openai0229 Sep 2, 2026
11527fe
fix(workspace): keep local files out of localStorage
openai0229 Sep 2, 2026
88f4e8a
fix(workspace): migrate legacy local file state
openai0229 Sep 2, 2026
2090156
Merge remote-tracking branch 'origin/main' into review/pr-2737-delivery
openai0229 Sep 2, 2026
a829708
Merge pull request #2866 from OtterMind/fix/local-file-workspace-stor…
openai0229 Sep 2, 2026
4e894c0
perf(mysql): avoid full parse for ordinary completion scripts
openai0229 Sep 2, 2026
e439f86
fix(mysql): format active transaction start time
Aias00 Sep 2, 2026
3bcd316
Merge pull request #2865 from OtterMind/fix/sql-completion-performance
openai0229 Sep 2, 2026
edc3222
Merge pull request #2737 from liushikuan63/main
openai0229 Sep 2, 2026
b062e1e
Merge main and fix MySQL invisible column management
openai0229 Sep 2, 2026
c4e8ad6
Merge remote-tracking branch 'origin/main' into codex/pr-2607-fix
openai0229 Sep 2, 2026
b2c27e6
refactor(client): centralize database capability checks
openai0229 Sep 2, 2026
3802df7
fix(client): keep MySQL visibility keywords literal
openai0229 Sep 2, 2026
85d2e0a
Merge pull request #2607 from Aias00/feature/mysql-invisible-column-2571
openai0229 Sep 2, 2026
961c6e5
fix(result): stabilize sorting and edit actions
openai0229 Sep 2, 2026
248d720
Merge pull request #2868 from OtterMind/fix/result-set-sort-edit-actions
openai0229 Sep 2, 2026
c30bfc6
Merge remote-tracking branch 'origin/main' into ci-fix/feature-mysql-…
Aias00 Sep 2, 2026
f232e5f
fix(mysql): refine active transaction inspection
openai0229 Sep 3, 2026
223f436
docs(mysql): align active transaction test steps
openai0229 Sep 3, 2026
b8aa245
fix(workspace): keep panel resizing responsive
openai0229 Sep 3, 2026
3ca2412
fix(tabs): restore theme accent fallback
openai0229 Sep 3, 2026
70ff3f8
refactor(mysql): centralize active transaction constants
openai0229 Sep 3, 2026
2036991
Merge pull request #2870 from OtterMind/fix/workspace-resize-theme-ac…
openai0229 Sep 3, 2026
5f64979
Merge origin/main into feature/mysql-active-transaction-2595
openai0229 Sep 3, 2026
cf39305
Merge pull request #2636 from Aias00/feature/mysql-active-transaction…
openai0229 Sep 3, 2026
20e9122
fix(notification): ignore stale refreshes
HandSonic Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 14 additions & 8 deletions chat2db-community-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"build": "yarn run build:web:community",
"build:prod": "yarn run build:web:community",
"build:web": "umi build",
"prebuild:web:community": "yarn test:community-boundary && yarn test:retired-ai && yarn test:tree-title-highlight && yarn test:tree-search-lifecycle && yarn test:driver-upload && yarn test:tree-loading && yarn test:tree-node-lookup && yarn test:tree-node-path && yarn test:data-source-authorization && yarn test:data-source-mutation-refresh && yarn test:ai-model-config && yarn test:ai-model-select && yarn test:export-connections && yarn test:main-page-navigation && yarn test:console-tab-name && yarn test:workspace-tab-scroll && yarn test:workspace-split-lifecycle && yarn test:sql-completion-context && yarn test:file-manager-label && yarn test:local-file-encoding && yarn test:editor-close && yarn test:result-set-ui && yarn test:result-pagination && yarn test:result-table-layout && yarn test:result-status && yarn test:data-source-identity && yarn test:data-source-execution-snapshot && yarn test:data-source-watermark && yarn test:hot-update && yarn test:task-center && yarn test:application-exit && yarn test:monaco-lifecycle && yarn test:result-set-editor",
"prebuild:web:community": "yarn test:community-boundary && yarn test:database-capabilities && yarn test:table-editor && yarn test:retired-ai && yarn test:tree-title-highlight && yarn test:tree-search-lifecycle && yarn test:driver-upload && yarn test:tree-loading && yarn test:tree-node-lookup && yarn test:tree-node-path && yarn test:data-source-authorization && yarn test:active-transactions && yarn test:data-source-mutation-refresh && yarn test:ai-model-config && yarn test:ai-model-select && yarn test:export-connections && yarn test:main-page-navigation && yarn test:shortcut && yarn test:console-tab-name && yarn test:workspace-tab-scroll && yarn test:workspace-split-lifecycle && yarn test:sql-completion-context && yarn test:file-manager-label && yarn test:local-file-encoding && yarn test:local-file-save && yarn test:local-file-tree-path && yarn test:saved-console-dirty && yarn test:editor-close && yarn test:result-set-ui && yarn test:result-pagination && yarn test:sql-execution-stream && yarn test:result-table-layout && yarn test:result-status && yarn test:data-source-identity && yarn test:data-source-execution-snapshot && yarn test:data-source-watermark && yarn test:hot-update && yarn test:task-center && yarn test:application-exit && yarn test:monaco-lifecycle && yarn test:result-set-editor",
"postbuild:web:community": "node ./scripts/verify-production-bundles.cjs",
"build:web:2java": "yarn run build:web:community && rm -rf ../chat2db-community-server/chat2db-community-start/src/main/resources/thymeleaf/* && cp -r dist/index.html ../chat2db-community-server/chat2db-community-start/src/main/resources/thymeleaf/",
"build:web:community": "cross-env UMI_ENV=community cross-env APP_NAME=chat2db-community cross-env APP_VERSION=${npm_config_app_version} cross-env PRINT_LOGS=${npm_config_print_logs} cross-env APP_PORT=${npm_config_app_port} umi build",
Expand All @@ -25,8 +25,11 @@
"lint:style": "stylelint \"src/**/*.{css,less}\" --max-warnings=0",
"test:i18n": "node ./scripts/validate-i18n.cjs",
"test:community-boundary": "node ./scripts/verify-community-boundary.cjs",
"test:retired-ai": "tsx src/blocks/AI/retiredAiSurface.test.ts && tsx src/blocks/AI/components/AIChatInput/mentionSelection.test.ts && tsx src/blocks/AI/knowledgeSelection.test.ts",
"test:database-capabilities": "tsx src/utils/databaseJudgments.test.ts",
"test:table-editor": "tsx src/blocks/DatabaseTableEditor/ColumnList/normalizeColumn.test.ts",
"test:retired-ai": "tsx src/blocks/AI/retiredAiSurface.test.ts && tsx src/blocks/AI/components/AIChatInput/mentionSelection.test.ts && tsx src/blocks/AI/knowledgeSelection.test.ts && tsx src/blocks/AI/messageNavigation.test.ts",
"test:hot-update": "tsx src/store/global/slices/hotUpdate/action.test.ts",
"test:active-transactions": "tsx src/blocks/NewTree/components/ActiveTransactionsContent/activeTransactionUtils.test.ts && tsx src/blocks/NewTree/treeMenuGrouping.test.ts",
"test:result-pagination": "tsx src/blocks/SearchResult/components/ResultSet/pagination.test.ts",
"test:tree-node-path": "tsx src/blocks/NewTree/utils/treeNodePath.test.ts",
"test:ai-model-config": "tsx src/blocks/AI/components/AIModelConfigModal/modelConfigDefaults.test.ts",
Expand All @@ -43,7 +46,7 @@
"test:data-source-mutation-refresh": "tsx src/store/tree/dataSourceMutationRefresh.test.ts",
"test:dynamic-database-registry": "tsx src/utils/dynamicDatabaseRegistry.test.ts",
"test:execution-console": "tsx src/blocks/SearchResult/components/ExecutionConsole/executionConsolePreferences.test.ts",
"test:editor-close": "tsx src/utils/editorCloseGuard.test.ts",
"test:editor-close": "tsx src/utils/editorCloseGuard.test.ts && tsx src/pages/main/workspace/components/SQLExecute/liveEditorHandle.test.ts && tsx src/pages/main/workspace/components/SQLExecute/liveEditorBoundInfo.test.ts",
"test:export-connections": "tsx src/pages/main/workspace/components/WorkspaceLeftActionBar/components/TreeSetting/exportConnectionsFlow.test.ts",
"test:file-manager-label": "tsx src/utils/fileManagerLabel.test.ts",
"test:label-rotation": "tsx src/blocks/BI/Chart/components/EChartsContainer/hooks/useLabelRotate.test.ts",
Expand All @@ -62,7 +65,7 @@
"test:saved-console-lifecycle": "tsx src/store/workspace/utils/savedConsoleLifecycle.test.ts && tsx src/store/workspace/utils/workspaceTabPersistence.test.ts",
"test:sse-request": "tsx src/components/SSERequest/requestOwnership.test.ts && tsx src/components/SSERequest/requestTransport.test.ts",
"test:settings-layout": "tsx src/blocks/Setting/navigation.test.ts && tsx src/blocks/Setting/search.test.ts && tsx src/blocks/Setting/BaseSetting/model.test.ts && tsx src/client-extension/settingMenus.test.ts && tsx src/blocks/Setting/settingsLayout.test.ts",
"test:shortcut": "tsx src/constants/shortcut.test.ts && tsx src/utils/appTitleBarAction.test.ts && tsx src/layouts/GlobalLayout/AppTitleBar/platform.test.ts && tsx src/utils/jcefZoom.test.ts",
"test:shortcut": "tsx src/constants/shortcut.test.ts && tsx src/utils/appTitleBarAction.test.ts && tsx src/layouts/GlobalLayout/AppTitleBar/platform.test.ts && tsx src/utils/jcefZoom.test.ts && tsx src/utils/shortcutDispatch.test.ts",
"test:sql-execution-log": "tsx src/service/sqlExecutionLog.test.ts",
"test:sql-execution-batch": "tsx src/service/sqlExecutionBatch.test.ts",
"test:data-source-execution-snapshot": "tsx src/service/dataSourceExecutionSnapshot.test.ts",
Expand All @@ -71,19 +74,22 @@
"test:result-set-editor": "tsx src/blocks/SearchResult/components/ResultSetTable/utils/editorType.test.ts && tsx src/blocks/CanvasTable/editor/SelectIEditor/index.test.ts && tsx src/blocks/CanvasTable/editor/MultiSelectIEditor/index.test.ts && tsx src/blocks/CanvasTable/editor/SelectIEditor/index.dom.test.ts",
"test:local-file-tab-title": "tsx src/pages/main/workspace/utils/localTextFile.test.ts",
"test:local-file-tab-refresh": "tsx src/store/workspace/utils/localFileWorkspaceTab.test.ts",
"test:local-file-save": "tsx src/utils/localFileSaveCoordinator.test.ts",
"test:local-file-tree-path": "tsx src/pages/main/workspace/components/LocalSQLFileTree/path.test.ts",
"test:saved-console-dirty": "tsx src/utils/savedConsoleDirty.test.ts",
"test:local-file-encoding": "tsx src/utils/localFileEncoding.test.ts && yarn test:local-file-tab-refresh && tsx src/store/workspace/utils/workspaceTabPersistence.test.ts",
"test:main-page-navigation": "tsx src/utils/mainPageNavigation.test.ts && tsx src/pages/main/navigationItems.test.ts && tsx src/client-extension/extension.test.ts",
"test:monaco-lifecycle": "tsx src/utils/monaco.test.ts",
"test:monaco-lifecycle": "tsx src/utils/monaco.test.ts && tsx src/components/SingleFileMonacoEditor/refAdapter.test.ts",
"test:mcp-lifecycle": "tsx src/blocks/Setting/McpSetting/mcpLifecycle.test.ts",
"test:sql-completion-context": "tsx src/components/SQLEditor/core/sqlCompletionContext.test.ts && tsx src/components/SQLEditor/core/sqlCompletionRequestError.test.ts",
"test:sql-in-clipboard": "tsx src/utils/sqlInClipboard.test.ts && tsx src/components/SQLEditor/helper/sqlInsertValueDefaults.test.ts",
"test:console-tab-name": "tsx src/store/workspace/utils/consoleTabName.test.ts && tsx src/utils/workspaceObjectTabTitle.test.ts",
"test:workspace-tab-scroll": "tsx src/store/workspace/utils/workspaceTabScrollRequest.test.ts && tsx src/components/Tabs/activeTabScroll.test.ts && tsx src/components/Tabs/wheelScroll.test.ts",
"test:workspace-split-lifecycle": "tsx src/pages/main/workspace/components/WorkspaceTabs/workspaceTabContentLayout.test.ts",
"test:workspace-tab-scroll": "tsx src/store/workspace/utils/workspaceTabScrollRequest.test.ts && tsx src/components/Tabs/activeTabScroll.test.ts && tsx src/components/Tabs/wheelScroll.test.ts && tsx src/components/Tabs/tabAccentColor.test.ts",
"test:workspace-split-lifecycle": "tsx src/pages/main/workspace/components/WorkspaceTabs/workspaceTabContentLayout.test.ts && tsx src/pages/main/workspace/components/WorkspaceTabs/workspaceTabLayout.test.ts",
"test:tree-title-highlight": "tsx src/blocks/NewTree/components/TitleRender/highlightSearchText.test.ts",
"test:tree-search-lifecycle": "tsx src/pages/main/workspace/components/WorkspaceTreeSearch/lifecycle.test.ts && tsx src/pages/main/workspace/components/WorkspaceTreeSearch/refresh.test.ts",
"test:tree-data-update": "tsx src/store/tree/treeDataUpdate.test.ts",
"test:tree-loading": "tsx src/store/tree/loadNamespaceTree.test.ts && tsx src/store/tree/treeDataUpdate.test.ts && tsx src/store/tree/hiddenTreeNodeState.test.ts && tsx src/blocks/NewTree/components/TitleRender/switcherAction.test.ts && tsx src/blocks/NewTree/treeScrollWidth.test.ts && tsx src/pages/main/workspace/components/WorkspaceLeft/loadDatabaseTreePath.test.ts && tsx src/store/tree/savedConsoleTreeRefresh.test.ts",
"test:tree-loading": "tsx src/store/tree/loadNamespaceTree.test.ts && tsx src/store/tree/treeDataUpdate.test.ts && tsx src/store/tree/hiddenTreeNodeState.test.ts && tsx src/blocks/NewTree/components/TitleRender/switcherAction.test.ts && tsx src/blocks/NewTree/treeScrollWidth.test.ts && tsx src/blocks/NewTree/monitorTree.test.ts && tsx src/pages/main/workspace/components/WorkspaceLeft/loadDatabaseTreePath.test.ts && tsx src/store/tree/savedConsoleTreeRefresh.test.ts",
"test:tree-node-lookup": "tsx src/utils/treeNodeLookup.test.ts",
"test:data-source-watermark": "tsx src/utils/dataSourceWatermark.test.ts",
"test:driver-upload": "tsx src/components/ConnectionEdit/components/Driver/driverUpload.test.ts",
Expand Down
12 changes: 6 additions & 6 deletions chat2db-community-client/scripts/i18n-source-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"common.ts": "24aa2228702754bc019f1e21dd7be9f6d1c6ff02ed9bd9227ab319f331248b11",
"connection.ts": "d70578a3444978b60ea41c670e8b180849eaab297e33325db56c891e1058e899",
"dashboard.ts": "b99f5e6b81271573a8db1a585ac879724441b7163050899c3abaf9498217bd21",
"editTable.ts": "0f7a808f50053cd52b183d156bb4fd46bb125b8058f8774deb61c7f02894a350",
"editTable.ts": "6d1233d574dbd2e038ed112bc8677b12f61a0fc831f56f77d5ce024a96a319f6",
"editTableData.ts": "b6f40d2e1f612b716c0dbc2ade925069a039585a28ada997e004c33ce2fd0901",
"feedback.ts": "080fbb0b2e6578d10499d47e0f23b7161feffb769c8a574048c5a737c9624eea",
"login.ts": "df4c7c4b2020ef3e9a70277f364d078fc6a10ad81be31d3b648933f14c423f43",
Expand All @@ -20,16 +20,16 @@
"setting.ts": "14aea4aebdbe5cff2ae9ba4bf955aa42a95ac23d1950ea69291b22c29330d7cf",
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "8418dd25b0fd54b2ef2b15a2573edf0a4876efb4e69936ff82a157ea5cf42be4",
"workspace.ts": "ff3ba00ee05c5e04c6ccaef4083a83e4f01b5307eff17b9afc6480525a9ef141"
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "4060d4bbd9e4268af70027ee6e76db0f5c12569d72bea1ea54dbfa08244ab588"
},
"ko-KR": {
"ai.ts": "e7a2fcbfb3ed647bd14f63aca4b6c35c8fb402c49a6a1f36bb04f76f4e8415af",
"chat.ts": "f6c6ab9cbc5c1c828c35c75d83c4adca347ade590b5177e10d64fdd18cc8aef5",
"common.ts": "24aa2228702754bc019f1e21dd7be9f6d1c6ff02ed9bd9227ab319f331248b11",
"connection.ts": "d70578a3444978b60ea41c670e8b180849eaab297e33325db56c891e1058e899",
"dashboard.ts": "b99f5e6b81271573a8db1a585ac879724441b7163050899c3abaf9498217bd21",
"editTable.ts": "0f7a808f50053cd52b183d156bb4fd46bb125b8058f8774deb61c7f02894a350",
"editTable.ts": "6d1233d574dbd2e038ed112bc8677b12f61a0fc831f56f77d5ce024a96a319f6",
"editTableData.ts": "b6f40d2e1f612b716c0dbc2ade925069a039585a28ada997e004c33ce2fd0901",
"feedback.ts": "080fbb0b2e6578d10499d47e0f23b7161feffb769c8a574048c5a737c9624eea",
"login.ts": "df4c7c4b2020ef3e9a70277f364d078fc6a10ad81be31d3b648933f14c423f43",
Expand All @@ -41,8 +41,8 @@
"setting.ts": "14aea4aebdbe5cff2ae9ba4bf955aa42a95ac23d1950ea69291b22c29330d7cf",
"spaceSetting.ts": "defdf3138e5e1782f0282760bcef4ce1b8550cc80b03052fea468d97165cb980",
"sqlEditor.ts": "5c41e5f24d5ba78909795bcc681cabb8460cca075233b665dc4940afe82ce0c9",
"stream.ts": "8418dd25b0fd54b2ef2b15a2573edf0a4876efb4e69936ff82a157ea5cf42be4",
"workspace.ts": "ff3ba00ee05c5e04c6ccaef4083a83e4f01b5307eff17b9afc6480525a9ef141"
"stream.ts": "2e2fca0b1ba1ecd5a1501b767be8857cf0b72d800d69a4acf9cd62a61d5ceaf5",
"workspace.ts": "4060d4bbd9e4268af70027ee6e76db0f5c12569d72bea1ea54dbfa08244ab588"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import { memo, useState, type CSSProperties } from 'react';
import { cx } from 'antd-style';

import i18n from '@/i18n';
import {
getMessageNavigationRailWidth,
type UserMessageNavigationItem,
} from '../../messageNavigation';
import { useStyles } from './style';

interface MessageNavigationRailProps {
items: UserMessageNavigationItem[];
onNavigate: (messageId: string) => void;
}

const MessageNavigationRail = ({ items, onNavigate }: MessageNavigationRailProps) => {
const { styles } = useStyles();
const [selectedIndex, setSelectedIndex] = useState(-1);
const [railScrollTop, setRailScrollTop] = useState(0);
const activeIndex = selectedIndex < items.length ? selectedIndex : -1;
const selectedItem = activeIndex >= 0 ? items[activeIndex] : null;

if (!items.length) {
return null;
}

return (
<div
className={styles.rail}
aria-label={i18n('stream.messageNavigation.title')}
onMouseLeave={() => setSelectedIndex(-1)}
onBlur={(event) => {
if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {
setSelectedIndex(-1);
}
}}
>
<div
className={styles.list}
onScroll={(event) => setRailScrollTop(event.currentTarget.scrollTop)}
>
{items.map((item, itemIndex) => (
<button
key={item.id}
type="button"
className={cx(styles.item, activeIndex === itemIndex && styles.itemActive)}
style={
{
'--message-navigation-rail-width': `${getMessageNavigationRailWidth(itemIndex, activeIndex)}px`,
} as CSSProperties
}
aria-label={`${item.index}. ${item.label}`}
onMouseEnter={() => setSelectedIndex(itemIndex)}
onFocus={() => setSelectedIndex(itemIndex)}
onClick={() => onNavigate(item.id)}
>
<span />
</button>
))}
</div>
{selectedItem ? (
<div className={styles.preview} style={{ top: activeIndex * 14 + 6 - railScrollTop }}>
<div className={styles.previewQuestion}>{selectedItem.label}</div>
{selectedItem.assistantPreview ? (
<div className={styles.previewAnswer}>{selectedItem.assistantPreview}</div>
) : null}
</div>
) : null}
</div>
);
};

export default memo(MessageNavigationRail);
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import { createStyles } from 'antd-style';

export const useStyles = createStyles(({ css, token }) => ({
rail: css`
position: absolute;
z-index: 6;
top: 50%;
left: max(8px, calc(50% - 448px));
transform: translateY(-50%);
width: 36px;
padding: 6px 0;
opacity: 0.72;
transition: opacity 0.15s ease;

&:hover,
&:focus-within {
opacity: 1;
}
`,
list: css`
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 2px;
width: 36px;
max-height: min(240px, 60vh);
overflow-y: auto;
overflow-x: hidden;
`,
item: css`
display: flex;
align-items: center;
width: 34px;
height: 12px;
padding: 0;
border: 0;
background: transparent;
cursor: pointer;

> span {
display: block;
width: var(--message-navigation-rail-width, 8px);
height: 2px;
border-radius: 1px;
background: ${token.colorTextQuaternary};
opacity: 0.55;
transition: background-color 0.1s ease, opacity 0.1s ease;
}

&:hover > span,
&:focus-visible > span {
width: 22px;
background: ${token.colorTextSecondary};
opacity: 1;
}

`,
itemActive: css`
> span,
&:hover > span,
&:focus-visible > span {
width: 30px;
height: 3px;
background: ${token.colorText};
opacity: 1;
}
`,
preview: css`
position: absolute;
left: 44px;
transform: translateY(-50%);
z-index: 1;
width: min(320px, calc(100vw - 96px));
height: 108px;
min-width: 0;
padding: 10px 12px;
border: 1px solid ${token.colorBorderSecondary};
border-radius: 8px;
background: ${token.colorBgElevated};
box-shadow: ${token.boxShadowSecondary};
pointer-events: none;
box-sizing: border-box;
`,
previewQuestion: css`
display: -webkit-box;
overflow: hidden;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
color: ${token.colorText};
font-size: 13px;
font-weight: 600;
line-height: 20px;
`,
previewAnswer: css`
display: -webkit-box;
overflow: hidden;
margin-top: 6px;
padding-top: 6px;
border-top: 1px solid ${token.colorBorderSecondary};
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
color: ${token.colorTextSecondary};
font-size: 12px;
line-height: 18px;
`,
}));
Loading
Loading