ydb-embedded-ui 14.3.1 → 14.4.2
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.
- package/dist/components/AutoRefreshControl/i18n/index.d.ts +1 -1
- package/dist/components/DoughnutMetrics/utils.d.ts +1 -1
- package/dist/components/DoughnutMetrics/utils.js +1 -1
- package/dist/components/DoughnutMetrics/utils.js.map +1 -1
- package/dist/components/NodeHostWrapper/NodeHostWrapper.d.ts +1 -1
- package/dist/components/PDiskInfo/i18n/index.d.ts +1 -1
- package/dist/components/QueryResultTable/QueryResultTable.js +7 -1
- package/dist/components/QueryResultTable/QueryResultTable.js.map +1 -1
- package/dist/components/StorageGroupInfo/i18n/index.d.ts +1 -1
- package/dist/components/TenantNameWrapper/TenantNameWrapper.js +3 -3
- package/dist/components/TenantNameWrapper/TenantNameWrapper.js.map +1 -1
- package/dist/components/TenantNameWrapper/TenantNameWrapper.scss +8 -6
- package/dist/components/UptimeViewer/UptimeViewer.d.ts +2 -2
- package/dist/components/nodesColumns/i18n/index.d.ts +1 -1
- package/dist/containers/App/App.scss +1 -1
- package/dist/containers/Cluster/ClusterOverview/shared.d.ts +1 -0
- package/dist/containers/Cluster/ClusterOverview/utils.d.ts +1 -1
- package/dist/containers/Cluster/ClusterOverview/utils.js +2 -2
- package/dist/containers/Cluster/ClusterOverview/utils.js.map +1 -1
- package/dist/containers/Clusters/Clusters.js +3 -0
- package/dist/containers/Clusters/Clusters.js.map +1 -1
- package/dist/containers/Clusters/constants.d.ts +1 -1
- package/dist/containers/HomePage/HomePage.js +1 -1
- package/dist/containers/HomePage/HomePage.js.map +1 -1
- package/dist/containers/HomePage/useDatabasesPageEnvironment.js +17 -8
- package/dist/containers/HomePage/useDatabasesPageEnvironment.js.map +1 -1
- package/dist/containers/Node/Threads/ThreadStatesBar/ThreadStatesBar.d.ts +1 -1
- package/dist/containers/Node/i18n/index.d.ts +1 -1
- package/dist/containers/Nodes/i18n/index.d.ts +1 -1
- package/dist/containers/Operations/constants.d.ts +1 -1
- package/dist/containers/Storage/PaginatedStorageGroupsTable/columns/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/i18n/index.d.ts +1 -1
- package/dist/containers/Storage/useStorageQueryParams.d.ts +2 -2
- package/dist/containers/Tablets/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/Overview/TransferInfo/Credentials.d.ts +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/UsageTabCard.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/UsageTabCard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/UtilizationTabCard.js +1 -1
- package/dist/containers/Tenant/Diagnostics/TenantOverview/TabCard/UtilizationTabCard.js.map +1 -1
- package/dist/containers/Tenant/Diagnostics/TopicData/columns/columns.d.ts +3 -3
- package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.d.ts +1 -1
- package/dist/containers/Tenant/Query/QueriesHistory/QueriesHistory.js.map +1 -1
- package/dist/containers/Tenant/Query/Query.js +1 -1
- package/dist/containers/Tenant/Query/Query.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/EditorTabs.d.ts +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/EditorTabs.js +156 -0
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/EditorTabs.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/RenameTabDialog.d.ts +7 -0
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/RenameTabDialog.js +38 -0
- package/dist/containers/Tenant/Query/QueryEditor/EditorTabs/RenameTabDialog.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.d.ts +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js +18 -11
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/QueryEditor.scss +145 -1
- package/dist/containers/Tenant/Query/QueryEditor/{YqlEditor.d.ts → YqlEditor/YqlEditor.d.ts} +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/{YqlEditor.js → YqlEditor/YqlEditor.js} +166 -17
- package/dist/containers/Tenant/Query/QueryEditor/YqlEditor/YqlEditor.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/{keybindings.d.ts → YqlEditor/keybindings.d.ts} +8 -1
- package/dist/containers/Tenant/Query/QueryEditor/YqlEditor/keybindings.js +21 -0
- package/dist/containers/Tenant/Query/QueryEditor/YqlEditor/keybindings.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/{helpers.d.ts → hooks/useCodeAssistHelpers.d.ts} +1 -14
- package/dist/containers/Tenant/Query/QueryEditor/{helpers.js → hooks/useCodeAssistHelpers.js} +4 -43
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useCodeAssistHelpers.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useEditorOptions.d.ts +3 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useEditorOptions.js +26 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useEditorOptions.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useQueryTabsActions.d.ts +16 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useQueryTabsActions.js +89 -0
- package/dist/containers/Tenant/Query/QueryEditor/hooks/useQueryTabsActions.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/queryExecutionManager.d.ts +12 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/queryExecutionManager.js +29 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/queryExecutionManager.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/tabsManager.d.ts +17 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/tabsManager.js +71 -0
- package/dist/containers/Tenant/Query/QueryEditor/utils/tabsManager.js.map +1 -0
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js +5 -4
- package/dist/containers/Tenant/Query/QueryEditorControls/QueryEditorControls.js.map +1 -1
- package/dist/containers/Tenant/Query/SaveQuery/SaveQuery.d.ts +2 -1
- package/dist/containers/Tenant/Query/SaveQuery/SaveQuery.js +21 -8
- package/dist/containers/Tenant/Query/SaveQuery/SaveQuery.js.map +1 -1
- package/dist/containers/Tenant/Query/i18n/en.json +20 -0
- package/dist/containers/Tenant/Query/i18n/index.d.ts +1 -1
- package/dist/containers/Tenant/Query/utils/useSavedQueries.js +2 -1
- package/dist/containers/Tenant/Query/utils/useSavedQueries.js.map +1 -1
- package/dist/containers/Tenants/TenantsTable.js +1 -0
- package/dist/containers/Tenants/TenantsTable.js.map +1 -1
- package/dist/containers/VDiskPage/i18n/index.d.ts +1 -1
- package/dist/routes.d.ts +1 -1
- package/dist/routes.js +1 -1
- package/dist/routes.js.map +1 -1
- package/dist/store/configureStore.d.ts +8 -8
- package/dist/store/defaultStore.d.ts +4 -4
- package/dist/store/getUrlData.js +7 -0
- package/dist/store/getUrlData.js.map +1 -1
- package/dist/store/reducers/capabilities/capabilities.d.ts +16 -16
- package/dist/store/reducers/cluster/__test__/parseFields.test.js +5 -0
- package/dist/store/reducers/cluster/__test__/parseFields.test.js.map +1 -1
- package/dist/store/reducers/healthcheckInfo/healthcheckInfo.d.ts +24 -24
- package/dist/store/reducers/index.d.ts +5 -5
- package/dist/store/reducers/nodesList.d.ts +6 -6
- package/dist/store/reducers/query/__test__/SessionStorageMigration.test.d.ts +1 -0
- package/dist/store/reducers/query/__test__/SessionStorageMigration.test.js +35 -0
- package/dist/store/reducers/query/__test__/SessionStorageMigration.test.js.map +1 -0
- package/dist/store/reducers/query/__test__/tabPersistence.test.js +12 -1
- package/dist/store/reducers/query/__test__/tabPersistence.test.js.map +1 -1
- package/dist/store/reducers/query/__test__/utils.test.js +85 -1
- package/dist/store/reducers/query/__test__/utils.test.js.map +1 -1
- package/dist/store/reducers/query/api.d.ts +22 -0
- package/dist/store/reducers/query/api.js +252 -0
- package/dist/store/reducers/query/api.js.map +1 -0
- package/dist/store/reducers/query/{useQueriesHistory.d.ts → hooks/useQueriesHistory.d.ts} +1 -1
- package/dist/store/reducers/query/{useQueriesHistory.js → hooks/useQueriesHistory.js} +4 -4
- package/dist/store/reducers/query/hooks/useQueriesHistory.js.map +1 -0
- package/dist/store/reducers/query/hooks.d.ts +1 -0
- package/dist/store/reducers/query/hooks.js +2 -0
- package/dist/store/reducers/query/hooks.js.map +1 -0
- package/dist/store/reducers/query/{preparePlanData.d.ts → parsers/preparePlanData.d.ts} +2 -2
- package/dist/store/reducers/query/{preparePlanData.js → parsers/preparePlanData.js} +2 -2
- package/dist/store/reducers/query/parsers/preparePlanData.js.map +1 -0
- package/dist/store/reducers/query/{prepareQueryData.d.ts → parsers/prepareQueryData.d.ts} +2 -2
- package/dist/store/reducers/query/{prepareQueryData.js → parsers/prepareQueryData.js} +1 -1
- package/dist/store/reducers/query/parsers/prepareQueryData.js.map +1 -0
- package/dist/store/reducers/query/query.d.ts +3 -107
- package/dist/store/reducers/query/query.js +3 -300
- package/dist/store/reducers/query/query.js.map +1 -1
- package/dist/store/reducers/query/slice.d.ts +134 -0
- package/dist/store/reducers/query/slice.js +309 -0
- package/dist/store/reducers/query/slice.js.map +1 -0
- package/dist/store/reducers/query/streaming/reducers.d.ts +15 -0
- package/dist/store/reducers/query/{streamingReducers.js → streaming/reducers.js} +33 -37
- package/dist/store/reducers/query/streaming/reducers.js.map +1 -0
- package/dist/store/reducers/query/types.d.ts +17 -2
- package/dist/store/reducers/query/utils.d.ts +16 -0
- package/dist/store/reducers/query/utils.js +36 -0
- package/dist/store/reducers/query/utils.js.map +1 -1
- package/dist/store/reducers/schema/schema.d.ts +6 -6
- package/dist/store/reducers/schemaAcl/schemaAcl.d.ts +12 -12
- package/dist/store/reducers/settings/constants.d.ts +1 -1
- package/dist/store/reducers/settings/constants.js +1 -1
- package/dist/store/reducers/settings/constants.js.map +1 -1
- package/dist/store/reducers/settings/utils.d.ts +2 -2
- package/dist/store/reducers/topic.d.ts +18 -18
- package/dist/uiFactory/types.d.ts +1 -0
- package/dist/uiFactory/uiFactory.js +1 -0
- package/dist/uiFactory/uiFactory.js.map +1 -1
- package/dist/utils/hooks/useLastQueryExecutionSettings.d.ts +2 -2
- package/dist/utils/hooks/useQueryExecutionSettings.d.ts +1 -1
- package/dist/utils/hooks/useSelectedColumns.js +14 -9
- package/dist/utils/hooks/useSelectedColumns.js.map +1 -1
- package/dist/utils/query.d.ts +4 -4
- package/dist/utils/query.js +3 -2
- package/dist/utils/query.js.map +1 -1
- package/package.json +1 -1
- package/dist/containers/Tenant/Query/QueryEditor/YqlEditor.js.map +0 -1
- package/dist/containers/Tenant/Query/QueryEditor/helpers.js.map +0 -1
- package/dist/containers/Tenant/Query/QueryEditor/keybindings.js +0 -13
- package/dist/containers/Tenant/Query/QueryEditor/keybindings.js.map +0 -1
- package/dist/store/reducers/query/preparePlanData.js.map +0 -1
- package/dist/store/reducers/query/prepareQueryData.js.map +0 -1
- package/dist/store/reducers/query/streamingReducers.d.ts +0 -6
- package/dist/store/reducers/query/streamingReducers.js.map +0 -1
- package/dist/store/reducers/query/useQueriesHistory.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Query/Query.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"Query.js","sourceRoot":"","sources":["../../../../src/containers/Tenant/Query/Query.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAC,eAAe,EAAC,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAC,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAC,EAAE,EAAC,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAExE,OAAO,cAAc,MAAM,iCAAiC,CAAC;AAC7D,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAC,SAAS,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAC,YAAY,EAAC,MAAM,6BAA6B,CAAC;AAEzD,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC;AAM1B,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,KAAiB,EAAE,EAAE;IACvC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IAEpC,MAAM,EAAC,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,EAAC,GAAG,gBAAgB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7F,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAE3C,MAAM,qBAAqB,GAAG,CAAC,KAAsB,EAAE,EAAE;QACrD,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAC3B,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAE,CAAC,EAAE,KAAK,QAAQ,CAAC,EACrD,CAAC,QAAQ,CAAC,CACb,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACvB,QAAQ,QAAQ,EAAE,CAAC;YACf,KAAK,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjC,OAAO,CACH,KAAC,WAAW,IACR,eAAe,EAAE,qBAAqB,EACtC,cAAc,EAAE,cAAc,KAC1B,KAAK,GACX,CACL,CAAC;YACN,CAAC;YACD,KAAK,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;gBAChC,OAAO,CACH,KAAC,cAAc,IACX,eAAe,EAAE,qBAAqB,EACtC,cAAc,EAAE,cAAc,GAChC,CACL,CAAC;YACN,CAAC;YACD,KAAK,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9B,OAAO,KAAC,YAAY,IAAC,eAAe,EAAE,qBAAqB,GAAI,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACN,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,EAAE,aACd,SAAS,CAAC,CAAC,CAAC,CACT,KAAC,MAAM,cACH,0BAAQ,SAAS,CAAC,KAAK,GAAS,GAC3B,CACZ,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,SAAS,IAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,QAAQ,GAAI,EACxD,cAAK,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,YAAG,aAAa,EAAE,GAAO,IACnD,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function EditorTabs(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import NiceModal from '@ebay/nice-modal-react';
|
|
4
|
+
import { CirclePlus, Copy, Ellipsis, FloppyDisk, PaperPlane, Pencil, StarFill, Xmark, } from '@gravity-ui/icons';
|
|
5
|
+
import { Button, DropdownMenu, Flex, Loader, Tab, TabList, TabProvider } from '@gravity-ui/uikit';
|
|
6
|
+
import { cn } from '../../../../../utils/cn';
|
|
7
|
+
import { SAVE_QUERY_DIALOG } from '../../SaveQuery/SaveQuery';
|
|
8
|
+
import i18n from '../../i18n';
|
|
9
|
+
import { useSavedQueries } from '../../utils/useSavedQueries';
|
|
10
|
+
import { useQueryTabsActions } from '../hooks/useQueryTabsActions';
|
|
11
|
+
import { RENAME_TAB_DIALOG } from './RenameTabDialog';
|
|
12
|
+
const b = cn('query-editor');
|
|
13
|
+
function EditorTabItem({ tabId, tab, isActive, onActivate, onCloseTab, onDuplicateTab, onRenameTab, onSaveQueryAs, onCloseOtherTabs, onCloseAllTabs, }) {
|
|
14
|
+
var _a;
|
|
15
|
+
const title = tab.title || i18n('editor-tabs.untitled');
|
|
16
|
+
const isDirty = Boolean(tab.isDirty);
|
|
17
|
+
const isLoading = Boolean((_a = tab.result) === null || _a === void 0 ? void 0 : _a.isLoading);
|
|
18
|
+
const handleMenuSwitcherClick = React.useCallback((event) => {
|
|
19
|
+
event.stopPropagation();
|
|
20
|
+
onActivate(tabId);
|
|
21
|
+
}, [onActivate, tabId]);
|
|
22
|
+
const handleCloseClick = React.useCallback((event) => {
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
onCloseTab(tabId);
|
|
25
|
+
}, [onCloseTab, tabId]);
|
|
26
|
+
const handleRenameClick = React.useCallback(() => {
|
|
27
|
+
onRenameTab(tabId, tab.title);
|
|
28
|
+
}, [onRenameTab, tab.title, tabId]);
|
|
29
|
+
const handleDuplicateClick = React.useCallback(() => {
|
|
30
|
+
onDuplicateTab(tabId);
|
|
31
|
+
}, [onDuplicateTab, tabId]);
|
|
32
|
+
const handleSaveQueryAsClick = React.useCallback(() => {
|
|
33
|
+
onSaveQueryAs(tabId);
|
|
34
|
+
}, [onSaveQueryAs, tabId]);
|
|
35
|
+
const handleCloseOtherTabsClick = React.useCallback(() => {
|
|
36
|
+
onCloseOtherTabs(tabId);
|
|
37
|
+
}, [onCloseOtherTabs, tabId]);
|
|
38
|
+
const handleCloseAllTabsClick = React.useCallback(() => {
|
|
39
|
+
onCloseAllTabs();
|
|
40
|
+
}, [onCloseAllTabs]);
|
|
41
|
+
const tabMenuItems = React.useMemo(() => {
|
|
42
|
+
const shortcut = (value) => _jsx("span", { children: value });
|
|
43
|
+
return [
|
|
44
|
+
[
|
|
45
|
+
{
|
|
46
|
+
text: i18n('editor-tabs.rename'),
|
|
47
|
+
iconStart: _jsx(Pencil, {}),
|
|
48
|
+
iconEnd: shortcut('⌘T'),
|
|
49
|
+
action: handleRenameClick,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
text: i18n('editor-tabs.duplicate'),
|
|
53
|
+
iconStart: _jsx(Copy, {}),
|
|
54
|
+
action: handleDuplicateClick,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
{
|
|
59
|
+
text: i18n('editor-tabs.add-to-favorites'),
|
|
60
|
+
iconStart: _jsx(StarFill, {}),
|
|
61
|
+
disabled: true,
|
|
62
|
+
action: () => { },
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
text: i18n('editor-tabs.save-query-as'),
|
|
66
|
+
iconStart: _jsx(FloppyDisk, {}),
|
|
67
|
+
iconEnd: shortcut('⌘⇧S'),
|
|
68
|
+
action: handleSaveQueryAsClick,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
text: i18n('editor-tabs.share-query'),
|
|
72
|
+
iconStart: _jsx(PaperPlane, {}),
|
|
73
|
+
disabled: true,
|
|
74
|
+
action: () => { },
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
[
|
|
78
|
+
{
|
|
79
|
+
text: i18n('editor-tabs.close'),
|
|
80
|
+
iconStart: _jsx(Xmark, {}),
|
|
81
|
+
iconEnd: shortcut('⌘⌫'),
|
|
82
|
+
action: () => onCloseTab(tabId),
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
text: i18n('editor-tabs.close-other-tabs'),
|
|
86
|
+
iconStart: _jsx(Xmark, {}),
|
|
87
|
+
iconEnd: shortcut('⌘⇧⌫'),
|
|
88
|
+
action: handleCloseOtherTabsClick,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
text: i18n('editor-tabs.close-all-tabs'),
|
|
92
|
+
iconStart: _jsx(Xmark, {}),
|
|
93
|
+
iconEnd: shortcut('⌘⌥⌫'),
|
|
94
|
+
action: handleCloseAllTabsClick,
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
];
|
|
98
|
+
}, [
|
|
99
|
+
handleCloseAllTabsClick,
|
|
100
|
+
handleCloseOtherTabsClick,
|
|
101
|
+
handleDuplicateClick,
|
|
102
|
+
handleRenameClick,
|
|
103
|
+
handleSaveQueryAsClick,
|
|
104
|
+
onCloseTab,
|
|
105
|
+
tabId,
|
|
106
|
+
]);
|
|
107
|
+
const renderTabMenuSwitcher = React.useCallback((props) => {
|
|
108
|
+
return (_jsx("span", { ...props, className: b('editor-tab-action', { menu: true }), children: _jsx(Ellipsis, {}) }));
|
|
109
|
+
}, []);
|
|
110
|
+
return (_jsx(Tab, { value: tabId, children: _jsxs(Flex, { className: b('editor-tab'), alignItems: "center", gap: 1, children: [_jsx("span", { className: b('editor-tab-title'), children: title }), isDirty ? _jsx("span", { className: b('editor-tab-indicator', { dirty: true }) }) : null, isLoading ? (_jsx("span", { className: b('editor-tab-indicator', { loading: true }), children: _jsx(Loader, { size: "s" }) })) : null, _jsxs(Flex, { className: b('editor-tab-actions'), alignItems: "center", gap: 0, children: [_jsx("span", { className: b('editor-tab-action', { close: true, active: isActive }), onClick: handleCloseClick, children: _jsx(Xmark, {}) }), _jsx(DropdownMenu, { items: tabMenuItems, onSwitcherClick: handleMenuSwitcherClick, renderSwitcher: renderTabMenuSwitcher, switcherWrapperClassName: b('editor-tab-menu-switcher'), popupProps: {
|
|
111
|
+
placement: ['bottom-start', 'top-start'],
|
|
112
|
+
floatingStyles: { width: 264 },
|
|
113
|
+
}, size: "m" })] })] }) }));
|
|
114
|
+
}
|
|
115
|
+
export function EditorTabs() {
|
|
116
|
+
const { activeTabId, tabsOrder, tabsById, handleTabSwitch, handleActivateTab, handleNewTabClick, handleCloseTab, handleCloseOtherTabs, handleCloseAllTabs, handleDuplicateTab, handleRenameTab: renameTab, } = useQueryTabsActions();
|
|
117
|
+
const { savedQueries, saveQuery } = useSavedQueries();
|
|
118
|
+
const handleSaveQueryAs = React.useCallback((tabId) => {
|
|
119
|
+
handleActivateTab(tabId);
|
|
120
|
+
const tab = tabsById[tabId];
|
|
121
|
+
const commonModalProps = { savedQueries, onSaveQuery: saveQuery };
|
|
122
|
+
if (tab === null || tab === void 0 ? void 0 : tab.isTitleUserDefined) {
|
|
123
|
+
NiceModal.show(SAVE_QUERY_DIALOG, {
|
|
124
|
+
...commonModalProps,
|
|
125
|
+
defaultQueryName: tab.title,
|
|
126
|
+
});
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
NiceModal.show(SAVE_QUERY_DIALOG, commonModalProps);
|
|
130
|
+
}, [handleActivateTab, savedQueries, saveQuery, tabsById]);
|
|
131
|
+
const handleRenameTab = React.useCallback((tabId, currentTitle) => {
|
|
132
|
+
NiceModal.show(RENAME_TAB_DIALOG, {
|
|
133
|
+
title: currentTitle,
|
|
134
|
+
onRename: (title) => renameTab(tabId, title),
|
|
135
|
+
});
|
|
136
|
+
}, [renameTab]);
|
|
137
|
+
const renderEditorTab = React.useCallback((tabId) => {
|
|
138
|
+
const tab = tabsById[tabId];
|
|
139
|
+
if (!tab) {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return (_jsx(EditorTabItem, { tabId: tabId, tab: tab, isActive: tabId === activeTabId, onActivate: handleActivateTab, onCloseTab: handleCloseTab, onDuplicateTab: handleDuplicateTab, onRenameTab: handleRenameTab, onSaveQueryAs: handleSaveQueryAs, onCloseOtherTabs: handleCloseOtherTabs, onCloseAllTabs: handleCloseAllTabs }, tabId));
|
|
143
|
+
}, [
|
|
144
|
+
activeTabId,
|
|
145
|
+
handleActivateTab,
|
|
146
|
+
handleCloseTab,
|
|
147
|
+
handleCloseAllTabs,
|
|
148
|
+
handleCloseOtherTabs,
|
|
149
|
+
handleDuplicateTab,
|
|
150
|
+
handleRenameTab,
|
|
151
|
+
handleSaveQueryAs,
|
|
152
|
+
tabsById,
|
|
153
|
+
]);
|
|
154
|
+
return (_jsxs(Flex, { className: b('editor-tabs'), alignItems: "center", justifyContent: "space-between", children: [_jsx(TabProvider, { value: activeTabId, onUpdate: handleTabSwitch, children: _jsx(TabList, { size: "m", children: tabsOrder.map(renderEditorTab) }) }), _jsx(Flex, { className: b('editor-tabs-actions'), alignItems: "center", gap: 1, children: _jsx(Button, { view: "flat-secondary", size: "xs", onClick: handleNewTabClick, children: _jsx(Button.Icon, { children: _jsx(CirclePlus, {}) }) }) })] }));
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=EditorTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditorTabs.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Query/QueryEditor/EditorTabs/EditorTabs.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const RENAME_TAB_DIALOG = "rename-tab-dialog";
|
|
3
|
+
export interface RenameTabDialogNiceModalProps {
|
|
4
|
+
title: string;
|
|
5
|
+
onRename: (title: string) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const RenameTabDialogNiceModal: React.FC<RenameTabDialogNiceModalProps & import("@ebay/nice-modal-react").NiceModalHocProps>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import NiceModal from '@ebay/nice-modal-react';
|
|
4
|
+
import { Dialog, TextInput } from '@gravity-ui/uikit';
|
|
5
|
+
import i18n from '../../i18n';
|
|
6
|
+
export const RENAME_TAB_DIALOG = 'rename-tab-dialog';
|
|
7
|
+
function RenameTabDialog({ open, title, onRename, onClose, }) {
|
|
8
|
+
const [nextTitle, setNextTitle] = React.useState(title);
|
|
9
|
+
const [errorMessage, setErrorMessage] = React.useState();
|
|
10
|
+
const handleClose = React.useCallback(() => {
|
|
11
|
+
onClose();
|
|
12
|
+
}, [onClose]);
|
|
13
|
+
const handleTitleChange = React.useCallback((value) => {
|
|
14
|
+
setNextTitle(value);
|
|
15
|
+
setErrorMessage(undefined);
|
|
16
|
+
}, []);
|
|
17
|
+
const handleApply = React.useCallback(() => {
|
|
18
|
+
const normalizedTitle = nextTitle.trim();
|
|
19
|
+
if (!normalizedTitle) {
|
|
20
|
+
setErrorMessage(i18n('editor-tabs.rename-dialog.error-empty'));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
onRename(normalizedTitle);
|
|
24
|
+
handleClose();
|
|
25
|
+
}, [handleClose, nextTitle, onRename]);
|
|
26
|
+
const controlRef = React.useRef(null);
|
|
27
|
+
return (_jsxs(Dialog, { open: open, hasCloseButton: false, size: "s", onClose: handleClose, onEnterKeyDown: handleApply, initialFocus: controlRef, children: [_jsx(Dialog.Header, { caption: i18n('editor-tabs.rename-dialog.title') }), _jsx(Dialog.Body, { children: _jsx(TextInput, { value: nextTitle, onUpdate: handleTitleChange, placeholder: i18n('editor-tabs.rename-dialog.input-placeholder'), controlRef: controlRef, hasClear: true, autoComplete: false, validationState: errorMessage ? 'invalid' : undefined, errorMessage: errorMessage }) }), _jsx(Dialog.Footer, { textButtonApply: i18n('editor-tabs.rename-dialog.apply'), textButtonCancel: i18n('editor-tabs.rename-dialog.cancel'), onClickButtonApply: handleApply, onClickButtonCancel: handleClose })] }));
|
|
28
|
+
}
|
|
29
|
+
export const RenameTabDialogNiceModal = NiceModal.create((props) => {
|
|
30
|
+
const modal = NiceModal.useModal();
|
|
31
|
+
const handleClose = React.useCallback(() => {
|
|
32
|
+
modal.hide();
|
|
33
|
+
modal.remove();
|
|
34
|
+
}, [modal]);
|
|
35
|
+
return _jsx(RenameTabDialog, { ...props, open: modal.visible, onClose: handleClose });
|
|
36
|
+
});
|
|
37
|
+
NiceModal.register(RENAME_TAB_DIALOG, RenameTabDialogNiceModal);
|
|
38
|
+
//# sourceMappingURL=RenameTabDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenameTabDialog.js","sourceRoot":"","sources":["../../../../../../src/containers/Tenant/Query/QueryEditor/EditorTabs/RenameTabDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,11 @@ import { isEqual } from 'lodash';
|
|
|
4
4
|
import { v4 as uuidv4 } from 'uuid';
|
|
5
5
|
import SplitPane from '../../../../components/SplitPane';
|
|
6
6
|
import { useStreamingAvailable, useTracingLevelOptionAvailable, } from '../../../../store/reducers/capabilities/hooks';
|
|
7
|
-
import { queryApi, selectResult, selectTenantPath, setIsDirty, setTenantPath, } from '../../../../store/reducers/query/query';
|
|
7
|
+
import { queryApi, selectActiveTabId, selectLastExecutedQueryText, selectResult, selectTenantPath, setIsDirty, setLastExecutedQueryText, setTenantPath, } from '../../../../store/reducers/query/query';
|
|
8
8
|
import { setQueryAction } from '../../../../store/reducers/queryActions/queryActions';
|
|
9
9
|
import { selectShowPreview, setShowPreview } from '../../../../store/reducers/schema/schema';
|
|
10
10
|
import { SETTING_KEYS } from '../../../../store/reducers/settings/constants';
|
|
11
|
+
import { uiFactory } from '../../../../uiFactory/uiFactory';
|
|
11
12
|
import { cn } from '../../../../utils/cn';
|
|
12
13
|
import { DEFAULT_SIZE_RESULT_PANE_KEY } from '../../../../utils/constants';
|
|
13
14
|
import { useEventHandler, useQueryExecutionSettings, useQueryStreamingSetting, useResourcePools, useSetting, useTypedDispatch, useTypedSelector, } from '../../../../utils/hooks';
|
|
@@ -21,8 +22,9 @@ import { PreviewContainer } from '../Preview/Preview';
|
|
|
21
22
|
import { QueryEditorControls } from '../QueryEditorControls/QueryEditorControls';
|
|
22
23
|
import { QueryResultViewer } from '../QueryResult/QueryResultViewer';
|
|
23
24
|
import { QuerySettingsDialog } from '../QuerySettingsDialog/QuerySettingsDialog';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
25
|
+
import { EditorTabs } from './EditorTabs/EditorTabs';
|
|
26
|
+
import { YqlEditor } from './YqlEditor/YqlEditor';
|
|
27
|
+
import { queryExecutionManagerInstance } from './utils/queryExecutionManager';
|
|
26
28
|
import './QueryEditor.scss';
|
|
27
29
|
const b = cn('query-editor');
|
|
28
30
|
const initialTenantCommonInfoState = {
|
|
@@ -34,6 +36,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
34
36
|
const dispatch = useTypedDispatch();
|
|
35
37
|
const { database, path, type, subType, databaseFullPath } = useCurrentSchema();
|
|
36
38
|
const savedPath = useTypedSelector(selectTenantPath);
|
|
39
|
+
const activeTabId = useTypedSelector(selectActiveTabId);
|
|
37
40
|
const result = useTypedSelector(selectResult);
|
|
38
41
|
const showPreview = useTypedSelector(selectShowPreview);
|
|
39
42
|
const { historyQueries, historyCurrentQueryId, saveQueryToHistory, updateQueryInHistory, goToPreviousQuery, goToNextQuery, } = queriesHistory;
|
|
@@ -43,7 +46,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
43
46
|
const [lastQueryExecutionSettings, setLastQueryExecutionSettings] = useLastQueryExecutionSettings();
|
|
44
47
|
const { resetBanner } = useChangedQuerySettings();
|
|
45
48
|
const [lastUsedQueryAction, setLastUsedQueryAction] = useSetting(SETTING_KEYS.LAST_USED_QUERY_ACTION);
|
|
46
|
-
const
|
|
49
|
+
const lastExecutedQueryText = useTypedSelector(selectLastExecutedQueryText) || '';
|
|
47
50
|
const [isQueryStreamingEnabled] = useQueryStreamingSetting();
|
|
48
51
|
const [binaryDataInPlainTextDisplay] = useSetting(SETTING_KEYS.BINARY_DATA_IN_PLAIN_TEXT_DISPLAY);
|
|
49
52
|
const { resourcePools, normalizedResourcePool, isLoading: isResourcePoolsLoading, } = useResourcePools(database, querySettings.resourcePool);
|
|
@@ -53,6 +56,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
53
56
|
querySettings.queryMode === QUERY_MODES.query;
|
|
54
57
|
const [sendQuery] = queryApi.useUseSendQueryMutation();
|
|
55
58
|
const [streamQuery] = queryApi.useUseStreamQueryMutation();
|
|
59
|
+
const isMultiTabQueryEditorEnabled = Boolean(uiFactory.enableMultiTabQueryEditor);
|
|
56
60
|
// Normalize stored resourcePool if it's not available for current database
|
|
57
61
|
React.useEffect(() => {
|
|
58
62
|
if (isResourcePoolsLoading) {
|
|
@@ -100,14 +104,14 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
100
104
|
}, [showPreview, isResultLoaded]);
|
|
101
105
|
const handleSendExecuteClick = useEventHandler((text, partial) => {
|
|
102
106
|
setLastUsedQueryAction(QUERY_ACTIONS.execute);
|
|
103
|
-
setLastExecutedQueryText(text);
|
|
107
|
+
dispatch(setLastExecutedQueryText({ tabId: activeTabId, queryText: text }));
|
|
104
108
|
if (!isEqual(lastQueryExecutionSettings, querySettings)) {
|
|
105
109
|
resetBanner();
|
|
106
110
|
setLastQueryExecutionSettings(querySettings);
|
|
107
111
|
}
|
|
108
112
|
const queryId = uuidv4();
|
|
109
113
|
// Abort previous query if there was any
|
|
110
|
-
|
|
114
|
+
queryExecutionManagerInstance.abortQuery(activeTabId);
|
|
111
115
|
if (isStreamingEnabled) {
|
|
112
116
|
reachMetricaGoal('runQuery', {
|
|
113
117
|
actionType: 'execute',
|
|
@@ -115,6 +119,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
115
119
|
...querySettings,
|
|
116
120
|
});
|
|
117
121
|
const query = streamQuery({
|
|
122
|
+
tabId: activeTabId,
|
|
118
123
|
actionType: 'execute',
|
|
119
124
|
query: text,
|
|
120
125
|
database,
|
|
@@ -122,11 +127,12 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
122
127
|
enableTracingLevel,
|
|
123
128
|
base64: encodeTextWithBase64,
|
|
124
129
|
});
|
|
125
|
-
|
|
130
|
+
queryExecutionManagerInstance.registerQuery(activeTabId, query);
|
|
126
131
|
}
|
|
127
132
|
else {
|
|
128
133
|
reachMetricaGoal('runQuery', { actionType: 'execute', ...querySettings });
|
|
129
134
|
const query = sendQuery({
|
|
135
|
+
tabId: activeTabId,
|
|
130
136
|
actionType: 'execute',
|
|
131
137
|
query: text,
|
|
132
138
|
database,
|
|
@@ -145,7 +151,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
145
151
|
// Do not add query stats for failed query
|
|
146
152
|
console.error('Failed to update query history:', error);
|
|
147
153
|
});
|
|
148
|
-
|
|
154
|
+
queryExecutionManagerInstance.registerQuery(activeTabId, query);
|
|
149
155
|
}
|
|
150
156
|
dispatch(setShowPreview(false));
|
|
151
157
|
// Don't save partial queries in history
|
|
@@ -165,7 +171,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
165
171
|
};
|
|
166
172
|
const handleGetExplainQueryClick = useEventHandler((text) => {
|
|
167
173
|
setLastUsedQueryAction(QUERY_ACTIONS.explain);
|
|
168
|
-
setLastExecutedQueryText(text);
|
|
174
|
+
dispatch(setLastExecutedQueryText({ tabId: activeTabId, queryText: text }));
|
|
169
175
|
if (!isEqual(lastQueryExecutionSettings, querySettings)) {
|
|
170
176
|
resetBanner();
|
|
171
177
|
setLastQueryExecutionSettings(querySettings);
|
|
@@ -173,6 +179,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
173
179
|
const queryId = uuidv4();
|
|
174
180
|
reachMetricaGoal('runQuery', { actionType: 'explain', ...querySettings });
|
|
175
181
|
const query = sendQuery({
|
|
182
|
+
tabId: activeTabId,
|
|
176
183
|
actionType: 'explain',
|
|
177
184
|
query: text,
|
|
178
185
|
database,
|
|
@@ -181,7 +188,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
181
188
|
queryId,
|
|
182
189
|
base64: encodeTextWithBase64,
|
|
183
190
|
});
|
|
184
|
-
|
|
191
|
+
queryExecutionManagerInstance.registerQuery(activeTabId, query);
|
|
185
192
|
dispatch(setShowPreview(false));
|
|
186
193
|
dispatchResultVisibilityState(PaneVisibilityActionTypes.triggerExpand);
|
|
187
194
|
});
|
|
@@ -199,7 +206,7 @@ export default function QueryEditor({ theme, changeUserInput, queriesHistory })
|
|
|
199
206
|
};
|
|
200
207
|
return (_jsxs("div", { className: b(), children: [_jsxs(SplitPane, { direction: "vertical", defaultSizePaneKey: DEFAULT_SIZE_RESULT_PANE_KEY, triggerCollapse: resultVisibilityState.triggerCollapse, triggerExpand: resultVisibilityState.triggerExpand, minSize: [0, 52], collapsedSizes: [100, 0], onSplitStartDragAdditional: onSplitStartDragAdditional, children: [_jsxs("div", { className: b('pane-wrapper', {
|
|
201
208
|
top: true,
|
|
202
|
-
}), children: [_jsx("div", { className: b('monaco-wrapper'), children: _jsx("div", { className: b('monaco'), children: _jsx(YqlEditor, { changeUserInput: changeUserInput, theme: theme, handleSendExecuteClick: handleSendExecuteClick, handleGetExplainQueryClick: handleGetExplainQueryClick, historyQueries: historyQueries, goToPreviousQuery: goToPreviousQuery, goToNextQuery: goToNextQuery }) }) }), renderControls()] }), _jsx("div", { className: b('pane-wrapper'), children: _jsx(Result, { resultVisibilityState: resultVisibilityState, onExpandResultHandler: onExpandResultHandler, onCollapseResultHandler: onCollapseResultHandler, type: type, subType: subType, theme: theme, result: result, database: database, databaseFullPath: databaseFullPath, path: path, showPreview: showPreview, queryText: lastExecutedQueryText, tableSettings: tableSettings }, result === null || result === void 0 ? void 0 : result.queryId) })] }), _jsx(QuerySettingsDialog, {})] }));
|
|
209
|
+
}), children: [isMultiTabQueryEditorEnabled ? _jsx(EditorTabs, {}) : null, _jsx("div", { className: b('monaco-wrapper'), children: _jsx("div", { className: b('monaco'), children: _jsx(YqlEditor, { changeUserInput: changeUserInput, theme: theme, handleSendExecuteClick: handleSendExecuteClick, handleGetExplainQueryClick: handleGetExplainQueryClick, historyQueries: historyQueries, goToPreviousQuery: goToPreviousQuery, goToNextQuery: goToNextQuery }) }) }), renderControls()] }), _jsx("div", { className: b('pane-wrapper'), children: _jsx(Result, { resultVisibilityState: resultVisibilityState, onExpandResultHandler: onExpandResultHandler, onCollapseResultHandler: onCollapseResultHandler, type: type, subType: subType, theme: theme, result: result, database: database, databaseFullPath: databaseFullPath, path: path, showPreview: showPreview, queryText: lastExecutedQueryText, tableSettings: tableSettings }, result === null || result === void 0 ? void 0 : result.queryId) })] }), _jsx(QuerySettingsDialog, {})] }));
|
|
203
210
|
}
|
|
204
211
|
function Result({ resultVisibilityState, onExpandResultHandler, onCollapseResultHandler, type, subType, theme, result, database, databaseFullPath, path, showPreview, queryText, tableSettings, }) {
|
|
205
212
|
if (showPreview) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditor.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAC,OAAO,EAAC,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAC,EAAE,IAAI,MAAM,EAAC,MAAM,MAAM,CAAC;AAElC,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,EACH,qBAAqB,EACrB,8BAA8B,GACjC,MAAM,+CAA+C,CAAC;
|
|
1
|
+
{"version":3,"file":"QueryEditor.js","sourceRoot":"","sources":["../../../../../src/containers/Tenant/Query/QueryEditor/QueryEditor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,10 +15,152 @@
|
|
|
15
15
|
padding-bottom: 0;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
+
&__editor-tabs {
|
|
19
|
+
display: flex;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
align-items: center;
|
|
22
|
+
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 32px;
|
|
25
|
+
padding: 0;
|
|
26
|
+
|
|
27
|
+
// Override UIKit Tabs to match Figma: 32px height, 3px gaps, filled backgrounds.
|
|
28
|
+
// Tab internals are from @gravity-ui/uikit (`TabList`/`Tab`).
|
|
29
|
+
.g-tab-list {
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
flex-wrap: nowrap;
|
|
32
|
+
align-items: center;
|
|
33
|
+
|
|
34
|
+
box-shadow: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.g-tab-list {
|
|
38
|
+
--g-tabs-item-height: 32px;
|
|
39
|
+
--g-tabs-item-gap: 3px;
|
|
40
|
+
--g-tabs-item-border-width: 0px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.g-tab {
|
|
44
|
+
min-width: 90px;
|
|
45
|
+
max-width: 200px;
|
|
46
|
+
|
|
47
|
+
border-block-end: 0;
|
|
48
|
+
border-radius: var(--g-border-radius-xs) var(--g-border-radius-xs) 0 0;
|
|
49
|
+
background-color: var(--g-color-base-generic-medium-hover);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.g-tab:hover {
|
|
53
|
+
background-color: var(--g-color-base-generic-hover);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.g-tab_active,
|
|
57
|
+
.g-tab_active:hover {
|
|
58
|
+
background-color: var(--g-color-base-generic);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.g-tab__content {
|
|
62
|
+
height: 100%;
|
|
63
|
+
padding: 2px 16px;
|
|
64
|
+
|
|
65
|
+
border-radius: 0;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.g-tab__title {
|
|
69
|
+
display: flex;
|
|
70
|
+
align-items: center;
|
|
71
|
+
|
|
72
|
+
min-width: 0;
|
|
73
|
+
|
|
74
|
+
font-family: var(--g-text-caption-font-family);
|
|
75
|
+
font-size: var(--g-text-caption-2-font-size);
|
|
76
|
+
font-weight: var(--g-text-caption-font-weight);
|
|
77
|
+
line-height: var(--g-text-caption-2-line-height);
|
|
78
|
+
|
|
79
|
+
color: var(--g-color-text-complementary);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
&__editor-tabs-actions {
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
gap: 8px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&__editor-tab {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
|
|
93
|
+
width: 100%;
|
|
94
|
+
max-width: 200px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&__editor-tab-title {
|
|
98
|
+
overflow: hidden;
|
|
99
|
+
flex: 1 1 auto;
|
|
100
|
+
|
|
101
|
+
min-width: 0;
|
|
102
|
+
|
|
103
|
+
white-space: nowrap;
|
|
104
|
+
text-overflow: ellipsis;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
&__editor-tab-actions {
|
|
108
|
+
display: flex;
|
|
109
|
+
flex-shrink: 0;
|
|
110
|
+
align-items: center;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
&__editor-tab-action {
|
|
114
|
+
display: inline-flex;
|
|
115
|
+
justify-content: center;
|
|
116
|
+
align-items: center;
|
|
117
|
+
|
|
118
|
+
width: 20px;
|
|
119
|
+
height: 20px;
|
|
120
|
+
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
|
|
123
|
+
color: var(--g-color-text-secondary);
|
|
124
|
+
border-radius: var(--g-border-radius-xs);
|
|
125
|
+
|
|
126
|
+
&:hover {
|
|
127
|
+
background-color: var(--g-color-base-generic-hover);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
&_close {
|
|
131
|
+
margin-right: 2px;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
&__editor-tab-menu-switcher {
|
|
136
|
+
display: inline-flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
&__editor-tab-indicator {
|
|
141
|
+
display: inline-flex;
|
|
142
|
+
justify-content: center;
|
|
143
|
+
align-items: center;
|
|
144
|
+
|
|
145
|
+
width: 8px;
|
|
146
|
+
height: 8px;
|
|
147
|
+
|
|
148
|
+
&_dirty {
|
|
149
|
+
border-radius: 50%;
|
|
150
|
+
background-color: var(--g-color-base-info-medium);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
&_loading {
|
|
154
|
+
width: auto;
|
|
155
|
+
height: auto;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
18
159
|
&__monaco {
|
|
19
160
|
position: relative;
|
|
20
161
|
|
|
21
162
|
display: flex;
|
|
163
|
+
flex: 1 1 auto;
|
|
22
164
|
|
|
23
165
|
width: 100%;
|
|
24
166
|
height: 100%;
|
|
@@ -27,8 +169,10 @@
|
|
|
27
169
|
}
|
|
28
170
|
|
|
29
171
|
&__monaco-wrapper {
|
|
172
|
+
display: flex;
|
|
173
|
+
flex: 1 1 auto;
|
|
174
|
+
|
|
30
175
|
width: 100%;
|
|
31
|
-
height: calc(100% - 49px);
|
|
32
176
|
min-height: 0;
|
|
33
177
|
}
|
|
34
178
|
|