dbeaver/pro#9665 adds global network profiles (#4465)

* dbeaver/pro#9665 adds global network profiles

* dbeaver/pro#9665 marks global profiles in selector

* dbeaver/pro#9665 cleanup

* dbeaver/pro#9665 fixes document-global G color so it adapts to the theme

* dbeaver/pro#9665 splits logic to tab service & bootstrap

* dbeaver/pro#9665 hides connections tab if no sub-tabs was registered

* Merge branch 'devel' into 9665-cb-global-network-profiles-in-cloudbeaver

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
This commit is contained in:
sergeyteleshev
2026-07-28 19:52:23 +03:00
committed by GitHub
co-authored by Evgenia kseniaguzeeva
parent d318579745
commit b021ceec4b
26 changed files with 490 additions and 2 deletions
@@ -581,4 +581,13 @@
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.5 2C4.94772 2 4.5 2.44771 4.5 3V29C4.5 29.5523 4.94772 30 5.5 30H26.5C27.0523 30 27.5 29.5523 27.5 29V7.38374C27.5 7.13669 27.4086 6.8984 27.2433 6.71477L23.2979 2.33104C23.1083 2.12032 22.8381 2 22.5546 2H5.5ZM10 10H21V13H10V10ZM21 16H10V19H21V16ZM10 22H17V25H10V22Z" fill="#338ECC"/>
</svg>
</symbol>
<symbol id="document-global" viewBox="0 0 32 32">
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="document-global-mask">
<rect x="0" y="0" width="32" height="32" fill="white"/>
<text x="16" y="17" text-anchor="middle" dominant-baseline="central" font-size="20" font-weight="800" fill="black" font-family="Arial, Helvetica, sans-serif">G</text>
</mask>
<path d="M5.5 2C4.94772 2 4.5 2.44771 4.5 3V29C4.5 29.5523 4.94772 30 5.5 30H26.5C27.0523 30 27.5 29.5523 27.5 29V7.38374C27.5 7.13669 27.4086 6.8984 27.2433 6.71477L23.2979 2.33104C23.1083 2.12032 22.8381 2 22.5546 2H5.5Z" fill="#338ECC" mask="url(#document-global-mask)"/>
</svg>
</symbol>
</svg>

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 54 KiB

@@ -0,0 +1,44 @@
{
"name": "@cloudbeaver/plugin-connection-administration",
"type": "module",
"sideEffects": [
"./lib/module.js",
"./lib/index.js",
"src/**/*.css",
"public/**/*"
],
"version": "0.1.0",
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
"clean": "rimraf --glob lib",
"lint": "eslint ./src/ --ext .ts,.tsx",
"test": "dbeaver-test",
"validate-dependencies": "core-cli-validate-dependencies"
},
"dependencies": {
"@cloudbeaver/core-administration": "workspace:*",
"@cloudbeaver/core-blocks": "workspace:*",
"@cloudbeaver/core-di": "workspace:*",
"@cloudbeaver/core-localization": "workspace:*",
"@cloudbeaver/core-ui": "workspace:*",
"mobx-react-lite": "^4",
"react": "^19",
"react-dom": "^19",
"tslib": "^2"
},
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@types/react": "^19",
"rimraf": "^6",
"typescript": "^5",
"typescript-plugin-css-modules": "^5"
}
}
@@ -0,0 +1,16 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_11465_2145)">
<g clip-path="url(#clip1_11465_2145)">
<path d="M26 10.9933C23.59 10.9933 21.57 12.7139 21.1 14.9947H16.45C17.41 13.9243 18 12.5238 18 10.9833V8.99266H16V10.9833C16 13.1941 14.2 14.9947 11.99 14.9947H6.82C6.41 13.8343 5.31 12.994 4 12.994C2.35 12.994 1 14.3444 1 15.995C1 17.6455 2.35 18.996 4 18.996C5.3 18.996 6.4 18.1557 6.82 16.9953H11.99C14.2 16.9953 16 18.7959 16 21.0067V22.9973H13V31H21V22.9973H18V21.0067C18 19.4662 17.41 18.0657 16.45 16.9953H21.1C21.56 19.2761 23.58 20.9967 26 20.9967C28.76 20.9967 31 18.7559 31 15.995C31 13.2341 28.76 10.9933 26 10.9933ZM19 28.9993H15V24.998H19V28.9993ZM26 18.996C24.35 18.996 23 17.6455 23 15.995C23 14.3444 24.35 12.994 26 12.994C27.65 12.994 29 14.3444 29 15.995C29 17.6455 27.65 18.996 26 18.996Z" fill="#EE830C"/>
<path d="M17 1L12 8.99266H22L17 1ZM17 4.77126L18.39 6.992H15.61L17 4.77126Z" fill="#EE830C"/>
</g>
</g>
<defs>
<clipPath id="clip0_11465_2145">
<rect width="32" height="32" fill="white"/>
</clipPath>
<clipPath id="clip1_11465_2145">
<rect width="30" height="30" fill="white" transform="translate(1 1)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,16 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_11465_2155)">
<g clip-path="url(#clip1_11465_2155)">
<path d="M18.6667 8.66222C17.06 8.66222 15.7133 9.80927 15.4 11.3298H12.3C12.94 10.6162 13.3333 9.68256 13.3333 8.65555V7.32844H12V8.65555C12 10.1294 10.8 11.3298 9.32667 11.3298H5.88C5.60667 10.5562 4.87333 9.996 4 9.996C2.9 9.996 2 10.8963 2 11.9967C2 13.097 2.9 13.9973 4 13.9973C4.86667 13.9973 5.6 13.4371 5.88 12.6636H9.32667C10.8 12.6636 12 13.864 12 15.3378V16.6649H10V22H15.3333V16.6649H13.3333V15.3378C13.3333 14.3108 12.94 13.3771 12.3 12.6636H15.4C15.7067 14.1841 17.0533 15.3311 18.6667 15.3311C20.5067 15.3311 22 13.8373 22 11.9967C22 10.1561 20.5067 8.66222 18.6667 8.66222ZM14 20.6662H11.3333V17.9987H14V20.6662ZM18.6667 13.9973C17.5667 13.9973 16.6667 13.097 16.6667 11.9967C16.6667 10.8963 17.5667 9.996 18.6667 9.996C19.7667 9.996 20.6667 10.8963 20.6667 11.9967C20.6667 13.097 19.7667 13.9973 18.6667 13.9973Z" fill="#EE830C"/>
<path d="M12.6667 2L9.33333 7.32844H16L12.6667 2ZM12.6667 4.51417L13.5933 5.99466H11.74L12.6667 4.51417Z" fill="#EE830C"/>
</g>
</g>
<defs>
<clipPath id="clip0_11465_2155">
<rect width="24" height="24" fill="white"/>
</clipPath>
<clipPath id="clip1_11465_2155">
<rect width="20" height="20" fill="white" transform="translate(2 2)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@@ -0,0 +1,16 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_11465_2165)">
<g clip-path="url(#clip1_11465_2165)">
<path d="M12.6667 5.66356C11.542 5.66356 10.5993 6.46649 10.38 7.53085H8.21C8.658 7.03135 8.93333 6.37779 8.93333 5.65889V4.72991H8V5.65889C8 6.69057 7.16 7.53085 6.12867 7.53085H3.716C3.52467 6.98933 3.01133 6.5972 2.4 6.5972C1.63 6.5972 1 7.22741 1 7.99767C1 8.76792 1.63 9.39813 2.4 9.39813C3.00667 9.39813 3.52 9.006 3.716 8.46449H6.12867C7.16 8.46449 8 9.30477 8 10.3364V11.2654H6.6V15H10.3333V11.2654H8.93333V10.3364C8.93333 9.61754 8.658 8.96399 8.21 8.46449H10.38C10.5947 9.52884 11.5373 10.3318 12.6667 10.3318C13.9547 10.3318 15 9.2861 15 7.99767C15 6.70924 13.9547 5.66356 12.6667 5.66356ZM9.4 14.0664H7.53333V12.1991H9.4V14.0664ZM12.6667 9.39813C11.8967 9.39813 11.2667 8.76792 11.2667 7.99767C11.2667 7.22741 11.8967 6.5972 12.6667 6.5972C13.4367 6.5972 14.0667 7.22741 14.0667 7.99767C14.0667 8.76792 13.4367 9.39813 12.6667 9.39813Z" fill="#EE830C"/>
<path d="M8.46666 1L6.13333 4.72991H10.8L8.46666 1ZM8.46666 2.75992L9.11533 3.79627H7.818L8.46666 2.75992Z" fill="#EE830C"/>
</g>
</g>
<defs>
<clipPath id="clip0_11465_2165">
<rect width="16" height="16" fill="white"/>
</clipPath>
<clipPath id="clip1_11465_2165">
<rect width="14" height="14" fill="white" transform="translate(1 1)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

@@ -0,0 +1,9 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
export const ADMINISTRATION_CONNECTIONS_ITEM = 'connections';
@@ -0,0 +1,75 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { observer } from 'mobx-react-lite';
import type { AdministrationItemContentComponent, AdministrationItemContentProps } from '@cloudbeaver/core-administration';
import { s, SContext, type StyleRegistry, ToolsPanel, useS, useTranslate } from '@cloudbeaver/core-blocks';
import { useService } from '@cloudbeaver/core-di';
import { type ITabData, TabList, TabPanelList, TabPanelStyles, TabsState, TabStyles, TabTitleStyles } from '@cloudbeaver/core-ui';
import style from './shared/ConnectionsAdministration.module.css';
import tabStyle from './shared/ConnectionsAdministrationTab.module.css';
import tabPanelStyle from './shared/ConnectionsAdministrationTabPanel.module.css';
import TabTitleModuleStyles from './shared/ConnectionsAdministrationTabTitle.module.css';
import { ConnectionsAdministrationNavService } from './ConnectionsAdministrationNavService.js';
import { ConnectionsAdministrationTabService } from './ConnectionsAdministrationTabService.js';
const tabPanelRegistry: StyleRegistry = [[TabPanelStyles, { mode: 'append', styles: [tabPanelStyle] }]];
const mainTabsRegistry: StyleRegistry = [
[TabStyles, { mode: 'append', styles: [tabStyle] }],
[TabTitleStyles, { mode: 'append', styles: [TabTitleModuleStyles] }],
];
export const ConnectionsAdministration: AdministrationItemContentComponent = observer(function ConnectionsAdministration({
item,
configurationWizard,
sub,
param,
}) {
const translate = useTranslate();
const connectionsAdministrationNavService = useService(ConnectionsAdministrationNavService);
const connectionsAdministrationTabService = useService(ConnectionsAdministrationTabService);
const styles = useS(style, tabStyle);
function openSub({ tabId }: ITabData<AdministrationItemContentProps>) {
if (sub?.name === tabId) {
return;
}
connectionsAdministrationNavService.navToSub(tabId);
}
return (
<TabsState
selectedId={sub?.name}
container={connectionsAdministrationTabService.tabsContainer}
item={item}
configurationWizard={configurationWizard}
sub={sub}
param={param ?? null}
lazy
onChange={openSub}
>
<ToolsPanel bottomBorder>
<SContext registry={mainTabsRegistry}>
<TabList
className={s(styles, { tabList: true, administrationTabs: true })}
aria-label={translate('plugin_connection_administration_label')}
childrenFirst
underline
/>
</SContext>
</ToolsPanel>
<SContext registry={tabPanelRegistry}>
<TabPanelList />
</SContext>
</TabsState>
);
});
@@ -0,0 +1,25 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { AdministrationScreenService } from '@cloudbeaver/core-administration';
import { injectable } from '@cloudbeaver/core-di';
import { ADMINISTRATION_CONNECTIONS_ITEM } from './ADMINISTRATION_CONNECTIONS_ITEM.js';
@injectable(() => [AdministrationScreenService])
export class ConnectionsAdministrationNavService {
constructor(private readonly administrationScreenService: AdministrationScreenService) {}
navToRoot(): void {
this.administrationScreenService.navigateToItem(ADMINISTRATION_CONNECTIONS_ITEM);
}
navToSub(sub: string, param?: string): void {
this.administrationScreenService.navigateToItemSub(ADMINISTRATION_CONNECTIONS_ITEM, sub, param);
}
}
@@ -0,0 +1,21 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { ConnectionsAdministrationTabService } from './ConnectionsAdministrationTabService.js';
@injectable(() => [ConnectionsAdministrationTabService])
export class ConnectionsAdministrationServiceBootstrap extends Bootstrap {
constructor(private readonly connectionsAdministrationTabService: ConnectionsAdministrationTabService) {
super();
}
override register(): void | Promise<void> {
this.connectionsAdministrationTabService.createRootTab();
}
}
@@ -0,0 +1,62 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import {
AdministrationItemService,
type AdministrationItemSubCanActivateEvent,
type AdministrationItemSubEvent,
type AdministrationItemContentProps,
type IAdministrationItem,
} from '@cloudbeaver/core-administration';
import { importLazyComponent } from '@cloudbeaver/core-blocks';
import { injectable } from '@cloudbeaver/core-di';
import { TabsContainer, type ITabInfoOptions } from '@cloudbeaver/core-ui';
import { ADMINISTRATION_CONNECTIONS_ITEM } from './ADMINISTRATION_CONNECTIONS_ITEM.js';
const ConnectionsAdministration = importLazyComponent(() => import('./ConnectionsAdministration.js').then(m => m.ConnectionsAdministration));
const ConnectionsDrawerItem = importLazyComponent(() => import('./ConnectionsDrawerItem.js').then(m => m.ConnectionsDrawerItem));
export interface IConnectionsTabOptions extends ITabInfoOptions<AdministrationItemContentProps> {
onActivate?: AdministrationItemSubEvent;
onDeActivate?: AdministrationItemSubEvent;
canActivate?: AdministrationItemSubCanActivateEvent;
canDeActivate?: AdministrationItemSubCanActivateEvent;
}
@injectable(() => [AdministrationItemService])
export class ConnectionsAdministrationTabService {
readonly tabsContainer: TabsContainer<AdministrationItemContentProps>;
private item!: IAdministrationItem;
constructor(private readonly administrationItemService: AdministrationItemService) {
this.tabsContainer = new TabsContainer('Connections administration tabs');
}
addSubTab({ onActivate, onDeActivate, canActivate, canDeActivate, ...tabInfo }: IConnectionsTabOptions): void {
this.tabsContainer.add(tabInfo);
if (!this.item.sub.some(sub => sub.name === tabInfo.key)) {
this.item.sub.push({ name: tabInfo.key, onActivate, onDeActivate, canActivate, canDeActivate });
}
this.item.defaultSub ??= tabInfo.key;
}
createRootTab(): void {
this.item = this.administrationItemService.create({
name: ADMINISTRATION_CONNECTIONS_ITEM,
order: 7,
isHidden: () => this.item.sub.length === 0,
getContentComponent: () => ConnectionsAdministration,
getDrawerComponent: () => ConnectionsDrawerItem,
});
}
}
@@ -0,0 +1,22 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { AdministrationItemDrawerProps } from '@cloudbeaver/core-administration';
import { Translate } from '@cloudbeaver/core-blocks';
import { Tab, TabIcon, TabTitle } from '@cloudbeaver/core-ui';
export const ConnectionsDrawerItem: React.FC<AdministrationItemDrawerProps> = function ConnectionsDrawerItem({ item, onSelect, disabled }) {
return (
<Tab tabId={item.name} disabled={disabled} onOpen={() => onSelect(item.name)}>
<TabIcon icon="/icons/plugin_connections.svg" />
<TabTitle>
<Translate token="plugin_connection_administration_label" />
</TabTitle>
</Tab>
);
};
@@ -0,0 +1,29 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { Bootstrap, injectable } from '@cloudbeaver/core-di';
import { LocalizationService } from '@cloudbeaver/core-localization';
@injectable(() => [LocalizationService])
export class LocaleService extends Bootstrap {
constructor(private readonly localizationService: LocalizationService) {
super();
}
override register(): void {
this.localizationService.addProvider(this.provider.bind(this));
}
private async provider(locale: string) {
switch (locale) {
case 'ru':
return (await import('./locales/ru.js')).default;
default:
return (await import('./locales/en.js')).default;
}
}
}
@@ -0,0 +1,13 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import './module.js';
export * from './ADMINISTRATION_CONNECTIONS_ITEM.js';
export * from './ConnectionsAdministrationNavService.js';
export * from './ConnectionsAdministrationTabService.js';
@@ -0,0 +1 @@
export default [['plugin_connection_administration_label', 'Connections']];
@@ -0,0 +1 @@
export default [['plugin_connection_administration_label', 'Соединения']];
@@ -0,0 +1,25 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { Bootstrap, ModuleRegistry } from '@cloudbeaver/core-di';
import { ConnectionsAdministrationTabService } from './ConnectionsAdministrationTabService.js';
import { ConnectionsAdministrationNavService } from './ConnectionsAdministrationNavService.js';
import { LocaleService } from './LocaleService.js';
import { ConnectionsAdministrationServiceBootstrap } from './ConnectionsAdministrationServiceBootstrap.js';
export default ModuleRegistry.add({
name: '@cloudbeaver/plugin-connection-administration',
configure: serviceCollection => {
serviceCollection
.addSingleton(Bootstrap, LocaleService)
.addSingleton(Bootstrap, ConnectionsAdministrationServiceBootstrap)
.addSingleton(ConnectionsAdministrationTabService)
.addSingleton(ConnectionsAdministrationNavService);
},
});
@@ -0,0 +1,6 @@
.tabList {
position: relative;
flex-shrink: 0;
align-items: center;
padding: 0 24px;
}
@@ -0,0 +1,16 @@
.administrationTabs {
& .tab {
height: 100%;
font-size: 14px;
font-weight: 700;
padding: 0 4px;
}
& .tabInner {
height: 100%;
}
& .tabOuter {
height: 100%;
}
}
@@ -0,0 +1,3 @@
.tabPanel {
overflow: auto;
}
@@ -0,0 +1,3 @@
.tabTitle {
font-weight: 700;
}
@@ -0,0 +1,45 @@
{
"extends": "@cloudbeaver/tsconfig/tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "lib",
"tsBuildInfoFile": "lib/tsconfig.tsbuildinfo",
"composite": true
},
"references": [
{
"path": "../../common-typescript/@dbeaver/cli"
},
{
"path": "../core-administration"
},
{
"path": "../core-blocks"
},
{
"path": "../core-cli"
},
{
"path": "../core-di"
},
{
"path": "../core-di/tsconfig.json"
},
{
"path": "../core-localization"
},
{
"path": "../core-ui"
}
],
"include": [
"__custom_mocks__/**/*",
"src/**/*",
"src/**/*.json",
"src/**/*.css"
],
"exclude": [
"**/node_modules",
"lib/**/*"
]
}
@@ -43,7 +43,8 @@ export interface ISSHFormProps {
disabled?: boolean;
readonly?: boolean;
sharedCredentials?: boolean;
projectId: string;
/** Omit for handlers not bound to any particular project, e.g. global network profiles */
projectId?: string;
connectionId?: string;
}
@@ -86,7 +87,7 @@ export const SSHForm = observer<ISSHFormProps>(function SSHForm({
const connectTimeoutLabel = translate('plugin_network_handlers_ssh_tunnel_advanced_settings_connect_timeout');
const { credentialsSavingEnabled } = useAdministrationSettings();
const projectInfoResource = useService(ProjectInfoResource);
const isSharedProject = projectInfoResource.isProjectShared(projectId);
const isSharedProject = projectInfoResource.isProjectShared(projectId ?? null);
const showSaveCredentials = credentialsSavingEnabled && !sharedCredentials;
const handleAuthTypeChange = useCallback(() => {
@@ -65,6 +65,7 @@
"@cloudbeaver/plugin-authentication-administration": "workspace:*",
"@cloudbeaver/plugin-browser": "workspace:*",
"@cloudbeaver/plugin-codemirror6": "workspace:*",
"@cloudbeaver/plugin-connection-administration": "workspace:*",
"@cloudbeaver/plugin-connection-custom": "workspace:*",
"@cloudbeaver/plugin-connection-form-ai": "workspace:*",
"@cloudbeaver/plugin-connection-network-handlers": "workspace:*",
@@ -49,6 +49,7 @@ import pluginAppLogoAdministration from '@cloudbeaver/plugin-app-logo-administra
import pluginAuthentication from '@cloudbeaver/plugin-authentication/module';
import pluginAuthenticationAdministration from '@cloudbeaver/plugin-authentication-administration/module';
import pluginBrowser from '@cloudbeaver/plugin-browser/module';
import pluginConnectionAdministration from '@cloudbeaver/plugin-connection-administration/module';
import pluginConnectionCustom from '@cloudbeaver/plugin-connection-custom/module';
import pluginConnectionSearch from '@cloudbeaver/plugin-connection-search/module';
import pluginConnections from '@cloudbeaver/plugin-connections/module';
@@ -169,6 +170,7 @@ export const commonSet = [
pluginAuthenticationAdministration,
pluginTheme,
pluginLocalization,
pluginConnectionAdministration,
pluginConnectionCustom,
pluginConnectionSearch,
pluginDataExport,
@@ -142,6 +142,9 @@
{
"path": "../plugin-codemirror6"
},
{
"path": "../plugin-connection-administration"
},
{
"path": "../plugin-connection-custom"
},
+24
View File
@@ -2739,6 +2739,29 @@ __metadata:
languageName: unknown
linkType: soft
"@cloudbeaver/plugin-connection-administration@workspace:*, @cloudbeaver/plugin-connection-administration@workspace:packages/plugin-connection-administration":
version: 0.0.0-use.local
resolution: "@cloudbeaver/plugin-connection-administration@workspace:packages/plugin-connection-administration"
dependencies:
"@cloudbeaver/core-administration": "workspace:*"
"@cloudbeaver/core-blocks": "workspace:*"
"@cloudbeaver/core-cli": "workspace:*"
"@cloudbeaver/core-di": "workspace:*"
"@cloudbeaver/core-localization": "workspace:*"
"@cloudbeaver/core-ui": "workspace:*"
"@cloudbeaver/tsconfig": "workspace:*"
"@dbeaver/cli": "workspace:*"
"@types/react": "npm:^19"
mobx-react-lite: "npm:^4"
react: "npm:^19"
react-dom: "npm:^19"
rimraf: "npm:^6"
tslib: "npm:^2"
typescript: "npm:^5"
typescript-plugin-css-modules: "npm:^5"
languageName: unknown
linkType: soft
"@cloudbeaver/plugin-connection-custom@workspace:*, @cloudbeaver/plugin-connection-custom@workspace:packages/plugin-connection-custom":
version: 0.0.0-use.local
resolution: "@cloudbeaver/plugin-connection-custom@workspace:packages/plugin-connection-custom"
@@ -4234,6 +4257,7 @@ __metadata:
"@cloudbeaver/plugin-authentication-administration": "workspace:*"
"@cloudbeaver/plugin-browser": "workspace:*"
"@cloudbeaver/plugin-codemirror6": "workspace:*"
"@cloudbeaver/plugin-connection-administration": "workspace:*"
"@cloudbeaver/plugin-connection-custom": "workspace:*"
"@cloudbeaver/plugin-connection-form-ai": "workspace:*"
"@cloudbeaver/plugin-connection-network-handlers": "workspace:*"