@antelopejs/dms-database 0.0.13 → 0.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 (173) hide show
  1. package/README.md +30 -5
  2. package/dist/db/models/query_history.model.d.ts +1 -0
  3. package/dist/db/models/query_history.model.js +6 -0
  4. package/dist/db/models/query_history.model.js.map +1 -1
  5. package/dist/db/tables/query_history.table.d.ts +3 -0
  6. package/dist/db/tables/query_history.table.js +12 -0
  7. package/dist/db/tables/query_history.table.js.map +1 -1
  8. package/dist/db/tables/saved_queries.table.d.ts +1 -0
  9. package/dist/db/tables/saved_queries.table.js +4 -0
  10. package/dist/db/tables/saved_queries.table.js.map +1 -1
  11. package/dist/i18n/messages.d.ts +39 -0
  12. package/dist/i18n/messages.js +64 -0
  13. package/dist/i18n/messages.js.map +1 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.js +1 -7
  16. package/dist/index.js.map +1 -1
  17. package/dist/module.d.ts +11 -0
  18. package/dist/module.js +55 -0
  19. package/dist/module.js.map +1 -0
  20. package/dist/pages/data.d.ts +1 -1
  21. package/dist/pages/data.js +9 -6
  22. package/dist/pages/data.js.map +1 -1
  23. package/dist/pages/diagram.d.ts +9 -0
  24. package/dist/pages/diagram.js +45 -0
  25. package/dist/pages/diagram.js.map +1 -0
  26. package/dist/pages/index.d.ts +1 -0
  27. package/dist/pages/index.js +1 -0
  28. package/dist/pages/index.js.map +1 -1
  29. package/dist/pages/overview.d.ts +4 -1
  30. package/dist/pages/overview.js +113 -6
  31. package/dist/pages/overview.js.map +1 -1
  32. package/dist/pages/query.d.ts +1 -1
  33. package/dist/pages/query.js +22 -6
  34. package/dist/pages/query.js.map +1 -1
  35. package/dist/pages/schemas.d.ts +2 -1
  36. package/dist/pages/schemas.js +143 -6
  37. package/dist/pages/schemas.js.map +1 -1
  38. package/dist/routes/data.d.ts +8 -0
  39. package/dist/routes/data.js +84 -21
  40. package/dist/routes/data.js.map +1 -1
  41. package/dist/routes/index.d.ts +1 -0
  42. package/dist/routes/index.js +1 -0
  43. package/dist/routes/index.js.map +1 -1
  44. package/dist/routes/overview.d.ts +12 -0
  45. package/dist/routes/overview.js +55 -0
  46. package/dist/routes/overview.js.map +1 -0
  47. package/dist/routes/query.d.ts +5 -1
  48. package/dist/routes/query.js +162 -27
  49. package/dist/routes/query.js.map +1 -1
  50. package/dist/routes/tables.d.ts +15 -12
  51. package/dist/routes/tables.js +95 -55
  52. package/dist/routes/tables.js.map +1 -1
  53. package/dist/service/catalog.d.ts +3 -0
  54. package/dist/service/catalog.js +26 -0
  55. package/dist/service/catalog.js.map +1 -0
  56. package/dist/service/health.d.ts +3 -3
  57. package/dist/service/health.js +17 -14
  58. package/dist/service/health.js.map +1 -1
  59. package/dist/service/introspect.d.ts +3 -1
  60. package/dist/service/introspect.js +131 -43
  61. package/dist/service/introspect.js.map +1 -1
  62. package/dist/service/overview.d.ts +9 -0
  63. package/dist/service/overview.js +113 -0
  64. package/dist/service/overview.js.map +1 -0
  65. package/dist/service/queryInspection.d.ts +15 -0
  66. package/dist/service/queryInspection.js +107 -0
  67. package/dist/service/queryInspection.js.map +1 -0
  68. package/dist/service/references.d.ts +9 -0
  69. package/dist/service/references.js +52 -0
  70. package/dist/service/references.js.map +1 -0
  71. package/dist/service/schemaFilters.d.ts +26 -0
  72. package/dist/service/schemaFilters.js +42 -0
  73. package/dist/service/schemaFilters.js.map +1 -0
  74. package/dist/service/stagedSerialization.d.ts +2 -0
  75. package/dist/service/stagedSerialization.js +38 -10
  76. package/dist/service/stagedSerialization.js.map +1 -1
  77. package/dist/service/types.d.ts +11 -1
  78. package/dist/types/constants.d.ts +2 -0
  79. package/dist/types/constants.js +3 -1
  80. package/dist/types/constants.js.map +1 -1
  81. package/dist/utils/query.d.ts +0 -2
  82. package/dist/utils/query.js +0 -20
  83. package/dist/utils/query.js.map +1 -1
  84. package/frontend-vue/app/{composables → build/composables}/useDataBrowserGrid.ts +65 -50
  85. package/frontend-vue/app/build/composables/useDataBrowserTabs.ts +366 -0
  86. package/frontend-vue/app/build/composables/useDatabaseHealth.ts +50 -0
  87. package/frontend-vue/app/build/composables/useDatabaseSchemas.ts +140 -0
  88. package/frontend-vue/app/{composables → build/composables}/useDiagramPersistence.ts +47 -39
  89. package/frontend-vue/app/build/composables/useQueryRuntime.ts +217 -0
  90. package/frontend-vue/app/build/composables/useQueryStore.ts +162 -0
  91. package/frontend-vue/app/build/data/cellValues.ts +132 -0
  92. package/frontend-vue/app/build/data/instanceOptions.ts +36 -0
  93. package/frontend-vue/app/build/data/pickerMenus.ts +175 -0
  94. package/frontend-vue/app/build/data/recentTables.ts +48 -0
  95. package/frontend-vue/app/build/data/stagedEdits.ts +117 -0
  96. package/frontend-vue/app/build/data/stagedWrites.ts +64 -0
  97. package/frontend-vue/app/build/data/useStagedSave.ts +298 -0
  98. package/frontend-vue/app/build/diagram/autosave.ts +72 -0
  99. package/frontend-vue/app/build/diagram/graph.ts +585 -0
  100. package/frontend-vue/app/build/diagram/history.ts +178 -0
  101. package/frontend-vue/app/build/diagram/shortcuts.ts +62 -0
  102. package/frontend-vue/app/build/diagram/sync.ts +137 -0
  103. package/frontend-vue/app/build/query/completion.ts +100 -0
  104. package/frontend-vue/app/build/query/csv.ts +32 -0
  105. package/frontend-vue/app/build/query/examples.ts +38 -0
  106. package/frontend-vue/app/build/query/runs.ts +168 -0
  107. package/frontend-vue/app/build/query/tableColumns.ts +35 -0
  108. package/frontend-vue/app/build/query/target.ts +143 -0
  109. package/frontend-vue/app/build/schemas/filterState.ts +128 -0
  110. package/frontend-vue/app/build/schemas/useSchemasListing.ts +62 -0
  111. package/frontend-vue/app/build/utils/databaseLinks.ts +98 -0
  112. package/frontend-vue/app/build/utils/fieldTypes.ts +198 -0
  113. package/frontend-vue/app/build/utils/relativeTime.ts +19 -0
  114. package/frontend-vue/app/{utils → build/utils}/stagedSerialization.ts +7 -1
  115. package/frontend-vue/app/components/ConnectionStatus.vue +122 -0
  116. package/frontend-vue/app/components/DataBrowser.vue +126 -0
  117. package/frontend-vue/app/components/DataBrowserSidebar.vue +293 -210
  118. package/frontend-vue/app/components/DataBrowserTabBar.vue +185 -93
  119. package/frontend-vue/app/components/DataFilterBar.vue +163 -0
  120. package/frontend-vue/app/components/DataGrid.vue +737 -499
  121. package/frontend-vue/app/components/DataGridCell.vue +125 -77
  122. package/frontend-vue/app/components/DataGridHeaderCell.vue +119 -81
  123. package/frontend-vue/app/components/DiagramNoteNode.vue +81 -63
  124. package/frontend-vue/app/components/DiagramRelationEdge.vue +57 -27
  125. package/frontend-vue/app/components/DiagramStubNode.vue +16 -17
  126. package/frontend-vue/app/components/DiagramTableNode.vue +106 -68
  127. package/frontend-vue/app/components/InstancePicker.vue +195 -0
  128. package/frontend-vue/app/components/JsonCellPanel.vue +30 -29
  129. package/frontend-vue/app/components/QueryBuilderPanel.vue +290 -238
  130. package/frontend-vue/app/components/QueryConsole.vue +726 -0
  131. package/frontend-vue/app/components/QueryLibrary.vue +314 -0
  132. package/frontend-vue/app/components/QueryResultPanel.vue +556 -126
  133. package/frontend-vue/app/components/RowDrawer.vue +520 -0
  134. package/frontend-vue/app/components/SchemaDiagram.vue +1016 -1051
  135. package/frontend-vue/app/components/SchemaPicker.vue +86 -0
  136. package/frontend-vue/app/components/SchemasFilterBar.vue +201 -0
  137. package/frontend-vue/app/components/TableInspector.vue +741 -0
  138. package/frontend-vue/app/config/shortcuts-registry.ts +65 -0
  139. package/frontend-vue/dms.frontend.ts +5 -14
  140. package/frontend-vue/i18n/locales/database-en-GB.json +526 -193
  141. package/frontend-vue/i18n/locales/database-fr-FR.json +528 -195
  142. package/frontend-vue/package.json +2 -1
  143. package/frontend-vue/pnpm-lock.yaml +2601 -858
  144. package/frontend-vue/pnpm-workspace.yaml +1 -1
  145. package/frontend-vue/tests/dataBrowser.test.ts +206 -0
  146. package/frontend-vue/tests/diagram.test.ts +516 -0
  147. package/frontend-vue/tests/helpers.test.ts +205 -0
  148. package/frontend-vue/tests/instanceOptions.test.ts +53 -0
  149. package/frontend-vue/tests/locales.test.ts +56 -0
  150. package/frontend-vue/tests/persistence.test.ts +106 -5
  151. package/frontend-vue/tests/pickerMenus.test.ts +254 -0
  152. package/frontend-vue/tests/queryConsole.test.ts +282 -0
  153. package/frontend-vue/tests/queryRuntime.test.ts +2 -2
  154. package/frontend-vue/tests/registration.test.ts +36 -25
  155. package/frontend-vue/tests/schemasFilters.test.ts +115 -0
  156. package/package.json +9 -6
  157. package/frontend-vue/app/components/QueryFavoritesPanel.vue +0 -127
  158. package/frontend-vue/app/components/QueryHistoryPanel.vue +0 -134
  159. package/frontend-vue/app/components/SchemaTableInspector.vue +0 -278
  160. package/frontend-vue/app/composables/useDataBrowserTabs.ts +0 -255
  161. package/frontend-vue/app/composables/useDatabaseHealth.ts +0 -50
  162. package/frontend-vue/app/composables/useDatabaseSchemas.ts +0 -92
  163. package/frontend-vue/app/composables/useQueryRuntime.ts +0 -118
  164. package/frontend-vue/app/composables/useQueryStore.ts +0 -117
  165. package/frontend-vue/app/composables/useTableViewRowClick.ts +0 -22
  166. package/frontend-vue/app/custom-pages/database/data.vue +0 -41
  167. package/frontend-vue/app/custom-pages/database/overview.vue +0 -367
  168. package/frontend-vue/app/custom-pages/database/query.vue +0 -436
  169. package/frontend-vue/app/custom-pages/database/schemas.vue +0 -218
  170. package/frontend-vue/app/utils/databaseFieldModifiers.ts +0 -33
  171. package/frontend-vue/app/utils/databaseFieldTypeIcons.ts +0 -224
  172. package/frontend-vue/app/utils/dmsTableView.ts +0 -83
  173. package/frontend-vue/app/utils/relativeTime.ts +0 -18
@@ -1,239 +1,572 @@
1
1
  {
2
2
  "dms_database": {
3
3
  "title": "Database",
4
- "description": "Inspect schemas, browse data, view the schema diagram, and check connection configuration.",
4
+ "description": "Inspect schemas and tables, browse and fix rows, map relations and run queries.",
5
5
  "overview": {
6
6
  "title": "Overview",
7
- "description": "Connection health, storage and recent activity across your database.",
7
+ "description": "Connection health, schemas and recent activity of the database.",
8
8
  "beta": {
9
- "title": "This module is in beta",
10
- "body": "Today the database console is read-only — it lets you explore schemas, browse table data and run queries. In an upcoming release you'll be able to **edit tables directly**, change their structure, **add or rename columns and adjust their types**, **create and manage indexes**, define relations and constraints — all **without writing a single migration**. Antelope is actively building this; it ships alongside the **Module Builder**, the upcoming way to configure the whole platform without writing code."
9
+ "title": "Beta",
10
+ "body": "Saved edits in the data browser are written straight to the database. Structure editing (columns, indexes, relations) comes with the Module Builder.",
11
+ "meta": "Beta notice",
12
+ "meta_description": "The one-line notice about writes and what is coming."
11
13
  },
12
14
  "actions": {
13
- "schema": "Schema",
14
- "openData": "Open Data Browser"
15
+ "query": "Open query console",
16
+ "browse": "Browse data"
15
17
  },
16
- "health": {
17
- "connection": "Connection",
18
+ "recent": {
19
+ "title": "Recent queries",
20
+ "console": "Query console",
21
+ "duration": "{duration} ms",
22
+ "rows": "{count} rows",
23
+ "changed": "{count} changed",
24
+ "failed": "Failed",
25
+ "empty_title": "No query run yet",
26
+ "empty_description": "Queries you run in the query console show up here."
27
+ },
28
+ "connection": {
29
+ "meta": "Connection status",
30
+ "meta_description": "Whether the database answers, its probe latency and what it holds.",
31
+ "label": "Connection",
18
32
  "healthy": "Healthy",
19
33
  "down": "Unavailable",
20
- "driver": "Driver",
21
- "latency": "Latency",
22
- "pool": "Pool",
23
- "collections": "Collections"
24
- },
25
- "kpis": {
26
- "schemas": "Schemas",
34
+ "checked_seconds": "checked {count} s ago",
35
+ "checked_minutes": "checked {count} min ago",
36
+ "latency": "Probe latency",
37
+ "latency_sub": "last probe",
27
38
  "tables": "Tables",
28
- "rows": "Total rows",
39
+ "tables_sub": "in {count} schema | in {count} schemas",
40
+ "rows": "Rows",
41
+ "rows_sub": "in the default instances",
29
42
  "indexes": "Indexes",
30
- "size": "Stored elements"
43
+ "indexes_sub": "declared in code",
44
+ "last_error": "Last error",
45
+ "no_answer": "No answer",
46
+ "next_probe": "Next probe",
47
+ "next_probe_sub": "while this page is open",
48
+ "retry": "Check again"
31
49
  },
32
- "storage": {
33
- "title": "Storage by table",
34
- "subtitle": "Top tables by row count",
35
- "viewSchema": "View schema",
36
- "rowsUnit": "rows",
37
- "empty": "No tables to display."
50
+ "schemas": {
51
+ "title": "Schemas",
52
+ "description": "Registered by modules. Open one to see its tables.",
53
+ "card": {
54
+ "instances": "{count} instance | {count} instances",
55
+ "tables": "{count} table | {count} tables",
56
+ "rows": "{count} row | {count} rows",
57
+ "relations": "{count} relation | {count} relations",
58
+ "contents": "{tables} · {rows}"
59
+ },
60
+ "cards_meta": "Schema cards",
61
+ "empty_title": "No schema registered yet",
62
+ "empty_description": "Schemas appear here when a module declares tables with {'@'}RegisterTable. The connection itself is healthy."
38
63
  },
39
- "recent": {
40
- "title": "Recent queries",
41
- "console": "Query Console",
42
- "rowsUnit": "rows",
43
- "justNow": "just now",
44
- "empty": "No recent queries yet."
45
- },
46
- "tables": {
47
- "title": "Tables",
48
- "subtitle": "All collections in the active schema",
49
- "empty": "No tables match the current filter.",
50
- "cols": {
51
- "table": "Table",
52
- "rows": "Rows",
53
- "columns": "Columns",
54
- "indexes": "Indexes"
55
- }
56
- }
64
+ "largest": {
65
+ "title": "Largest tables",
66
+ "description": "Rows per table, default instance",
67
+ "empty": "No table holds rows yet."
68
+ },
69
+ "activity_meta": "Tables and queries"
57
70
  },
58
71
  "schemas": {
59
72
  "title": "Schemas",
60
- "description": "Explore tables as a list or a visual map. Click a table to inspect its columns, indexes and relations.",
61
- "tableCount": "{count} table | {count} tables",
62
- "collections": "{count} collection | {count} collections",
63
- "selectSchema": "Schema selection",
64
- "searchSchemaPlaceholder": "Search a schema…",
65
- "open": "Open",
66
- "view": {
67
- "list": "List",
68
- "diagram": "Diagram"
69
- },
73
+ "description": "Every table registered by your modules, its rows counted across all instances. Open one to inspect its columns, indexes and relations.",
70
74
  "cols": {
71
- "relations": "Relations"
72
- },
73
- "inspector": {
75
+ "relations": "Relations",
76
+ "table": "Table",
77
+ "schema": "Schema",
78
+ "rows": "Rows",
74
79
  "columns": "Columns",
75
80
  "indexes": "Indexes",
76
- "preview": "Preview",
77
- "close": "Close",
78
- "colName": "Column",
79
- "colType": "Type",
80
- "colNullable": "Nullable",
81
- "yes": "Yes",
82
- "no": "No",
83
- "multi": "multi",
84
- "single": "single",
85
- "noIndexes": "No indexes defined.",
86
- "previewError": "Could not load a sample document.",
87
- "previewEmpty": "This table has no rows to preview.",
88
- "healthy": "Healthy"
81
+ "modifiers": "Modifiers"
89
82
  },
90
- "stats": {
91
- "tables": "Tables",
92
- "elements": "Elements",
93
- "instances": "Instances"
94
- },
95
- "menu": {
96
- "browseData": "Browse data",
97
- "viewInDiagram": "View in diagram",
98
- "copyId": "Copy schema ID",
99
- "rename": "Rename",
100
- "duplicate": "Duplicate",
101
- "export": "Export",
102
- "delete": "Delete",
103
- "comingSoon": "Coming soon",
104
- "copied": "Schema ID copied"
83
+ "inspector": {
84
+ "title": "Table",
85
+ "meta": "Table inspector",
86
+ "meta_description": "Columns, indexes, relations and a sample row of one table.",
87
+ "not_found": "Table not found"
105
88
  },
106
- "browseData": "Browse data",
107
- "viewDefinition": "View definition",
108
- "columns": {
109
- "name": "Name",
110
- "elementCount": "Elements",
111
- "columnCount": "Columns",
112
- "indexCount": "Indexes"
89
+ "caption": "Tables",
90
+ "table_meta_description": "Every registered table, by schema, with its inspector.",
91
+ "search": "Find a table or column",
92
+ "footer_hint": "J / K step through tables in the inspector",
93
+ "actions": {
94
+ "inspect": "Inspect",
95
+ "browse": "Browse data",
96
+ "query": "Query this table",
97
+ "diagram": "Show in diagram"
98
+ },
99
+ "empty": {
100
+ "first_title": "No table registered yet",
101
+ "first_description": "Tables appear here when a module declares them with {'@'}RegisterTable.",
102
+ "no_result_title": "No result",
103
+ "no_result_description": "No table matches these filters.",
104
+ "clear_filters": "Clear filters"
105
+ },
106
+ "filters": {
107
+ "meta": "Filter bar",
108
+ "meta_description": "Narrows the tables by schema, instance, name and structure.",
109
+ "label": "Filter the tables",
110
+ "has": {
111
+ "relations": "With relations",
112
+ "modifiers": "With modifiers",
113
+ "empty": "Empty"
114
+ },
115
+ "has_hint": {
116
+ "relations": "Tables pointing to another table",
117
+ "modifiers": "Tables with hashed, localized or encrypted columns",
118
+ "empty": "Tables with no row in the picked instance"
119
+ },
120
+ "count": "{shown} of {total} tables",
121
+ "clear": "Clear"
113
122
  }
114
123
  },
115
124
  "data": {
116
- "title": "Data Browser",
117
- "description": "Browse rows from a selected schema, instance, and table.",
118
- "instanceDefault": "Default",
119
- "instanceCross": "All instances (read-only)",
120
- "schema": "Schema",
121
- "openInQuery": "Open in Query Console",
122
- "findTable": "Find a table…",
123
- "colCount": "{count} column | {count} columns",
124
- "crossInstanceNotice": "Reading across every instance of this schema. Writes are disabled.",
125
- "noColumns": "No columns to display for this table.",
126
- "pickPrompt": "Pick a schema and a table to browse its rows.",
127
- "searchPlaceholder": "Search rows…",
128
- "refresh": "Refresh",
129
- "readOnly": "Read-only",
130
- "filtersActive": "{count} filter active | {count} filters active",
131
- "filterModeIs": "is exactly",
132
- "filterModeContains": "contains",
133
- "filterApply": "Apply",
134
- "filterClear": "Clear",
135
- "filterTitle": "Filter {column}",
136
- "rowsTotal": "{count} row | {count} rows",
137
- "noRows": "No rows match the current view.",
138
- "prevPage": "Previous page",
139
- "nextPage": "Next page",
140
- "editError": "Failed to save the cell",
141
- "rowVanished": "This row no longer exists — the view was refreshed.",
142
- "jsonPanelTitle": "Edit {column}",
143
- "jsonInvalid": "Invalid JSON",
144
- "jsonNotStructured": "The value must be a JSON object or array.",
145
- "save": "Save",
146
- "cancel": "Cancel",
147
- "closeTab": "Close tab",
148
- "keepTab": "Keep tab open",
149
- "previewTab": "{name} (preview tab)"
125
+ "title": "Data browser",
126
+ "description": "Browse and fix rows. Edits are staged and written only when you save them.",
127
+ "meta": "Data browser",
128
+ "meta_description": "Tables, rows and staged edits of one schema instance.",
129
+ "scope": {
130
+ "schema": "Schema",
131
+ "instance": "Instance",
132
+ "search": "Search",
133
+ "default": "default",
134
+ "all": "all",
135
+ "find_table": "Find a table",
136
+ "tables": "Tables · {count}",
137
+ "rows": "Rows",
138
+ "open_tab": "Open in a tab",
139
+ "open_hint": "Click to preview, double-click to keep the tab",
140
+ "no_table": "No table matches.",
141
+ "counts_for": "Counts for instance {instance}",
142
+ "counts_failed": "Row counts couldn't be loaded.",
143
+ "loading_schemas": "Loading schemas…",
144
+ "schemas_failed": "Couldn't load the schemas"
145
+ },
146
+ "tabs": {
147
+ "close": "Close tab",
148
+ "keep": "Keep tab",
149
+ "keep_hint": "Preview tab: the next table you open replaces it. Keep it open.",
150
+ "preview": "{name} (preview tab)",
151
+ "hint": "{italic} = preview tab · double-click to keep",
152
+ "italic": "Italic",
153
+ "unsaved": "{count} unsaved change | {count} unsaved changes",
154
+ "close_title": "Close {table} with unsaved changes?",
155
+ "close_description": "Its staged change will be lost. | Its {count} staged changes will be lost.",
156
+ "close_discard": "Discard and close",
157
+ "close_keep": "Keep editing"
158
+ },
159
+ "grid": {
160
+ "rows": "{count} row | {count} rows",
161
+ "search": "Search rows",
162
+ "refresh": "Refresh (R)",
163
+ "open_query": "Open in query console",
164
+ "open_row": "Open row (Space)",
165
+ "sort_hint": "Sort by this column",
166
+ "read_only": "Read-only.",
167
+ "read_only_detail": "You're reading {table} across every instance. Pick one instance to edit.",
168
+ "switch_to": "Switch to {instance}",
169
+ "page_size": "Rows per page",
170
+ "pagination": "Pagination",
171
+ "previous_page": "Previous page",
172
+ "next_page": "Next page",
173
+ "kbd_edit": "edit",
174
+ "kbd_cancel": "cancel",
175
+ "kbd_open": "open row",
176
+ "kbd_save": "review and save",
177
+ "staged_title": "Unsaved · was {before}",
178
+ "invalid_number": "Expected a number, e.g. 860.50 · Esc to cancel",
179
+ "invalid_boolean": "Expected true or false · Esc to cancel",
180
+ "invalid_date": "Expected a date, e.g. 2026-10-09 or 2026-10-09T14:30Z · Esc to cancel",
181
+ "edit_cell": "Value of {column}",
182
+ "null_hint": "Type null to empty the cell, \\null for the text null",
183
+ "empty_text": "Empty text"
184
+ },
185
+ "filters": {
186
+ "add": "Add filter",
187
+ "apply": "Apply",
188
+ "remove": "Remove filter",
189
+ "clear_all": "Clear all",
190
+ "value": "Value",
191
+ "contains": "contains",
192
+ "is": "is exactly",
193
+ "column_title": "Filter {column}",
194
+ "remove_chip": "Remove the filter on {column}"
195
+ },
196
+ "empty": {
197
+ "pick_title": "Pick a table to browse",
198
+ "pick_description": "Choose a table on the left, or start from one you opened lately.",
199
+ "pick_description_first": "Choose a table on the left to see its rows.",
200
+ "recent": "Recently opened",
201
+ "error_title": "Couldn't load {table}",
202
+ "error_description": "Your filters and unsaved changes are kept.",
203
+ "check_connection": "Check connection",
204
+ "no_match_title": "No row matches",
205
+ "no_match_description": "Searched {count} rows in {table}. The row may live in another instance.",
206
+ "clear_filters": "Clear filters",
207
+ "search_all": "Search all instances",
208
+ "no_rows_title": "{table} has no row yet",
209
+ "no_rows_description": "Rows written by your modules show up here."
210
+ },
211
+ "save": {
212
+ "review": "Review and save {count} change | Review and save {count} changes",
213
+ "title": "Save {count} change to {table}? | Save {count} changes to {table}?",
214
+ "description": "It is written to {scope}. | They are written to {scope}.",
215
+ "confirm": "Save {count} change | Save {count} changes",
216
+ "keep_editing": "Keep editing",
217
+ "saved": "{count} change saved to {scope} | {count} changes saved to {scope}",
218
+ "undo": "Undo",
219
+ "undone": "{count} change undone | {count} changes undone",
220
+ "undo_failed": "Couldn't undo the changes",
221
+ "partial_title": "{saved} of {total} change saved | {saved} of {total} changes saved",
222
+ "rows_gone": "{count} row no longer exists: its changes were dropped. | {count} rows no longer exist: their changes were dropped.",
223
+ "not_written": "{count} change wasn't written and stays staged ({error}). | {count} changes weren't written and stay staged ({error}).",
224
+ "undo_partial": "{count} change couldn't be undone | {count} changes couldn't be undone",
225
+ "rows_missing": "{count} row no longer exists. | {count} rows no longer exist."
226
+ },
227
+ "row": {
228
+ "title": "Row of {table}",
229
+ "eyebrow": "Row · {scope}",
230
+ "previous": "Previous row (K)",
231
+ "next": "Next row (J)",
232
+ "fields": "Fields",
233
+ "json": "JSON",
234
+ "references": "Referenced by",
235
+ "no_id": "Row without id",
236
+ "was": "was {value}",
237
+ "not_editable": "not editable",
238
+ "set_null": "Set to null",
239
+ "invalid_json": "Invalid JSON",
240
+ "open_relation": "Open {table}",
241
+ "references_failed": "Couldn't count the rows pointing here.",
242
+ "references_none": "No row of another table points to this one.",
243
+ "reference_count": "{count} row · {field} | {count} rows · {field}",
244
+ "no_change": "No unsaved change"
245
+ },
246
+ "json": {
247
+ "title": "Edit {column}",
248
+ "invalid": "Invalid JSON",
249
+ "not_structured": "The value must be a JSON object, an array or null.",
250
+ "apply": "Apply"
251
+ }
150
252
  },
151
253
  "diagram": {
152
254
  "title": "Diagram",
153
- "description": "Visualization of registered schemas and their tables.",
154
- "recomputeLayout": "Recompute layout",
155
- "tooManyTables": "Showing {shown} of {total} tables. Use the schema filter to narrow down.",
255
+ "description": "Tables and relations of a schema. Drag tables to arrange them; the layout is saved for the whole team.",
156
256
  "toolbar": {
157
- "autoLayout": "Auto layout",
158
- "help": "Help",
159
- "helpText": "Automatically rearranges the schema tables with a hierarchical layout (dagre) and refits the view.",
160
257
  "undo": "Undo",
161
258
  "redo": "Redo",
162
- "cancel": "Cancel",
163
- "apply": "Apply",
164
- "pointer": "Select",
165
- "hand": "Pan",
166
- "zoomIn": "Zoom in",
167
- "zoomOut": "Zoom out",
168
- "resetZoom": "Reset zoom",
169
- "fitView": "Fit view",
170
- "notes": "Note"
259
+ "auto_layout": "Auto layout",
260
+ "auto_layout_hint": "Rearrange every table; you preview it before keeping it",
261
+ "select": "Select",
262
+ "pan": "Pan",
263
+ "zoom_out": "Zoom out",
264
+ "zoom_in": "Zoom in",
265
+ "reset_zoom": "Reset zoom",
266
+ "fit": "Fit view",
267
+ "note": "Note",
268
+ "note_hint": "Add a note"
171
269
  },
172
270
  "notes": {
173
- "placeholder": "Double-click to edit",
174
- "delete": "Delete note"
271
+ "placeholder": "Double-click to write",
272
+ "delete": "Delete note",
273
+ "label": "Note"
274
+ },
275
+ "meta": "Schema diagram",
276
+ "meta_description": "The tables of a schema and their relations, with notes.",
277
+ "actions": {
278
+ "list": "List"
279
+ },
280
+ "schema": "Schema",
281
+ "search": "Find a table or column",
282
+ "search_empty": "No table or column",
283
+ "stub_title": "Open {schema}.{table}",
284
+ "not_found": {
285
+ "schema": "Schema {schema} not found",
286
+ "table": "Table {table} not found in {schema}"
175
287
  },
176
- "unsavedConfirm": "You have unsaved diagram changes. Leave anyway?"
288
+ "large": "{count} tables: select one and focus on it to read its relations.",
289
+ "save": {
290
+ "idle": "Layout saved",
291
+ "saving": "Saving…",
292
+ "error": "Couldn't save the layout",
293
+ "error_other": "Couldn't save the {schema} diagram",
294
+ "just_now": "Layout saved · just now",
295
+ "minutes": "Layout saved · {count} min ago"
296
+ },
297
+ "preview": {
298
+ "title": "Previewing auto layout.",
299
+ "moved": "{count} table moved. | {count} tables moved.",
300
+ "discard": "Discard",
301
+ "keep": "Keep layout"
302
+ },
303
+ "selection": {
304
+ "inspect": "Inspect",
305
+ "focus": "Focus",
306
+ "show_all": "Show all tables"
307
+ },
308
+ "legend": {
309
+ "key": "Primary key",
310
+ "relation": "Relation",
311
+ "object": "Object"
312
+ },
313
+ "empty": {
314
+ "no_schema": "No schema registered yet",
315
+ "title": "No tables in {schema}",
316
+ "description": "This schema is registered but declares no table yet."
317
+ }
177
318
  },
178
319
  "query": {
179
- "title": "Query Console",
180
- "description": "Write, run and save queries against your database with live results.",
181
- "builder": "Query builder",
182
- "result": "Result",
183
- "favorites": "Saved",
184
- "history": "Last requests",
185
- "format": "Format",
186
- "save": "Save",
187
- "saveAsFavorite": "Save as favorite",
188
- "hint": "JavaScript query builder",
189
- "builderHintLabel": "Builder",
190
- "backToData": "Back to Data Browser",
191
- "clear": "Clear",
192
- "clearHistory": "Clear",
193
- "execute": "Run",
194
- "table": "Table",
195
- "json": "JSON",
196
- "chart": "Chart",
197
- "chartUnavailable": "No numeric column to plot.",
198
- "emptyResult": "Run a query to see the results",
199
- "emptyFavorites": "No saved queries yet.",
200
- "emptyHistory": "No history yet.",
201
- "language": "Language",
202
- "scopeMe": "Mine",
203
- "scopeShared": "Team",
204
- "sharedBadge": "Shared with team",
205
- "previous": "Previous",
206
- "next": "Next",
207
- "rowCount": "{count} row | {count} rows",
208
- "runtime": "{ms} ms",
209
- "saveModal": {
320
+ "title": "Query console",
321
+ "description": "Write and run AQL against any schema. Queries that change data always show what they will touch first.",
322
+ "meta": "Query console",
323
+ "meta_description": "The editor, its results and the library of past and saved queries.",
324
+ "actions": {
325
+ "data": "Data browser"
326
+ },
327
+ "library": {
328
+ "history": "History",
329
+ "saved": "Saved",
330
+ "team": "Team",
331
+ "search": "Search queries",
332
+ "today": "Today",
333
+ "yesterday": "Yesterday",
334
+ "failed": "Failed",
335
+ "rows": "{count} row | {count} rows",
336
+ "changed": "{count} changed",
337
+ "save": "Save query",
338
+ "edit": "Edit",
339
+ "delete": "Delete",
340
+ "shared": "Shared",
341
+ "no_match": "No query matches.",
342
+ "history_empty": "Queries you run show up here.",
343
+ "saved_empty": "Queries you save show up here.",
344
+ "team_empty": "Queries your teammates share show up here.",
345
+ "history_kept": "Your last {count} runs are kept.",
346
+ "clear": "Clear history"
347
+ },
348
+ "editor": {
349
+ "untitled": "Untitled query",
350
+ "shared": "Shared with team",
351
+ "edited": "edited",
352
+ "new": "New",
353
+ "new_hint": "Start an empty query",
354
+ "format": "Format",
355
+ "save": "Save",
356
+ "run": "Run",
357
+ "insert": "Insert",
358
+ "complete": "complete",
359
+ "position": "AQL · Ln {line}, Col {column}",
360
+ "aria_label": "Query editor (AQL)"
361
+ },
362
+ "result": {
363
+ "title": "Result",
364
+ "table": "Table",
365
+ "json": "JSON",
366
+ "chart": "Chart",
367
+ "rows": "{count} row | {count} rows",
368
+ "changed": "{count} changed",
369
+ "read_only": "read-only",
370
+ "wrote": "changed data",
371
+ "copy": "Copy as JSON",
372
+ "copied": "{count} row copied as JSON | {count} rows copied as JSON",
373
+ "export": "Export CSV",
374
+ "open_row": "Open in data browser",
375
+ "open_table": "Open {target} in data browser",
376
+ "failed_title": "Query failed",
377
+ "failed_detail": "after {ms} ms · nothing was changed",
378
+ "replace": "Replace with “{table}”",
379
+ "see_tables": "See {schema} tables",
380
+ "first_title": "Run a query to see results",
381
+ "first_description": "Start from an example built on your own tables:",
382
+ "example_latest": "Latest 10 rows of {table}",
383
+ "example_count": "Count {table}",
384
+ "no_rows": "The query answered no row.",
385
+ "elsewhere_title": "No rows in the default instance.",
386
+ "elsewhere_description": "This table has rows in other instances:",
387
+ "done": "Done. The query answered no row.",
388
+ "bars": "Bars",
389
+ "x_axis": "X axis",
390
+ "y_axis": "Y axis",
391
+ "chart_first": "First {count} of {total}",
392
+ "chart_unavailable": "No numeric column to plot.",
393
+ "all_shown": "{count} row shown. | All {count} rows shown. Results over 1,000 rows are cut; add .slice() to page through them.",
394
+ "truncated": "Showing {shown} of {total} rows: results are cut at 1,000. Add .slice() to page through them.",
395
+ "table_first": "The table shows the first {shown} of {total} rows; JSON and the CSV export hold them all.",
396
+ "running": "Running…",
397
+ "failed_local": "The query was not sent · nothing was changed",
398
+ "example_first": "First 10 rows of {table}"
399
+ },
400
+ "guard": {
401
+ "description": "This query changes data. A dry run found what it will touch:",
402
+ "operation": "Operation",
403
+ "target": "Target",
404
+ "rows": "Rows",
405
+ "title_insert": "Insert {count} row into {table}? | Insert {count} rows into {table}?",
406
+ "title_update": "Update {count} row in {table}? | Update {count} rows in {table}?",
407
+ "title_replace": "Replace {count} row in {table}? | Replace {count} rows in {table}?",
408
+ "title_delete": "Delete {count} row from {table}? | Delete {count} rows from {table}?",
409
+ "title_unknown": "Run a query that changes {table}?",
410
+ "confirm_insert": "Insert {count} row | Insert {count} rows",
411
+ "confirm_update": "Update {count} row | Update {count} rows",
412
+ "confirm_replace": "Replace {count} row | Replace {count} rows",
413
+ "confirm_delete": "Delete {count} row | Delete {count} rows",
414
+ "confirm_unknown": "Run query",
415
+ "skip": "Don't ask again for single-row updates",
416
+ "skip_detail": "Until you close this browser tab. Deletes and changes to more than one row always ask.",
417
+ "op_insert": "insert",
418
+ "op_update": "update",
419
+ "op_replace": "replace",
420
+ "op_delete": "delete"
421
+ },
422
+ "save": {
210
423
  "title": "Save query",
424
+ "edit_title": "Edit saved query",
425
+ "description": "Saved queries appear under Saved, and under Team when shared.",
211
426
  "name": "Name",
212
- "namePlaceholder": "Untitled query",
213
- "description": "Description",
214
- "descriptionPlaceholder": "Optional notes about this query",
427
+ "name_placeholder": "Pending EU orders",
428
+ "notes": "Description",
429
+ "name_required": "Give the query a name",
215
430
  "share": "Share with team",
216
- "shareDescription": "Team members will see this query under the Team tab.",
217
- "save": "Save",
218
- "cancel": "Cancel"
431
+ "share_description": "Teammates can run it; only you can edit or delete it.",
432
+ "confirm": "Save query",
433
+ "failed": "Couldn't save the query",
434
+ "saved": "“{name}” saved"
219
435
  },
220
- "editModal": {
221
- "title": "Edit query",
222
- "query": "Query"
436
+ "delete": {
437
+ "title": "Delete “{name}”?",
438
+ "shared": "Teammates lose it from their Team tab too.",
439
+ "confirm": "Delete query"
223
440
  },
224
- "itemMenu": {
225
- "load": "Load in editor",
226
- "edit": "Edit",
227
- "delete": "Delete"
228
- },
229
- "errorTitle": "Query failed",
230
- "mutationModal": {
231
- "title": "Run mutating query?",
232
- "body": "This query will modify data (insert, update, replace or delete). Are you sure you want to run it?",
233
- "dontRemind": "Don't ask me again",
234
- "confirm": "Run query",
235
- "cancel": "Cancel"
441
+ "clear": {
442
+ "title": "Clear your query history?",
443
+ "description": "Your past runs are removed. Saved queries stay.",
444
+ "confirm": "Clear history"
445
+ },
446
+ "errors": {
447
+ "syntax": "Syntax error: {detail}. Check parentheses, quotes and commas.",
448
+ "syntax_at": "Syntax error at line {line}, column {column}. Check parentheses, quotes and commas.",
449
+ "unknown_schema": "Unknown schema “{schema}”."
450
+ }
451
+ },
452
+ "catalog_category": "Data",
453
+ "nav": {
454
+ "explore": "Explore",
455
+ "work": "Work with data"
456
+ },
457
+ "common": {
458
+ "retry": "Try again",
459
+ "cancel": "Cancel",
460
+ "clear": "Clear"
461
+ },
462
+ "pickers": {
463
+ "schema": {
464
+ "label": "Schema",
465
+ "all": "All schemas",
466
+ "find": "Find a schema",
467
+ "more": "First {shown} of {total}",
468
+ "no_match": "No schema matches",
469
+ "placeholder": "Pick a schema"
470
+ },
471
+ "instance": {
472
+ "label": "Instance",
473
+ "all": "All instances",
474
+ "read_only": "Read-only view",
475
+ "default": "default",
476
+ "find": "Find an instance",
477
+ "more": "First {shown} of {total}",
478
+ "no_match": "No instance matches",
479
+ "no_named": "No named instance",
480
+ "pick_schema": "Pick a schema to list its named instances",
481
+ "loading": "Loading instances…",
482
+ "failed": "The instances could not be loaded"
236
483
  }
484
+ },
485
+ "modifiers": {
486
+ "hashed": "Hashed",
487
+ "localized": "Localized",
488
+ "encrypted": "Encrypted"
489
+ },
490
+ "inspector": {
491
+ "load_error": "Couldn't load the schemas of this table.",
492
+ "eyebrow": "Schema · {schema}",
493
+ "previous": "Previous table (K)",
494
+ "next": "Next table (J)",
495
+ "instances": "{count} instance | {count} instances",
496
+ "copy_name": "Copy table name",
497
+ "copied": "{name} copied",
498
+ "primary_key": "primary key",
499
+ "facts": {
500
+ "rows": "{count} row | {count} rows",
501
+ "columns": "{count} column | {count} columns",
502
+ "indexes": "{count} index | {count} indexes",
503
+ "relations": "{count} relation | {count} relations",
504
+ "by_instance": "Browse by instance in the data browser"
505
+ },
506
+ "actions": {
507
+ "browse": "Browse data",
508
+ "query": "Query this table",
509
+ "diagram": "Show in diagram"
510
+ },
511
+ "tabs": {
512
+ "columns": "Columns",
513
+ "indexes": "Indexes",
514
+ "relations": "Relations",
515
+ "sample": "Sample row"
516
+ },
517
+ "cols": {
518
+ "column": "Column",
519
+ "type": "Type",
520
+ "null": "Null",
521
+ "notes": "Notes"
522
+ },
523
+ "index": {
524
+ "compound": "compound",
525
+ "single": "single",
526
+ "empty": "No index declared on this table."
527
+ },
528
+ "relations": {
529
+ "out": "References · {count}",
530
+ "in": "Referenced by · {count}",
531
+ "none_out": "This table points to no other table.",
532
+ "none_in": "No table points to this one."
533
+ },
534
+ "sample": {
535
+ "position": "Row {position} of {total} · {instance}",
536
+ "default_instance": "default instance",
537
+ "named_instance": "instance {name}",
538
+ "another": "Another row",
539
+ "error": "Couldn't load a row of this table.",
540
+ "empty": "This table has no row yet."
541
+ }
542
+ },
543
+ "shortcuts": {
544
+ "data_browser": "Database · data browser",
545
+ "diagram": "Database · diagram",
546
+ "query_console": "Database · query console",
547
+ "schemas": "Database · schemas",
548
+ "next_table": "Next table, in the table inspector",
549
+ "previous_table": "Previous table, in the table inspector",
550
+ "find_table_or_column": "Find a table or column",
551
+ "find_table": "Find a table",
552
+ "search_rows": "Search the rows",
553
+ "refresh": "Refresh the rows",
554
+ "edit_cell": "Edit the focused cell",
555
+ "open_row": "Open the focused row",
556
+ "next_row": "Next row, in the row drawer",
557
+ "previous_row": "Previous row, in the row drawer",
558
+ "review_save": "Review and save the staged changes",
559
+ "add_note": "Add a note",
560
+ "select": "Select tool",
561
+ "pan": "Pan tool",
562
+ "fit": "Fit the view",
563
+ "reset_zoom": "Zoom to 100 %",
564
+ "undo": "Undo",
565
+ "redo": "Redo",
566
+ "step_back": "Step back: the layout preview, the focus, then the selection",
567
+ "run": "Run the query",
568
+ "save": "Save the query",
569
+ "complete": "Complete the query"
237
570
  }
238
571
  }
239
572
  }