sqlite-hub 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +14 -9
  2. package/docs/MCP.md +8 -0
  3. package/docs/changelog.md +10 -0
  4. package/docs/guidelines/DESIGN.md +64 -0
  5. package/frontend/assets/mockups/backups_1_1920.webp +0 -0
  6. package/frontend/assets/mockups/backups_2_compare_drawer_1920.webp +0 -0
  7. package/frontend/assets/mockups/backups_3_create_backup_modal_1920.webp +0 -0
  8. package/frontend/assets/mockups/backups_4_edit_backup_modal_1920.webp +0 -0
  9. package/frontend/assets/mockups/backups_5_restore_backup_modal_1920.webp +0 -0
  10. package/frontend/assets/mockups/backups_6_delete_backup_modal_1920.webp +0 -0
  11. package/frontend/assets/mockups/charts_1_1920.webp +0 -0
  12. package/frontend/assets/mockups/charts_2_query_detail_1920.webp +0 -0
  13. package/frontend/assets/mockups/charts_3_create_query_chart_modal_1920.webp +0 -0
  14. package/frontend/assets/mockups/charts_4_edit_query_chart_modal_1920.webp +0 -0
  15. package/frontend/assets/mockups/charts_5_delete_query_chart_modal_1920.webp +0 -0
  16. package/frontend/assets/mockups/charts_6_copy_column_modal_1920.webp +0 -0
  17. package/frontend/assets/mockups/connections_1_1920.webp +0 -0
  18. package/frontend/assets/mockups/connections_2_create_connection_modal_1920.webp +0 -0
  19. package/frontend/assets/mockups/connections_3_open_connection_modal_1920.webp +0 -0
  20. package/frontend/assets/mockups/data_1_1920.webp +0 -0
  21. package/frontend/assets/mockups/data_2_roweditor_1920.webp +0 -0
  22. package/frontend/assets/mockups/data_3_generate_data_modal_1920.webp +0 -0
  23. package/frontend/assets/mockups/data_4_data_export_modal_1920.webp +0 -0
  24. package/frontend/assets/mockups/documents_1_1920.webp +0 -0
  25. package/frontend/assets/mockups/documents_2_document_insert_table_modal_1920.webp +0 -0
  26. package/frontend/assets/mockups/documents_3_document_insert_note_modal_1920.webp +0 -0
  27. package/frontend/assets/mockups/logs_1_1920.webp +0 -0
  28. package/frontend/assets/mockups/media_tagging_queue_1_1920.webp +0 -0
  29. package/frontend/assets/mockups/media_tagging_setup_1_1920.webp +0 -0
  30. package/frontend/assets/mockups/media_tagging_setup_2_create_media_tagging_tag_table_modal_1920.webp +0 -0
  31. package/frontend/assets/mockups/media_tagging_setup_3_create_media_tagging_mapping_table_modal_1920.webp +0 -0
  32. package/frontend/assets/mockups/overview_1_1920.webp +0 -0
  33. package/frontend/assets/mockups/settings_1_1920.webp +0 -0
  34. package/frontend/assets/mockups/sql_editor_1_1920.webp +0 -0
  35. package/frontend/assets/mockups/sql_editor_2_query_detail_1920.webp +0 -0
  36. package/frontend/assets/mockups/sql_editor_3_query_export_modal_1920.webp +0 -0
  37. package/frontend/assets/mockups/structure_1_1920.webp +0 -0
  38. package/frontend/assets/mockups/structure_2_generate_types_modal_1920.webp +0 -0
  39. package/frontend/assets/mockups/structure_3_generate_types_modal_1920.webp +0 -0
  40. package/frontend/assets/mockups/table_designer_1_1920.webp +0 -0
  41. package/frontend/assets/mockups/table_designer_2_table_designer_constraints_modal_1920.webp +0 -0
  42. package/frontend/js/api.js +11 -0
  43. package/frontend/js/app.js +238 -8
  44. package/frontend/js/components/badges.js +16 -0
  45. package/frontend/js/components/connectionCard.js +35 -0
  46. package/frontend/js/components/modal.js +116 -245
  47. package/frontend/js/components/queryHistoryDetail.js +25 -45
  48. package/frontend/js/components/rowEditorPanel.js +7 -60
  49. package/frontend/js/components/structureGraph.js +292 -13
  50. package/frontend/js/components/tableDesignerConstraintsDrawer.js +400 -0
  51. package/frontend/js/components/tableDesignerEditor.js +51 -16
  52. package/frontend/js/components/tableDesignerSidebar.js +9 -5
  53. package/frontend/js/store.js +551 -7
  54. package/frontend/js/utils/connectionRegistry.js +76 -0
  55. package/frontend/js/utils/tableDesigner.js +431 -62
  56. package/frontend/js/views/backups.js +2 -5
  57. package/frontend/js/views/charts.js +20 -10
  58. package/frontend/js/views/connections.js +103 -3
  59. package/frontend/js/views/data.js +19 -5
  60. package/frontend/js/views/structure.js +28 -5
  61. package/frontend/js/views/tableAdvisor.js +14 -6
  62. package/frontend/js/views/tableDesigner.js +44 -9
  63. package/frontend/styles/components.css +676 -79
  64. package/frontend/styles/structure-graph.css +49 -0
  65. package/frontend/styles/tailwind.generated.css +1 -1
  66. package/package.json +1 -1
  67. package/server/routes/connections.js +12 -0
  68. package/server/routes/data.js +1 -1
  69. package/server/routes/tableDesigner.js +15 -1
  70. package/server/services/mcpToolService.js +28 -0
  71. package/server/services/sqlite/connectionManager.js +23 -2
  72. package/server/services/sqlite/dataBrowserService.js +21 -0
  73. package/server/services/sqlite/introspection.js +39 -1
  74. package/server/services/sqlite/structureService.js +66 -11
  75. package/server/services/sqlite/tableAdvisor.js +6 -0
  76. package/server/services/sqlite/tableDesigner/schemaMapping.js +7 -1
  77. package/server/services/sqlite/tableDesigner/sql.js +31 -2
  78. package/server/services/sqlite/tableDesigner/validation.js +69 -9
  79. package/server/services/sqlite/tableDesignerService.js +110 -5
  80. package/server/services/storage/appStateStore.js +303 -4
  81. package/frontend/assets/mockups/backups_2_create_backup_modal_1920.webp +0 -0
  82. package/frontend/assets/mockups/backups_3_edit_backup_modal_1920.webp +0 -0
  83. package/frontend/assets/mockups/backups_4_restore_backup_modal_1920.webp +0 -0
  84. package/frontend/assets/mockups/backups_5_delete_backup_modal_1920.webp +0 -0
  85. package/frontend/assets/mockups/data_3_data_export_modal_1920.webp +0 -0
package/README.md CHANGED
@@ -39,6 +39,7 @@ SQLite Hub keeps that workflow sharp:
39
39
  - inspect database health, storage metrics, and schema connectivity from one overview
40
40
  - filter, sort, page through, and export table data
41
41
  - inspect schema, structure, and relationships
42
+ - recognize virtual and shadow tables with visual badges and Structure graph links
42
43
  - analyze individual tables with a deterministic local advisor
43
44
  - generate TypeScript, Rust, Kotlin, or Swift types from table schemas
44
45
  - edit records in place with typed value previews and an SQL diff preview before saving
@@ -59,7 +60,7 @@ SQLite Hub keeps that workflow sharp:
59
60
 
60
61
  [![SQLite Hub relationship graph](./frontend/assets/mockups/structure_1_1920.webp)](./frontend/assets/mockups/structure_1_1920.webp)
61
62
 
62
- Inspect tables, views, indexes, triggers, columns, declared types, primary keys, nullability, foreign keys, and DDL without losing pace. The searchable object list and relationship graph support fit, relayout, selection clearing, direct navigation to table data, and a hideable inspector/sidebar. Clicking a relationship edge opens a join preview with the mapped columns and a copyable SQL `JOIN` snippet.
63
+ Inspect tables, views, indexes, triggers, columns, declared types, primary keys, nullability, foreign keys, and DDL without losing pace. The searchable object list and relationship graph support fit, relayout, selection clearing, direct navigation to table data, and a hideable inspector/sidebar. Virtual tables and SQLite shadow tables are visually marked; shadow tables are grouped separately and connected to their owning virtual table in the graph. Clicking a relationship edge opens a join preview with the mapped columns and a copyable SQL `JOIN` snippet.
63
64
 
64
65
  ### Generate Types
65
66
 
@@ -84,15 +85,17 @@ For each table, SQLite Hub calculates a score, lists findings by severity, shows
84
85
 
85
86
  [![SQLite Hub data browser](./frontend/assets/mockups/data_1_1920.webp)](./frontend/assets/mockups/data_1_1920.webp)
86
87
 
87
- Scan rows, sort columns, move through local data quickly, and export full tables as CSV, TSV, Markdown, JSON, or Parquet.
88
+ Scan rows, sort columns, move through local data quickly, and export full tables as CSV, TSV, Markdown, JSON, or Parquet. Virtual and shadow tables are tagged in the table list, and shadow tables open read-only.
88
89
 
89
90
  Use `Generate` in the Data browser to create local synthetic test rows from the current table schema. The generator respects required columns, foreign keys, simple `CHECK` constraints, and shows a preview before insertion.
90
91
 
92
+ [![SQLite Hub synthetic data generator](./frontend/assets/mockups/data_3_generate_data_modal_1920.webp)](./frontend/assets/mockups/data_3_generate_data_modal_1920.webp)
93
+
91
94
  The Data browser also supports duplicating exports as a new table, searchable and hideable table navigation, page sizes up to 250 rows, and advanced filters with column/operator/value controls. Text filters support case-insensitive `contains`, `not contains`, and exact `equals` matching.
92
95
 
93
96
  Wide tables keep their horizontal scroll position when sorting causes the grid to re-render. Cells use compact previews for long values, BLOBs, and detected file paths, while exports retain complete BLOB content.
94
97
 
95
- [![SQLite Hub data export modal](./frontend/assets/mockups/data_3_data_export_modal_1920.webp)](./frontend/assets/mockups/data_3_data_export_modal_1920.webp)
98
+ [![SQLite Hub data export modal](./frontend/assets/mockups/data_4_data_export_modal_1920.webp)](./frontend/assets/mockups/data_4_data_export_modal_1920.webp)
96
99
 
97
100
  ### Row editing
98
101
 
@@ -180,7 +183,7 @@ Create bar, line, pie/donut, and scatter charts from chartable `SELECT` query-hi
180
183
 
181
184
  Create and edit SQLite tables from the UI. The Table Designer includes a searchable table list, validation and migration warnings, and controls for column names, SQLite types, `NOT NULL`, `UNIQUE`, primary keys, SQL defaults, foreign-key tables/columns, and check constraints. Existing composite unique constraints are surfaced as schema metadata.
182
185
 
183
- CSV files can seed a new table draft and optionally fill the created table with imported rows. Every change produces a copyable live SQL preview that can be hidden or shown before the schema operation is applied.
186
+ CSV, TSV, and JSON files can seed a new table draft and optionally fill the created table with imported rows. Every change produces a copyable live SQL preview that can be hidden or shown before the schema operation is applied.
184
187
 
185
188
  [![SQLite Hub Table Designer constraints](./frontend/assets/mockups/table_designer_2_table_designer_constraints_modal_1920.webp)](./frontend/assets/mockups/table_designer_2_table_designer_constraints_modal_1920.webp)
186
189
 
@@ -209,7 +212,9 @@ The Settings view reports the installed SQLite Hub version and the actual SQLite
209
212
 
210
213
  [![SQLite Hub backups](./frontend/assets/mockups/backups_1_1920.webp)](./frontend/assets/mockups/backups_1_1920.webp)
211
214
 
212
- Create verified local backups of the active SQLite database, review backup metadata, edit backup notes, download backup files, restore verified backups, and delete managed backups from the Backups view. SQLite Hub stores backup files under its local app-state backup directory by connection id and keeps a `manifest.json` beside each database's backup files. Each backup is created through SQLite's backup API, hashed with SHA-256, and verified with `PRAGMA quick_check` before it is marked as verified.
215
+ Create verified local backups of the active SQLite database, compare backup contents with the current database, review backup metadata, edit backup notes, download backup files, restore verified backups, and delete managed backups from the Backups view. SQLite Hub stores backup files under its local app-state backup directory by connection id and keeps a `manifest.json` beside each database's backup files. Each backup is created through SQLite's backup API, hashed with SHA-256, and verified with `PRAGMA quick_check` before it is marked as verified.
216
+
217
+ [![SQLite Hub backup compare drawer](./frontend/assets/mockups/backups_2_compare_drawer_1920.webp)](./frontend/assets/mockups/backups_2_compare_drawer_1920.webp)
213
218
 
214
219
  SQLite Hub also proposes a safety backup before operations that can be hard to undo:
215
220
 
@@ -221,13 +226,13 @@ SQLite Hub also proposes a safety backup before operations that can be hard to u
221
226
  The safety dialog lets you create the backup and continue, continue without creating one, or cancel the operation.
222
227
 
223
228
  <p>
224
- <a href="./frontend/assets/mockups/backups_2_create_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_2_create_backup_modal_1920.webp" alt="SQLite Hub create backup modal" width="49%"></a>
225
- <a href="./frontend/assets/mockups/backups_3_edit_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_3_edit_backup_modal_1920.webp" alt="SQLite Hub edit backup modal" width="49%"></a>
229
+ <a href="./frontend/assets/mockups/backups_3_create_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_3_create_backup_modal_1920.webp" alt="SQLite Hub create backup modal" width="49%"></a>
230
+ <a href="./frontend/assets/mockups/backups_4_edit_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_4_edit_backup_modal_1920.webp" alt="SQLite Hub edit backup modal" width="49%"></a>
226
231
  </p>
227
232
 
228
233
  <p>
229
- <a href="./frontend/assets/mockups/backups_4_restore_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_4_restore_backup_modal_1920.webp" alt="SQLite Hub restore backup modal" width="49%"></a>
230
- <a href="./frontend/assets/mockups/backups_5_delete_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_5_delete_backup_modal_1920.webp" alt="SQLite Hub delete backup modal" width="49%"></a>
234
+ <a href="./frontend/assets/mockups/backups_5_restore_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_5_restore_backup_modal_1920.webp" alt="SQLite Hub restore backup modal" width="49%"></a>
235
+ <a href="./frontend/assets/mockups/backups_6_delete_backup_modal_1920.webp"><img src="./frontend/assets/mockups/backups_6_delete_backup_modal_1920.webp" alt="SQLite Hub delete backup modal" width="49%"></a>
231
236
  </p>
232
237
 
233
238
  ### Overview
package/docs/MCP.md CHANGED
@@ -58,11 +58,13 @@ Read-only and safe tools:
58
58
  - `get_indexes`: return all indexes or indexes for one table.
59
59
  - `get_foreign_keys`: return all foreign keys or foreign keys for one table.
60
60
  - `run_readonly_query`: execute a read-only `SELECT`, `PRAGMA`, or `EXPLAIN` query.
61
+ - `get_stored_queries`: list saved SQL Editor queries for a database, equivalent to `sqlite-hub --database:name --queries`.
61
62
  - `explain_query_plan`: run `EXPLAIN QUERY PLAN` and return structured plan rows plus index hints when a table scan appears.
62
63
  - `read_documents`: read database-scoped Markdown documents.
63
64
 
64
65
  Controlled write tools:
65
66
 
67
+ - `execute_stored_query`: execute a saved SQL Editor query by id, title, display title, or SQL fragment, equivalent to `sqlite-hub --database:name --execute:"query"`.
66
68
  - `create_backup`: create a verified backup through SQLite Hub's existing backup mechanism.
67
69
  - `generate_types`: generate TypeScript, Rust, Kotlin, or Swift types from one table or all tables.
68
70
  - `create_chart_from_query`: create a saved chart from a read-only `SELECT` query. It writes chart metadata to SQLite Hub but does not export files.
@@ -86,6 +88,8 @@ These statements are blocked in `run_readonly_query`:
86
88
 
87
89
  Backups are always created through SQLite Hub's managed backup service. Chart creation stores chart metadata only. The MCP server does not write arbitrary local files.
88
90
 
91
+ `execute_stored_query` intentionally follows the same behavior as the CLI and external API saved-query execution path. It executes the stored SQL as-is and records the run in Query History with `executedBy: "mcp"`.
92
+
89
93
  The HTTP MCP endpoint runs on SQLite Hub's existing loopback server. It is local-only and uses the same localhost request guard as the internal API. API tokens are not exposed through MCP tool responses.
90
94
 
91
95
  ## Settings Status
@@ -107,3 +111,7 @@ Use SQLite Hub MCP to create a backup before generating TypeScript types.
107
111
  ```text
108
112
  Use SQLite Hub MCP to explain the query plan for this SQL query.
109
113
  ```
114
+
115
+ ```text
116
+ Use SQLite Hub MCP to list my stored queries and execute the one named "Company List".
117
+ ```
package/docs/changelog.md CHANGED
@@ -1,3 +1,13 @@
1
+ # v2.1.0
2
+
3
+ - tags for databases
4
+ - search for database
5
+ - table designer accepts json, csv, tsv
6
+ - drawer headers are unified
7
+ - more mcp functions
8
+ - badges for shadow and virtual tables
9
+ - structure visual support for shadow tables
10
+
1
11
  # v2.0.0
2
12
 
3
13
  - mcp
@@ -39,6 +39,22 @@ Follow these rules exactly when creating or modifying UI controls.
39
39
  - Prefer migration over local override.
40
40
  - Prefer shared component updates over per-view fixes.
41
41
 
42
+ ## Multi-Pick Dropdowns
43
+
44
+ - Use this pattern for compact filters where the user can select multiple values, such as `TAGS`.
45
+ - Use `details.dropdown-button` with a `standard-button dropdown-button__toggle` summary.
46
+ - The toggle must have a fixed or bounded responsive width; it must not grow with long selected values.
47
+ - The toggle label must be wrapped in its own label span with `min-width: 0`, `overflow: hidden`, `text-overflow: ellipsis`, and `white-space: nowrap`.
48
+ - The toggle must keep a mandatory left inset. Do not rely only on inherited button padding; set explicit left padding on the pattern class when needed.
49
+ - The chevron must remain visible for all selected labels.
50
+ - Put the full selected label in `title` when the visible label may truncate.
51
+ - The dropdown panel must have visible inner padding. Header text, checkbox rows, and footer actions must never touch the panel edge.
52
+ - Multi-pick rows must use a stable grid: checkbox, truncated label, optional count.
53
+ - Row labels should follow the existing technical style: mono, uppercase, compact, and muted until hover or active state.
54
+ - Counts belong on the right edge and must not compress the label into the checkbox.
55
+ - The reset action belongs in a compact footer row, visually secondary to the selected values.
56
+ - Do not use native `<select multiple>` for this app UI.
57
+
42
58
  ## UX behavior
43
59
 
44
60
  - All drawers must close with `Escape`.
@@ -49,6 +65,54 @@ Follow these rules exactly when creating or modifying UI controls.
49
65
  - Do not clear multiline textareas with `Escape` unless the textarea is explicitly built as a search field.
50
66
  - If an input is already empty, `Escape` may continue to the next applicable close/clear behavior.
51
67
 
68
+ ## Drawer Inventory
69
+
70
+ - Backup Compare Drawer
71
+ - Charts Query Detail Drawer
72
+ - Table Designer Check Constraints Drawer
73
+ - SQL Editor Query History Drawer
74
+ - Data Row Editor Drawer
75
+
76
+ ## Drawer Header Pattern
77
+
78
+ - Every drawer header must use one small mono eyebrow followed directly by one `h2`.
79
+ - The eyebrow uses `font-mono text-[10px] uppercase tracking-[0.18em] text-primary-container/70`.
80
+ - The `h2` uses `mt-1 truncate font-body text-lg font-black uppercase tracking-tight text-on-surface`.
81
+ - Drawer context belongs in the eyebrow as `Feature // Context`.
82
+ - Do not add a third subtitle line under the `h2`.
83
+ - Drawer badges must use `status-badge status-badge--muted`.
84
+
85
+ ## Modal Inventory
86
+
87
+ All app modals use the shared shell in `frontend/js/components/modal.js` through `renderModal(state)` and its `contentByKind` map. The single modal state lives at `state.modal`. The generic opener is `openModal(kind, options)` in `frontend/js/store.js`; generic `data-action="open-modal"` dispatch is handled in `frontend/js/app.js`.
88
+
89
+ | Modal kind | Where it appears | Open/state owner | Body renderer |
90
+ | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------- |
91
+ | `open-connection` | Landing and Connections entry actions in `frontend/js/components/emptyState.js` and `frontend/js/views/connections.js` | Generic `openModal()` with `data-modal="open-connection"` | `renderOpenConnectionForm()` |
92
+ | `create-connection` | Landing and Connections entry actions in `frontend/js/components/emptyState.js` and `frontend/js/views/connections.js` | Generic `openModal()` with `data-modal="create-connection"` | `renderCreateDatabaseForm()` |
93
+ | `import-sql` | Existing import modal path; no current visible opener found | Generic `openModal('import-sql')` if a trigger is added; submitted by `submitImportSql()` in `frontend/js/store.js` | `renderImportSqlForm()` |
94
+ | `edit-connection` | Connection cards in `frontend/js/components/connectionCard.js` | `openEditConnectionModal()` in `frontend/js/store.js`; `edit-connection` action in `frontend/js/app.js` | `renderEditConnectionForm()` |
95
+ | `create-backup` | Backups route actions in `frontend/js/views/backups.js` | `openCreateBackupModal()` in `frontend/js/store.js`; `open-create-backup-modal` action in `frontend/js/app.js` | `renderCreateBackupForm()` |
96
+ | `edit-backup` | Backup row actions in `frontend/js/views/backups.js` | `openEditBackupModal()` in `frontend/js/store.js`; `open-edit-backup-modal` action in `frontend/js/app.js` | `renderEditBackupForm()` |
97
+ | `delete-backup` | Backup row actions in `frontend/js/views/backups.js` | `openDeleteBackupModal()` in `frontend/js/store.js`; `open-delete-backup-modal` action in `frontend/js/app.js` | `renderDeleteBackupForm()` |
98
+ | `backup-safety` | Restore, SQL execution, and import safety flows | `openRestoreBackupModal()` plus safety branches in `frontend/js/store.js`; `backup-safety-create`, `backup-safety-continue`, and `backup-safety-cancel` actions in `frontend/js/app.js` | `renderBackupSafetyForm()` |
99
+ | `generate-types` | Structure/Table tooling via `frontend/js/components/generateTypesDropdown.js` | `openGenerateTypesModal()` in `frontend/js/store.js`; `open-generate-types-modal` action in `frontend/js/app.js` | `renderGenerateTypesForm()` |
100
+ | `generate-data` | Data Browser actions in `frontend/js/views/data.js` | `openGenerateDataModal()` in `frontend/js/store.js`; `open-generate-data-modal` action in `frontend/js/app.js` | `renderGenerateDataForm()` |
101
+ | `delete-row` | Data Browser rows and SQL Editor editable result rows | `openDeleteDataRowModal()` and `openDeleteEditorRowModal()` in `frontend/js/store.js`; `delete-data-row` and `delete-editor-row` actions in `frontend/js/app.js` | `renderDeleteRowConfirmForm()` |
102
+ | `row-update-preview` | Data Browser and SQL Editor row edit preview flow | Row update preview state branches in `frontend/js/store.js`; `apply-row-update-preview` action in `frontend/js/app.js` | `renderRowUpdatePreviewForm()` |
103
+ | `chart-editor` | Charts detail actions in `frontend/js/views/charts.js` | `openCreateQueryChartModal()` and `openEditQueryChartModal()` in `frontend/js/store.js`; `open-create-query-chart-modal` and `open-edit-query-chart-modal` actions in `frontend/js/app.js` | `renderChartEditorForm()` |
104
+ | `delete-chart` | Charts detail chart actions in `frontend/js/views/charts.js` | `openDeleteQueryChartModal()` in `frontend/js/store.js`; `open-delete-query-chart-modal` action in `frontend/js/app.js` | `renderDeleteChartForm()` |
105
+ | `delete-query-history` | Query history detail/actions in `frontend/js/components/queryHistoryDetail.js` | `openDeleteQueryHistoryModal()` in `frontend/js/store.js`; `open-delete-query-history-modal` action in `frontend/js/app.js` | `renderDeleteQueryHistoryForm()` |
106
+ | `delete-document` | Documents route actions in `frontend/js/views/documents.js` | `openDeleteDocumentModal()` in `frontend/js/store.js`; `delete-document` action in `frontend/js/app.js` | `renderDeleteDocumentForm()` |
107
+ | `delete-api-token` | Settings API token actions in `frontend/js/views/settings.js` | `openDeleteSettingsApiTokenModal()` in `frontend/js/store.js`; `open-delete-api-token-modal` action in `frontend/js/app.js` | `renderDeleteApiTokenForm()` |
108
+ | `document-insert-table` | Documents editor insert menu in `frontend/js/views/documents.js` | `openDocumentInsertTableModal()` in `frontend/js/store.js`; `open-document-insert-table-modal` action in `frontend/js/app.js` | `renderDocumentInsertTableForm()` |
109
+ | `document-insert-note` | Documents editor insert menu in `frontend/js/views/documents.js` | `openDocumentInsertNoteModal()` in `frontend/js/store.js`; `open-document-insert-note-modal` action in `frontend/js/app.js` | `renderDocumentInsertNoteForm()` |
110
+ | `query-export` | SQL Editor toolbar in `frontend/js/components/queryEditor.js` | `openQueryExportModal()` in `frontend/js/store.js`; `open-query-export-modal` action in `frontend/js/app.js` | `renderQueryExportModal()` |
111
+ | `data-export` | Data Browser actions in `frontend/js/views/data.js` | `openDataExportModal()` in `frontend/js/store.js`; `open-data-export-modal` action in `frontend/js/app.js` | `renderDataExportModal()` |
112
+ | `copy-column` | Query/Data result column actions in `frontend/js/components/queryResults.js` | `openCopyColumnModal()` in `frontend/js/store.js`; `open-copy-column-modal` action in `frontend/js/app.js` | `renderCopyColumnModal()` |
113
+ | `create-media-tagging-tag-table` | Media Tagging setup in `frontend/js/views/mediaTagging.js` | Generic `openModal()` with `data-modal="create-media-tagging-tag-table"`; submitted by `submitCreateMediaTaggingTagTable()` in `frontend/js/store.js` | `renderCreateMediaTaggingTagTableForm()` |
114
+ | `create-media-tagging-mapping-table` | Media Tagging setup in `frontend/js/views/mediaTagging.js` | Generic `openModal()` with `data-modal="create-media-tagging-mapping-table"`; submitted by `submitCreateMediaTaggingMappingTable()` in `frontend/js/store.js` | `renderCreateMediaTaggingMappingTableForm()` |
115
+
52
116
  ## History elements
53
117
 
54
118
  - Query history panels, such as SQL Editor and Charts history, are always placed on the right side.
@@ -68,6 +68,10 @@ export function getRecentConnections() {
68
68
  return request("/api/connections/recent");
69
69
  }
70
70
 
71
+ export function getConnectionTags() {
72
+ return request("/api/connections/tags");
73
+ }
74
+
71
75
  export function getActiveConnection() {
72
76
  return request("/api/connections/active");
73
77
  }
@@ -400,6 +404,13 @@ export function saveTableDesignerDraft(payload) {
400
404
  });
401
405
  }
402
406
 
407
+ export function validateTableDesignerCheck(payload) {
408
+ return request("/api/table-designer/validate-check", {
409
+ method: "POST",
410
+ body: payload,
411
+ });
412
+ }
413
+
403
414
  export function getMediaTaggingState() {
404
415
  return request("/api/media-tagging");
405
416
  }