Compare commits

..
347 Commits
Author SHA1 Message Date
f06b769cfc Dbeaver/pro#5141 improve logging (#3367)
* dbeaver/pro#5141 Improve logging

* dbeaver/pro#5141 Improve logging

* dbeaver/pro#5141 improve logging

* dbeaver/pro#5141 improve logging

* dbeaver/pro#5141 improve logging

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-15 18:10:53 +02:00
Anastasiya 2aca70043e dbeaver/pro#4266 fix templates (#3380)
* dbeaver/pro#4266 Update tickets templates, add config file

* dbeaver/pro#4266 remove Feature commit
2025-04-15 15:01:00 +02:00
Alexander Skoblikov bcbaae3fb4 dbeaver/pro#4353 shutdown executor service (#3332) 2025-04-15 12:16:45 +00:00
AinurandDaria Marutkina bc4d83cbbb dbeaver/pro#5473 show only error message for driver properties (#3378)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-15 13:50:28 +02:00
alexandDaria Marutkina dd1947beaa dbeaver/pro#5255 scroll into view only if there is a cursor and (#3376)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-15 18:39:18 +08:00
sergeyteleshevandmr-anton-t 4aa6ccf495 CB-5472 adds to chunks files from lib directory (#3377)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-04-15 16:43:42 +08:00
4dd8ddbefd CB-4067 Migrate Connection form to form template (#3288)
* CB-4067 adds connection form state, service and options part

* CB-4067 adds connection origin info tab to new form

* CB-4067 adds SSH part

* CB-4067 adds driver properties part

* CB-4067 changes driverId and submitType location for connection form

* CB-4067 adds SSL part

* CB-4067 adds connection form access part

* CB-4067 uses new form parts for connection form

* CB-4067 resets form on open

* CB-4067 fixes configure case for connection form

* CB-4067 adds selected driver on edit mode form

* CB-4067 reloads form when it is needed

* CB-4067 adds button actions for the form

* CB-4067 adds notifications on form save/error

* CB-4067 fixes form ssl saving and driver properties

* CB-4067 refactors some parts

* CB-4067 refactors form options part so it works fine

* CB-4067 fixes driver properties part

* CB-4067 fixes SSH part

* CB-4067 fixes SSL part

* CB-4067 fixes Access part

* CB-4067 refactors origin tab

* CB-4067 refactors shared credentials part

* CB-4067 fixes: secret providers, SSH, SSL, test - features

* CB-4067 removes refactor postfix for new state, service and types

* CB-4067 fixes connection test

* CB-4067 cleanup

* CB-4067 gets back ask credentials window and removes connectionCredentialsStateContext

* CB-4067 adds translation to test connection success message

* CB-4067 fixes ssh and ssl adding to networkHandlers. also fixes extra request for driver properties

* CB-4067 fixes host and port for switching connections

* CB-4067 removes redundant code

* CB-4067 fixes exception error on retest connection + fixes SSH field key saved incorrect prop

* CB-4067 cleanup testContext info

* CB-4076 fixes SSH and SSL ask credentials and parameters saving for both: test and submit connection create/edit action

* CB-4067 fixes access tab reminder

* CB-4067 fixes handling of info message for cloud connection origin tabs

* CB-4067 fixes checkboxes behavior for TE shared credentials feature

* CB-4067 fixes create connection template popup SSH form

* CB-4067 fixes notification for closing ask credentials popup if before we had an error of test submit

* CB-6115 adds dispose API for forms

* CB-6115 adds git workspace helper extension for repo recommendations

* CB-4067 cleanup

* CB-6115 pr fixes

* CB-4067 gets back behavior with dispose connection form state

* CB-4067 cleanup

* СB-4067 splits states to ui and form part in access form part

* СB-4067 pr fixes

* CB-4067 removes config from form state

* CB-4067 removes console warnings + clean up

* CB-4067 moves synchronization mechanisms from ConnectionFormState to ConnectionOptionsFormPart

* CB-4067 fixes bug with incorrect host or port during search or changing driverId during connection creation

* CB-4067 fixes opening connection forms from different entry points so it shows consistent initial data

* СB-4067 brings back saving the form

* CB-4067 fixes logic of showing popup askCredentials

* CB-4067 fixes origin tab name so it shows correctly + fixes unneeded loaders of resources

* CB-4067 reverts isOutdated

* CB-4067 fixes loading of driver properties

* CB-4067 cleanup for connection access part

* Revert "CB-4067 reverts isOutdated"

This reverts commit ecb195ee2a.

* CB-4067 adds isOutdated to the parts

* CB-4067 fixes origin tab info message

* CB-4067 fixes driver properties state + origin info status message shows on load

* CB-4067 fixes password autofill during form save

* CB-4067 fixes linter

* CB-4067 fixes linter

* CB-4067 cleanup + fixes bug with search database host,name fields

* CB-4067 linter fix

* CB-4067 pr fixes

* CB-4067 removes unused post handler for formstate loaded task

* CB-4067 small pr fixes

* CB-4067 adds setDriver + handles name autocomplete

* chore: review

* CB-4067 connection part correct loading

* CB-4067 adds formState.state.connectionId default value

* refactor: pr review

* CB-4067 fixes bug with infinite loading of the origin info details

* CB-4067 fix: allows askCredentials to edit fields + does not affects part state

* CB-4067 resets driver properties if changed driverId

* CB-4067 updates yarn lock for common-react

* CB-4067 lint fix

* CB-6265 fix: do not include index files for import/export eslint rules

* CB-4067 fixes behavior for aksCredentials so it acts correctly during testing/saving/editing inputs for the form

* CB-4067 cleanup

* CB-4067 fixes connection templates initial loaded state

* CB-4067 pr fixes: dialog credentials; adds todo to the ssh tab; eslint revert; cleanup

* CB-4067 makes askCredentials to be part state independent

* CB-4067 qa fixes: test translation + removes db name form connection name

* CB-4067 adds readonly state for connection form

* CB-4067 fixes application freezes on disconnect

* CB-4067 fixes empty properties when switching cloud connections

* CB-4067 connection is created -> connection was created

* CB-4067 connection is updated -> connection was updated

* CB-4067 fixes outdated logic for parts

* CB-4067 build fix

* CB-4067 fix: do not show askCredential popup for drivers with only anonymous access

* CB-4067 removes includeCredentialsSaved

* CB-4067 removes includeAuthProperties

* CB-4067 removes customIncludeOptions

* CB-4067 removes includeProperties

* CB-4067 removes includeProviderProperties

* CB-4067 removes includeNetworkHandlers

* CB-4067 refactors isOutdated for originInfoPart and AccessPart

* CB-4067 removes savedCredentials resource + updates CustomOptionsResource + reuses new include resources in connection form components

* CB-4067 reverts spreading of new connectionInfoResources

* CB-4067 fixes sharedCreds checkbox default value on form switch

* CB-4067 closes connection form when layout closes

* CB-4067 disposes connection form on change

* CB-4067 handles closing of the connection form correctly

* Revert "CB-4067 handles closing of the connection form correctly"

This reverts commit 3a6f1a6a0a.

* CB-4067 handles closing of the connection form correctly [2]

* CB-4067 fits info messages in one line

* CB-4067 presaves isChanged state for form part before applying initialState to prevent bugs

* CB-4067 fixes length of the error message for connection form top bar

---------

Co-authored-by: Alexey <wrouds@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-15 00:35:27 +08:00
08e6d9631f dbeaver/pro#5440 feat: display boolean as checkbox in grid (#3372)
* dbeaver/pro#5440 feat: display boolean as checkbox in grid

* #5440 refactor: make checkboxes disabled inside grid

It's a very strange UX when checkbox is inside a cell of a table and behaves like a real one. It's much more expected when only cell takes focus and checkbox only represents the value in a way we want without acting like a real input. Moreover, using Focusable component enables smooth toggling between all 3 states of a boolean cell from a keyboard.

* #5440 fix: remove inline padding

* #5440 feat: add hover effect for boolean formatter

* #5440 refactor: revert full width

* #5440 refactor: split onClick and onKeyDown interfaces

* #5440 fix: return onClick

---------

Co-authored-by: Andrey Sychev <nukemoore@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-04-14 22:42:44 +08:00
sergeyteleshev 143cbb0d88 Cb 6265 Return front unit tests after migration (#3338)
* СB-6265 sets up vitest instead of jest

* CB-6265 gets back core-utils tests

* СB-6265 gets back react-testing-library tests

* СB-6265 gets back some tests from another plugins

* CB-6265 renames dist -> lib in each plugin + removes all jest from the repo

* CB-6265 disables watch mode so build can go on

* CB-6265 extends tests types for react-testing-library

* CB-6265 reverts dist->lib rename cause it contains other assets also

* CB-6265 moves setupFiles to the vitest.config.ts

* CB-6265 pr fixes

* CB-6265 fixes tests run for Windows

* CB-6265 removes global: true in config + uses jest-dom/vitest lib to have extended expect types

* CB-6565 removes unused deps

* СB-6265 improves performance of the test x10 times

* CB-6265 gets back renderInApp, fixes vitest setup reset config for mocks, cleans up

* CB-6265 reset -> restore all mocks

* CB-6265 fixes unit tests

* CB-6265 vitest.setup.ts cleanup

* CB-6265 timestamp to date shows military time both: on unix and windows (win tests fix)

* CB-6265 improves tests running (sequential run instead of parallel)

* CB-6265 cleanup

* CB-6265 eslint fix

* CB-6265 eslint fix 2

* CB-6265 reverts useCombined handler

* CB-6265 reverts some tests

* CB-6265 removes all redundant timer configs

* Merge branch 'devel' into CB-6265-return-front-unit-tests-after-migration

* CB-6265 pr fixes

* CB-6265 fixes time for windows

* CB-6265 removes default fake timers before each test
2025-04-14 18:48:33 +08:00
alexandEvgenia efec971177 dbeaver/pro#5234 mark children nodes as deleted (#3370)
* dbeaver/pro#5234 mark children nodes as deleted

* dbeaver/pro#5234 make getParent optional

* dbeaver/pro#5234 pass default value before make observable

* dbeaver/pro#5234 move default value outside of component

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-04-14 18:41:13 +08:00
Ainur edc671f428 dbeaver/pro#5375 normalize table names in one place (#3349) 2025-04-14 09:52:38 +00:00
7f91dbc207 CB-5303 [CB] Driver form has the wrong state after download jar from repo (#3371)
* CB-5303 covers edge case with initial state changed by other tab during outdate part process

* СB-5303 loaded = true on any load result

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-11 22:10:37 +08:00
Alexander Skoblikov 1cc6f6f308 dbeaver/pro#4319 global provider config type (#3330) 2025-04-10 09:19:59 +00:00
Ruslan Musaev 02a8226196 Cb 5875 creating schemas only for pro (#3324) 2025-04-10 09:06:09 +00:00
Sychev AndreyandDaria Marutkina 42da37830f #5140 (CB-6127) the cell values are duplicated when adding multiple rows to the read only table (#3368)
* #5140 fix: duplicate hotkeys should work in tables without primary key

* #5140 fix: force update table data on save if model doesn't have element identifier

* #5140 refactor: move refresh model logic to datasource saveData method

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-10 17:00:55 +08:00
Ainur 3714d7d3a5 dbeaver/pro#5164 remove disabled drivers from core config (#3363) 2025-04-10 08:30:37 +00:00
alexandEvgenia b51ac6bd38 dbeaver/pro#5237 do not dispatch transaction if cursor and main in sync (#3361)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-04-09 15:23:40 +08:00
Sychev AndreyandDaria Marutkina e819af4f90 #5258 fix: See permission error after finish easy config (#3350)
* #5258 fix: don't skip auth dialog for anonymous

* #5258 refactor: use isAuthenticated

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-09 15:20:29 +08:00
Ruslan MusaevandDaria Marutkina 584b27eea2 dbeaver/pro#5272 Do not return private project if they are disabled (#3347)
* dbeaver/pro#5272 Do not return private project if they are disabled

* dbeaver/pro#5272 Do not return private project if they are disabled

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-09 15:20:13 +08:00
Alexeyandmr-anton-t 9c3cc17bd9 dbeaver/pro#5394 feat: null and boolean formatter for base grid (#3359)
* dbeaver/pro#5394 feat: null and boolean formatter for base grid

* feat: reuse base grid formatters

* chore: try to adjust workflow concurrency

* chore: trigger workflow

* chore: trigger workflow cancel

* chore: fix label styles

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-04-09 15:06:32 +08:00
alexandDaria Marutkina e1a05496cb dbeaver/pro#5192 adjust loading state process (#3360)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-04-08 15:51:03 +08:00
Sychev Andrey 947dcb367e #3355 cloudbeaver typescript path resolution problem (#3365)
* #3355 fix: add yarn sdks to git

* #3355 fix: offer to use workspace version of typescript
2025-04-07 21:28:37 +08:00
Daria MarutkinaandAnastasiya b4557ae3a2 dbeaver/pro#5379 Update README file (#3364)
* dbeaver/pro#5379 Update README file

* Update README.md

---------

Co-authored-by: Anastasiya <45152336+LonwoLonwo@users.noreply.github.com>
2025-04-07 14:19:40 +02:00
alexandEvgenia 63acb114df dbeaver/pro#5155 omit " when compare display strings (#3351)
* dbeaver/pro#5155 omit " when compare display strings

* dbeaver/pro#5155 add semicolon

* dbeaver/pro#5155 fix eslint

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-04-04 15:05:54 +02:00
Sychev Andrey a3d8e92b5c fix: wrap input styles in base layer (#3358) 2025-04-03 18:00:51 +08:00
Serge Rider 8681d5f5f5 dbeaver/pro#5379 25.0.3 version bump 2025-04-01 19:57:24 +02:00
Sychev Andrey 3a4a4c53ae #5265 fix: no icons for users and connections on permission tables ( (#3345)
* #5265 fix: no icons for users and connections on permission tables (CB-6373)

* #5265 refactor: remove redundant width prop
2025-04-01 23:10:47 +08:00
600833c068 CB-6372 No 'Set to null' option in cell's context menu (#3331)
* CB-6372 fix: set null for applicable cells in context menu

* CB-6372 fix read-only for cells

CB-6367: don't let activate cell inline editor by double click if model is read-only

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-04-01 22:05:54 +08:00
164b59b37a CB 6296 Delete row shortcut not working (#3340)
* CB-6296 fix: delete keystroke marks selected row for deletion

* CB-6296 fix: focus first element on load, remove extra handler

It was noticed that just after the open, onKeyDown event doesn't reach DataGrid, because focus was not in sync with lib.
Also fixes CB-6229 since they have the same root problem with encountered bag

* CB-6286 refactor: change onCellKeyDown handler interface inside DataGridProps

* CB-6296 refactor: set initial focus differently

* CB-6296 refactor: remove manual scroll control

We use grid inner scrollToCell method and don't need additional native scrolling

* refactor: don't expose inner data-grid type

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Alexey <wrouds@gmail.com>
2025-03-28 23:01:58 +08:00
b8952c87b8 CB-6308 fix: grid auto-size (#3298)
* CB-6308 fix: grid auto-size

* CB-6308 fix: grid auto size

* CB-6308 fix: icons sizing in grid

* CB-6308 fix: grid header

* CB-6308 fix: types

* fix: min-width for columns

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-03-28 22:52:46 +08:00
e961d7cda7 CB-5839 fix: resource blocking (#3199)
* CB-5839 fix: resource blocking

* CB-5839 fix: unlock nav resources

* fix: connections loading

* feat: select new folder or connection

* chore: localization

* chore: revert improvements

* fix: load connections list for connection selector

* fix: error

* fix: wrong action handler

* CB-5839 fix: resources tree validation

* fix: reaction concurrency

* CB-5839 fixes build for new CellFormatter (ObjectMenuCell) after merge conflicts

* СB-5839 changes delay for menu item loaders

* CB-5839 fix: keys intersection detection in resources

* CB-5839 fix: keys intersection detection in resources

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-03-27 20:03:37 +08:00
Sychev Andrey 348d6b3161 [#113] Add clsx dependency to UI kit (#3335)
* chore: add clsx dependency to ui-kit

* chore: import clsx from ui-kit

* refactor: use clsx for class management in Button

* refactor: use clsx in Checkbox

* refactor: use clsx in Input component

* feat: use clsx in radio and radiogroup

* feat: use clsx in Select component

* feat: reexport VisuallyHidden and Focus trap components from ariakit
2025-03-27 20:02:00 +08:00
Alexander SkoblikovandMashaKorax 9ab000d604 dbeaver/pro#4118 separate limits for service auth (#3322)
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-03-26 16:06:18 +01:00
Alexander SkoblikovandMashaKorax a4532dd430 dbeaver/pro#3896 migrate auth process to websockets (#3315)
* dbeaver/pro#3896 new auth flow

* dbeaver/pro#3896 wip

* dbeaver/pro#3896 websocket authentication

* dbeaver/pro#3896 send error info

---------

Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-03-25 17:52:07 +01:00
Serge Rider 1d21c677ab 3122 dynamic classpath (#3323)
* dbeaver/pro#3122 Driver loader model

* dbeaver/pro#3122 Driver loader model
2025-03-25 17:24:58 +01:00
Daria Marutkina d330b60f35 dbeaver/pro#4354 Update README file (#3336) 2025-03-24 11:46:40 +01:00
Sychev Andrey 584e5bb260 103 create radio and radio group components (#3313)
* refactor: rename css variable in order to be more descriptive and stick to the naming convention

* refactor: unify controls, add new global control css variables

* feat: add radio component

* docs: add radio stories

* docs: add input docs story

* docs: add simple form story

* refactor: change default radio dot size

* refactor: change class name for radio children wrapper

* refactor: don't reexport inner radio elements

* refactor: simplify RadioGroup interface by removing items props, make label(any) required

The radiogroup must have an accessible name either by a visible label referenced by aria-labelledby or has a label specified with aria-label.
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/radiogroup_role

* refactor: use label wrapper for input component to simplify structure

* refactor: add classname for radio group container
2025-03-21 18:52:39 +08:00
sergeyteleshev 71f77186c4 CB-6369 fixes onFinish during easy config for Server Configuration Form (#3328) 2025-03-19 21:32:41 +08:00
Alexander Skoblikov fe6174755b fix ldap version (#3326) 2025-03-18 20:08:25 +00:00
serge-rider d9ba55df54 dbeaver/pro#4354 25.0.2 version bump 2025-03-18 19:32:21 +01:00
serge-rider 70381f38f9 dbeaver/pro#4354 25.0.2 version bump 2025-03-18 19:29:35 +01:00
d9a5ea053b CB-6115 Add dispose to FormState instances (#3317)
* CB-6115 adds dispose API for forms

* CB-6115 adds git workspace helper extension for repo recommendations

* CB-6115 pr fixes

* CB-6115 adds dispose methods to tables

* CB-6115 eslint fix

* CB-6115 fixes dispose leaks for freshly created states

* CB-6115 fixes infinite loading of state

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-03-18 18:27:23 +01:00
Ainur 06e2aa9f0e CB-6346 add api for read only data sources (#3321) 2025-03-18 17:26:53 +00:00
alexandDaria Marutkina 219ab7c22d CB-6363 return cross button width (#3325)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-03-18 21:39:57 +08:00
Sychev Andrey cdb65a8caa fix: rename default localization property from core.localization.localization to core.localization.language (#3319)
It seems like it was a misspelling initially, because we have never read such key in source code.
2025-03-18 17:07:10 +08:00
Sychev Andrey bd6b4112b0 fix: serve assets relatively with Vite (#3318) 2025-03-18 09:43:23 +01:00
34f4063114 CB-6271 add timeout of inaction in configuration mode (#3289)
* CB-6271 add timeout of inaction in configuration mode

* CB-6271 add timeout of inaction in configuration mode

* CB-6271 add timeout of inaction in configuration mode

* CB-6271 add timeout of inaction in configuration mode

* CB-6271 fix insecure default configuration set timeout to 2 mins

* CB-6271 fix insecure default configuration set timeout to one min

* CB-6271 handle configuration error properly

* CB-6271 catch unhandled error on validation step

* CB-6271 add return type

* CB-6271 fix insecure default configuration set timeout to one min

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
2025-03-18 06:21:27 +01:00
AinurandDaria Marutkina 6c44f8c432 CB-5440 extract abstract class for internal db models (#3303)
* CB-5440 extract abstract class for internal db models

* CB-5440 code style fix

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-03-17 12:21:05 +01:00
alexandmr-anton-t 34ff5a34cb Cb 6263 lefthook (#3291)
* CB-6263 migrate to lefthook

* CB-6263 remove old pre-commit

* CB-6263 specify how to execute lefthook

* CB-6263 add config file

* CB-6263 get license from configuration file

* CB-6263 remove old script

* CB-6263 remove old license

* CB-6263 add locales check

* CB-6283 fix vscode commit msg

* CB-6263 filter staged files on lib level

* CB-6263 do not run hooks sync in CI

* CB-6263 change script

* CB-6263 revert postinstall

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-03-17 16:07:16 +08:00
Ainur cb350cc56e CB-6294 read initial data config file before connecting db (#3300) 2025-03-13 10:27:48 +00:00
alexandDaria Marutkina 6dc0b6d8a4 CB-6042 extend sync dep (#3309)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-03-12 20:37:19 +01:00
655613ccf1 CB-6089 write file stream directly to http response (#3301)
* CB-6089 write file stream directly to http response

* CB-6089 write file stream directly to http response

* CB-6089 write file stream directly to http response

* CB-6089 write file stream directly to http response

* CB-6089 write file stream directly to http response

* CB-6089 remove deprecated method

* CB-6089 change ParquetExporter buffer size

* CB-6089 remove extra async

* CB-6089 add info text

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-03-11 17:45:24 +01:00
Ruslan Musaev e87e3397e2 CB-6033 fix message type for cb session log updated ws event (#3310) 2025-03-11 17:29:05 +01:00
Alexander Skoblikovandkseniaguzeeva 3c1766cd14 dbeaver/pro#4204 move file lock logic to dbeaver (#3287)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-03-11 12:46:07 +01:00
alexandmr-anton-t 039407b9db CB-6207 add order to setting group (#3306)
* CB-6207 add order to setting group

* CB-6207 use method instead of const value

* CB-6207 remove const

* CB-6207 sort on tree level

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-03-10 16:44:51 +01:00
serge-rider e02300e34d Logging fix 2025-03-10 14:17:23 +01:00
alexandmr-anton-t 295ce2d46a CB-6286 add className prop (#3297)
* CB-6286 add className prop

* CB-6286 fix virtualisation

* CB-6286 remove extra prop

* CB-6286 fix prop order

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-03-07 23:39:44 +08:00
Sychev Andrey 36102cdee5 88 create select component (#3302)
* feat: add simple select

* feat: add items states vars and popover animation

* feat: add SelectField component

* feat: select field uses getters to get value/label/selected value, update stories to demonstrate

* docs: update select stories

* refactor: remove margin top because we use gutter in SelectField and for reexported aria popover we don't want to setup such default

* fix: select field - set not the very first value by default, but the first not disabled value

* refactor: add popover height variable, remove padding to look more like select in cloudbeaver by default

* feat: add styles for Select Field description

* refactor: rename properties

* refactor: remove redundant docs for props, remove placeholder props because it's not how aria select is supposed to work, you need to use extra select item to create a placeholder

* refactor: remove support for property path, keep only support for property name or custom getter in sake of simplicity and ease of maintenance

* fix: story for key getters

* fix: return type

* fix: don't set disabled value if all items are disabled

* fix: controlled mode, respect value prop over selectedValue

* refactor: remove width property

* refactor: typesafe key getter

The type iterates through every property key in ItemType.
For each property key, it evaluates whether the property's type is assignable to ValueType and creates a union type of all keys that passed the type check

* refactor: fixes after merge and item hover variable

* fix: input

* feat: add custom arrow icon prop

* refactor: remove ability to use object keys as getters, rename options to items in all places

* fix: rename token
2025-03-06 23:32:41 +08:00
c532298eba 87 create checkbox component (#3294)
* refactor: remove --dbv-kit-color-text variable in favor of --dbv-kit-color-foreground, add --dbv-kit-control-disabled-opacity to use for all controls, remove --dbv-kit-btn-disabled-opacity, update docs

* refactor: add ControlSize type

* feat: create checkbox component

* docs: add checkbox stories, update button docs

* refactor: polish checkbox component, added some vars, add docs, change some defaults

* feat: add indeterminate state

* fix: prioritize check prop over inner state

* fix: button styles layer

* fix: comments

* fix: change checkbox checked style

* Revert "fix: change checkbox checked style"

This reverts commit eba1e21eb9.

---------

Co-authored-by: Wroud <wrouds@gmail.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-03-05 15:25:55 +08:00
Daria Marutkina 254da45290 dbeaver/pro#4230 Update README file (#3299) 2025-03-03 14:17:38 +01:00
serge-rider 2c3b44cbdf Merge remote-tracking branch 'origin/devel' into devel 2025-02-27 11:25:27 +01:00
serge-rider 05b0cddab9 dbeaver/pro#4230 25.0.1 version bump 2025-02-27 11:23:59 +01:00
Alexander Skoblikov a118e1c33d CB-6305 throw error if no session for websocket (#3292) 2025-02-26 17:41:42 +00:00
Alexey cc2a8dab63 CB-6301 fix: grid styles (#3290) 2025-02-26 19:00:57 +08:00
Alexey 080317d710 dbeaver/dbeaver-vscode#83 refactor: data grid (#3265)
* dbeaver/dbeaver-vscode#83 refactor: data grid

* chore: try to fix build scripts

* chore: commit artifacts

* chore: update yarn.lock

* fix: adjust grid auto-sizing

* chore: fix prettier

* chore: add documentation about typescript crashes

* fix: cell menu

* fix: grid inline editor styles

* fix: cell menu styles

* fix: cell items alignment

* fix: data sync

* feat: support reactive values in grid

* chore: try to fix strange build bug

* chore: restore original file name

* fix: add specific to inline editor styles

* fix: remove delete row shortcut (not working)

* chore: enable common cache
2025-02-26 01:04:03 +08:00
Sychev Andreyandmr-anton-t a4102b28dd Feat/dbeaver/vscode#86/storybook integration (#3251)
* feat: add ui-kit package to common-react

* feat: add tailwind and ladle to ui-kit, use ui-kit in ce

* feat: create custom properties for button and checkbox using tailwind values as default

* feat: create simple button with 2 variants

* feat: create simple checkbox

* refactor: update after rebase

* feat: experiments with button and checkbox

* feat: add buttons sizes, adjust btn loader, add interactive story instead of many stories

* fix: add license

* fix: a11y issues with color contrast

* fix: mdx stories support

* feat: experiments with icons

* feat: try custom rendering

* docs: add small kinda docs for button

* refactor:  css layers

* chore: deps

* chore: remove buildinfo from git

* chore: remove tsbuildinfo from git

* fix: vertical tab overflow

* feat: use UIKit button as base for Cloudbeaver button

* fix: box-sizing problems

* refactor: button styles use BEM model

* refactor: separate base tokens from aliases

* refactor: add some defaults, write all properties in snake case

* refactor: rename button classes, add ui-kit prefix

* refactor: remove redundant story, omit a couple of props, add example to ladle

* refactor: add general sizes tokens, update license

* feat: add scaffold for input component

* refactor: update deps

* refactor: remove links

* refactor: change props naming, add prefixes in checkbox, removes validation nodes in input

* refactor: partially revert "feat: use UIKit button as base for Cloudbeaver button" to keep the old Button interface without changes

Original commit SHA: 62bb1fe9a0.

* Revert "refactor: update deps"

This reverts commit f7d6533967.

* refactor: update deps once again

* refactor: rename ui-kit prefix

* chore: update deps

* refactor: Button Icon Interface

* refactor: use JSDoc for placement comment

* refactor css custom props for Button

* refactor: introduce opacity custom property, fix icon margin property

* fix: button text should not wrap;

* fix: tailwindcss version

* fix: tailwindcss version

* refactor: remove checkbox styles, keep only wireframe

* refactor: move input-related css variables to the dedicated folder

* refactor: remove unused input props

* refactor: btn loader animation

* refactor: use nesting for states, refactor classnames using BEM delimiters

* refactor: introduce btn-border-width prop, removed redundant btn-padding-block since we use fixed heights

* refactor: input and button

* fix: input

* chore: deps

* chore: deps

* chore: add vite as dev dep

* refactor: button variants

* chore: yarn install

* fix: loading button should not react on hover

* docs: add stories about tokens

* chore:  remove lint command

* refactor: add prefix to css variables

* refactor: add base border-radius and border-width for controls

* fix: don't import tailwind in style files

* fix: add tailwindcss import for ladle

* fix: base radius variable

* refactor: rename css var

* refactor: add tw prefix for tailwind classes and vars

* fix: styles in easy-config

* fix: after tailwind reset paddings don't in width anymore, compensate

* fix: don't show outline on mouse click

* refactor: change btn state classes, remove not loading for hover because it's strange that button reacts on click when in loading state, but not on hover.

* fix: icons

* fix: add letter-spacing to normalize to prevent tailwind reset it with inherit value

* fix: welcome page selector

* fix: button outline uses a variable for width,  proper loading state in aria, icon class name

* feat: add global styles for UI-kit ladle

* docs: refactored stories composition, added stories

* refactor: simplify loader, enable custom loaders, introduced token for btn loader, fix class names, updated stories

* docs: add global styles for ladle

* feat: use custom loader in cloudbeaver

* refactor: use oklch color space for color mixing in loaders

* docs: add readme

* fix: tsconfig, format ladle config

* docs: add short command for ladle, update readme

* fix: module export

* build: add vite plugin

* fix: remove aria-label for loading

* fix: yarn

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-02-25 21:04:57 +08:00
serge-rider d40e46739a dbeaver/pro#4230 25.0.1 version bump 2025-02-24 19:37:57 +01:00
f4ba5065c0 CB-6255 Show message/notification for embedded drivers un-disabling (#3277)
* CB-6255 adds warning message for insecure embedded drivers on enabling in server config

* CB-6255 adds warning icon + fixes translations

* CB-6255 add safeEmbeddedDriver parameter to api

* CB-6255 adds safeEmbedded prop to the enabling drivers

* CB-6255 add since to safeEmbeddedDriver

* СB-6255 fixes translation and adds popup size setting

* CB-6255 eslint fix

* CB-6255 cleanup

* CB-6255 removes redundant component

* CB-6255 removes redundant useCallback

---------

Co-authored-by: Ruslan <pupkinvasya7000@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-02-24 15:31:42 +01:00
Alexander Skoblikovandkseniaguzeeva 50dc9121b6 dbeaver/pro#4207 do not create web session when trying to access static resources (#3284)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-02-24 14:25:41 +01:00
alexandDaria Marutkina 901854f9d1 CB-6284 remove extra symbol from labels (#3286)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-24 16:00:55 +08:00
alex d7d02f2c93 CB-6242 add tooltip for the connection (#3281) 2025-02-21 18:58:12 +00:00
Ainur 12ff40361d CB-6236 fix checking read only status for a column with invalid key identifier (#3276) 2025-02-21 17:05:30 +00:00
Ainur 8d7165b47b CB-4874 api for updating results data using async function (#3280) 2025-02-21 16:59:29 +00:00
sergeyteleshevandEvgenia c7e19a5780 CB-6249 No icons in the app for windows builds (#3267)
* CB-6249 fixes adding assets to the build for windows machines

* СB-6249 fixes the path for windows

* CB-6249 normalizes paths for build assets

* CB-6249 adds comment for assets

* CB-6249 normalizes paths to posix format

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-21 22:47:13 +08:00
alexandDaria Marutkina 0ac2bc7346 CB-6279 revert combobox z-index (#3285)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-21 13:52:48 +01:00
AinurandEvgenia 5a7b84c075 CB-6227 fix npe (#3261)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-21 10:15:40 +01:00
sergeyteleshevandDaria Marutkina 377a77dd58 CB-6264 Filter field hint list is shown when filter is added manually and focus is out of the field (#3278)
* CB-6264 adds ability to where filter to consider only typed text for suggestions

* CB-6264 adds case with tab

* CB-6224 cleanup

* CB-6264 add fix with focus check

* Revert "CB-6264 add fix with focus check"

This reverts commit 152f38a5c4.

* CB-6264 adds fix via isFocused

* CB-6264 cleanup

* CB-6264 resets state on proposal submission/cancelling

* CB-6264 adds resetState on any replacement case

* CB-6264 adds reset state on menu being invisible

* CB-6264 reverts outside click

* CB-6264 adds resetState on press Tab button

* CB-6264 cleanup

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-21 16:26:49 +08:00
sergeyteleshevandDaria Marutkina 2561583021 CB-3771 Incorrect autocomplete of the Host field while connecting to the local db in the local env (via Search) (#3266)
* CB-3771 loads host form searchDatabases for connections

* CB-3771 fixes overlap for connection host and port values

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-20 21:24:08 +08:00
Ruslan MusaevandEvgenia 4a2c4749f2 CB-6223 enable flat files drive by default (#3256)
* CB-6223 enable flat files drive by default

* CB-6223 enable flat files driver by default

* CB-6223 enable flat files driver by default

* CB-6223 enable flat files driver by default

* CB-6223 enable flat files driver by default

* CB-6223 enable flat files driver by default

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-20 14:08:33 +01:00
ShadelessFoxandMatvey16 179c73424a dbeaver/pro#3964 Refactor document (de-)serialization (#3275)
Co-authored-by: Matvey16 <82543000+Matvey16@users.noreply.github.com>
2025-02-19 20:07:05 +01:00
alexandDaria Marutkina 0b924da666 CB-6171 show alert instead of icon (#3263)
* CB-6171 show alert instead of icon

* CB-6171 change locales

* CB-6171 add missing dep

* CB-6171 add flag check

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-19 23:12:36 +08:00
alexandDaria Marutkina 24117dbf3f CB-4013 fix action trigger (#3268)
* CB-4013 fix action trigger

* CB-4013 revert ctrl

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-19 22:18:32 +08:00
Ainur bb23a2d587 CB-6069 grouping panel fix for a complex data type (#3271) 2025-02-19 12:42:35 +00:00
Ainur e93a3d1e62 CB-6102 add event listener filter for a session global project (#3259) 2025-02-19 12:14:10 +00:00
Alexander Skoblikovandkseniaguzeeva 0f7477e2b6 dbeaver/pro#4072 fix missing TE event (#3262)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-02-19 12:18:46 +01:00
alexandDaria Marutkina df49cef865 CB-6208 adjust z index (#3270)
* CB-6208 adjust z index

* CB-6208 adjust z index to menus

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-19 11:08:01 +01:00
sergeyteleshevandEvgenia 356950bb78 CB-5612 JSON view - filter is cleared after switching to JSON tab (#3264)
* CB-5612 sets where filter on context menu filter actions

* CB-5612 cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-19 17:47:36 +08:00
sergeyteleshevandDaria Marutkina 0aafa78926 CB-5863 Redirect to the Server Configuration page when refreshing the Identity Providers page (#3257)
* CB-5863 loads administration items loaders before redirects

* CB-5863 removes redirect blockers for administration routes

* CB-5863 loads route loaders on route change

* CB-5863 cleanup

* CB-5863 reverts administration.tsx changes

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-19 17:46:57 +08:00
sergeyteleshevandDaria Marutkina d3ed80219e CB-6135 Database objects do not open after disconnecting (#3254)
* CB-6135 allows to reconnect to the table

* CB-6135 fixes linter issues

* CB-6135 reverts freeze logic

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-19 17:46:13 +08:00
04388a7cfe CB-5834 fixes shrinking for properties table (#3260)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Alexey <wrouds@gmail.com>
2025-02-19 17:45:20 +08:00
sergeyteleshevandEvgenia 0fea710705 CB-5698 allows to create user with 1 character in username (#3249)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-19 17:44:31 +08:00
Vladimir Ivanov 56d296558e dbeaver/tech-docs#674 README.md (upd deploy link) (#3274) 2025-02-18 17:25:32 +03:00
Evgenia 87b0087e52 Merge pull request #3272 from dbeaver/dariamarutkina-patch-1
dbeaver/pro#4166 Update README file
2025-02-18 12:52:26 +03:00
Daria Marutkina b79287d327 dbeaver/pro#4166 Update README file 2025-02-18 10:20:06 +01:00
4cdfa5b07f Cb 6041 system information (#3245)
* CB-6041 add system information plugin

* CB-6041 api for system information

* CB-6041 api for system information

* CB-6041 api for system information

* CB-6041 simplify system info ui

* CB-6041 remove extra props

* CB-6041 api for internal database information

* CB-6041 remove hint

* CB-6041 add missing field

* CB-6041 use categories for database info

* CB-6041 add categories

* CB-6041 add category to copy info

* CB-6041 code style fix

* CB-6041 fix get property ids

* CB-6041 updates react version to 19

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
Co-authored-by: Alexander Skoblikov <aleksandr.skoblikov@dbeaver.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-02-12 12:44:07 +01:00
Serge Rider f542534fdc dbeaver/pro#4166 25.0.0 version bump 2025-02-11 21:17:35 +01:00
Serge Rider b06f28bd83 dbeaver/pro#4166 25.0.0 version bump 2025-02-11 21:16:19 +01:00
2fc1ee9e1b CB-6203 api for flat files connection (#3238)
* CB-6203 api for flat files connection

* CB-6203 api for flat files connection

* CB-6203 change font style to italic for temp connections

* CB-6203 add copy action

* CB-6203 fixes

* CB-6203 fixes

* CB-6203 fixes

* chore: update vite assets plugin

* CB-6203 expand node on file open

* CB-6203 fixes naming

* CB-6203 update license snippet

* CB-6203 fixes naming

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Wroud <wrouds@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-11 19:51:13 +01:00
a818a6b6dd CB-6200 disconnect data source on changing config (#3240)
* CB-6200 disconnect data source on changing

* CB-6200 correctly checks if connection is connected on updated connection resource event

* Revert "CB-6200 correctly checks if connection is connected on updated connection resource event"

This reverts commit 45485a02d6.

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-02-11 18:56:55 +01:00
7919ec8bda dbeaver/pro#3943 check that folder cannot be moved inside itself (#3253)
* dbeaver/pro#3943 check that folder cannot be moved inside itself

* dbeaver/pro#3943 fix

---------

Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-02-11 18:42:22 +01:00
a76dc9cdbf CB-6219 refactor: migrate to react 19 (#3252)
* CB-6219 refactor: migrate to react 19

* chore: tune backend build

* chore: fix loaders

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-02-12 00:55:20 +08:00
alexandDaria Marutkina 6af85da676 CB-6119 await promise (#3235)
* CB-6119 await promise

* CB-6119 move loading logic to the parent component

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-11 20:57:42 +08:00
Mikhailov Grigorii 676b192434 dbeaver/dbeaver-devops#1774-fix-chown-non-root-user Changed chown to pwd/workspace (#3247) 2025-02-11 11:18:34 +01:00
sergeyteleshevandEvgenia 71231c3a76 CB-6153 Fix 'Enables' in settings (#3250)
* CB-6153 fixes translations

* CB-6153 adds new translation fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-11 17:53:49 +08:00
60e41367f6 dbeaver/pro#4117 Fix session management (#3248)
* dbeaver/pro#4117 Fix session management

* dbeaver/pro#4117 Fix comments

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: MashaKorax <84867187+MashaKorax@users.noreply.github.com>
2025-02-10 18:25:22 +01:00
0048ad88e4 CB-6131 get loaders from all tabs, not only visible (#3210)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-10 18:18:57 +01:00
Alexander Skoblikovandkseniaguzeeva c85974c9f5 dbeaver/pro#3978 init workspace before configuration, support temp fo… (#3236)
* dbeaver/pro#3978 init workspace before configuration, support temp folder in services

* dbeaver/pro#3978 fix tests

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-02-10 17:06:57 +01:00
alexandEvgenia 9e9ec13db0 CB-6128 add tooltips to tabs (#3221)
* CB-6128 add tooltips to tabs

* CB-6128 add project to the tooltip

* CB-6128 remove code duplication

* CB-6128 change file name

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-10 21:48:35 +08:00
sergeyteleshev 2271433992 CB-5327 makes admin panel items not flickery (#3243) 2025-02-10 19:06:18 +08:00
sergeyteleshev 97411d2a3e CB-6215 makes object viewer linking feature be registered again (#3244) 2025-02-08 01:25:04 +08:00
sergeyteleshevandEvgenia 8e4ae5ed6a CB-1371 keeps focus in the input field for where filter after the saving (#3239)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-08 01:23:47 +08:00
Ainur b9322d8087 CB-5931 add ability to read cell info from single row table (#3218) 2025-02-06 16:25:18 +00:00
alexandEvgenia 408565ee64 CB-5212 adjust readonly behaviour (#3237)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-06 19:31:17 +08:00
Sychev AndreyandEvgenia 107436a8c0 CB-6181 fix: show save/cancel buttons in json docs (#3222)
* CB-6181 fix: show save/cancel buttons in json docs

* CB-6181 refactor: change condition for SAVE/CANCEL buttons

The problem is that for select 1 in TE we get different result from other product, because in CE/EE we use ResultSetFooterMenuService, while for TE we use regular TableFooterMenuService. model.source.isReadOnly flag doesn't return true anymore since we extracted hasRowIdentifier flag from it, so we get redundant buttons in tables like that in TE.

Since the only difference is products where we are executing this script, it's quite hard to detect it inside a component. I decided to check editor's features, they are empty in this case (select 1) in all products, so we can be 100% sure that if there are no features, we don't need any buttons.

The other problem that for Document type of data format we also don't have features (and we use the same footer menu service). If it's not read-only, we need to have those buttons to save/cancel edits. The first solution is to check data format is Document (or check the editor type or to try get action with needed type). The other solution that I used is to check hasRowIdentifier flag(hasElementIdentifier) because editable documents will have it true, while datasets like select 1 don't have them. It looks more generic for me and should work in more cases in future

* СB-6181 refactor: update isReadonly flag for resultset

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-06 19:30:57 +08:00
Ruslan MusaevandEvgenia 4388491db1 CB-5873 add logging server url (#3231)
* CB-5873 add logging server url

* CB-5873 add logging server url

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-05 12:21:19 +01:00
DenisSinelnikov 4bf0e72d77 CB-6136. LDAP userID change attribute (#3217) 2025-02-05 11:15:39 +00:00
Alexey fbe4c7fcbb dbeaver/dbeaver-vscode#77 fix: eslint (#3233)
* dbeaver/dbeaver-vscode#77 fix: eslint

* chore: update jdk version to 21
2025-02-05 18:50:35 +08:00
2fc9c72908 dbeaver/dbeaver-vscode#77 refactor: yarn & vit migration (#3229)
* dbeaver/vscode#77 refactor: yarn & vit migration

* chore: configure eslint & typescript & prettier

* fix: chunk splitting & assets loading

* fix: enable corepack

* refactor: dev environment

* chore: remove corepack enable from build scripts

* chore: make script executable

* fix: SSL check in vite dev

* chore: update debug launch configs

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-05 00:20:23 +08:00
Elizabethandkseniaguzeeva 14be13ba96 dbeaver/pro#4032 Update SQLite driver version to the latest one (#3225)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-02-04 16:17:21 +01:00
07de3cd668 CB-6174 feat: inverse overlay (#3215)
* CB-6174 feat: inverse overlay

* CB-6174 change icon

* CB-6174 adjust height

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-02-04 21:32:17 +08:00
AnastasiyaandEvgenia f1c8f10dc1 CB-6189 Update MariaDB driver to the latest version 3.5.1 (#3223)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-02-04 09:43:33 +01:00
Daria Marutkina ad467c3d22 dbeaver/pro#4033 Update README file 2025-02-03 11:12:46 +01:00
Alexander Skoblikovandkseniaguzeeva 5b20474470 dbeaver/pro#3868 update cloud configs by event (#3219)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-01-31 14:03:36 +01:00
alex a1a92d513c CB-6195 hide component if not supported (#3226) 2025-01-30 16:17:08 +01:00
serge-rider dc71e65bf9 dbeaver/pro#4033 Add redundant folders to gitignore 2025-01-30 09:16:22 +01:00
Alexander Skoblikovandkseniaguzeeva 538a433198 CB-6168 map user role by team (#3214)
* CB-6168 map user role by team

* CB-6168 review fix

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-01-29 21:28:18 +01:00
Serge Rider 7e512fe5ed dbeaver/pro#4033 24.3.5 version bump 2025-01-28 19:51:01 +01:00
2199883eb9 CB-6132 Read only connection setting (#3213)
* CB-6132 feat: add read-only setting to connection's expert block

* CB-6132 refactor: add readonly property for the new field

* CB-6132 set read only param for data source container

* CB-6132 refactor: add locales

* CB-6132 refactor: change eng message

* CB-6132 fix read only for creating connection

---------

Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2025-01-28 18:11:54 +01:00
19c4ec49bd CB-3753-1809-fr-add-field-hints-in-the-filter-field (#3151)
* CB-3753 adds base for input autocomplete

* CB-5373 adds InputAutocompletion base

* CB-3753 removes unneeded code + fixes bugs with current word selection

* CB-3753 replaces with existing menu

* CB-3753 refactor

* CB-3753 fixes menu visibility

* CB-3753 adds autocomplete for where filters from result set column names

* CB-3753 cleanup

* CB-3753 cleanup

* CB-3753 adds base hints

* CB-3753 fixes bug with not available arrow option selection

* CB-3753 cleanup

* CB-3753 pr fixes

* CB-3753 removes redundant useEffect with visibility logic

* Revert "CB-3753 removes redundant useEffect with visibility logic"

This reverts commit 92e67143a7.

* CB-3753 adds fuzzy search with Fuse.js library

* CB-3753 cleanup

* CB-3753 adds context input ref

* CB-3753 fixes bugs

* CB-3753 removes unused lib in core-utils

* CB-3753 pr fixes

* CB-3753 replaces fuse.js with minisearch

* CB-3753 fixes styles for menu

* CB-3753 moves InputAutocompletionMenu out of the InlineEditor

* CB-3753 adds positioning to the contextInput suggestions via button anchor

* CB-3753 cleanup

* CB-3753 fixes jumping menu

* CB-3753 cleanup

* CB-3753 fixes bug with incorrect replacement

* CB-3753 cleanup

* CB-3753 adds useSearch hook

* CB-3753 cleanup

* CB-3753 pr fixes

* CB-3753 adds contextMenuPosition instead of mouseContextMenu + makes AutocompleteMenu use this context

* CB-3753 pr fixes

* CB-3753 cleanup

* CB-3753 cleanup

* CB-3753 cleanup

* CB-3753 cleanup

* Revert "CB-3753 cleanup"

This reverts commit 732ca111d0.

* CB-3753 pr fixes

* CB-3753 cleanup

* CB-3753 pr fixes

* CB-3753 pr fixes

* CB-3753 pr fixes

* CB-3753 cleanup

* CB-3753 adds word separator + few new DB keywords to suggestions

* CB-3753 fixes filter when applying autocomplete

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-01-28 18:08:50 +01:00
AinurandDaria Marutkina c0aca0a032 CB-6123 fix updating driver libraries in config file (#3194)
* CB-6123 fix updating driver libraries in config file

* CB-6123 fix connection error on init

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-28 18:04:07 +01:00
Sychev AndreyandEvgenia 1bf783537b CB-5992 fix: limit maximum fraction digits in chart legend (#3216)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-01-28 17:20:06 +01:00
f6ae6ecdfe CB-4066 Migrate Team form to form template (#3196)
* CB-4066 refactors team structure

* CB-4066 refactors Team form to use new API

* CB-4066 adds TeamProjects form part to the TeamsForm

* CB-4066 cleanup

* CB-4066 cleanup

* CB-4066 pr fixes

* CB-4066 pr fixes

* CB-4066 fixes title and error key for team creation

* CB-4066 qa fixes

* CB-4066 qa fixes

* CB-4066 fixes bug with team editing

* CB-3753 pr fixes

* CB-4066 fixes validation error with wrong teamId

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-01-27 20:34:58 +03:00
Sychev AndreyandEvgenia 8fe583d9ae CB-6152 restrict editing bool and hide actions in datasets (#3209)
* CB-6152 fix: Restrict editing BOOL in read-only tables

* CB-6152 fix: add condition for actions

* CB-6152 chore: update TS references

* CB-6152 fix: don't show extra button for not editable tables

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-01-27 20:33:32 +03:00
Sychev AndreyandDaria Marutkina ef8eb7b8d8 CB-5126 fix: focus init button in SqlEditorOverlay (#3193)
* CB-5126 fix: use useFocus hook

* CB-5126 use updateFocus

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-27 16:41:42 +03:00
Mikhailov GrigoriiandDaria Marutkina 529186df41 dbeaver/dbeaver-devops#1630 Added if for root and non-root users (#3180)
* dbeaver/dbeaver-devops#1630 Added if for root and non-root users

* dbeaver/dbeaver-devops#1630 Added creating dir /home/dbeaver

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-27 11:26:21 +01:00
3ceac40016 dbeaver/pro#3977 ability to load self-signet cert from a specific folder (#3201)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
2025-01-24 17:51:32 +01:00
Georgii b7bbf4e65f dbeaver/dbeaver-infra#187 fix generator not adding junit (#3207) 2025-01-24 16:14:09 +01:00
mayer 909d3fb668 dbeaver/dbeaver-devops#1701 java 21 as default (#3208) 2025-01-24 14:10:55 +01:00
serge-rider d8107fabaa Merge remote-tracking branch 'origin/devel' into devel 2025-01-24 11:46:53 +01:00
Ainurandmr-anton-t ade04708a3 CB-6109 fix deadlock and keep filter only in global project (#3195)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2025-01-24 11:25:24 +01:00
serge-rider b6b28d5f65 Merge remote-tracking branch 'origin/devel' into devel 2025-01-24 11:13:19 +01:00
serge-rider fb3daa0145 dbeaver/pro#4016 File datasources folder. Azure and GCP directory detection fix. File details property page. 2025-01-24 11:10:33 +01:00
alexandDaria Marutkina bfd435dc5e CB-5798 remove hardcoded max width (#3206)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-24 11:44:49 +03:00
alexandEvgenia 8831ad05fa CB-5968 export user form (#3198)
* CB-5968 export user form

* CB-5968 bind method

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-01-23 16:04:06 +03:00
alexandEvgenia 254635d5b0 CB-6090 add new types (#3197)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2025-01-22 21:47:16 +03:00
alex 636ec28312 CB-6129 add tooltips (#3202)
* CB-6129 add tooltips

* CB-6129 simplify syntax
2025-01-22 21:46:14 +03:00
DenisSinelnikov cd7dcb40c8 CB-5574. Added new api for get manager, added flap in server configur… (#3161) 2025-01-22 15:12:45 +00:00
Georgii 82753268e6 dbeaver/dbeaver-infra#187 PRO osgi test runner (#3190)
* dbeaver/dbeaver-infra#187 PRO osgi test runner

* dbeaver/dbeaver-infra#187 working CBEE & WIP DC runners

* dbeaver/dbeaver-infra#187 code cleanup & fix maven runs

* dbeaver/dbeaver-infra#187 code cleanup

* dbeaver/dbeaver-infra#187 don't asyncLaunch desktop apps
2025-01-22 15:44:29 +01:00
Daria Marutkina a6da7124e8 dbeaver/pro#3956 Update README file (#3200) 2025-01-20 14:33:06 +01:00
AinurandDaria Marutkina 6514cbe66f CB-5152 fix data source config if credentials were saved for current session (#3191)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-20 10:18:06 +01:00
serge-rider e708c1b810 dbeaver/pro#3956 24.3.4 version bump 2025-01-14 19:31:04 +01:00
3b0a4e7d33 CB-6063 feat: add ability to import data without PK (#3188)
* CB-6063 feat: add ability to import data without PK

* CB-6063 feat: add ability to insert rows to tables w/o PK using actions

removes isImportAllowed flag, adds hasRowIdentifier, uses it in place of forbidden actions

* CB-6063 refactor: use only false value for hasRowIdentifier flag

* CB-6063 fix: revert logic in hasRowIdentifier

* CB-6063 refactor: rename property

* CB-6063 fix: return lock icon back for tables w/o identifier

* CB-6063 fix: hasRowIdentifier in getResult

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-01-14 19:23:32 +01:00
7a83252490 CB-5369. Added API for transaction log for commits (#3183)
* CB-5369. Added API for transaction log for commits

* CB-5369. Refactor after review

* CB-5369 add transaction logs table

* CB-5369. Added id for data

* CB-5369 fix typo

* CB-5369. Added event for get count

* CB-5369. Refactor event

* CB-5369. Refactor event

* CB-5369. Refactor after review

* CB-5369. Refactor after review

* CB-5369. Added connectionId to event

* CB-5369 support count event

* CB-5369. Rename eventId

* CB-5369 adjust count styles

* CB-5369 format time

* CB-5369 add missing deps

* CB-5369 remove extra important flags

* CB-5369 review fixes

* CB-5369 remove extra import

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-14 19:12:10 +01:00
f6800b5911 CB-5461. Added compare ldap group and user team (#3189)
* CB-5461. Added compare ldap group and user team

* CB-5461. Fixed codestyle

* CB-5361. Fixed to create new ldap user with full dn

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2025-01-14 17:06:25 +01:00
Ainur 1d4c00e5fb CB-6051 ability to download drivers (#3155) 2025-01-14 15:42:02 +00:00
12cfcbc199 dbeaver/pro#3885 UPD: switch to web sockets (#3169)
* dbeaver/pro#3885 Make CBSessionManager.createWebSessionImpl public

* dbeaver/pro#3885 Check that the feature is enabled upon connection

---------

Co-authored-by: Ivan Gagarkin <gagarkin@Ivans-MacBook-Pro.local>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2025-01-14 14:02:10 +01:00
Sychev AndreyandDaria Marutkina c3fcf37b3f CB-5756 redesign user profile (#3184)
* CB-5756 feat: redesign user profile

* CB-5756 refactor: return disabled prop to UserProfileFormInfo

* CB-5756 feat: add confirmation dialog

When closing panel with unsaved password changes, add localization for that case.

* CB-5756 fix: onChange handler and comparing the state

* CB-5756 fix: build

* CB-5756 refactor: change useState to useObservableRef

* CB-5756 refactor: swap logError to logException

* CB-5756 refactor: use built-in inputs onChange

* CB-5756 refactor: swap useService to useResource hook

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-13 17:10:19 +03:00
AinurandDaria Marutkina e259d7da59 CB-5457 fix applying specific events for non-admin users (#3186)
* CB-5457 fix applying specific events for non-admin users

* CB-5457 add annotations

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-13 14:14:22 +04:00
alexandDaria Marutkina 06f8b448ca CB-5867 show objects description (#3170)
* CB-5867 show objects description

* CB-5867 add description only to the connection tree

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-10 20:43:17 +03:00
AinurandDaria Marutkina 5f87ef177f CB-5923 add env variables for product settings (#3179)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-10 11:53:28 +01:00
Anastasiya f4b0a15b70 Fix incorrect punctuation in the Russian localization (#3187) 2025-01-09 14:01:17 +01:00
Joel Wetzell e124f41943 fix typo (#3178) 2025-01-09 13:54:16 +01:00
sergeyteleshev afc8d7c52b CB-6060 makes tree selection resource more universal + fixes scripts bug with disabled folder creation (#3181) 2025-01-09 14:39:18 +03:00
Sychev AndreyandDaria Marutkina fa1b07ee6b CB-6097 Fix: The Show duplicates button in the Grouping panel does not work (#3176)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-07 12:48:24 +03:00
Sychev AndreyandDaria Marutkina de6f9b7dae CB-5832 Add SQL editor shortcut to save script (#3167)
* CB-5832 feat: add shortcut for save as script action

* CB-5832 feat: add info about a shortcut to Shortcuts modal

* CB-5832 fix: ru localization

* CB-5832 refactor: use SqlEditorView for action registration

* CB-5832 refactor: use SqlEditorView for action registration

* CB-5832 refactor: check action in handler

* CB-5832 refactor: bind function in constructor

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2025-01-07 12:47:52 +03:00
Daria Marutkina 60d90b9e73 dbeaver/pro#3921 Update README file (#3177) 2025-01-06 14:13:12 +03:00
serge-rider 4ced9189e1 dbeaver/pro#3921 24.3.3 version bump 2024-12-30 18:13:05 +01:00
Serge Riderandkseniaguzeeva 827865a973 dbeaver/pro#3911 AI and SQL control commands (#3166)
* dbeaver/pro#3911 AI and SQL control commands

* dbeaver/pro#3911 AI and SQL control commands

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2024-12-30 17:26:51 +01:00
AnastasiyaandEvgenia 70b6fc25a9 CB-6088 fix upper cases in localization; add localization (#3168)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-30 16:46:47 +01:00
sergeyteleshevandEvgenia efd0be6a1a Cb 5448 sql assist doesnt work after alias with enabled use long object names (#3140)
* CB-5448 adds replacementOffset logic to autocomplete so we have table long names setting

* CB-5448 cleanup

* CB-5448 cleanup

* CB-5448 pr fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-30 11:41:30 +01:00
DenisSinelnikov 3bcbf342c6 Merge pull request #3164 from dbeaver/CB-6085-fix-regex-in-web-sql-file-loader-servlet
Cb 6085 fix regex in web sql file loader servlet
2024-12-27 21:09:11 +04:00
DenisSinelnikov 882979e8c0 Merge branch 'devel' into CB-6085-fix-regex-in-web-sql-file-loader-servlet 2024-12-27 21:01:06 +04:00
ca83a1f167 CB-5734 return template configuration for auth provider (#3162)
* CB-5734 return template configuration for auth provider

* CB-5734 feat: fetch templateConfiguration

---------

Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
Co-authored-by: Andrey Sychev <nukemoore@gmail.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-27 17:58:15 +01:00
DenisSinelnikovandDaria Marutkina 92ee21d136 CB-5609. Added validate name for renaming s3 files (#3163)
* CB-5609. Added validate name for renaming s3 files

* CB-5609. Refactor after review

* CB-5609. Refactor after review

* CB-5609. Refactor after review

* CB-5609. Remove symbol

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-27 17:52:10 +01:00
Daria Marutkina 3eba6945dd Merge branch 'devel' into CB-6085-fix-regex-in-web-sql-file-loader-servlet 2024-12-27 16:03:39 +01:00
3c73cb2aa8 CB-4756 feat: save grouping panel state between remounts (#3158)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2024-12-26 11:00:55 +01:00
Ainur 543d175a6f CB-6085 blob upload validate only uuid 2024-12-26 10:40:15 +01:00
Ainur 3dace0d676 CB-6085 blob upload validation fix 2024-12-26 10:13:57 +01:00
Alexander SkoblikovandDaria Marutkina bd851433e7 dbeaver/pro#3739 event registry (#3159)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-25 20:30:58 +01:00
DenisSinelnikovandAinur 46fedc0198 CB-5954. Added logic for login by login attribute (#3148)
* CB-5954. Added logic for login by login attribute

* CB-5954. Added logic for login by login attribute

* CB-5954. Added exception for additional login

* CB-5954. Fixed if bind DN not filled

* CB-5954. Refactor after review

* CB-5954. Refactor after review

* CB-5954. Fixed localization

* CB-5954. Fixed localization

* CB-5954. Fixed localization

* CB-5954. Fixed localization

* CB-5954. Fixed checkstyle

* CB-5954. Changed tooltips

---------

Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-12-25 17:47:24 +01:00
sergeyteleshevandDaria Marutkina 8f61321169 CB-5978 api token change description (#3160)
* CB-5978 hides API Token provider during configuration wizzard

* CB-5978 hides API token only for config mode (fix)

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-25 16:15:48 +01:00
aa778e0f94 CB-6059 create team with uppercase fix (#3142)
* CB-6059 create team with uppercase fix

* CB-6069 fixes error with team creation with teamId in upper case

* CB-6059 fix potential npe

---------

Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-25 12:36:53 +01:00
398f9b775e Cb 5988 plugin template (#3136)
* CB-5988 generate plugin template

* CB-5988 add add plugin script

* CB-5988 review fixes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2024-12-24 14:20:08 +01:00
78aafaf9aa CB-3508 create events for session async tasks (#3036)
* CB-3508 create events for session async tasks

* CB-3508 remove redundant events

* CB-3508 update async web task event logic

* CB-6000 refactor: migrate AsyncTask code to core-root package

* CB-6000: fix

* CB-3508 use only update async task event

* CB-3508 add result info to async task event

* CB-6000 feat: change the way of updating task state

* CB-6000 refactor: rename type and property

* CB-6000 fix: use id from server

* CB-3508 do not have results in task info event

* CB-6000 changes after BE update

* CB-6000 fix: set only status on status update

* CB-3508 fixes after review

* CB-6000 refactor: task id

return back task id generation and saving on creation. Added second map filled on running and linking backend Id and frontend Id. Added helper method to get task

* CB-6000 refactor: handle race condition

add pending events map to save last status if it's came earlier than we saved the task

* CB-6000 refactor: AsyncTask creation

* CB-3508 fixes build

* CB-6000 fix: retry update task info later if locked

* CB-6000 refactor: add a comment about delayed update

---------

Co-authored-by: Andrey Sychev <nukemoore@gmail.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-24 13:45:16 +01:00
ShadelessFox 449b66f6eb dbeaver/pro#3659 Convert OSGI localization bundles to UTF-8 (#3144) 2024-12-23 18:56:37 +01:00
Alexander Skoblikov 2f03486b49 dbeaver/pro#3807 jakarta websocket (#3141)
* dbeaver/pro#3807 jakarta websocket

* dbeaver/pro#3807 fix timeout

* dbeaver/pro#3807 fix test deps
2024-12-23 14:43:40 +01:00
Daria Marutkina d798fd627b dbeaver/pro#3857 Update README file (#3149) 2024-12-23 13:40:57 +01:00
Serge Rider 48e0cda85d dbeaver/pro#3857 24.3.2 version bump 2024-12-17 20:52:08 +01:00
AinurandDaria Marutkina 7f13f70b26 CB-6044 do not save api token on auth (#3138)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-17 20:16:16 +01:00
8d0b0e1c65 CB-5807. Implemented logic to get localized text by locale, translate… (#3117)
* CB-5807. Implemented logic to get localized text by locale, translated global prefer and part of identity provider on en/ru

* CB-5807. Refactor after review

* CB-5807. Refactor after review, move logic to base class

* CB-5807. Refactor after review, move logic to base class

* CB-5807. Added new translation for IP

* CB-5807. Refactor after review

* CB-5807. Refactor after review

* CB-5807. Refactor after review

* CB-5807. Fixed typo in ru locale

* CB-5807. Refactor after review

* CB-5807. Revert

* CB-5807. Remove comment

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-12-17 18:14:24 +01:00
855d5914ef CB-5074 fix: temporary fix of setting undefined as locale (#3139)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2024-12-17 16:43:53 +01:00
Elizabeth 71e03c7bf2 dbeaver/dbeaver#36415 Add support for composite values to the grouping panel for DBeaver (#3137) 2024-12-17 16:09:09 +01:00
sergeyteleshevandEvgenia eada3fddb5 CB-5955 Add create connection/folder actions in navigator tree (#3130)
* CB-5955 adds create menu (connection, folder)

* CB-5955 hides folder creation for non authorized users

* CB-5955 fixes label

* CB-5955 disable new connection

* CB-5955 shows create actions only for folders and connections nodes

* CB-5955 cleanup

* CB-5955 Add handler to hide create menu when no items are available

* CB-5955 Refactor handler to directly bind elementsTreeActionHandler for folder creation

* CB-5955 pr fixes

* CB-5955 creates connection according to the selected in tree project + tree selection refactor

* CB-5955 reverts old behavior with Generate SQL submenu for connections

* CB-5955 cleanup

* CB-5955 adds connection via menu into any folder

* CB-5955 updates TS references

* CB-5955 cleanup

* CB-5955 pr fixes

* CB-5955 pr fixes

* CB-5955 pr fixes

* CB-5955 cleanup

* CB-5955 fixes bug with dissapeared create connection button at top bar

* CB-5955 pr fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-16 17:01:32 +01:00
alex 92c7cef0c6 CB-6039 prevent click through menu (#3134)
* CB-6039 prevent click through menu

* CB-6039
2024-12-16 14:02:43 +03:00
Alexander Skoblikovandmr-anton-t 522620e20d Dbeaver/pro#3726 parameters provider (#3128)
* dbeaver/pro#3726 wip

* dbeaver/pro#3726 create datasource descriptor only via registry

* dbeaver/pro#3726 cloudbeaver fixes

* dbeaver/pro#3726 initial test

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-12-13 12:33:48 +01:00
alexandEvgenia ea342f058b Cb 4071 data grid context menu (#3114)
* CB-5831 migrate data grid context menu

* CB-5831 use switch instead of return

* CB-5831 migrate save actions

* CB-5831 apply primary color

* CB-4071 simplify logic

* CB-4071 simplify logic

* CB-4071 change naming

* CB-4071 review fixes

* CB-4071 add items based on condition

* CB-4071 remove old context menu

* CB-4071 pass handlers to panel

* CB-4071 add gap to the menu

* CB-4071 check data source

* CB-4071 support prev behaviour

* CB-4071 make context more strict

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-12 18:50:21 +03:00
alexandEvgenia db9df1f810 Cb 5831 refresh whole tree (#3129)
* CB-5831 outdate children when refresh node

* CB-5831 freeze resource until tree is constructed

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-12 14:20:16 +03:00
Sychev AndreyandDaria Marutkina 2f80d1ce13 CB-3332 shortcuts improvements (#3126)
* CB-3332 refactor: data-viewer shortcuts

move them to the plugin folder, make them IKeyBinding shape to use in transformKeys

* CB-3332 refactor: change ctrl hotkey to mod

* CB-3332 refactor: use new DATA_VIEWER_SHORTCUTS, don't replace backspace

* CB-3332 refactor: remove redundant shortcuts, update naming

* CB-3332 feat: introduce new shortcuts for rows managing

In order to let mac users use shortcuts, Insert key was changed to KeyR

* CB-3332 feat: move shift key to the beginning of all shortcuts

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-12 14:19:34 +03:00
32e50c40f4 CB-5945. Mark deprecate for template (#3123)
* CB-5933. Fixed typo

* CB-5945. Refactor after review

* CB-5945. Refactor after review

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-12-12 11:33:18 +01:00
6830e34b2a CB-5933 Connection state is not synchronized with other resources triggering connection state (#3119)
* CB-5933. Added event for disconnect datasource

* CB-5933. Added to gql

* CB-5933 adds handlers for disconnected/connected events

* CB-5933. Rename topic

* CB-5933. Rename topic

* CB-5933. Added event for connect to database

* СB-5933 adds ConnectionDisconnectEventHandler

* CB-5933. Fixed typo

* CB-5933 fixes disconnect handler + adds connect handler for connections

* CB-5933 fix for connected event

* СB-5933 marks outdated connected/disconnected connections on event handling

* CB-5933 cleanup

* CB-5933 pr fixes

* CB-5933 pr fixes

* CB-5933. Refactor after review

---------

Co-authored-by: denis.sinelnikov <denis.sinelnikov@dbeaver.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-12 11:27:12 +01:00
Anastasiya 02e6b9c6de dbeaver/pro#3712 update contributors readme part (#3131) 2024-12-11 14:12:17 +03:00
22af3b1c5e CB-5935 removes perform update for changing connection view (#3124)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-11 13:16:09 +03:00
d09bb9bb58 CB-4070 Migrate Project form to form template (#3101)
* CB-4070 small layout issues problems from the ticket comments

* CB-4070 ux fixes for project create/edit behavior

* CB-4070 pr fixes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-12-11 11:05:27 +03:00
Alexander SkoblikovandEvgenia c2523a687b CB-6026 use nio api for deletion (#3125)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-12-11 09:04:49 +01:00
Georgii 4b2e1a9c05 dbeaver/dbeaver#36488 add missing lib-sql bundlepath (#3127) 2024-12-10 11:52:43 +01:00
Alexeyandsergeyteleshev 2357b0a0cf fix: dev server websocket proxy (#3122)
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
2024-12-06 14:14:58 +03:00
Sychev Andreyandmr-anton-t a835f7e215 Cb 5860 bump versions (#3116)
* CB-5860 chore: bump versions

* CB-5860 chore: bump i18next

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-12-06 07:39:49 +03:00
Ainur 5e86e161b4 CB-6015 try to find user with uppercase (#3120) 2024-12-05 16:05:33 +00:00
0b5af36628 Dbeaver/dbeaver vscode#22 split core plugins (#3102)
* dbeaver/dbeaver-vscode#22 wip

* dbeaver/dbeaver-vscode#22 wip

* dbeaver/dbeaver-vscode#22 wip

* dbeaver/dbeaver-vscode#22 gql model fix

* dbeaver/dbeaver-vscode#22 missed class fix

* dbeaver/dbeaver-vscode#22 ce fixes

* dbeaver/dbeaver-vscode#22 fixes

* dbeaver/dbeaver-vscode#22 review fixes

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
Co-authored-by: Alexey <wrouds@gmail.com>
2024-12-04 08:20:06 +01:00
Daria Marutkina 7f1c9ceec0 Merge pull request #3108 from dbeaver/dariamarutkina-patch-2
dbeaver/pro#3712 Update README file
2024-12-03 16:25:34 +01:00
Mikhailov Grigorii c31416c7d7 dbeaver/dbeaver-devops#1553 Fixed chown in dockerfile (#3113) 2024-12-03 14:04:06 +01:00
Mikhailov Grigorii 03b0467c97 dbeaver/dbeaver-devops#1553 Reverted run as root user in dockerfile (#3106) 2024-12-02 16:36:07 +01:00
Daria Marutkina e689836a4e dbeaver/pro#3712 Update README file 2024-12-02 16:28:22 +01:00
74dbd50690 dbeaver/dbeaver-vscode#7 Driver downloads API (#3069)
* dbeaver/dbeaver-vscode#7 Driver downloads API

* dbeaver/dbeaver-vscode#7 Bring short driver ID into GQL

* #7 fix: make required fields required

* dbeaver/dbeaver-vscode#7 fix check driver maven library validation

---------

Co-authored-by: Alexey <wrouds@gmail.com>
Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
2024-12-02 12:58:45 +01:00
alex 85bfcc0674 CB-4898 remove extra deps (#3100) 2024-11-28 12:04:47 +03:00
Alexander SkoblikovandAlexey ea8605eff8 dbeaver/dbeaver-vscode#45 server feature extension (#3075)
* dbeaver/dbeaver-vscode#45 server feature extension

* dbeaver/dbeaver-vscode#45 review fix

---------

Co-authored-by: Alexey <wrouds@gmail.com>
2024-11-26 18:18:16 +03:00
sergeyteleshev ff2cc51c11 CB-5872 adds instruction with link for AWS product updation (#3098) 2024-11-26 22:33:27 +08:00
Serge Rider 979cecff04 dbeaver/pro#3712 24.3.1 version bump 2024-11-25 23:25:38 +04:00
b2a0a88983 CB-5918 Add new plugin (#3081)
* CB-5918 add holidays plugin

* CB-5918 add plugin-holidays as a reference to product default

* CB-5918 fix holidays plugin, add icons

* CB-5918 fix: don't run many renders simultaneously

* CB-5918 fix: flakes respawn

previously flakes kept x position that looked weird especially when user resize the window making it bigger

* CB-5918 refactor: adjust flakes size and speed

make flakes bigger and a little bit slower, reduce amount of flakes

* CB-5918 refactor: make flakes look like flakes

add shape prop to create different shapes of snowflakes

add drawSnowflake to render snowflakes

* CB-5918 Extract Logo registration to separate plugin

In order to customize Logo for different occasions without creating circular dependencies with other plugins

* CB-5918 refactor: update exports in holiday plugin

* CB-5918 feat: make logo src a prop

use holidays service to set custom logo

* CB-5918 refactor: update logos

* CB-5918 refactor: snowflakes removing faster if more flakes

* CB-5918 refactor: reduce action icon rotation on click

* CB-5918 fix: deps

* CB-5918 fix: ts-config reference

* CB-5918 refactor: use debounce for resizing

* CB-5918 refactor: add throttle to handleMouseMove

* CB-5918 refactor: update logo

* CB-5918 fix: start date

* CB-5918 feat: add rotation to snowflakes

* CB-5918 fix: dep version

* CB-5918: refactor: split up app logo plugin to public and admin parts

* CB-5918 refactor: split holidays plugin up to two parts: admin and public

* CB-5918 refactor: avoid using anonymous functions in Christmas class

* CB-5918 refactor: HolidayActionButton

* CB-5918 refactor: IHoliday interface naming

* CB-5918 fix: update TS refs

* CB-5918 fix: legacy color notation and lost this

* CB-5918 refactor: remove redundant plugin bootstrap export

* CB-5918 refactor: rename private property

* CB-5918 refactor: use IconButton core block inside HolidayActionButton

* CB-5918 refactor: add check in addHoliday method

* CB-5918 refactor: simplify logoSrc condition

* CB-5918 refactor: remove redundant styles

* CB-5918 refactor: use descriptive names for plugins bootstrap

* CB-5918 refactor:  specify dep version

* CB-5918 refactor: improve Christmas class readability

* CB-5918 refactor: use lazy import for logo

* CB-5918 refactor: export lazy components properly

* CB-5918 fix: holiday end date

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-11-25 21:09:01 +03:00
alexandDaria Marutkina 285a216b4c CB-5125 do not trigger logo in configuration stage (#3096)
* CB-5125 do not trigger logo in configuration stage

* CB-5125 use publicDisabled field instead

* CB-5125 bind method

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-25 18:13:54 +01:00
alex 6a82a3155f CB-5506 support directional selections (#3095) 2024-11-25 18:18:26 +03:00
ShadelessFoxandkseniaguzeeva 19a5506229 dbeaver/pro#3700 Hide API token authentication method (#3093)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2024-11-25 13:55:34 +03:00
Ainur 51af88e3bc CB-5964 read only metadata delete fix (#3094) 2024-11-25 10:51:45 +00:00
Ainur f3660fa277 CB-5524 rm resource validation fix (#3091) 2024-11-25 10:50:44 +00:00
Ainur d2f592c8be CB-5971 do not show transactions button if not supported (#3092) 2024-11-25 10:36:53 +00:00
alexandDaria Marutkina bde31c3653 CB-5960 sort features (#3089)
* CB-5960 sort features

* CB-5960 sort providers

* CB-5960 sort on component level

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-22 17:59:15 +03:00
990fbe28f5 CB-5895. Added new parameter link to buy license for getProductInfo API (#3080)
* CB-5895. Added new parameter link to buy license for getProductInfo API

* CB-5951 add purchase field

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-11-22 13:16:41 +01:00
serge-rider 350136f797 CB-5584 VSC fix 2024-11-22 12:39:05 +01:00
ae1f0b7470 Devops#1553 root user fix (#3087)
* Reapply "dbeaver/dbeaver-devops#1553 Added user dbeaver in dockerfile cloudbeaver (#3067)"

This reverts commit a36a5550e0.

* dbeaver/dbeaver-devops#1553 updated base-java image with user

* dbeaver/dbeaver-devops#1553 fixed user usage and ownership applying

* dbeaver/dbeaver-devops#1553 changed  GID UID

* dbeaver/dbeaver-devops#1553 desc of chowner fixed

* dbeaver/dbeaver-devops#1553 fixed user creation

* dbeaver/dbeaver-devops#1553 Added creating dbeaver user in ce dockerfile

* dbeaver/dbeaver-devops#1553 Removed comment

* dbeaver/dbeaver-devops#1553 Removed comment

* dbeaver/dbeaver-devops#1553 Rewrited comment

* dbeaver/dbeaver-devops#1553 Replaced UID on user name

---------

Co-authored-by: Greg Miller <ggxedq@gmail.com>
Co-authored-by: Mikhailov Grigorii <49814763+ggxed@users.noreply.github.com>
2024-11-21 18:29:18 +01:00
DenisSinelnikovandEvgenia cd901b922f Cb 5584 provide more information in the debug log for auditing (#3061)
* CB-5584. Added more logs for gql and rest in RM. Added new parameter in global preferences for showing additional logs

* CB-5584. Added more logs for gql and rest in RM. Added new parameter in global preferences for showing additional logs

* CB-5584. Rename parameter

* CB-5584. Rename parameter

* CB-5584. Refactor after review

* CB-5584. Refactor after review

* CB-5584. Renamed parameter

* CB-5584. Added check variable for contains restricted variable

* CB-5584. Fixed showing wrong sessionId.

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-21 16:52:42 +01:00
alexandEvgenia 56b9eab16f CB-5919 avoid unnecessary navigations tasks (#3090)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-21 17:27:25 +03:00
Sychev AndreyandEvgenia 94aaf7bf5e CB-5703 refactor: optimize data grid onScroll handler (#3071)
handleScroll in DataGrid entails small performance degradation due to el.scrollTop, el.clientHeight, el.scrollHeight calls and hence reflow of layout, more on that here: https://gist.github.com/paulirish/5d52fb081b3570c81e3a/565c05680b27c9cfd9f5e971d295cd558c3e1843

What is done:
1. throttle added to not fire handleScroll on every render, because the main goal of that function is to detect when a user approaches the end of a page = reduce number of calls

2. Inside the handler the code was  refactored in a way that we get scrollTop only once to calculate toBottom and inverse the clause logic and replace early return (!A || !B) with a clause with (A && B) logic to not check B on every call which is also triggering reflow.

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-21 16:00:56 +03:00
DenisSinelnikovandEvgenia b816a6d8a0 CB-5695. Fixed npe when RP turned on, but not configured (#3077)
* CB-5695. Fixed npe when RP turned on, but not configured

* CB-5695. Fixed checkstyle

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-21 10:01:42 +01:00
alexandDaria Marutkina e56a298acc CB-5573 ask for commit confirmation on connection edit recconect (#3085)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-20 17:08:45 +01:00
serge-rider ff13d56d42 dbeaver/pro#3648 Maven resource plugin version 2024-11-20 16:06:48 +01:00
serge-rider a36a5550e0 Revert "dbeaver/dbeaver-devops#1553 Added user dbeaver in dockerfile cloudbeaver (#3067)"
This reverts commit 2cdc43a29f.
2024-11-20 14:25:19 +01:00
Mikhailov GrigoriiandDaria Marutkina 2cdc43a29f dbeaver/dbeaver-devops#1553 Added user dbeaver in dockerfile cloudbeaver (#3067)
* dbeaver/dbeaver-devops#1553 Added user dbeaver in dockerfile cloudbeaver

* dbeaver/dbeaver-devops#1553 Create dockerfile for cloudbeaver update

* dbeaver/dbeaver-devops#1553 Added dockerfile with upgrade script

* dbeaver/dbeaver-devops#1553 Fixed script path

* dbeaver/dbeaver-devops#1553 Fixed entrypoint

* dbeaver/dbeaver-devops#1574 Reworked script, added start process as dbeaver user

* dbeaver/dbeaver-devops#1574 Renamed script for launch container

* dbeaver/dbeaver-devops#1574 Added comments to script launch-products

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-20 12:19:01 +01:00
AnastasiyaandDaria Marutkina 21a70c33a3 CB-5947 fix server config descriptions (#3079)
* CB-5947 fix server config descriptions

* Update ru.ts change description

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-20 12:54:19 +03:00
4323578b03 СB-5796 Metadata/data editor - error when changing server settings (#3051)
* СB-5796 make no connection to db if it is already connected

* Revert "СB-5796 make no connection to db if it is already connected"

This reverts commit 4459891e06.

* CB-5796 adds extra checks to connection shield for proper connection

* CB-5796 fixes for case with table

* CB-5796 adds loader between switching from simple to advanced connection type

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-20 09:37:02 +03:00
Ruslan MusaevandMatvey16 58346aef65 dbeaver/pro#3484 Add statistic for cloud (#3068)
Co-authored-by: Matvey16 <82543000+Matvey16@users.noreply.github.com>
2024-11-20 04:39:48 +01:00
DenisSinelnikovandEvgenia 9d8e021e6c CB-5886. Fixed import number with float, without rounding (#3072)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-19 10:12:53 +01:00
Daria Marutkina 0144742878 dbeaver/pro#3641 Update README file (#3078) 2024-11-18 12:24:30 +01:00
Alexander SkoblikovandEvgenia 0943b80942 CB-5946 force lowercase userid (#3074)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-18 09:47:18 +01:00
Alexander Skoblikov 5293be4d4a CB-5939 do not send server information to a client side (#3070) 2024-11-15 11:14:29 +00:00
serge-rider 5bcef9278e dbeaver/pro#3643 Utils refactoring 2024-11-13 08:38:56 +01:00
Serge Rider bbe0e15370 dbeaver/pro#3641 24.3.0 version bump 2024-11-12 22:01:04 +01:00
Serge Rider f31be24a49 dbeaver/pro#3641 24.3.0 version bump 2024-11-12 21:56:10 +01:00
cee8f00b9e CB-5016 add disable import option to global config (#3058)
* CB-5016 add disable import option to global config

* CB-5016 refactor: move logic from DataViewerSettingService to DataImportSettingsService

* CB-5016 refactor: simplify

* CB-5016 refactor: move disable import locale token to data-import-plugin

* CB-5016 refactor: ru locale

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2024-11-12 18:33:22 +01:00
Sychev AndreyandDaria Marutkina a23c2c2a55 CB-5775 refactor: make default group text aligned with other tabs (#3064)
* CB-5775 refactor: make default group text aligned with other tabs

* CB-5775: return accidentally removed gap prop

* CB-5775 refactor: return TextPlaceholder back

* CB-5775 refactor: make style important

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-12 18:27:15 +01:00
sergeyteleshev 110546a022 CB-5833 Fix e-mails recognition for SSO (#3019) 2024-11-12 16:17:49 +00:00
mayerandDaria Marutkina a779a0e95e dbeaver/dbeaver-devops#1590-changed-server-port-var (#3054)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-12 12:47:37 +01:00
sergeyteleshevandEvgenia 3b9275c00a CB-5891 User - error after disabling and deleting (#3056)
* CB-5891 on disable user changes form state according to its real state

* CB-5891 pr fixes

* CB-5891 cleanup

* CB-5891 pr fixes

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-11 14:27:04 +03:00
59c924c3d7 CB-5555 fix cursor going to the beginning on undo/redo (#3055)
This commit handles the situations and sets fallback when there are text changes but selection has not been set (for example, its position outside of the doc). It that case we set the cursor in the end of the result string. It helps us to keep the cursor position more consistent.

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-11-11 14:24:29 +03:00
sergeyteleshevandalex f1d1bb2bc2 CB-5691 AI prompt - add shortcut for Translate action (#3059)
* CB-5691 adds ctrl+enter submit for textarea in form

* CB-5691 removes unneeded prop: disableCtrlEnterSubmit

---------

Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
2024-11-11 14:23:27 +03:00
Sychev Andrey c9a87275db CB-3757 fix: change white-space prop (#3065) 2024-11-11 14:21:24 +03:00
Sychev AndreyandDaria Marutkina addeeb0c28 CB-5765 refactor: remove word local from the phrase (#3063)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-08 16:01:12 +01:00
alexandEvgenia 7735550544 CB-5743 add autoGenerated field to api (#3043)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-08 15:59:31 +01:00
Georgii b46bcce0a7 dbeaver/dbeaver-infra#155 add node-modules to exclude (#3057) 2024-11-08 10:51:11 +01:00
fec65a24ea CB-5725 hide desktop handlers in auth dialog (#3052)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-11-07 12:21:10 +01:00
alexandmr-anton-t f75caccb73 CB-5907 add labels to user and team form (#3049)
* CB-5907 add labels to user and team form

* CB-5907 fix structure

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-11-07 13:25:34 +03:00
Alexander Skoblikov 9f7c8bfc59 CB-5912 npe fix (#3053) 2024-11-06 12:37:47 +00:00
Sychev AndreyandDaria Marutkina 33c75c5ee4 CB-5878 add title for inline editor button (#3042)
* CB-5878 add title for inline button

* CB-5878 refactor: change reject to cancel, add other locales

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-11-06 14:41:55 +03:00
sergeyteleshevandEvgenia 30e4e6c9bf CB-5892 removes min fetch size setting (#3039)
* CB-5892 removes min fetch size setting

* CB-5892 edits min fetch to 10

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-06 14:38:57 +03:00
sergeyteleshevandEvgenia 7c8c506870 CB-5290 handles messages and closing for readonly scripts (#3034)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-11-06 14:37:25 +03:00
Serge Rider cd30b32c23 CB-5904 Global project fix (#3048) 2024-11-05 16:59:52 +00:00
Serge Rider 0013507cca dbeaver/dbeaver#23361 Deploy script fix 2024-11-05 14:33:06 +01:00
18cb9e5956 dbeaver/pro#3465 udbt reconnect improve (#3029)
* dbeaver/pro#3465 udbt reconnect improve

* dbeaver/pro#3465 Make use of `java.time.Duration` in `PeriodicJob`

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: ShadelessFox <yanuari.channel@gmail.com>
2024-11-05 14:20:06 +01:00
Alexey 22cfdb7b4b fix: vscode workspace launch conf (#3046) 2024-11-05 16:00:39 +03:00
Ainur 4380ac1f3c CB-5738 api for tokens (#3023) 2024-11-05 12:32:08 +00:00
Serge Rider 8d607b8a56 dbeaver/dbeaver#23361 libsql driver (#3044)
* dbeaver/dbeaver#23361 Dependencies

* dbeaver/dbeaver#23361 Add LibSQL to CB CE
2024-11-05 12:50:52 +01:00
DenisSinelnikovandAinur eacb1813a3 CB-5827. Fixed empty delimiter for reverse proxy, get default if empty parameter (#3035)
Co-authored-by: Ainur <59531286+yagudin10@users.noreply.github.com>
2024-11-05 12:12:10 +01:00
Serge Rider b7956830aa Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel 2024-11-05 07:57:58 +01:00
Evgenia 897c4e8913 Merge pull request #3041 from dbeaver/EvgeniaBzzz-patch-2
Update CB-2424 README.md
2024-11-04 19:14:05 +03:00
Evgenia 5922a5f7ad Update CB-2424 README.md
link fixed
2024-11-04 19:07:23 +03:00
Daria Marutkina 2af829cc2e CB_2424 update README, add release notes (#3040) 2024-11-04 15:13:43 +03:00
Alexey 80c757f25b dbeaver/dbeaver-vscode#38 feat: navigation tree (#3038)
* dbeaver/dbeaver-vscode#38 feat: navigation tree

* dbeaver/dbeaver-vscode#38 chore: code style

* dbeaver/dbeaver-vscode#38 chore: rename `navRefreshNode` -> `navReloadNode`
2024-11-04 14:36:25 +03:00
Serge Rider a51bb2f4dc dbeaver/pro#3537 24.2.5 version bump 2024-10-30 05:43:23 +01:00
Serge Rider e7359b76fe dbeaver/pro#3537 24.2.5 version bump 2024-10-29 23:33:18 +01:00
alexandDaria Marutkina 2f120d6a4f Cb 5819 administration tables redesign (#3033)
* CB-5819 add user panel

* CB-5819 redesign teams

* CB-5819 remove extra styles

* CB-5819 review fixes

* CB-5819 revert group title

* CB-5819 remove code duplication

* CB-5819 fix import

* CB-5819 move user table loader

* CB-5819 keep loader mounted

* CB-5819 truncate titles

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-29 20:43:36 +01:00
Ainur d3be30f55b CB-5623 fix npe (#3030) 2024-10-29 16:12:10 +00:00
alexandDaria Marutkina 2c7df05c45 CB-3446 add d3 imports (#3025)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-29 10:05:46 +03:00
Ainur 11167d5802 CB-5683 change password for disabled user fix (#3032) 2024-10-28 15:24:38 +00:00
sergeyteleshevandDaria Marutkina 4cfb27b33b CB-5645 [EE\AWS] Change the instruction in the Version update tab (#3017)
* CB-5645 adds core-links and GithubLinks

* CB-5645 adds BaseUpdate instruction to EE, TE, AWS

* CB-5645 pr fixes

* CB-5645 REVERT IT (need for tests)

* Revert "CB-5645 REVERT IT (need for tests)"

This reverts commit 6c53b907c7.

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-25 13:17:30 +03:00
sergeyteleshevandEvgenia 0126b204c0 CB-5566 fixes checkboxes for tables (#3026)
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-24 18:34:41 +03:00
alexandDaria Marutkina 6dbcfe408e CB-5745 explicitly set word break on field description (#3027)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-24 14:31:02 +02:00
Serge Rider de2d9f029f CB-5732 Navigator filters fix for optional nodes (#3024) 2024-10-24 12:33:34 +02:00
Elizabeth 2f895f6dab dbeaver/pro#3419 Don't load additional info on typing with auto activation of completion (#3022) 2024-10-24 12:10:08 +02:00
sergeyteleshevandDaria Marutkina c7af629d8a CB-5712 adds loaders for administration menu items (#3011)
* CB-5712 adds loaders for administration menu items

* CB-5712 pr fixes

* CB-5712 pr fix for preloading serverConfigResource in constructor

* CB-5712 removes preload from AuthProviderResource

---------

Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-24 11:04:23 +03:00
sergeyteleshevandmr-anton-t 1782ce45a7 CB-5793 removes extra space for table cells (#3013)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-24 11:04:00 +03:00
51e0218682 CB-5575 pass column key along with row (#3004)
* CB-5575 pass column key along with row

* CB-5575 change arg

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-24 11:03:30 +03:00
Ainur e08353f13f CB-5792 add header for static content (#3018) 2024-10-23 15:46:26 +00:00
AinurandDenisSinelnikov 383952c60e CB-5838 check all row identifiers fix (#3014)
Co-authored-by: DenisSinelnikov <142215442+DenisSinelnikov@users.noreply.github.com>
2024-10-23 15:45:13 +00:00
alexandDaria Marutkina 5282175b7c CB-5701 allow to choose provider by keyboard (#3008)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-22 13:21:49 +03:00
alexandDaria Marutkina b4db34ea48 CB-5706 do not increase height (#3002)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-21 13:25:10 +03:00
Evgenia 9672e5b3b4 Merge pull request #3015 from dbeaver/EvgeniaBzzz-patch-1
Update README.md - CB RN 24.2.3
2024-10-21 12:27:20 +03:00
Evgenia 48a7a4f806 Update README.md - RN 24.3.2 2024-10-21 12:16:04 +03:00
Anastasiya cbceee6ec3 dbeaver/tech-docs#654 update gql comments, remove outdated info (#3012) 2024-10-18 18:38:56 +02:00
sergeyteleshev ffe0a18828 Cb 5757 unit tests for core utils and core blocks (#2961)
* CB-5757 adds unit tests for getDomainFromUrl helper

* CB-5757 adds unit tests for getTextFileReadingProcess helper

* CB-5757 adds unit tests for TextTools helper

* CB-5757 adds unit tests for downloadFromURL helper

* CB-5757 adds unit tests for Deferred and PromiseExecutor

* CB-5757 adds unit tests for core-blocks hooks

* CB-5757 fixes the tests
2024-10-18 08:34:19 +03:00
alex 115cfb3bde Cb 5753 u tests (#2964)
* CB-5753 add localization service test, fix grammar

* CB-5753 add test for the getDomainFromUrl

* CB-5753 add test for the client activity service

* CB-5753 add NodeManagerUtils tests

* CB-5753 add more cases

* CB-5753 pass args correctly
2024-10-18 08:33:39 +03:00
Serge Rider e62538b583 Merge remote-tracking branch 'origin/devel' into devel 2024-10-18 04:49:04 +02:00
sergeyteleshev 5255e9949d CB-5820 fixes frontend build script (#3006)
* CB-5820 fixes frontend build script

* CB-5820 fixes test for windows

* CB-5820 cleanup

* CB-5820 reverts back tests for package
2024-10-17 18:56:24 +03:00
Alexey 8e4faa5935 dbeaver/dbeaver-vscode#42 disable artifacts (#3007) 2024-10-17 14:52:18 +02:00
serge-rider 39ad2994b2 Manifests fix 2024-10-17 10:17:55 +02:00
Serge Rider 00788615e1 Merge remote-tracking branch 'origin/devel' into devel 2024-10-17 07:07:34 +02:00
ac937698bd dbeaver/pro#3393 Add "UDBT" feature (#3000)
Co-authored-by: Serge Rider <serge@jkiss.org>
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2024-10-16 10:33:25 +02:00
Alexey be88091950 dbeaver/dbeaver-devops#1525 update ci workflows (#2998)
* dbeaver/dbeaver-devops#1525 update ci workflows

* dbeaver/dbeaver-devops#1525 fix frontend lint

* dbeaver/dbeaver-devops#1525 move checkstyle config from dbeaver repo

* dbeaver/dbeaver-devops#1525 use own maven setup action

* dbeaver/dbeaver-devops#1525 reuse workflows

* dbeaver/dbeaver-devops#1525 fix concurrency

* dbeaver/dbeaver-devops#1525 fix concurrency
2024-10-16 10:28:44 +02:00
Serge Rider 9dcaec0c09 Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel 2024-10-16 07:01:46 +02:00
f677f48890 CB-5710 return anonymous user info (#2972)
* CB-5710 return anonymous user info

* CB-5710 support anonymous user

* CB-5710 anonymous access disabled active user fix

* CB-5710 simplify logic

* CB-5710 fix error messages

* CB-5710 review fixes

* CB-5710 add computed

* CB-5710 change getters to methods

* CB-5710 fixes after review

---------

Co-authored-by: naumov <iamemptyhuh@gmail.com>
Co-authored-by: alex <48489896+devnaumov@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Serge Rider <serge@jkiss.org>
2024-10-16 07:01:37 +02:00
Serge Rider a44cadbb8a Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel 2024-10-16 06:46:59 +02:00
5c992dc8ee CB-5811 applies new design styles for selects, textareas with disabled or readonly prop (#2999)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-16 06:46:55 +02:00
Serge Rider 05f85db7e6 dbeaver/pro#3468 24.2.4 version bump 2024-10-15 20:37:32 +02:00
DenisSinelnikov 94ea41c2c9 CB-5234. Refactor after review, move logic for PRO products (#2990) 2024-10-15 10:00:58 +00:00
Ainur d49342ce48 CB-5713 fix action links (#2991) 2024-10-15 09:25:47 +00:00
Alexander Skoblikov 21fe547dcd CB-5424 QM cleanup job (#2987) 2024-10-15 09:25:12 +00:00
67c54d29eb CB-5205 fix: connection view switching (#2984)
* CB-5205 fix: connection view switching

* CB-5205 fix: tabs synchronization

* CB-5205 fix: connection sync

---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-15 11:57:53 +03:00
alexandEvgenia 7427543b7f CB-5760 add title to driver manager form (#2995)
* CB-5760 add title to driver manager form

* CB-5760 move hotkeys hook to core-blocks

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-14 20:32:37 +03:00
sergeyteleshevandmr-anton-t 439c806020 CB-5810 fixes cell edit styles (#2996)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-14 16:51:16 +03:00
a4bb23b21e CB-5749 fix: metadata table loading (#2960)
* CB-5749 fix: metadata table loading

* CB-5749 fix: offset pagination range expand function

* CB-5205 fix: connection view switching

* Revert "CB-5205 fix: connection view switching"

This reverts commit e06c039fdd.

* CB-5749 fix: prevent page offset overflow

---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-14 12:46:52 +03:00
sergeyteleshev fd711b055c CB-5806 The AWS switch does not work in the settings (#2994) 2024-10-12 00:23:22 +08:00
Ainur c6626f4364 CB-5802 fix build (#2993) 2024-10-11 11:58:42 +00:00
Ainur d44c9f3863 CB-5671 update db2-i driver (#2986) 2024-10-11 10:52:06 +00:00
Ainur ea055fde49 CB-5693 update protobuf version (#2958) 2024-10-11 10:49:59 +00:00
Alexey 3d8dc7d3d2 CB-5578 dm ability to remove custom certificate (#2975) 2024-10-11 09:35:49 +00:00
sergeyteleshevandmr-anton-t eb41e6156a Cb 5728 update frontend dependencies (#2970)
* CB-5728 updates dependencies without react-data-grid

* CB-5728 updates react-data-grid library

* CB-5728 updates dependencies after react-data-grid updation

* CB-5728 fixes align in cells for react-data-grid

---------

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-11 11:54:13 +03:00
c7fa466509 CB-5707 Change font size in dialogs (#2973)
* CB-5707 increases text size to confirmation dialog title

* CB-5707 fixes headerTitle with composes styles

* CB-5707 fixes dialogBodyContent with composes styles

---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-11 11:52:55 +03:00
Serge Rider f475c71311 Dbeaver/pro#3420 Use long for serialization of configs 2024-10-11 06:20:32 +02:00
Serge Rider 6220df4845 dbeaver/pro#3420 Gson refactoring (#2965) 2024-10-11 06:04:55 +02:00
sergeyteleshevandkseniaguzeeva 2e5b71e9dd CB-5563 [TE] Change credentials - 'save credentials' is not marked for auth even if it is saved (#2981)
* CB-5563 adds saveCredentials to config when loading DriverInfo during driver authorization

* CB-5640 fixes save creds checkbox state for SSL

* Revert "CB-5640 fixes save creds checkbox state for SSL"

This reverts commit e25fc3b5d4.

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2024-10-10 18:38:54 +03:00
sergeyteleshevandEvgenia 1a5192815c CB-5640-update-fileds-ui-for-dark-and-light-themes (#2985)
* CB-5640 adds colors to inputs according to design (disabled, readonly)

* CB-5640 merges disable logic into readonly

* CB-5640 adds aria-disabled prop and styles to input

* CB-5640 adds more styles for input

* CB-5640 pr fixes

* CB-5640 reverts logic

* CB-5640 fixes styles

* CB-5640 fixes styles

* CB-5640 merges disable logic into readonly for all of the inputs all over the app

* CB-5640 reverts form-controls styles

* CB-5640 reverts form-controls styles

* CB-5640 makes disabled design according to the figma

* CB-5640 makes checkbox dissapear

* CB-5640 cleanup

---------

Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-10 17:20:51 +03:00
Anastasiya 3a85f1a4be Update SECURITY.md (#2989)
Add current version
2024-10-10 14:04:33 +02:00
alexandEvgenia Bezborodova 2e5b092ce7 CB-5454 add deprecated message (#2976)
* CB-5454 add deprecated message

* CB-5454 add info icon to connection dialog message

* CB-5454 remove add button

* CB-5454 remove template

---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-10 13:46:18 +03:00
DenisSinelnikovandDaria Marutkina 5c92d43c96 CB-5773. Fixed bad performance for databases/table e.t.c if too many tables included (#2977)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-10 10:29:57 +02:00
Alexander Skoblikovandkseniaguzeeva 8b54e3177e CB-5717 npe fix (#2968)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
2024-10-09 10:18:48 +00:00
sergeyteleshevandEvgenia Bezborodova a4c36247fa CB-5767 Easy-config - server configuration fields respond to Enter key press (#2980)
* CB-5767 makes config wizzard go next item when confirming serverConfig form

* CB-5767 removes extra handleEnter for button click enter

---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-09 13:08:42 +03:00
AinurandEvgenia Bezborodova 2698e713a7 CB-5653 accessible connections events fix (#2971)
---------

Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-09 10:07:39 +00:00
alex a48097ec25 CB-5746 clean -> clear (#2978) 2024-10-08 18:51:15 +03:00
Alexander Skoblikovandmr-anton-t 8c30761caa dbeaver/dbeaver-vscode#19 map custom folder as project in vc code product (#2963)
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
2024-10-08 12:22:13 +02:00
Serge Rider 9103b28e72 dbeaver/dbeaver-vscode#36 API server build (#2967)
* dbeaver/dbeaver-vscode#36 API server build

* dbeaver/dbeaver-vscode#36 API server build
2024-10-08 12:21:22 +02:00
Alexey e45f077bfa Revert "CB-5578 DM: Ability to remove custom certificate (#2899)" (#2974)
This reverts commit fb1b2b21ed.
2024-10-08 13:11:22 +03:00
fb1b2b21ed CB-5578 DM: Ability to remove custom certificate (#2899)
* CB-5578 handles url for redirect after custom domain is being deleted

* CB-5578 reverts isValidUrl

* CB-5578 pr fixes

* CB-5578 fixes for QA

* CB-5578 fixes for redirect on server url in custom certificate deletion

* CB-5578 fix import

* CB-5578 creates isValidServer file

* CB-5578 allow any protocol server url but redirect on https only

* CB-5578 fix error message in details popup

* СB-removes unneeded tranlsation

* CB-5578 pr fixes

* CB-5578 dm fix for deletion of custom certificate

* CB-5578 fix get https url helper

* CB-5578 cleanup

* CB-5578 adds status message for custom certificate deletion

* CB-5578 sends server url without protocol while custom certificate deletion

* CB-5578 pr fixes

* CB-5578 adds loader to the deletion of custom certificate

---------

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
Co-authored-by: Ainur <ainur.iagudin@dbeaver.com>
Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
2024-10-08 13:05:34 +03:00
2a1adc1374 CB-5052 [2562 FR] Highlight the row where any field is currently selected (#2952)
* CB-5052-2562 adds background for selected row

* CB-5052-2562 fixes background for selected row

* CB-5052-2562 moves style var

* CB-5052 pr fixes

* CB-5052 fixes color for selection

* CB-5052 fixes color for selection 2

* CB-5052 adds themes and fixes actions styles for focused cursor in table

* CB-5052 reverts theme for data grid. plus replaces selected row style

* CB-5052 cleanup

* CB-5052 cleanup

* CB-5052 makes selected tab blue

* CB-5052 reverts refresh button colors

* CB-5052 fixes unneeded border left

---------

Co-authored-by: Alexey <wrouds@gmail.com>
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-08 12:56:40 +03:00
alexandDaria Marutkina c46e9343ac CB-5746 rename buttons (#2959)
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
2024-10-08 11:44:39 +02:00
Alexander Skoblikov 16cd103585 CB-5615 dynamic cookie lifetime (#2956)
* CB-5615 dynamic cookie lifetime
2024-10-07 16:20:48 +00:00
Alexander Skoblikov 0850b2d94f CB-5390 use remote file system for storage (#2945)
* CB-5390 wip

* CB-5390 wip

* CB-5390 review fixes

* CB-5390 fix conflicts
2024-10-07 18:15:45 +02:00
Daria Marutkina 2c2a1dfed6 Merge pull request #2966 from dbeaver/dariamarutkina-patch-2
CB_2422 chore: update README
2024-10-07 10:59:48 +02:00
Daria Marutkina 37abea3f44 CB_2422 chore: update README 2024-10-07 10:56:48 +02:00
serge-rider 0e32052b24 dbeaver/pro#3398 Version 24.2.3 bump 2024-10-01 19:17:52 +02:00
1889 changed files with 71431 additions and 45701 deletions
-29
View File
@@ -1,29 +0,0 @@
---
name: Bug report
about: Create a report to help us improve CloudBeaver
title: ''
labels: bug, wait for review
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here, e.g. error log.
+61
View File
@@ -0,0 +1,61 @@
name: 🐛 Bug Report
description: Create a report to help us improve our product
labels: [wait for review]
type: Bug
body:
- type: markdown
attributes:
value: |
Thank you for reporting a bug in CloudBeaver!
To ensure we can address the issue as quickly and efficiently as possible, please provide as much detail as you can in the fields below.
- type: textarea
id: description
attributes:
label: Description
description: |
A clear and concise description of the issue being addressed.
- Describe the actual problematic behavior.
- Ensure private information is redacted.
- Include console output or log files if relevant.
- If applicable, add screenshots or screen recordings to help explain your problem.
placeholder: |
Please enter a description of the issue. Here you can also attach log files, screenshots or a video
validations:
required: true
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
description: Describe the steps to reproduce the bug
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
- type: textarea
id: expected
attributes:
label: Expected/Desired Behavior
description: |
A clear and concise description of what happens in the software **after** a fix is created and merged.
validations:
required: true
- type: input
id: version
attributes:
label: CloudBeaver Version
description: What version of CloudBeaver are you running?
placeholder: ex. CloudBeaver Community 25.0.0
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Any additional context about the environment
placeholder: |
Example:
1. OS: [e.g. iOS, Ubuntu, Windows 11]
2. Browser: [e.g. Chrome, Safari]
validations:
required: false
+14
View File
@@ -0,0 +1,14 @@
blank_issues_enabled: false
contact_links:
- name: Read our documentations
url: https://dbeaver.com/docs/cloudbeaver
about: Many articles about product deployment and features.
- name: Try advanced database management features in DBeaver PRO or CloudBeaver EE
url: https://dbeaver.com/download/?utm_source=github&utm_medium=social&utm_campaign=issue
about: Download a 14-day free trial on dbeaver.com. No credit card is needed.
- name: Learn how to use CloudBeaver effectively with our tutorial videos
url: https://www.youtube.com/channel/UC-yOjsQLSaJVEghg6UB3N7A
about: Subscribe to our YouTube channel and watch new tutorials every week.
- name: Follow us on X (ex. Twitter)
url: https://x.com/dbeaver_news
about: Get everyday tips, fresh news, and DBeaver/CloudBeaver feature overviews.
+10 -3
View File
@@ -1,8 +1,9 @@
---
name: Feature request
about: Suggest an idea for CloudBeaver
name: Feature Request
about: Provide a description of your feature request for CloudBeaver. Include the problem you are trying to solve, why it is important, and any specific functionality you believe would improve the platform.
title: ''
labels: feature request, wait for review
labels: wait for review
type: Feature
assignees: ''
---
@@ -12,3 +13,9 @@ A clear and concise description of what the problem is. Ex. I'm always frustrate
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+3 -2
View File
@@ -1,8 +1,9 @@
---
name: Question
about: Is there something unclear?
about: Is there something unclear? Ask your question.
title: ''
labels: question, wait for review
labels: wait for review
type: Question
assignees: ''
---
+20 -34
View File
@@ -1,56 +1,42 @@
name: Backend Build
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Allows you to reuse workflows by referencing their YAML files
workflow_call:
jobs:
build-backend:
name: Backend
name: Build
timeout-minutes: 10
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
path: cloudbeaver
- name: Set up JDK 17
- name: Clone Deps Repositories
uses: dbeaver/github-actions/clone-repositories@devel
with:
project_deps_path: "./cloudbeaver/project.deps"
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "17"
java-version: "21"
cache: maven
- uses: stCarolas/setup-maven@v5
with:
maven-version: 3.9.0
- name: Give permissions
run: |
sudo chmod 777 ../
shell: bash
- name: Determine branches
id: determine-branch
run: |
echo "pr_branch=${{ github.head_ref }}" >> $GITHUB_ENV
echo "base_branch=${{ github.event.pull_request.base.ref }}" >> $GITHUB_ENV
- name: Clone dbeaver/dbeaver
id: clone-repo
run: |
git clone -b ${{ env.pr_branch }} https://github.com/dbeaver/dbeaver.git ../dbeaver || git clone -b ${{ env.base_branch }} https://github.com/dbeaver/dbeaver.git ../dbeaver
- uses: dbeaver/github-actions/install-maven@devel
- name: Run build script
run: ./build-backend.sh
shell: bash
working-directory: ./deploy
working-directory: ./cloudbeaver/deploy
- name: Archive build artifacts
uses: actions/upload-artifact@v4
with:
name: backend-build-artifacts
path: deploy/cloudbeaver
if-no-files-found: error
# - name: Archive build artifacts
# uses: actions/upload-artifact@v4
# with:
# name: backend-build-artifacts
# path: cloudbeaver/deploy/cloudbeaver
# if-no-files-found: error
-40
View File
@@ -1,40 +0,0 @@
name: Backend Lint
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Allows you to reuse workflows by referencing their YAML files
workflow_call:
inputs:
skip_cache:
required: false
type: string
jobs:
lint:
name: Backend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout checkstyle config repository
uses: actions/checkout@v4
with:
repository: dbeaver/dbeaver
path: dbeaver-config
- name: Copy checkstyle config
run: cp dbeaver-config/dbeaver-checkstyle-config.xml ./dbeaver-checkstyle-config.xml
- name: Remove checkstyle config directory
run: rm -rf dbeaver-config
- uses: dbelyaev/action-checkstyle@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
filter_mode: diff_context
checkstyle_config: ./dbeaver-checkstyle-config.xml
fail_on_error: true
+7 -50
View File
@@ -1,57 +1,14 @@
name: Cleanup checks
name: Cleanup
on:
pull_request:
types: [closed]
push:
branches:
- devel
jobs:
delete-caches:
runs-on: ubuntu-latest
steps:
- name: Cleanup
run: |
gh extension install actions/gh-actions-cache
echo "Fetching list of cache key"
cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH -L 100 | cut -f 1 )
## Setting this to not fail the workflow while deleting cache keys.
set +e
echo "Deleting caches..."
for cacheKey in $cacheKeysForPR
do
gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm
done
echo "Done"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
# delete-docker-image:
# name: Delete Docker Image
# if: github.event.pull_request.merged == true
# runs-on: ubuntu-latest
# steps:
# - name: Check out the repository
# uses: actions/checkout@v4
# - name: Set up Docker Buildx
# uses: docker/setup-buildx-action@v3
# - name: Determine Docker Image Tag
# run: |
# REPO_NAME=$(basename ${{ github.repository }})
# IMAGE_NAME=ghcr.io/${{ github.repository_owner }}/$REPO_NAME
# BRANCH_NAME=${{ github.event.pull_request.head.ref }}
# TAG_NAME=$(echo $BRANCH_NAME | sed 's/[^a-zA-Z0-9._-]/-/g')
# echo "image=$IMAGE_NAME:$TAG_NAME" >> $GITHUB_ENV
# - name: Log in to GitHub Container Registry
# run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.repository_owner }} --password-stdin
# - name: Delete Docker Image
# run: |
# docker rmi ${{ env.image }}
# echo "Deleted image: ${{ env.image }}"
name: Cleanup
uses: dbeaver/dbeaver-common/.github/workflows/cleanup-caches.yml@devel
secrets: inherit
-56
View File
@@ -1,56 +0,0 @@
name: Check
on:
push:
branches:
- devel
pull_request:
branches:
- devel
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
skip_cache:
description: "Skip cache restoration"
required: false
default: "false"
jobs:
call-backend-build:
name: Build
uses: ./.github/workflows/backend-build.yml
call-frontend-build:
name: Build
uses: ./.github/workflows/frontend-build.yml
with:
skip_cache: ${{ github.event.inputs.skip_cache }}
call-frontend-lint:
name: Lint
needs: call-frontend-build
uses: ./.github/workflows/frontend-lint.yml
call-backend-lint:
name: Lint
uses: ./.github/workflows/backend-lint.yml
# call-frontend-tests:
# name: Frontend Unit Tests
# needs: call-frontend-build
# runs-on: ubuntu-latest
# steps:
# - name: Check if tests passed
# if: ${{ needs.call-frontend-build.outputs.test-status != 'success' }}
# run: |
# echo "Tests failed"
# exit 1
# - name: Continue if tests passed
# if: ${{ needs.call-frontend-build.outputs.test-status == 'success' }}
# run: echo "Tests passed"
# call-docker-build-and-push:
# name: Run
# needs: [call-backend-build, call-frontend-build]
# uses: ./.github/workflows/docker-build-and-push.yml
+47 -46
View File
@@ -1,9 +1,6 @@
name: Frontend Build
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Allows you to reuse workflows by referencing their YAML files
workflow_call:
outputs:
@@ -14,14 +11,17 @@ on:
description: "Test status"
value: ${{ jobs.frontend-build.outputs.test-status }}
inputs:
skip_cache:
clean-cache:
required: false
type: string
type: boolean
jobs:
frontend-build:
name: Frontend
name: Build
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: read
outputs:
build-status: ${{ steps.build.outcome }}
@@ -29,63 +29,64 @@ jobs:
defaults:
run:
working-directory: ./webapp
working-directory: ./cloudbeaver/webapp
steps:
- uses: actions/checkout@v4
- name: Checkout cloudbeaver
uses: actions/checkout@v4
with:
path: cloudbeaver
- name: Clone Deps Repositories
uses: dbeaver/github-actions/clone-repositories@devel
with:
project_deps_path: "./cloudbeaver/project.deps"
token: ${{ secrets.DEVOPS_ISSUE_RO_TOKEN }}
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: yarn
cache-dependency-path: webapp/yarn.lock
node-version: "lts/*"
cache: "yarn"
cache-dependency-path: |
cloudbeaver/common-*/yarn.lock
cloudbeaver/webapp/yarn.lock
- name: restore node_modules
- name: restore cloudbeaver-common typescript cache
uses: actions/cache@v4
with:
path: "**/node_modules"
key: ${{ runner.os }}-node_modules-${{ hashFiles('webapp/yarn.lock') }}
path: "cloudbeaver/common-*/**/*/lib"
key: ${{ runner.os }}-common-dist-${{ hashFiles('cloudbeaver/common-*/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node_modules-
${{ runner.os }}-common-dist-
- name: restore typescript cache
uses: actions/cache@v4
with:
path: "**/packages/*/dist"
key: ${{ runner.os }}-dist-${{ hashFiles('webapp/yarn.lock') }}
path: "cloudbeaver/webapp/**/packages/*/dist"
key: ${{ runner.os }}-dist-${{ hashFiles('cloudbeaver/webapp/yarn.lock') }}
restore-keys: |
${{ runner.os }}-dist-
- name: yarn clean
if: env.skip_cache == 'true'
uses: borales/actions-yarn@v5
with:
dir: webapp
cmd: clean
- if: inputs.clean-cache
run: yarn clear
- name: yarn install --frozen-lockfile
uses: borales/actions-yarn@v5
with:
dir: webapp
cmd: install
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-typescript
- name: build
id: build
uses: borales/actions-yarn@v5
with:
dir: webapp/packages/product-default
cmd: bundle
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-react
- name: test
id: test
uses: borales/actions-yarn@v5
with:
dir: webapp
cmd: test
- run: yarn install --immutable
- name: Archive build artifacts
uses: actions/upload-artifact@v4
with:
name: frontend-build-artifacts
path: webapp/packages/product-default/lib
if-no-files-found: error
- run: yarn bundle
working-directory: ./cloudbeaver/webapp/packages/product-default
- run: yarn test
# - name: Archive build artifacts
# uses: actions/upload-artifact@v4
# with:
# name: frontend-build-artifacts
# path: webapp/packages/product-default/lib
# if-no-files-found: error
+29 -28
View File
@@ -1,45 +1,46 @@
name: Frontend Lint
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Allows you to reuse workflows by referencing their YAML files
workflow_call:
jobs:
lint:
name: Frontend
name: Lint
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: read
defaults:
run:
working-directory: ./cloudbeaver/webapp
steps:
- uses: actions/checkout@v4
- name: Checkout cloudbeaver
uses: actions/checkout@v4
with:
path: cloudbeaver
- run: corepack enable
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: yarn
cache-dependency-path: webapp/yarn.lock
node-version: "lts/*"
cache: "yarn"
cache-dependency-path: "./cloudbeaver/webapp/yarn.lock"
- name: restore node_modules
uses: actions/cache@v4
with:
path: "**/node_modules"
key: ${{ runner.os }}-node_modules-${{ hashFiles('webapp/yarn.lock') }}
restore-keys: |
${{ runner.os }}-node_modules-
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-typescript
- name: yarn install --frozen-lockfile
uses: borales/actions-yarn@v5
with:
dir: webapp
cmd: install
# - run: yarn install --immutable
# working-directory: ./cloudbeaver/common-react
- name: Lint
uses: reviewdog/action-eslint@v1
with:
reporter: github-pr-review
filter_mode: file
workdir: webapp
fail_on_error: true
eslint_flags: "--ext .ts,.tsx"
- run: |
yarn install --immutable
git fetch origin "${{ github.base_ref }}" --depth=1
FILES=$(git diff --name-only 'origin/${{ github.base_ref }}' ${{ github.sha }} -- . | sed 's|^webapp/||')
if [ -n "$FILES" ]; then
yarn lint --pass-on-no-patterns --no-error-on-unmatched-pattern $FILES
else
echo "No files to lint"
fi
+64
View File
@@ -0,0 +1,64 @@
name: CI
on:
pull_request:
types:
- opened
- synchronize
- reopened
push:
branches: [devel]
concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.ref_name }}
cancel-in-progress: true
jobs:
build-server:
uses: dbeaver/dbeaver-common/.github/workflows/mvn-package.yml@devel
name: Check
secrets: inherit
with:
mvn-args: -Dplain-api-server -Dheadless-platform
project-directory: ./cloudbeaver/server/product/aggregate
project-deps: ./cloudbeaver/project.deps
timeout-minutes: 5
# build-server:
# name: Server
# uses: ./.github/workflows/backend-build.yml
# secrets: inherit
build-frontend:
name: Frontend
uses: ./.github/workflows/frontend-build.yml
secrets: inherit
lint-server:
name: Server
uses: dbeaver/dbeaver-common/.github/workflows/java-checkstyle.yml@devel
secrets: inherit
lint-frontend:
name: Frontend
uses: ./.github/workflows/frontend-lint.yml
secrets: inherit
# call-frontend-tests:
# name: Frontend Unit Tests
# needs: call-frontend-build
# runs-on: ubuntu-latest
# steps:
# - name: Check if tests passed
# if: ${{ needs.call-frontend-build.outputs.test-status != 'success' }}
# run: |
# echo "Tests failed"
# exit 1
# - name: Continue if tests passed
# if: ${{ needs.call-frontend-build.outputs.test-status == 'success' }}
# run: echo "Tests passed"
# call-docker-build-and-push:
# name: Run
# needs: [call-backend-build, call-frontend-build]
# uses: ./.github/workflows/docker-build-and-push.yml
+5 -1
View File
@@ -40,7 +40,11 @@ server/test/io.cloudbeaver.test.platform/workspace/.data/
.classpath
.settings/
## Eclipse PDE
*.product.launch
workspace-dev-ce/
deploy/cloudbeaver
server/**/target
apps/**/target
apps/**/target
osgi-cache/
+2 -1
View File
@@ -19,6 +19,7 @@
"yzhang.markdown-all-in-one",
"GraphQL.vscode-graphql-syntax",
"mrmlnc.vscode-json5",
"esbenp.prettier-vscode"
"esbenp.prettier-vscode",
"devnaumov.licensify"
]
}
+2 -2
View File
@@ -8,7 +8,7 @@
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}/..",
"outFiles": [
"${workspaceFolder}/../cloudbeaver/packages/**/dist/**/*.{js,jsx}"
"${workspaceFolder}/../cloudbeaver/webapp/packages/**/dist/**/*.{js,jsx}"
],
"smartStep": true,
"sourceMaps": true,
@@ -18,7 +18,7 @@
{
"type": "java",
"name": "CloudBeaver CE Server",
"cwd": "${workspaceFolder}/../opt/cbce",
"cwd": "${workspaceFolder}/../dbeaver-workspace/app-workspace/cbce",
"request": "launch",
"mainClass": "org.jkiss.dbeaver.launcher.DBeaverLauncher",
"args": [
-15
View File
@@ -1,15 +0,0 @@
{
"license": {
"scope": "typescript,typescriptreact,javascript,javascriptreact,css,scss",
"prefix": "license",
"body": [
"/*",
" * CloudBeaver - Cloud Database Manager",
" * Copyright (C) 2020-2024 DBeaver Corp and others",
" *",
" * Licensed under the Apache License, Version 2.0.",
" * you may not use this file except in compliance with the License.",
" */"
]
}
}
+9 -11
View File
@@ -2,19 +2,18 @@
"editor.tabSize": 2,
"editor.formatOnSave": true,
"editor.linkedEditing": true,
"task.autoDetect": "off",
"java.configuration.updateBuildConfiguration": "automatic",
"java.jdt.ls.vmargs": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx16G -Xms100m -Xlog:disable",
"java.compile.nullAnalysis.mode": "automatic",
"typescript.preferences.useAliasesForRenames": false,
"typescript.preferences.importModuleSpecifier": "relative",
"typescript.preferences.includePackageJsonAutoImports": "on",
"typescript.preferences.quoteStyle": "single",
"typescript.tsdk": "webapp/node_modules/typescript/lib",
"typescript.tsdk": "webapp/.yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"prettier.prettierPath": "webapp/.yarn/sdks/prettier/index.cjs",
"eslint.nodePath": "webapp/.yarn/sdks",
"eslint.enable": true,
"eslint.validate": [
"javascript",
@@ -22,8 +21,9 @@
"typescript",
"typescriptreact"
],
"eslint.workingDirectories": ["webapp"],
"eslint.workingDirectories": [
"webapp"
],
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
@@ -40,12 +40,10 @@
"[java]": {
"editor.defaultFormatter": "redhat.java"
},
"files.eol": "\n",
"files.associations": {
"*.css": "postcss"
},
"java.checkstyle.configuration": "${workspaceFolder}/../dbeaver/dbeaver-checkstyle-config.xml",
"java.checkstyle.configuration": "${workspaceFolder}/../dbeaver-common/.github/dbeaver-checkstyle-config.xml",
"java.checkstyle.version": "10.12.0"
}
}
+7 -7
View File
@@ -55,10 +55,10 @@
"label": "Build CE",
"type": "shell",
"windows": {
"command": "./build-sqlite.bat"
"command": "./build.bat"
},
"osx": {
"command": "./build-sqlite.sh"
"command": "./build.sh"
},
"options": {
"cwd": "${workspaceFolder}/deploy"
@@ -93,19 +93,19 @@
}
},
{
"label": "Update TS references CE",
"label": "Clean CE",
"type": "shell",
"command": "yarn run update-ts-references",
"command": "yarn clear",
"options": {
"cwd": "${workspaceFolder}/webapp"
}
},
{
"label": "Clean CE",
"label": "Add Custom Plugin",
"type": "shell",
"command": "yarn clean",
"command": "yarn run add-plugin",
"options": {
"cwd": "${workspaceFolder}/webapp"
"cwd": "${workspaceFolder}/webapp/packages"
}
}
],
+45 -33
View File
@@ -15,7 +15,7 @@ See our [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.
## Run in Docker
- [Official Docker repository](https://hub.docker.com/r/dbeaver/cloudbeaver)
- [Running instructions](https://github.com/dbeaver/cloudbeaver/wiki/Run-Docker-Container)
- [Deployment instructions](https://github.com/dbeaver/cloudbeaver/wiki/CloudBeaver-Deployment)
## Demo server
@@ -25,43 +25,55 @@ You can see a live demo of CloudBeaver here: https://demo.cloudbeaver.io
## Changelog
### 24.2.1. 2024-09-23
- Chinese localization has been improved (thanks to [cashlifei](https://github.com/cashlifei));
- Environment variables configuration has been improved - now you can configure more variables on the initial stage of the Docker setup;
- SQL Server driver has been updated to version 12.8.0.
### 25.0.2 2025-04-07
- Data Editor: improved table rendering to scale column width depending on the content.
- Improved Navigation tree performance: lost connection does not lead to the application freezing anymore.
- Different bug fixes and enhancements have been made.
### 24.2.0. 2024-09-02
### Changes since 24.1.0:
### 25.0.1 2025-03-24
- Improved performance of the export/import functionality by optimizing disk memory consumption;
- Enhanced initial configuration on stage security: if the initial setup time exceeds 1 hour, the server must be restarted.
### 25.0 2025-03-03
### Changes since 24.3.0:
- General:
- French language support was added (thanks to [matthieukhl](https://github.com/matthieukhl))
- Added the ability to close editor tabs with the middle mouse button
- Added right-click support to open the context menu in the Metadata Editor
- The list of forbidden characters for naming and renaming resource manager files has been updated, and now it includes the following characters: / : " \ ' <> | ? *
- Application cookies security was improved
- Authentication:
- Improved LDAP authentication: added the ability to filter users via service account parameters and ability to specify custom unique user identifiers
- Data Editor:
- Added additional notifications about the restricted operations
- Enhanced IPv6 and DateTime32 data representation for Clickhouse
- Data editing was fixed for DuckDB
- SQL Editor:
- SQL Editor auto-completion was enhanced to get column, table, and function names faster
- Fixed the dollar-quoted string parsing in the SQL Editor for PostgreSQL
- Improved display of the long error messages in the SQL Editor and Log viewer
- Changed the save script icon to a floppy disk for better recognition
- Improved application behavior when closing a connection - open editors won't be closed on disconnect
- Added transaction log viewing for connections with manual commit mode. This allows users to see all modifying statements before committing;
- Added an ability for all editors to reconnect if a connection has been lost;
- Tooltips for metadata objects and SQL Editor tabs now include additional details about catalogs, schemas, and connections;
- Added Ctrl + Shift + S (Cmd + Shift + S on Mac) shortcut for the "Save As Script" action;
- Updated list of available shortcuts for macOS.
- Administration:
- Redesigned administration navigation panel - now it is more compact and clear
- Added the ability to change the default commit mode for each connection separately
- Added the ability to configure the server property rootURI parameter (thanks to [arioko](https://github.com/arioko))
- Databases:
- Added the "Keep alive" setting for Db2 LUW and IMB i, Apache Kyuubi, Clickhouse, Firebird, and Trino
- Updated Firebird driver to version 5.0.4
- DDL generation for Oracle Tablespaces was added (thanks to [pandya09](https://github.com/pandya09))
- Added system information data to the Product Information tab in the Administration panel. This provides administrators with quick access to essential system details, such as the server deployment type (e.g., Docker, Kubernetes), install path, Java version, and Java parameters;
- The global access server URL has been added to the console log, making it easier to locate server installation information directly within the logs;
- New environment variables were introduced for theme styling, SQL editor, and log viewer settings. You can use them for quick setup during the initial Docker configuration stage.
- LDAP authorization:
- Added the ability to match users from LDAP configuration with CloudBeaver users;
- Added an option to specify a user login as an attribute parameter for LDAP providers;
- CloudBeaver now uses EntityID or objectGUID to create new LDAP users in CloudBeaver to ensure uniqueness. This change enhances user identification and prevents conflicts while maintaining backward compatibility for existing users.
- Deployment:
- CloudBeaver now uses JDK 21 as its base Java image. If you use standard deployment and upgrade scripts, the new Java version will be applied automatically after the product update;
- Changed the permission of the Docker volumes directory to enhance security and prevent any insecure actions by the "root" user. All new deployments will use the "dbeaver" user by default. For existing deployments running as the "root" user, this update will automatically adjust file permissions to ensure they are compatible with the new security model. There will be no manual intervention, and the service will continue to run as expected with the updated permissions.
- Connections:
- Enabled the possibility of switching a database connection to read-only mode. This mode can be activated in the connection dialog. Administrators can set this mode for any connection, while regular users can set it for their private connections only;
- For Oracle and SQL Server connections, advanced database settings can now be used in the URL connection mode.
- Data Editor:
- Auto-suggestions for column names in the Data Editor filter field were introduced to avoid typing mistakes;
- Introduced the ability to insert data in tables without unique keys: you can import data from CSV files or insert entire rows directly via UI;
- The collapse of the grouping panel doesn't lead to the complete panel cleaning anymore.
- Data transfer:
- Added the ability to use default spreadsheet names (e.g. Sheet0, Sheet1) for exporting to XLSX;
- An option to replace line break characters on any custom value was added when exporting to CSV.
- Navigator tree:
- An option to show metadata object comments was added. You can enable it in the database navigator settings panel;
- Introduced the ability to create connections not only on the initial level but in folders and sub-folders directly;
- Fixed the display of objects with long names (more than 32 characters) - now, such names will be displayed entirely and not in a cropped format.
- Drivers:
- The MariaDB driver has been updated to version 3.5.1;
- The SQLite driver has been updated to version 3.48.0.0.
## Contribution
As a community-driven open-source project, we warmly welcome contributions through GitHub pull requests.
[We are happy to reward](https://dbeaver.com/help-dbeaver/) our most active contributors every major sprint.
The most significant contribution to our code for the major release 24.2.0 was made by:
1. [matthieukhl](https://github.com/matthieukhl)
The most significant contribution to our code for the major release 24.3.0 was made by:
1. [cashlifei](https://github.com/cashlifei)
+4 -3
View File
@@ -9,9 +9,10 @@ currently being supported with security updates.
| ------- | --------- |
| 22.x | yes |
| 23.x | yes |
| 24.x | yes |
## Reporting a Vulnerability
Please report (suspected) security vulnerabilities to devops@dbeaver.com.
You will receive a response from us within 48 hours.
If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days.
Please report (suspected) security vulnerabilities to devops@dbeaver.com.
You will receive a response from us within 48 hours.
If the issue is confirmed, we will release a patch as soon as possible, depending on complexity, but historically, within a few days.
+10
View File
@@ -0,0 +1,10 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
[*.{js,json,yml}]
charset = utf-8
indent_style = space
indent_size = 2
+4
View File
@@ -0,0 +1,4 @@
/.yarn/** linguist-vendored
/.yarn/releases/* binary
/.yarn/plugins/**/* binary
/.pnp.* binary linguist-generated
+19
View File
@@ -0,0 +1,19 @@
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# Swap the comments on the following lines if you wish to use zero-installs
# In that case, don't forget to run `yarn config set enableGlobalCache false`!
# Documentation here: https://yarnpkg.com/features/caching#zero-installs
#!.yarn/cache
.pnp.*
# artifacts
lib
out
dist
node_modules
+10
View File
@@ -0,0 +1,10 @@
import defaultDbeaverConfig from '@dbeaver/prettier-config';
/**
* @type {import("prettier").Config}
*/
const config = {
...defaultDbeaverConfig,
};
export default config;
+6
View File
@@ -0,0 +1,6 @@
{
"recommendations": [
"arcanis.vscode-zipfs",
"esbenp.prettier-vscode"
]
}
+9
View File
@@ -0,0 +1,9 @@
{
"search.exclude": {
"**/.yarn": true,
"**/.pnp.*": true
},
"typescript.tsdk": ".yarn/sdks/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true,
"prettier.prettierPath": ".yarn/sdks/prettier/index.cjs"
}
File diff suppressed because one or more lines are too long
+5
View File
@@ -0,0 +1,5 @@
# This file is automatically generated by @yarnpkg/sdks.
# Manual changes might be lost!
integrations:
- vscode
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier/bin/prettier.cjs
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier/bin/prettier.cjs your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier/bin/prettier.cjs`));
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require prettier
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real prettier your application uses
module.exports = wrapWithUserWrapper(absRequire(`prettier`));
+7
View File
@@ -0,0 +1,7 @@
{
"name": "prettier",
"version": "3.5.1-sdk",
"main": "./index.cjs",
"type": "commonjs",
"bin": "./bin/prettier.cjs"
}
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsc
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real typescript/bin/tsc your application uses
module.exports = wrapWithUserWrapper(absRequire(`typescript/bin/tsc`));
+32
View File
@@ -0,0 +1,32 @@
#!/usr/bin/env node
const {existsSync} = require(`fs`);
const {createRequire, register} = require(`module`);
const {resolve} = require(`path`);
const {pathToFileURL} = require(`url`);
const relPnpApiPath = "../../../../.pnp.cjs";
const absPnpApiPath = resolve(__dirname, relPnpApiPath);
const absUserWrapperPath = resolve(__dirname, `./sdk.user.cjs`);
const absRequire = createRequire(absPnpApiPath);
const absPnpLoaderPath = resolve(absPnpApiPath, `../.pnp.loader.mjs`);
const isPnpLoaderEnabled = existsSync(absPnpLoaderPath);
if (existsSync(absPnpApiPath)) {
if (!process.versions.pnp) {
// Setup the environment to be able to require typescript/bin/tsserver
require(absPnpApiPath).setup();
if (isPnpLoaderEnabled && register) {
register(pathToFileURL(absPnpLoaderPath));
}
}
}
const wrapWithUserWrapper = existsSync(absUserWrapperPath)
? exports => absRequire(absUserWrapperPath)(exports)
: exports => exports;
// Defer to the real typescript/bin/tsserver your application uses
module.exports = wrapWithUserWrapper(absRequire(`typescript/bin/tsserver`));
+10
View File
@@ -0,0 +1,10 @@
{
"name": "typescript",
"version": "5.7.3-sdk",
"main": "./lib/typescript.js",
"type": "commonjs",
"bin": {
"tsc": "./bin/tsc",
"tsserver": "./bin/tsserver"
}
}
+10
View File
@@ -0,0 +1,10 @@
enableTelemetry: false
preferReuse: true
# pnpIgnorePatterns:
# - "**/cloudbeaver/common-typescript/**"
plugins:
- checksum: 50414773926286d8c0fc32e9936a799ad23296281046f03674bc33517b597e1ff7856092c3fcf8d5460a29549ef8b3dca3f59a1732b650a02bf523b255d726e7
path: .yarn/plugins/@yarnpkg/plugin-ts-project-linker.cjs
spec: "https://raw.githubusercontent.com/Wroud/foundation/refs/heads/main/packages/yarn-plugin-ts-project-linker/bundles/%40yarnpkg/plugin-ts-project-linker.js"
@@ -0,0 +1 @@
# @dbeaver/react-data-grid
@@ -0,0 +1 @@
!lib
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -1,19 +1,16 @@
/// <reference types="react" />
import { JSX as JSX_2 } from 'react/jsx-runtime';
import { Context } from 'react';
import { JSX } from 'react/jsx-runtime';
import type { Key } from 'react';
import { Provider } from 'react';
import type { ReactElement } from 'react';
import { ReactNode } from 'react';
import { RefAttributes } from 'react';
declare interface BaseRenderRowProps<TRow, TSummaryRow = unknown> extends Omit_2<React.HTMLAttributes<HTMLDivElement>, 'style' | 'children'>, Pick<DataGridProps<TRow, TSummaryRow>, 'onCellClick' | 'onCellDoubleClick' | 'onCellContextMenu'> {
declare interface BaseRenderRowProps<TRow, TSummaryRow = unknown> extends Omit_2<React.ComponentProps<'div'>, 'style' | 'children'>, Pick<DataGridProps<TRow, TSummaryRow>, 'onCellClick' | 'onCellDoubleClick' | 'onCellContextMenu'> {
viewportColumns: readonly CalculatedColumn<TRow, TSummaryRow>[];
rowIdx: number;
selectedCellIdx: number | undefined;
isRowSelectionDisabled: boolean;
isRowSelected: boolean;
gridRowStart: number;
height: number;
selectCell: (position: Position, enableEditor?: Maybe<boolean>) => void;
}
@@ -29,6 +26,7 @@ export declare interface CalculatedColumn<TRow, TSummaryRow = unknown> extends C
readonly draggable: boolean;
readonly frozen: boolean;
readonly renderCell: (props: RenderCellProps<TRow, TSummaryRow>) => ReactNode;
readonly renderHeaderCell: (props: RenderHeaderCellProps<TRow, TSummaryRow>) => ReactNode;
}
export declare type CalculatedColumnOrColumnGroup<R, SR> = CalculatedColumnParent<R, SR> | CalculatedColumn<R, SR>;
@@ -42,9 +40,10 @@ export declare interface CalculatedColumnParent<R, SR> {
readonly headerCellClass?: Maybe<string>;
}
export declare const Cell: <R, SR>(props: CellRendererProps<R, SR> & RefAttributes<HTMLDivElement>) => JSX.Element;
export declare const Cell: <R, SR>(props: CellRendererProps<R, SR>) => React.JSX.Element;
export declare interface CellClickArgs<TRow, TSummaryRow = unknown> {
rowIdx: number;
row: TRow;
column: CalculatedColumn<TRow, TSummaryRow>;
selectCell: (enableEditor?: boolean) => void;
@@ -61,7 +60,7 @@ export declare type CellKeyDownArgs<TRow, TSummaryRow = unknown> = SelectCellKey
export declare type CellMouseEvent = CellEvent<React.MouseEvent<HTMLDivElement>>;
export declare interface CellRendererProps<TRow, TSummaryRow> extends Pick<RenderRowProps<TRow, TSummaryRow>, 'row' | 'rowIdx' | 'selectCell'>, Omit_2<React.HTMLAttributes<HTMLDivElement>, 'style' | 'children' | 'onClick' | 'onDoubleClick' | 'onContextMenu'> {
export declare interface CellRendererProps<TRow, TSummaryRow> extends Pick<RenderRowProps<TRow, TSummaryRow>, 'row' | 'rowIdx' | 'selectCell'>, Omit_2<React.ComponentProps<'div'>, 'children' | 'onClick' | 'onDoubleClick' | 'onContextMenu'> {
column: CalculatedColumn<TRow, TSummaryRow>;
colSpan: number | undefined;
isCopied: boolean;
@@ -75,7 +74,7 @@ export declare interface CellRendererProps<TRow, TSummaryRow> extends Pick<Rende
export declare interface CellSelectArgs<TRow, TSummaryRow = unknown> {
rowIdx: number;
row: TRow;
row: TRow | undefined;
column: CalculatedColumn<TRow, TSummaryRow>;
}
@@ -94,19 +93,25 @@ export declare interface Column<TRow, TSummaryRow = unknown> {
readonly name: string | ReactElement;
/** A unique key to distinguish each column */
readonly key: string;
/** Column width. If not specified, it will be determined automatically based on grid width and specified widths of other columns */
/**
* Column width. If not specified, it will be determined automatically based on grid width and specified widths of other columns
* @default 'auto'
*/
readonly width?: Maybe<number | string>;
/** Minimum column width in px. */
/**
* Minimum column width in px
* @default '50px'
*/
readonly minWidth?: Maybe<number>;
/** Maximum column width in px. */
readonly maxWidth?: Maybe<number>;
readonly cellClass?: Maybe<string | ((row: TRow) => Maybe<string>)>;
readonly headerCellClass?: Maybe<string>;
readonly summaryCellClass?: Maybe<string | ((row: TSummaryRow) => Maybe<string>)>;
/** Render function used to render the content of the column's header cell */
readonly renderHeaderCell?: Maybe<(props: RenderHeaderCellProps<TRow, TSummaryRow>) => ReactNode>;
/** Render function used to render the content of cells */
readonly renderCell?: Maybe<(props: RenderCellProps<TRow, TSummaryRow>) => ReactNode>;
/** Render function used to render the content of the column's header cell */
readonly renderHeaderCell?: Maybe<(props: RenderHeaderCellProps<TRow, TSummaryRow>) => ReactNode>;
/** Render function used to render the content of summary cells */
readonly renderSummaryCell?: Maybe<(props: RenderSummaryCellProps<TSummaryRow, TRow>) => ReactNode>;
/** Render function used to render the content of group cells */
@@ -153,16 +158,25 @@ export declare interface CopyEvent<TRow> {
sourceRow: TRow;
}
export declare const DataGridDefaultRenderersProvider: Provider<Maybe<Renderers<any, any>>>;
/**
* Main API Component to render a data grid of rows and columns
*
* @example
*
* <DataGrid columns={columns} rows={rows} />
*/
export declare function DataGrid<R, SR = unknown, K extends Key = Key>(props: DataGridProps<R, SR, K>): JSX.Element;
export declare const DataGridDefaultRenderersContext: Context<Maybe<Renderers<any, any>>>;
export declare interface DataGridHandle {
element: HTMLDivElement | null;
selectedCell: Position;
scrollToCell: (position: PartialPosition) => void;
selectCell: (position: Position, enableEditor?: Maybe<boolean>) => void;
}
export declare interface DataGridProps<R, SR = unknown, K extends Key = Key> extends SharedDivProps {
ref?: Maybe<React.Ref<DataGridHandle>>;
/**
* Grid and data Props
*/
@@ -204,6 +218,8 @@ export declare interface DataGridProps<R, SR = unknown, K extends Key = Key> ext
*/
/** Set of selected row keys */
selectedRows?: Maybe<ReadonlySet<K>>;
/** Determines if row selection is disabled, per row */
isRowSelectionDisabled?: Maybe<(row: NoInfer<R>) => boolean>;
/** Function called whenever row selection is changed */
onSelectedRowsChange?: Maybe<(selectedRows: Set<NoInfer<K>>) => void>;
/** Used for multi column sorting */
@@ -228,7 +244,7 @@ export declare interface DataGridProps<R, SR = unknown, K extends Key = Key> ext
/** Called when the grid is scrolled */
onScroll?: Maybe<(event: React.UIEvent<HTMLDivElement>) => void>;
/** Called when a column is resized */
onColumnResize?: Maybe<(idx: number, width: number) => void>;
onColumnResize?: Maybe<(column: CalculatedColumn<R, SR>, width: number) => void>;
/** Called when a column is reordered */
onColumnsReorder?: Maybe<(sourceColumnKey: string, targetColumnKey: string) => void>;
/**
@@ -236,6 +252,10 @@ export declare interface DataGridProps<R, SR = unknown, K extends Key = Key> ext
*/
/** @default true */
enableVirtualization?: Maybe<boolean>;
/**
* The minimum number of rows to render when virtualization is enabled
*/
minimumRowsToRender?: Maybe<number>;
/**
* Miscellaneous
*/
@@ -244,12 +264,10 @@ export declare interface DataGridProps<R, SR = unknown, K extends Key = Key> ext
/** @default 'ltr' */
direction?: Maybe<Direction>;
'data-testid'?: Maybe<string>;
'data-cy'?: Maybe<string>;
}
declare const _default: <R, SR = unknown, K extends Key = Key>(props: DataGridProps<R, SR, K> & RefAttributes<DataGridHandle>) => JSX.Element;
export default _default;
declare type DefaultColumnOptions<R, SR> = Pick<Column<R, SR>, 'renderCell' | 'width' | 'minWidth' | 'maxWidth' | 'resizable' | 'sortable' | 'draggable'>;
export declare type DefaultColumnOptions<R, SR> = Pick<Column<R, SR>, 'renderCell' | 'renderHeaderCell' | 'width' | 'minWidth' | 'maxWidth' | 'resizable' | 'sortable' | 'draggable'>;
declare type Direction = 'ltr' | 'rtl';
@@ -296,7 +314,7 @@ export declare interface PasteEvent<TRow> {
targetRow: TRow;
}
export declare interface Position {
declare interface Position {
readonly idx: number;
readonly rowIdx: number;
}
@@ -310,24 +328,26 @@ export declare interface RenderCellProps<TRow, TSummaryRow = unknown> {
onRowChange: (row: TRow) => void;
}
export declare function renderCheckbox({ onChange, ...props }: RenderCheckboxProps): JSX_2.Element;
export declare function renderCheckbox({ onChange, indeterminate, ...props }: RenderCheckboxProps): JSX.Element;
export declare interface RenderCheckboxProps extends Pick<React.InputHTMLAttributes<HTMLInputElement>, 'aria-label' | 'aria-labelledby' | 'checked' | 'tabIndex' | 'disabled'> {
export declare interface RenderCheckboxProps extends Pick<React.ComponentProps<'input'>, 'aria-label' | 'aria-labelledby' | 'checked' | 'tabIndex' | 'disabled'> {
indeterminate?: boolean | undefined;
onChange: (checked: boolean, shift: boolean) => void;
}
export declare interface RenderEditCellProps<TRow, TSummaryRow = unknown> {
column: CalculatedColumn<TRow, TSummaryRow>;
row: TRow;
rowIdx: number;
onRowChange: (row: TRow, commitChanges?: boolean) => void;
onClose: (commitChanges?: boolean, shouldFocusCell?: boolean) => void;
}
export declare interface Renderers<TRow, TSummaryRow> {
renderCell?: Maybe<(key: Key, props: CellRendererProps<TRow, TSummaryRow>) => ReactNode>;
renderCheckbox?: Maybe<(props: RenderCheckboxProps) => ReactNode>;
renderRow?: Maybe<(key: Key, props: RenderRowProps<TRow, TSummaryRow>) => ReactNode>;
renderSortStatus?: Maybe<(props: RenderSortStatusProps) => ReactNode>;
renderCell?: Maybe<(key: Key, props: CellRendererProps<TRow, TSummaryRow>) => ReactNode>;
noRowsFallback?: Maybe<ReactNode>;
}
@@ -341,7 +361,7 @@ export declare interface RenderGroupCellProps<TRow, TSummaryRow = unknown> {
toggleGroup: () => void;
}
export declare function renderHeaderCell<R, SR>({ column, sortDirection, priority }: RenderHeaderCellProps<R, SR>): string | JSX_2.Element;
export declare function renderHeaderCell<R, SR>({ column, sortDirection, priority }: RenderHeaderCellProps<R, SR>): string | JSX.Element;
export declare interface RenderHeaderCellProps<TRow, TSummaryRow = unknown> {
column: CalculatedColumn<TRow, TSummaryRow>;
@@ -361,7 +381,7 @@ export declare interface RenderRowProps<TRow, TSummaryRow = unknown> extends Bas
setDraggedOverRowIdx: ((overRowIdx: number) => void) | undefined;
}
export declare function renderSortIcon({ sortDirection }: RenderSortIconProps): JSX_2.Element | null;
export declare function renderSortIcon({ sortDirection }: RenderSortIconProps): JSX.Element | null;
export declare interface RenderSortIconProps {
sortDirection: SortDirection | undefined;
@@ -382,11 +402,11 @@ export declare interface RenderSummaryCellProps<TSummaryRow, TRow = unknown> {
tabIndex: number;
}
export declare function renderToggleGroup<R, SR>(props: RenderGroupCellProps<R, SR>): JSX_2.Element;
export declare function renderToggleGroup<R, SR>(props: RenderGroupCellProps<R, SR>): JSX.Element;
export declare function renderValue<R, SR>(props: RenderCellProps<R, SR>): ReactNode;
export declare const Row: <R, SR>(props: RenderRowProps<R, SR> & RefAttributes<HTMLDivElement>) => JSX.Element;
export declare const Row: <R, SR>(props: RenderRowProps<R, SR>) => React.JSX.Element;
export declare type RowHeightArgs<TRow> = {
type: 'ROW';
@@ -401,13 +421,12 @@ export declare interface RowsChangeData<R, SR = unknown> {
column: CalculatedColumn<R, SR>;
}
export declare const SELECT_COLUMN_KEY = "select-row";
export declare const SELECT_COLUMN_KEY = "rdg-select-column";
export declare function SelectCellFormatter({ value, tabIndex, disabled, onChange, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy }: SelectCellFormatterProps): ReactNode;
export declare function SelectCellFormatter({ value, tabIndex, indeterminate, disabled, onChange, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy }: SelectCellFormatterProps): ReactNode;
declare interface SelectCellFormatterProps extends SharedInputProps {
value: boolean;
onChange: (value: boolean, isShiftClick: boolean) => void;
}
declare interface SelectCellKeyDownArgs<TRow, TSummaryRow = unknown> {
@@ -420,19 +439,19 @@ declare interface SelectCellKeyDownArgs<TRow, TSummaryRow = unknown> {
export declare const SelectColumn: Column<any, any>;
export declare type SelectRowEvent<TRow> = {
type: 'HEADER';
export declare interface SelectHeaderRowEvent {
checked: boolean;
} | {
type: 'ROW';
}
export declare interface SelectRowEvent<TRow> {
row: TRow;
checked: boolean;
isShiftClick: boolean;
};
}
declare type SharedDivProps = Pick<React.HTMLAttributes<HTMLDivElement>, 'role' | 'aria-label' | 'aria-labelledby' | 'aria-describedby' | 'aria-rowcount' | 'className' | 'style'>;
declare type SharedDivProps = Pick<React.ComponentProps<'div'>, 'role' | 'aria-label' | 'aria-labelledby' | 'aria-description' | 'aria-describedby' | 'aria-rowcount' | 'className' | 'style'>;
declare type SharedInputProps = Pick<RenderCheckboxProps, 'disabled' | 'tabIndex' | 'aria-label' | 'aria-labelledby'>;
declare type SharedInputProps = Pick<RenderCheckboxProps, 'disabled' | 'tabIndex' | 'aria-label' | 'aria-labelledby' | 'indeterminate' | 'onChange'>;
export declare interface SortColumn {
readonly columnKey: string;
@@ -441,13 +460,13 @@ export declare interface SortColumn {
export declare type SortDirection = 'ASC' | 'DESC';
export declare function textEditor<TRow, TSummaryRow>({ row, column, onRowChange, onClose }: RenderEditCellProps<TRow, TSummaryRow>): JSX_2.Element;
export declare function textEditor<TRow, TSummaryRow>({ row, column, onRowChange, onClose }: RenderEditCellProps<TRow, TSummaryRow>): JSX.Element;
export declare function ToggleGroup<R, SR>({ groupKey, isExpanded, tabIndex, toggleGroup }: RenderGroupCellProps<R, SR>): JSX_2.Element;
export declare function ToggleGroup<R, SR>({ groupKey, isExpanded, tabIndex, toggleGroup }: RenderGroupCellProps<R, SR>): JSX.Element;
export declare const TreeDataGrid: <R, SR = unknown, K extends Key = Key>(props: TreeDataGridProps<R, SR, K> & RefAttributes<DataGridHandle>) => JSX.Element;
export declare function TreeDataGrid<R, SR = unknown, K extends Key = Key>({ columns: rawColumns, rows: rawRows, rowHeight: rawRowHeight, rowKeyGetter: rawRowKeyGetter, onCellKeyDown: rawOnCellKeyDown, onRowsChange, selectedRows: rawSelectedRows, onSelectedRowsChange: rawOnSelectedRowsChange, renderers, groupBy: rawGroupBy, rowGrouper, expandedGroupIds, onExpandedGroupIdsChange, ...props }: TreeDataGridProps<R, SR, K>): JSX.Element;
export declare interface TreeDataGridProps<R, SR = unknown, K extends Key = Key> extends Omit_2<DataGridProps<R, SR, K>, 'columns' | 'role' | 'aria-rowcount' | 'rowHeight' | 'onFill'> {
export declare interface TreeDataGridProps<R, SR = unknown, K extends Key = Key> extends Omit_2<DataGridProps<R, SR, K>, 'columns' | 'role' | 'aria-rowcount' | 'rowHeight' | 'onFill' | 'isRowSelectionDisabled'> {
columns: readonly Column<NoInfer<R>, NoInfer<SR>>[];
rowHeight?: Maybe<number | ((args: RowHeightArgs<NoInfer<R>>) => number)>;
groupBy: readonly string[];
@@ -456,6 +475,16 @@ export declare interface TreeDataGridProps<R, SR = unknown, K extends Key = Key>
onExpandedGroupIdsChange: (expandedGroupIds: Set<unknown>) => void;
}
export declare function useRowSelection<R>(): [boolean, (selectRowEvent: SelectRowEvent<R>) => void];
export declare function useHeaderRowSelection(): {
isIndeterminate: boolean;
isRowSelected: boolean;
onRowSelectionChange: (selectRowEvent: SelectHeaderRowEvent) => void;
};
export declare function useRowSelection(): {
isRowSelectionDisabled: boolean;
isRowSelected: boolean;
onRowSelectionChange: (selectRowEvent: SelectRowEvent<any>) => void;
};
export { }
@@ -15,7 +15,7 @@
Root;
}
.mlln6zg7-0-0-beta-44 {
.mlln6zg7-0-0-beta-50 {
@layer rdg.MeasuringCell {
contain: strict;
grid-row: 1;
@@ -24,13 +24,13 @@
}
.cj343x07-0-0-beta-44 {
.cj343x07-0-0-beta-50 {
@layer rdg.Cell {
/* max-content does not work with size containment
* dynamically switching between different containment styles incurs a heavy relayout penalty
* Chromium bug: at odd zoom levels or subpixel positioning,
* layout/paint/style containment can make cell borders disappear
* https://bugs.chromium.org/p/chromium/issues/detail?id=1326946
* https://issues.chromium.org/issues/40840864
*/
position: relative; /* needed for absolute positioning to work */
padding-block: 0;
@@ -38,6 +38,7 @@
border-inline-end: 1px solid var(--rdg-border-color);
border-block-end: 1px solid var(--rdg-border-color);
grid-row-start: var(--rdg-grid-row-start);
align-content: center;
background-color: inherit;
white-space: nowrap;
@@ -52,7 +53,7 @@
}
}
.csofj7r7-0-0-beta-44 {
.csofj7r7-0-0-beta-50 {
@layer rdg.Cell {
position: sticky;
/* Should have a higher value than 0 to show up above unfrozen cells */
@@ -66,63 +67,32 @@
}
.c1bn88vv7-0-0-beta-44 {
@layer rdg.CheckboxLabel {
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
inset: 0;
margin-inline-end: 1px; /* align checkbox in row group cell */
}
}
.c1qt073l7-0-0-beta-44 {
.c1bn88vv7-0-0-beta-50 {
@layer rdg.CheckboxInput {
all: unset;
}
}
.cf71kmq7-0-0-beta-44 {
@layer rdg.CheckboxIcon {
content: '';
display: block;
margin: auto;
inline-size: 20px;
block-size: 20px;
border: 2px solid var(--rdg-border-color);
background-color: var(--rdg-background-color);
.c1qt073l7-0-0-beta-44:checked + & {
background-color: var(--rdg-checkbox-color);
outline: 4px solid var(--rdg-background-color);
outline-offset: -6px;
&:focus-visible {
outline: 2px solid var(--rdg-checkbox-focus-color);
outline-offset: -3px;
}
.c1qt073l7-0-0-beta-44:focus + & {
border-color: var(--rdg-checkbox-focus-color);
}
}
}
.c1lwve4p7-0-0-beta-44 {
@layer rdg.CheckboxLabel {
cursor: default;
.cf71kmq7-0-0-beta-44 {
border-color: var(--rdg-checkbox-disabled-border-color);
background-color: var(--rdg-checkbox-disabled-background-color);
&:enabled {
cursor: pointer;
}
}
}
.g1s9ylgp7-0-0-beta-44 {
.g1s9ylgp7-0-0-beta-50 {
@layer rdg.GroupCellContent {
outline: none;
}
}
.cz54e4y7-0-0-beta-44 {
.cz54e4y7-0-0-beta-50 {
@layer rdg.GroupCellCaret {
margin-inline-start: 4px;
stroke: currentColor;
@@ -137,24 +107,39 @@
}
.c6ra8a37-0-0-beta-44 {
.h44jtk67-0-0-beta-50 {
@layer rdg.SortableHeaderCell {
display: flex;
}
}
.hcgkhxz7-0-0-beta-50 {
@layer rdg.SortableHeaderCellName {
flex-grow: 1;
overflow: clip;
text-overflow: ellipsis;
}
}
.c6ra8a37-0-0-beta-50 {
@layer rdg.Cell {
background-color: #ccccff;
}
}
.cq910m07-0-0-beta-44 {
.cq910m07-0-0-beta-50 {
@layer rdg.Cell {
background-color: #ccccff;
&.c6ra8a37-0-0-beta-44 {
&.c6ra8a37-0-0-beta-50 {
background-color: #9999ff;
}
}
}
.c1w9bbhr7-0-0-beta-44 {
.c1w9bbhr7-0-0-beta-50 {
@layer rdg.DragHandle {
--rdg-drag-handle-size: 8px;
z-index: 0;
@@ -172,7 +157,7 @@
}
}
.c1creorc7-0-0-beta-44 {
.c1creorc7-0-0-beta-50 {
@layer rdg.DragHandle {
z-index: 1;
position: sticky;
@@ -180,41 +165,26 @@
}
.cis5rrm7-0-0-beta-44 {
.cis5rrm7-0-0-beta-50 {
@layer rdg.EditCell {
padding: 0;
}
}
.h44jtk67-0-0-beta-44 {
@layer rdg.SortableHeaderCell {
display: flex;
}
}
.hcgkhxz7-0-0-beta-44 {
@layer rdg.SortableHeaderCellName {
flex-grow: 1;
overflow: clip;
text-overflow: ellipsis;
}
}
.c6l2wv17-0-0-beta-44 {
.c6l2wv17-0-0-beta-50 {
@layer rdg.HeaderCell {
cursor: pointer;
}
}
.c1kqdw7y7-0-0-beta-44 {
.c1kqdw7y7-0-0-beta-50 {
@layer rdg.HeaderCell {
touch-action: none;
}
}
.r1y6ywlx7-0-0-beta-44 {
.r1y6ywlx7-0-0-beta-50 {
@layer rdg.HeaderCell {
cursor: col-resize;
position: absolute;
@@ -225,19 +195,18 @@
}
}
.c1bezg5o7-0-0-beta-44 {
.c1bezg5o7-0-0-beta-50 {
opacity: 0.5;
}
.c1vc96037-0-0-beta-44 {
.c1vc96037-0-0-beta-50 {
background-color: var(--rdg-header-draggable-background-color);
}
.r1upfr807-0-0-beta-44 {
.r1upfr807-0-0-beta-50 {
@layer rdg.Row {
display: contents;
line-height: var(--rdg-row-height);
background-color: var(--rdg-background-color);
&:hover {
@@ -254,19 +223,19 @@
}
}
.r190mhd37-0-0-beta-44 {
.r190mhd37-0-0-beta-50 {
@layer rdg.FocusSink {
outline: 2px solid var(--rdg-selection-color);
outline-offset: -2px;
}
}
.r139qu9m7-0-0-beta-44 {
.r139qu9m7-0-0-beta-50 {
@layer rdg.FocusSink {
&::before {
content: '';
display: inline-block;
height: 100%;
block-size: 100%;
position: sticky;
inset-inline-start: 0;
border-inline-start: 2px solid var(--rdg-selection-color);
@@ -275,27 +244,26 @@
}
.h10tskcx7-0-0-beta-44 {
.h10tskcx7-0-0-beta-50 {
@layer rdg.HeaderRow {
display: contents;
line-height: var(--rdg-header-row-height);
background-color: var(--rdg-header-background-color);
font-weight: bold;
& > .cj343x07-0-0-beta-44 {
& > .cj343x07-0-0-beta-50 {
/* Should have a higher value than 1 to show up above regular cells and the focus sink */
z-index: 2;
position: sticky;
}
& > .csofj7r7-0-0-beta-44 {
& > .csofj7r7-0-0-beta-50 {
z-index: 3;
}
}
}
.a3ejtar7-0-0-beta-44 {
.a3ejtar7-0-0-beta-50 {
@layer rdg.SortIcon {
fill: currentColor;
@@ -306,7 +274,7 @@
}
.rnvodz57-0-0-beta-44 {
.rnvodz57-0-0-beta-50 {
@layer rdg.Defaults {
*,
*::before,
@@ -316,14 +284,19 @@
}
@layer rdg.Root {
--rdg-color: #000; --rdg-border-color: #ddd; --rdg-summary-border-color: #aaa; --rdg-background-color: hsl(0deg 0% 100%); --rdg-header-background-color: hsl(0deg 0% 97.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 90.5%); --rdg-row-hover-background-color: hsl(0deg 0% 96%); --rdg-row-selected-background-color: hsl(207deg 76% 92%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 88%); --rdg-checkbox-color: hsl(207deg 100% 29%); --rdg-checkbox-focus-color: hsl(207deg 100% 69%); --rdg-checkbox-disabled-border-color: #ccc; --rdg-checkbox-disabled-background-color: #ddd;
--rdg-color: #000; --rdg-border-color: #ddd; --rdg-summary-border-color: #aaa; --rdg-background-color: hsl(0deg 0% 100%); --rdg-header-background-color: hsl(0deg 0% 97.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 90.5%); --rdg-row-hover-background-color: hsl(0deg 0% 96%); --rdg-row-selected-background-color: hsl(207deg 76% 92%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 88%); --rdg-checkbox-focus-color: hsl(207deg 100% 69%);
--rdg-selection-color: #66afe9;
--rdg-font-size: 14px;
--rdg-cell-frozen-box-shadow: calc(2px * var(--rdg-sign)) 0 5px -2px rgba(136, 136, 136, 0.3);
--rdg-cell-frozen-box-shadow: 2px 0 5px -2px rgba(136, 136, 136, 0.3);
&:dir(rtl) {
--rdg-cell-frozen-box-shadow: -2px 0 5px -2px rgba(136, 136, 136, 0.3);
}
display: grid;
color-scheme: var(--rdg-color-scheme, light dark);
accent-color: light-dark(hsl(207deg 100% 29%), hsl(207deg 100% 79%));
/* https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context */
/* We set a stacking context so internal elements don't render on top of external elements. */
@@ -347,7 +320,7 @@
&.rdg-dark {
--rdg-color-scheme: dark;
--rdg-color: #ddd; --rdg-border-color: #444; --rdg-summary-border-color: #555; --rdg-background-color: hsl(0deg 0% 13%); --rdg-header-background-color: hsl(0deg 0% 10.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 17.5%); --rdg-row-hover-background-color: hsl(0deg 0% 9%); --rdg-row-selected-background-color: hsl(207deg 76% 42%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 38%); --rdg-checkbox-color: hsl(207deg 100% 79%); --rdg-checkbox-focus-color: hsl(207deg 100% 89%); --rdg-checkbox-disabled-border-color: #000; --rdg-checkbox-disabled-background-color: #333;
--rdg-color: #ddd; --rdg-border-color: #444; --rdg-summary-border-color: #555; --rdg-background-color: hsl(0deg 0% 13%); --rdg-header-background-color: hsl(0deg 0% 10.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 17.5%); --rdg-row-hover-background-color: hsl(0deg 0% 9%); --rdg-row-selected-background-color: hsl(207deg 76% 42%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 38%); --rdg-checkbox-focus-color: hsl(207deg 100% 89%);
}
&.rdg-light {
@@ -356,35 +329,35 @@
@media (prefers-color-scheme: dark) {
&:not(.rdg-light) {
--rdg-color: #ddd; --rdg-border-color: #444; --rdg-summary-border-color: #555; --rdg-background-color: hsl(0deg 0% 13%); --rdg-header-background-color: hsl(0deg 0% 10.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 17.5%); --rdg-row-hover-background-color: hsl(0deg 0% 9%); --rdg-row-selected-background-color: hsl(207deg 76% 42%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 38%); --rdg-checkbox-color: hsl(207deg 100% 79%); --rdg-checkbox-focus-color: hsl(207deg 100% 89%); --rdg-checkbox-disabled-border-color: #000; --rdg-checkbox-disabled-background-color: #333;
--rdg-color: #ddd; --rdg-border-color: #444; --rdg-summary-border-color: #555; --rdg-background-color: hsl(0deg 0% 13%); --rdg-header-background-color: hsl(0deg 0% 10.5%); --rdg-header-draggable-background-color: hsl(0deg 0% 17.5%); --rdg-row-hover-background-color: hsl(0deg 0% 9%); --rdg-row-selected-background-color: hsl(207deg 76% 42%); --rdg-row-selected-hover-background-color: hsl(207deg 76% 38%); --rdg-checkbox-focus-color: hsl(207deg 100% 89%);
}
}
> :nth-last-child(1 of .rdg-top-summary-row) {
> .cj343x07-0-0-beta-44 {
> .cj343x07-0-0-beta-50 {
border-block-end: 2px solid var(--rdg-summary-border-color);
}
}
> :nth-child(1 of .rdg-bottom-summary-row) {
> .cj343x07-0-0-beta-44 {
> .cj343x07-0-0-beta-50 {
border-block-start: 2px solid var(--rdg-summary-border-color);
}
}
}
}
.vlqv91k7-0-0-beta-44 {
.vlqv91k7-0-0-beta-50 {
@layer rdg.Root {
user-select: none;
& .r1upfr807-0-0-beta-44 {
& .r1upfr807-0-0-beta-50 {
cursor: move;
}
}
}
.f1lsfrzw7-0-0-beta-44 {
.f1lsfrzw7-0-0-beta-50 {
@layer rdg.FocusSink {
grid-column: 1/-1;
pointer-events: none;
@@ -393,7 +366,7 @@
}
}
.f1cte0lg7-0-0-beta-44 {
.f1cte0lg7-0-0-beta-50 {
@layer rdg.FocusSink {
/* Should have a higher value than 3 to show up above header and summary rows */
z-index: 3;
@@ -401,7 +374,7 @@
}
.s8wc6fl7-0-0-beta-44 {
.s8wc6fl7-0-0-beta-50 {
@layer rdg.SummaryCell {
inset-block-start: var(--rdg-summary-row-top);
inset-block-end: var(--rdg-summary-row-bottom);
@@ -409,44 +382,42 @@
}
.skuhp557-0-0-beta-44 {
.skuhp557-0-0-beta-50 {
@layer rdg.SummaryRow {
line-height: var(--rdg-summary-row-height);
> .cj343x07-0-0-beta-44 {
> .cj343x07-0-0-beta-50 {
position: sticky;
}
}
}
.tf8l5ub7-0-0-beta-44 {
.tf8l5ub7-0-0-beta-50 {
@layer rdg.SummaryRow {
> .cj343x07-0-0-beta-44 {
> .cj343x07-0-0-beta-50 {
z-index: 2;
}
> .csofj7r7-0-0-beta-44 {
> .csofj7r7-0-0-beta-50 {
z-index: 3;
}
}
}
.g1yxluv37-0-0-beta-44 {
.g1yxluv37-0-0-beta-50 {
@layer rdg.GroupedRow {
&:not([aria-selected='true']) {
background-color: var(--rdg-header-background-color);
}
> .cj343x07-0-0-beta-44:not(:last-child, .csofj7r7-0-0-beta-44),
> :nth-last-child(n + 2 of .csofj7r7-0-0-beta-44) {
> .cj343x07-0-0-beta-50:not(:last-child, .csofj7r7-0-0-beta-50),
> :nth-last-child(n + 2 of .csofj7r7-0-0-beta-50) {
border-inline-end: none;
}
}
}
.t7vyx3i7-0-0-beta-44 {
.t7vyx3i7-0-0-beta-50 {
@layer rdg.TextEditor {
appearance: none;
@@ -475,3 +446,6 @@
}
}
/*# sourceMappingURL=styles.css.map*/
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
{
"name": "react-data-grid",
"version": "7.0.0-beta.50",
"type": "module",
"exports": {
"./lib/styles.css": "./lib/styles.css",
".": {
"types": "./lib/index.d.ts",
"default": "./lib/bundle.js"
}
},
"browser": "./lib/bundle.js",
"main": "./lib/bundle.js",
"module": "./lib/bundle.js",
"types": "./lib/index.d.ts",
"files": [
"lib"
],
"sideEffects": [
"**/*.css"
],
"dependencies": {
"clsx": "^2.0.0"
},
"peerDependencies": {
"react": "^19.0",
"react-dom": "^19.0"
}
}
@@ -0,0 +1,41 @@
{
"name": "@dbeaver/react-data-grid",
"type": "module",
"sideEffects": [],
"exports": {
".": "./lib/index.js",
"./*.css": "./src/*.css",
"./*": "./lib/*.js"
},
"scripts": {
"clear": "rimraf lib"
},
"files": [
"package.json",
"LICENSE",
"README.md",
"CHANGELOG.md",
"lib",
"!lib/**/*.d.ts.map",
"!lib/**/*.test.js",
"!lib/**/*.test.d.ts",
"!lib/**/*.test.d.ts.map",
"!lib/**/*.test.js.map",
"!lib/tests",
"!.tsbuildinfo"
],
"packageManager": "yarn@4.6.0",
"devDependencies": {
"@dbeaver/tsconfig": "workspace:^",
"@types/react": "^19",
"@types/react-dom": "^19",
"rimraf": "^6",
"typescript": "^5"
},
"dependencies": {
"@dbeaver/ui-kit": "workspace:^",
"react": "^19",
"react-data-grid": "file:./artifacts",
"react-dom": "^19"
}
}
@@ -0,0 +1,81 @@
import { memo, use, useMemo } from 'react';
import { Cell, type CellRendererProps } from 'react-data-grid';
import { DataGridCellContext, type IDataGridCellRenderer } from './DataGridCellContext.js';
import { createCellMouseEvent } from './eventUtils.js';
import { DataGridCellInnerContext, type IDataGridCellInnerContext } from './DataGridCellInnerContext.js';
import { useGridReactiveValue } from './useGridReactiveValue.js';
export const BaseCell = memo(function BaseCell<TRow, TSummaryRow>(props: CellRendererProps<TRow, TSummaryRow>) {
const cellContext = use(DataGridCellContext);
const tooltip = useGridReactiveValue(cellContext?.cellTooltip, props.rowIdx, props.column.idx);
function handleClick(event: React.MouseEvent<HTMLDivElement>) {
props.onClick?.(
{
rowIdx: props.rowIdx,
row: props.row,
column: props.column,
selectCell(enableEditor) {
props.selectCell({ rowIdx: props.rowIdx, idx: props.column.idx }, enableEditor);
},
},
createCellMouseEvent(event),
);
}
function handleDoubleClick(event: React.MouseEvent<HTMLDivElement>) {
props.onDoubleClick?.(
{
rowIdx: props.rowIdx,
row: props.row,
column: props.column,
selectCell(enableEditor) {
props.selectCell({ rowIdx: props.rowIdx, idx: props.column.idx }, enableEditor);
},
},
createCellMouseEvent(event),
);
}
function handleContextMenu(event: React.MouseEvent<HTMLDivElement>) {
props.onContextMenu?.(
{
rowIdx: props.rowIdx,
row: props.row,
column: props.column,
selectCell(enableEditor) {
props.selectCell({ rowIdx: props.rowIdx, idx: props.column.idx }, enableEditor);
},
},
createCellMouseEvent(event),
);
}
const mappedProps = useMemo(
() => ({ ...props, isFocused: props.isCellSelected, onClick: handleClick, onDoubleClick: handleDoubleClick, onContextMenu: handleContextMenu }),
Object.values(props),
);
const renderDefaultCell = useMemo<IDataGridCellRenderer>(
() =>
({ onClick, onDoubleClick, onContextMenu, ...rest }) => {
return (
<Cell
{...props}
title={tooltip}
onClick={(_, event) => onClick?.(event)}
onDoubleClick={(_, event) => onDoubleClick?.(event)}
onContextMenu={(_, event) => onContextMenu?.(event)}
{...rest}
isCellSelected={props.isCellSelected || rest.isFocused || false}
/>
);
},
[...Object.values(props), tooltip],
);
const cellElement = useGridReactiveValue(cellContext?.cellElement, props.rowIdx, props.column.idx, mappedProps, renderDefaultCell);
const innerCellContext = useMemo<IDataGridCellInnerContext>(() => ({ isFocused: props.isCellSelected }), [props.isCellSelected]);
return <DataGridCellInnerContext value={innerCellContext}>{cellElement ?? <Cell title={tooltip} {...props} />}</DataGridCellInnerContext>;
}) as <TRow, TSummaryRow>(props: CellRendererProps<TRow, TSummaryRow>) => React.ReactNode;
@@ -0,0 +1,16 @@
import { Row, type RenderRowProps } from 'react-data-grid';
import { DataGridRowContext } from './DataGridRowContext.js';
import { memo, use, useEffect } from 'react';
import { useGridReactiveValue } from './useGridReactiveValue.js';
export const BaseRow = memo(function BaseRow<TRow, TSummaryRow>(props: RenderRowProps<TRow, TSummaryRow>) {
const rowContext = use(DataGridRowContext);
const rowsCount = useGridReactiveValue(rowContext?.onScrollToBottom ? rowContext?.rowCount : undefined);
useEffect(() => {
if (rowsCount === props.rowIdx + 1) {
rowContext?.onScrollToBottom?.();
}
}, [rowsCount]);
return <Row {...props} />;
}) as <TRow, TSummaryRow>(props: RenderRowProps<TRow, TSummaryRow>) => React.ReactNode;
@@ -0,0 +1,29 @@
@import url('@dbeaver/ui-kit/index.css');
@import url('react-data-grid/lib/styles.css') layer(components);
@layer components.rdg.MeasuringCell {
[data-measuring-cell] {
max-width: var(--rdg-max-auto-size, 350px);
}
}
@layer components.rdg.Cell {
@media (prefers-color-scheme: dark) {
.rdg-cell-frozen {
&:nth-last-child(1 of &) {
box-shadow: none;
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
background-color: rgba(255, 255, 255, 0.02);
}
}
}
}
}
@@ -0,0 +1,157 @@
import { forwardRef, useImperativeHandle, useMemo, useRef } from 'react';
import { DataGrid as DataGridBase, type ColumnOrColumnGroup, type CellSelectArgs, type DataGridHandle } from 'react-data-grid';
import { rowRenderer } from './renderers/rowRenderer.js';
import { cellRenderer } from './renderers/cellRenderer.js';
import { DataGridCellHeaderContext, type IDataGridHeaderCellContext } from './DataGridHeaderCellContext.js';
import { DataGridCellContext, type IDataGridCellContext } from './DataGridCellContext.js';
import type { IInnerRow } from './IInnerRow.js';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
import { useGridReactiveValue } from './useGridReactiveValue.js';
import { mapCellContentRenderer } from './mapCellContentRenderer.js';
import { mapRenderHeaderCell } from './mapRenderHeaderCell.js';
import { mapEditCellRenderer } from './mapEditCellRenderer.js';
import { DataGridRowContext, type IDataGridRowContext } from './DataGridRowContext.js';
import './DataGrid.css';
export interface ICellPosition {
rowIdx: number;
colIdx: number;
}
export interface DataGridCellKeyboardEvent extends React.KeyboardEvent<HTMLDivElement> {
preventGridDefault: () => void;
isGridDefaultPrevented: () => boolean;
}
export interface DataGridProps extends IDataGridCellContext, IDataGridRowContext, IDataGridHeaderCellContext, React.PropsWithChildren {
getRowHeight?: (rowIdx: number) => number;
getRowId?: (rowIdx: number) => React.Key;
columnCount: IGridReactiveValue<number, []>;
getColumnKey?: (colIdx: number) => string;
onScroll?: (event: React.UIEvent<HTMLDivElement>) => void;
onFocus?: (position: ICellPosition) => void;
onEditorOpen?: (position: ICellPosition) => void;
onCellKeyDown?: (position: ICellPosition, event: DataGridCellKeyboardEvent) => void;
className?: string;
}
export interface DataGridRef {
selectCell: (position: ICellPosition) => void;
scrollToCell: (position: Partial<ICellPosition>) => void;
openEditor: (position: ICellPosition) => void;
}
export const DataGrid = forwardRef<DataGridRef, DataGridProps>(function DataGrid(
{
headerElement,
getHeaderWidth,
headerText,
getHeaderResizable,
getHeaderHeight,
getHeaderPinned,
cell,
cellText,
cellElement,
cellTooltip,
getCellEditable,
columnCount,
getColumnKey,
rowCount,
getRowId,
getRowHeight,
onScroll,
onScrollToBottom,
onFocus,
onCellChange,
children,
className,
onCellKeyDown,
},
ref,
) {
const rowsCount = useGridReactiveValue(rowCount);
const columnsCount = useGridReactiveValue(columnCount);
const gridKey = useRef(0);
const rowsCountRef = useRef(rowsCount);
const innerGridRef = useRef<DataGridHandle>(null);
const columns = new Array<ColumnOrColumnGroup<IInnerRow, unknown>>(columnsCount)
.fill(null as any)
.map((_, i): ColumnOrColumnGroup<IInnerRow, unknown> => {
const width = getHeaderWidth?.(i) ?? 'max-content';
return {
key: getColumnKey?.(i) ?? String(i),
name: '',
resizable: getHeaderResizable?.(i) ?? true,
width,
minWidth: 26,
editable: row => getCellEditable?.(row.idx, i) ?? false,
frozen: getHeaderPinned?.(i),
renderHeaderCell: mapRenderHeaderCell,
renderCell: mapCellContentRenderer,
renderEditCell: mapEditCellRenderer,
};
});
useImperativeHandle(ref, () => ({
selectCell: (position: ICellPosition) => {
innerGridRef.current?.selectCell({ idx: position.colIdx, rowIdx: position.rowIdx });
},
scrollToCell: (position: Partial<ICellPosition>) => {
innerGridRef.current?.scrollToCell({ idx: position.colIdx, rowIdx: position.rowIdx });
},
openEditor: (position: ICellPosition) => {
innerGridRef.current?.selectCell({ idx: position.colIdx, rowIdx: position.rowIdx }, true);
},
}));
if (rowsCountRef.current !== rowsCount) {
const previousRowCount = rowsCountRef.current;
rowsCountRef.current = rowsCount;
if (previousRowCount === 0) {
// we trigger columns size recalculation when rows are added
gridKey.current++;
}
}
const rows = useMemo(
() =>
new Array<IInnerRow>(rowsCount).fill({ idx: 0 }).map((_, i) => ({
idx: i,
})),
[rowsCount],
);
function handleCellFocus(args: CellSelectArgs<IInnerRow, unknown>) {
onFocus?.({ colIdx: args.column.idx, rowIdx: args.rowIdx });
}
return (
<DataGridRowContext value={{ rowCount, onScrollToBottom }}>
<DataGridCellContext value={{ cell, cellText, cellElement, cellTooltip, onCellChange }}>
<DataGridCellHeaderContext value={{ headerElement, headerText }}>
<DataGridBase
key={gridKey.current}
ref={innerGridRef}
columns={columns}
rows={rows}
className={className}
headerRowHeight={getHeaderHeight?.()}
onScroll={onScroll}
rowHeight={getRowHeight ? row => getRowHeight(row.idx) : undefined}
rowKeyGetter={getRowId ? row => getRowId(row.idx) : undefined}
onSelectedCellChange={handleCellFocus}
onCellKeyDown={onCellKeyDown ? (args, event) => onCellKeyDown({ rowIdx: args.rowIdx, colIdx: args.column.idx }, event) : undefined}
renderers={{
renderRow: rowRenderer,
renderCell: cellRenderer,
noRowsFallback: children,
}}
minimumRowsToRender={100}
/>
</DataGridCellHeaderContext>
</DataGridCellContext>
</DataGridRowContext>
);
});
@@ -0,0 +1,24 @@
import { createContext } from 'react';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
export interface IDataGridCellProps extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
isFocused: boolean;
}
export interface IDataGridCellRenderer {
(propsOverride: Partial<IDataGridCellProps> & { [key: string]: any }): React.ReactNode;
}
export interface IDataGridCellContext {
cellElement?: IGridReactiveValue<
React.ReactNode,
[rowIdx: number, colIdx: number, props: IDataGridCellProps, renderDefaultCell: IDataGridCellRenderer]
>;
cell?: IGridReactiveValue<React.ReactNode, [rowIdx: number, colIdx: number]>;
cellText?: IGridReactiveValue<string, [rowIdx: number, colIdx: number]>;
cellTooltip?: IGridReactiveValue<string, [rowIdx: number, colIdx: number]>;
getCellEditable?: (rowIdx: number, colIdx: number) => boolean;
onCellChange?: (rowIdx: number, colIdx: number, value: any) => void;
}
export const DataGridCellContext = createContext<IDataGridCellContext | null>(null);
@@ -0,0 +1,7 @@
import { createContext } from 'react';
export interface IDataGridCellInnerContext {
isFocused: boolean;
}
export const DataGridCellInnerContext = createContext<IDataGridCellInnerContext | null>(null);
@@ -0,0 +1,13 @@
import { createContext } from 'react';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
export interface IDataGridHeaderCellContext {
headerElement?: IGridReactiveValue<React.ReactNode, [colIdx: number]>;
headerText?: IGridReactiveValue<string, [colIdx: number]>;
getHeaderWidth?: (colIdx: number) => number | string | null;
getHeaderResizable?: (colIdx: number) => boolean;
getHeaderHeight?: () => number;
getHeaderPinned?: (colIdx: number) => boolean;
}
export const DataGridCellHeaderContext = createContext<IDataGridHeaderCellContext | null>(null);
@@ -0,0 +1,9 @@
import { createContext } from 'react';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
export interface IDataGridRowContext {
rowCount: IGridReactiveValue<number, []>;
onScrollToBottom?: () => void;
}
export const DataGridRowContext = createContext<IDataGridRowContext | null>(null);
@@ -0,0 +1,6 @@
export type IGridReactiveValueSubscribe<TArgs extends any[]> = (onValueChange: () => void, ...args: TArgs) => () => void;
export interface IGridReactiveValue<T, TArgs extends any[]> {
get(...args: TArgs): T;
subscribe: IGridReactiveValueSubscribe<TArgs>;
}
@@ -0,0 +1,3 @@
export interface IInnerRow {
idx: number;
}
@@ -0,0 +1,33 @@
:global(.rdg-cell) .editor {
appearance: none;
box-sizing: border-box;
min-height: initial;
inline-size: 100%;
block-size: 100%;
padding-block: 0;
padding-inline: 6px;
border: 2px solid #ccc;
vertical-align: top;
color: var(--rdg-color);
background-color: var(--rdg-background-color);
font: inherit;
font-family: inherit;
font-size: inherit;
line-height: inherit;
font-weight: inherit;
letter-spacing: inherit;
text-decoration: inherit;
text-transform: inherit;
&:focus {
border-color: var(--rdg-selection-color);
outline: none;
}
&::placeholder {
color: #999;
opacity: 1;
}
}
@@ -0,0 +1,39 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 { use } from 'react';
import classes from './TextEditor.module.css';
import { DataGridCellContext } from '../DataGridCellContext.js';
import { useGridReactiveValue } from '../useGridReactiveValue.js';
function autoFocusAndSelect(input: HTMLInputElement | null) {
input?.focus();
input?.select();
}
export interface IProps {
rowIdx: number;
colIdx: number;
onClose: () => void;
}
export function TextEditor({ rowIdx, colIdx, onClose }: IProps) {
const cellContext = use(DataGridCellContext);
const value = useGridReactiveValue(cellContext?.cellText, rowIdx, colIdx) ?? '';
return (
<input
className={classes['editor']}
ref={autoFocusAndSelect}
value={value}
onChange={event => cellContext?.onCellChange?.(rowIdx, colIdx, event.target.value)}
onBlur={() => onClose()}
/>
);
}
@@ -0,0 +1,25 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 { CellMouseEvent } from 'react-data-grid';
export function createCellMouseEvent<E extends React.MouseEvent<HTMLDivElement>>(event: E): CellMouseEvent {
let defaultPrevented = false;
const cellEvent = {
...event,
preventGridDefault() {
defaultPrevented = true;
},
isGridDefaultPrevented() {
return defaultPrevented;
},
};
Object.setPrototypeOf(cellEvent, Object.getPrototypeOf(event));
return cellEvent;
}
@@ -0,0 +1,27 @@
import { NullFormatter } from './NullFormatter.js';
import { Checkbox, clsx, Focusable } from '@dbeaver/ui-kit';
interface Props {
value: boolean | null;
className?: string;
onClick?: React.MouseEventHandler<HTMLElement>;
onKeyDown?: React.KeyboardEventHandler<HTMLElement>;
}
export function BooleanFormatter({ value, className, onClick, onKeyDown }: Props) {
const handleKeyDown = (event: React.KeyboardEvent<HTMLElement>) => {
if (event.code === 'Enter' || event.code === 'Space') {
event.preventDefault();
onKeyDown?.(event);
}
};
return (
<Focusable
className={clsx('tw:flex tw:items-center tw:outline-none tw:hover:cursor-pointer', className)}
onKeyDown={handleKeyDown}
onClick={onClick}
>
{value === null ? <NullFormatter /> : <Checkbox className="tw:data-disabled:opacity-100" disabled size="small" checked={value} />}
</Focusable>
);
}
@@ -0,0 +1,21 @@
import { NullFormatter } from './NullFormatter.js';
interface Props {
value: Date | null;
type?: 'time' | 'date' | 'datetime';
onClick?: React.MouseEventHandler<HTMLElement>;
}
export function DateFormatter({ value, type = 'datetime', onClick }: Props) {
if (value === null) {
return <NullFormatter />;
}
return (
<div onClick={onClick}>
{value.toLocaleString(undefined, {
dateStyle: type === 'date' ? 'long' : undefined,
timeStyle: type === 'time' ? 'long' : undefined,
})}
</div>
);
}
@@ -0,0 +1,14 @@
import { clsx } from '@dbeaver/ui-kit';
interface Props {
className?: string;
onClick?: React.MouseEventHandler<HTMLElement>;
}
export function NullFormatter({ className, onClick }: Props) {
return (
<span className={clsx('tw:uppercase', 'tw:opacity-65', className)} onClick={onClick}>
[NULL]
</span>
);
}
@@ -0,0 +1,18 @@
import { NullFormatter } from './NullFormatter.js';
interface Props {
value: number | null;
className?: string;
onClick?: React.MouseEventHandler<HTMLElement>;
}
export function NumberFormatter({ value, className, onClick }: Props) {
if (value === null) {
return <NullFormatter className={className} onClick={onClick} />;
}
return (
<div style={{ textAlign: 'right' }} className={className} onClick={onClick}>
{value.toLocaleString()}
</div>
);
}
@@ -0,0 +1,11 @@
export * from './DataGrid.js';
export * from './DataGridCellContext.js';
export * from './DataGridCellInnerContext.js';
export * from './IGridReactiveValue.js';
export * from './useCreateGridReactiveValue.js';
export * from './useGridReactiveValue.js';
export * from './formatters/NullFormatter.js';
export * from './formatters/BooleanFormatter.js';
export * from './formatters/NumberFormatter.js';
export * from './formatters/DateFormatter.js';
@@ -0,0 +1,7 @@
import type { RenderCellProps } from 'react-data-grid';
import type { IInnerRow } from './IInnerRow.js';
import { CellContentRenderer } from './renderers/CellContentRenderer.js';
export function mapCellContentRenderer({ rowIdx, column }: RenderCellProps<IInnerRow, unknown>) {
return <CellContentRenderer rowIdx={rowIdx} colIdx={column.idx} />;
}
@@ -0,0 +1,7 @@
import type { RenderEditCellProps } from 'react-data-grid';
import type { IInnerRow } from './IInnerRow.js';
import { TextEditor } from './editors/TextEditor.js';
export function mapEditCellRenderer({ rowIdx, column, onClose }: RenderEditCellProps<IInnerRow, unknown>) {
return <TextEditor rowIdx={rowIdx} colIdx={column.idx} onClose={() => onClose()} />;
}
@@ -0,0 +1,7 @@
import type { RenderHeaderCellProps } from 'react-data-grid';
import type { IInnerRow } from './IInnerRow.js';
import { HeaderCellContentRenderer } from './renderers/HeaderCellContentRenderer.js';
export function mapRenderHeaderCell({ column }: RenderHeaderCellProps<IInnerRow, unknown>) {
return <HeaderCellContentRenderer colIdx={column.idx} />;
}
@@ -0,0 +1,13 @@
import { use } from 'react';
import { DataGridCellContext } from '../DataGridCellContext.js';
import { useGridReactiveValue } from '../useGridReactiveValue.js';
export interface Props {
rowIdx: number;
colIdx: number;
}
export function CellContentRenderer({ rowIdx, colIdx }: Props) {
const cellContext = use(DataGridCellContext);
return useGridReactiveValue(cellContext?.cell, rowIdx, colIdx);
}
@@ -0,0 +1,13 @@
import { use } from 'react';
import { DataGridCellHeaderContext } from '../DataGridHeaderCellContext.js';
import { useGridReactiveValue } from '../useGridReactiveValue.js';
interface Props {
colIdx: number;
}
export function HeaderCellContentRenderer({ colIdx }: Props) {
const cellHeaderContext = use(DataGridCellHeaderContext);
const headerElement = useGridReactiveValue(cellHeaderContext?.headerElement, colIdx);
const getHeaderText = useGridReactiveValue(headerElement ? undefined : cellHeaderContext?.headerText, colIdx);
return headerElement ?? getHeaderText ?? '';
}
@@ -0,0 +1,6 @@
import type { CellRendererProps } from 'react-data-grid';
import { BaseCell } from '../BaseCell.js';
export function cellRenderer<TRow, TSummaryRow>(key: React.Key, props: CellRendererProps<TRow, TSummaryRow>) {
return <BaseCell key={key} {...props} />;
}
@@ -0,0 +1,6 @@
import type { RenderRowProps } from 'react-data-grid';
import { BaseRow } from '../BaseRow.js';
export function rowRenderer<TRow, TSummaryRow>(key: React.Key, props: RenderRowProps<TRow, TSummaryRow>) {
return <BaseRow key={key} {...props} />;
}
@@ -0,0 +1,19 @@
import { useMemo } from 'react';
import type { IGridReactiveValue, IGridReactiveValueSubscribe } from './IGridReactiveValue.js';
type NoInfer<T> = intrinsic;
export function useCreateGridReactiveValue<T, TArgs extends any[]>(
get: (...args: TArgs) => T,
subscribe: NoInfer<IGridReactiveValueSubscribe<TArgs>> | null,
deps: React.DependencyList,
): IGridReactiveValue<T, TArgs> {
const value = useMemo<IGridReactiveValue<T, TArgs>>(
() => ({
get,
subscribe: subscribe ?? (() => () => {}),
}),
deps,
);
return value;
}
@@ -0,0 +1,36 @@
import { useMemo, useSyncExternalStore } from 'react';
import type { IGridReactiveValue } from './IGridReactiveValue.js';
export function useGridReactiveValue<P extends IGridReactiveValue<any, any[]> | undefined>(
value: P,
...args: P extends IGridReactiveValue<any, infer T> ? T : never[]
): P extends IGridReactiveValue<infer T, any[]> ? T : undefined {
const mappedValue = useMemo(
() => ({
cache: null as any,
cacheInvalidated: true,
subscribe: (onValueChange: () => void) => {
if (value) {
return value.subscribe(
() => {
mappedValue.cacheInvalidated = true;
return onValueChange();
},
...args,
);
}
return () => {};
},
get: () => {
if (mappedValue.cacheInvalidated) {
mappedValue.cache = value?.get(...args);
mappedValue.cacheInvalidated = false;
}
return mappedValue.cache;
},
}),
[value, ...args],
);
return useSyncExternalStore(mappedValue.subscribe, mappedValue.get);
}
@@ -0,0 +1,21 @@
{
"extends": "@dbeaver/tsconfig/tsconfig.webview.json",
"compilerOptions": {
"tsBuildInfoFile": "./lib/.tsbuildinfo",
"rootDir": "src",
"rootDirs": [
"src"
],
"outDir": "lib",
"incremental": true,
"composite": true
},
"include": [
"src"
],
"references": [
{
"path": "../ui-kit"
}
]
}
+23
View File
@@ -0,0 +1,23 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# production
/lib
# misc
.DS_Store
.env*
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
tsconfig.tsbuildinfo
@@ -0,0 +1,2 @@
import '../src/index.css';
import './global.css';
@@ -0,0 +1,8 @@
/** @type {import('@ladle/react').UserConfig} */
export default {
addons: {
a11y: {
enabled: true,
},
},
};
@@ -0,0 +1,131 @@
@import 'tailwindcss' prefix(tw);
@layer theme {
main {
color: var(--dbv-kit-color-foreground);
background-color: var(--tw-color-gray-50);
}
a {
color: var(--tw-color-blue-600);
text-decoration: underline;
&:hover {
color: var(--tw-color-blue-700);
text-decoration-thickness: 2px;
}
}
code {
color: var(--tw-color-orange-700);
}
h1,
h2,
h3,
h3,
h5 {
font-weight: var(--tw-font-weight-semibold);
margin-block-start: 1em;
margin-block-end: 0.5em;
}
h1 {
font-size: var(--tw-text-2xl);
}
h2 {
font-size: var(--tw-text-xl);
}
h3 {
font-size: var(--tw-text-lg);
}
p {
font-size: var(--tw-text-base);
margin-block-start: 0.5em;
margin-block-end: 0.5em;
}
kbd {
background-color: #eee;
border-radius: 3px;
border: 1px solid #b4b4b4;
box-shadow:
0 1px 1px rgba(0, 0, 0, 0.2),
0 2px 0 0 rgba(255, 255, 255, 0.7) inset;
color: #333;
display: inline-block;
font-size: 0.85em;
font-weight: 700;
line-height: 1;
padding: 2px 4px;
white-space: nowrap;
}
.codeblock {
background-color: var(--tw-color-gray-100);
padding: 1em;
border-radius: 0.25em;
margin-block-start: 1em;
margin-block-end: 1em;
}
.comment {
color: var(--tw-color-gray-500);
}
.color-sample {
display: inline-block;
width: 1em;
height: 1em;
border-radius: 0.25em;
}
}
:root[data-theme='dark'] {
--dbv-kit-color-foreground: var(--tw-color-gray-200);
--dbv-kit-btn-loader-base-color: var(--tw-color-gray-900);
/* Primary Button */
--dbv-kit-btn-primary-foreground: var(--tw-color-gray-100);
--dbv-kit-btn-primary-background: var(--dbv-kit-color-primary-700);
--dbv-kit-btn-primary-background-hover: var(--dbv-kit-color-primary-600);
--dbv-kit-btn-primary-background-active: var(--dbv-kit-color-primary-500);
/* Secondary Button */
--dbv-kit-btn-secondary-foreground: var(--tw-color-gray-100);
--dbv-kit-btn-secondary-background: transparent;
--dbv-kit-btn-secondary-background-hover: var(--tw-color-gray-800);
--dbv-kit-btn-secondary-background-active: var(--tw-color-gray-700);
--dbv-kit-btn-secondary-border-color: var(--tw-color-gray-200);
/* Danger Button */
--dbv-kit-btn-danger-foreground: var(--tw-color-gray-100);
--dbv-kit-btn-danger-background: var(--tw-color-red-700);
--dbv-kit-btn-danger-background-hover: var(--tw-color-red-600);
--dbv-kit-btn-danger-background-active: var(--tw-color-red-500);
/* Input */
--dbv-kit-input-background: var(--tw-color-gray-800);
--dbv-kit-input-border-color: var(--tw-color-gray-700);
--dbv-kit-input-color: var(--tw-color-gray-100);
--dbv-kit-input-placeholder-foreground: var(--tw-color-gray-400);
main {
background-color: var(--tw-color-gray-900);
}
code {
color: var(--tw-color-orange-400);
}
a {
color: var(--tw-color-blue-300);
}
.codeblock {
background-color: var(--tw-color-gray-800);
}
}
+63
View File
@@ -0,0 +1,63 @@
# DBeaver UI Kit
#### The DBeaver UI Kit is a collection of reusable React components designed to help developers build consistent and visually appealing user interfaces.
## Using Ladle for Component Development
[Ladle](https://ladle.dev/) is a tool that allows you to develop, test, and document your React components in isolation. We use it to create a sandbox environment where you can interact with your components and ensure they work as expected.
To get started with Ladle in the DBeaver UI Kit, write in terminal:
```bash
yarn docs
```
Then open the provided URL to see components.
## How to Customize
DBeaver UI Kit components have basic styles and use some defaults from Tailwind CSS. To change styling, you can use different approaches.
### Global CSS Tokens
The UI kit uses several global CSS tokens described on the Global Tokens page. These tokens help maintain consistency across the UI components. All DBeaver UI tokens are prefixed with `--dbv-kit-`. You can use these tokens to customize the UI kit to fit your application's design. For example, changing the `--dbv-kit-font-size-base` token will change the base font size for text in the UI kit. Changing the `--dbv-kit-control-height-base` token will change all control heights. If you don't want to change all controls, you can change `--dbv-kit-control-height-small`, `--dbv-kit-control-height-medium`, or other tokens separately. They will affect only specific components.
### Component CSS Tokens
Some components have their own tokens. For example, the Button component has tokens for button sizes, padding, and colors. You can change these tokens to customize the Button component. To see the list of tokens, go to sources or start Ladle.
### Component CSS Classes
Each component in the UI kit has a default CSS class name following the `dbv-kit-[component name(in lowercase)]` naming convention that you can use to customize the component. You can find the default class name in the component's documentation.
For button:
```css
.dbv-kit-button {
/* Your custom styles */
}
```
For input:
```css
.dbv-kit-input {
/* Your custom styles */
}
```
Some components have additional classes for different states or sizes. For example, the Button component has classes for different sizes: `.dbv-kit-button--small`, `.dbv-kit-button--large`. We use the BEM convention for class names. If a component has a modifier, it will be separated by two dashes. If a component has a child element, it will be separated by two underscores, for example:
- `.dbv-kit-button__icon` - icon is a child element of the button
- `.dbv-kit-button--large` - large is a size modifier
- `.dbv-kit-button__icon--start` - icon is a child element of the button and has a start placement
Each component accepts the standard `className` and `style` props which enable using vanilla CSS, utility classes (e.g., Tailwind), CSS-in-JS (e.g., Styled Components), etc. A custom `className` can be specified and will be appended to a class list of a component:
```jsx
<Button className="my-custom-button">Button</Button>
```
```jsx
<Button style={{ background: 'red' }}>Button</Button>
```
+37
View File
@@ -0,0 +1,37 @@
{
"name": "@dbeaver/ui-kit",
"type": "module",
"version": "0.1.0",
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js",
"./*.css": "./src/*.css",
"./*": "./lib/*.js"
},
"scripts": {
"build": "tsc -b",
"docs": "ladle serve",
"clean": "rimraf --glob lib"
},
"packageManager": "yarn@4.6.0",
"devDependencies": {
"@dbeaver/tsconfig": "workspace:^",
"@ladle/react": "^5",
"@tailwindcss/vite": "^4",
"@types/react": "^19",
"@types/react-dom": "^19",
"@wroud/vite-plugin-asset-resolver": "^0",
"@wroud/vite-plugin-tsc": "^0.11.6",
"rimraf": "^6",
"tailwindcss": "^4",
"typescript": "^5",
"vite": "^6"
},
"dependencies": {
"@ariakit/react": "^0",
"clsx": "^2",
"react": "^19",
"react-dom": "^19"
}
}
@@ -0,0 +1,183 @@
@import './_base.css';
@import './_sizes.css';
@import './_variants.css';
@layer base {
.dbv-kit-button {
display: inline-flex;
text-align: center;
text-decoration: none;
cursor: pointer;
user-select: none;
position: relative;
justify-content: center;
align-items: center;
white-space: nowrap;
height: var(--dbv-kit-btn-height);
padding-inline: var(--dbv-kit-btn-padding-inline);
gap: var(--dbv-kit-btn-gap);
background-color: var(--dbv-kit-btn-background);
color: var(--dbv-kit-btn-foreground);
border-radius: var(--dbv-kit-btn-border-radius);
border-width: var(--dbv-kit-btn-border-width);
border-color: var(--dbv-kit-btn-border-color);
border-style: var(--dbv-kit-btn-border-style);
font-size: var(--dbv-kit-btn-font-size);
font-weight: var(--dbv-kit-btn-font-weight);
&:focus-visible,
&[data-focus-visible] {
outline: var(--dbv-kit-control-outline-width) solid var(--dbv-kit-btn-outline-color);
outline-offset: var(--dbv-kit-btn-outline-offset);
}
&:hover {
@media (hover: hover) {
background-color: var(--dbv-kit-btn-background-hover);
}
}
&:active,
&[data-active] {
background-color: var(--dbv-kit-btn-background-active);
}
&:disabled {
opacity: var(--dbv-kit-control-disabled-opacity);
}
}
/* ---------------------------- */
/* Sizes */
.dbv-kit-button--small {
--dbv-kit-btn-padding-inline: var(--dbv-kit-btn-small-padding-inline);
--dbv-kit-btn-font-size: var(--dbv-kit-btn-small-font-size);
--dbv-kit-btn-height: var(--dbv-kit-btn-small-height);
--dbv-kit-btn-gap: var(--dbv-kit-btn-small-gap);
--dbv-kit-btn-icon-margin-inline: calc(var(--dbv-kit-btn-small-padding-inline) * -0.25);
}
.dbv-kit-button--medium {
--dbv-kit-btn-padding-inline: var(--dbv-kit-btn-medium-padding-inline);
--dbv-kit-btn-font-size: var(--dbv-kit-btn-medium-font-size);
--dbv-kit-btn-height: var(--dbv-kit-btn-medium-height);
--dbv-kit-btn-gap: var(--dbv-kit-btn-medium-gap);
--dbv-kit-btn-icon-margin-inline: calc(var(--dbv-kit-btn-medium-padding-inline) * -0.25);
}
.dbv-kit-button--large {
--dbv-kit-btn-padding-inline: var(--dbv-kit-btn-large-padding-inline);
--dbv-kit-btn-font-size: var(--dbv-kit-btn-large-font-size);
--dbv-kit-btn-height: var(--dbv-kit-btn-large-height);
--dbv-kit-btn-gap: var(--dbv-kit-btn-large-gap);
--dbv-kit-btn-icon-margin-inline: calc(var(--dbv-kit-btn-large-padding-inline) * -0.25);
}
.dbv-kit-button--xlarge {
--dbv-kit-btn-padding-inline: var(--dbv-kit-btn-xlarge-padding-inline);
--dbv-kit-btn-font-size: var(--dbv-kit-btn-xlarge-font-size);
--dbv-kit-btn-height: var(--dbv-kit-btn-xlarge-height);
--dbv-kit-btn-gap: var(--dbv-kit-btn-xlarge-gap);
--dbv-kit-btn-icon-margin-inline: calc(var(--dbv-kit-btn-xlarge-padding-inline) * -0.25);
}
/* ---------------------------- */
/* Variants */
.dbv-kit-button--primary {
--dbv-kit-btn-background: var(--dbv-kit-btn-primary-background);
--dbv-kit-btn-foreground: var(--dbv-kit-btn-primary-foreground);
--dbv-kit-btn-background-hover: var(--dbv-kit-btn-primary-background-hover);
--dbv-kit-btn-background-active: var(--dbv-kit-btn-primary-background-active);
--dbv-kit-btn-loader-color: var(--dbv-kit-btn-background-hover);
--dbv-kit-btn-loader-background: var(--dbv-kit-btn-loader-base-color);
}
.dbv-kit-button--secondary {
--dbv-kit-btn-background: var(--dbv-kit-btn-secondary-background);
--dbv-kit-btn-foreground: var(--dbv-kit-btn-secondary-foreground);
--dbv-kit-btn-background-hover: var(--dbv-kit-btn-secondary-background-hover);
--dbv-kit-btn-background-active: var(--dbv-kit-btn-secondary-background-active);
--dbv-kit-btn-border-color: var(--dbv-kit-btn-secondary-border-color);
--dbv-kit-btn-loader-color: var(--dbv-kit-btn-secondary-foreground);
--dbv-kit-btn-loader-background: var(--dbv-kit-btn-secondary-background-active);
}
.dbv-kit-button--danger {
--dbv-kit-btn-background: var(--dbv-kit-btn-danger-background);
--dbv-kit-btn-foreground: var(--dbv-kit-btn-danger-foreground);
--dbv-kit-btn-background-hover: var(--dbv-kit-btn-danger-background-hover);
--dbv-kit-btn-background-active: var(--dbv-kit-btn-danger-background-active);
--dbv-kit-btn-loader-color: var(--dbv-kit-btn-danger-background);
--dbv-kit-btn-loader-background: var(--dbv-kit-btn-loader-base-color);
--dbv-kit-btn-outline-color: var(--dbv-kit-btn-danger-color-outline);
}
/* ---------------------------- */
/* Loader */
.dbv-kit-button[data-loading='true'] {
opacity: 0.75;
color: color-mix(in oklch, var(--dbv-kit-btn-foreground) 25%, var(--dbv-kit-btn-loader-base-color));
background-color: color-mix(in oklch, var(--dbv-kit-btn-loader-base-color) 75%, var(--dbv-kit-btn-background));
&:hover,
&:active,
&[data-active] {
background-color: color-mix(in oklch, var(--dbv-kit-btn-loader-base-color) 85%, var(--dbv-kit-btn-background));
}
}
.dbv-kit-button__loader {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
&::after {
--loader-width: calc(var(--dbv-kit-btn-font-size) * 0.2);
content: '';
border: var(--loader-width) solid var(--dbv-kit-btn-loader-background);
border-top: var(--loader-width) solid var(--dbv-kit-btn-loader-color);
border-radius: 50%;
opacity: 1;
width: calc(var(--dbv-kit-btn-font-size) * 1.25);
height: calc(var(--dbv-kit-btn-font-size) * 1.25);
animation: var(--dbv-kit-btn-loader-animation);
}
}
/* ---------------------------- */
/* Icon */
.dbv-kit-button__icon {
display: flex;
align-items: center;
justify-content: center;
fill: currentColor;
}
.dbv-kit-button__icon--start {
margin-inline-start: var(--dbv-kit-btn-icon-margin-inline);
}
.dbv-kit-button__icon--end {
margin-inline-end: var(--dbv-kit-btn-icon-margin-inline);
}
}
@@ -0,0 +1,50 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 { Button as AriaButton, type ButtonProps as AriaKitButtonProps } from '@ariakit/react';
import clsx from 'clsx';
import './Button.css';
import type { ControlSize } from '../types/controls.js';
import { componentProviderWrapper } from '../componentProviderWrapper.js';
export interface ButtonProps extends Omit<AriaKitButtonProps, 'clickOnEnter' | 'clickOnSpace'> {
variant?: 'primary' | 'secondary' | 'danger';
size?: ControlSize;
loading?: boolean;
loader?: React.ReactNode;
}
export function ButtonBase({ className, variant = 'primary', size = 'medium', loading, loader, children, onClick, ...props }: ButtonProps) {
const classToApply = clsx('dbv-kit-button', `dbv-kit-button--${variant}`, `dbv-kit-button--${size}`, className);
if (loading) {
props['aria-busy'] = true;
props['data-loading'] = true;
}
return (
<AriaButton onClick={loading ? () => null : onClick} className={classToApply} {...props}>
{loading && (loader ? loader : <span className="dbv-kit-button__loader" />)}
{children}
</AriaButton>
);
}
export interface ButtonIconProps extends React.HTMLAttributes<HTMLSpanElement> {
placement?: 'start' | 'end';
}
/**
* Button Icon component - used to place an icon inside a button, renders span element.;
*
* @param props.placement This property is needed to adjust icon placement inside a button. The icon with placement="start" will cut the inline-start padding. placement="end" will affect the padding-inline-end accordingly. This property supports RTL and LTR, so you don't need to think about it.
*/
ButtonBase.Icon = function ButtonBaseIcon({ className, children, placement }: ButtonIconProps) {
const classToApply = clsx('dbv-kit-button__icon', placement && `dbv-kit-button__icon--${placement}`, className);
return <span className={classToApply}>{children}</span>;
};
export const Button = componentProviderWrapper('Button', ButtonBase);
@@ -0,0 +1,25 @@
@layer base {
:root {
--dbv-kit-btn-height: var(--dbv-kit-control-height-medium);
--dbv-kit-btn-padding-inline: calc(var(--tw-spacing) * 2.5);
--dbv-kit-btn-gap: calc(var(--dbv-kit-btn-padding-inline) / 4);
--dbv-kit-btn-outline-offset: var(--dbv-kit-control-outline-offset);
--dbv-kit-btn-foreground: var(--tw-color-white);
--dbv-kit-btn-background: var(--dbv-kit-color-primary-600);
--dbv-kit-btn-background-hover: var(--dbv-kit-color-primary-700);
--dbv-kit-btn-background-active: var(--dbv-kit-color-primary-800);
--dbv-kit-btn-outline-color: var(--dbv-kit-control-outline-color);
--dbv-kit-btn-border-width: var(--dbv-kit-control-border-width);
--dbv-kit-btn-border-color: transparent;
--dbv-kit-btn-border-style: solid;
--dbv-kit-btn-border-radius: var(--dbv-kit-control-border-radius);
--dbv-kit-btn-font-weight: var(--tw-font-weight-normal);
--dbv-kit-btn-font-size: calc(var(--dbv-kit-font-size-base) * 0.875);
--dbv-kit-btn-loader-base-color: var(--tw-color-white);
--dbv-kit-btn-loader-animation: var(--tw-animate-spin);
}
}
@@ -0,0 +1,27 @@
@layer base {
:root {
/*Small button*/
--dbv-kit-btn-small-padding-inline: calc(var(--dbv-kit-btn-padding-inline) * 0.5);
--dbv-kit-btn-small-font-size: calc(var(--dbv-kit-btn-font-size) * 0.875);
--dbv-kit-btn-small-height: var(--dbv-kit-control-height-small);
--dbv-kit-btn-small-gap: calc(var(--dbv-kit-btn-gap) * 0.5);
/*Medium button*/
--dbv-kit-btn-medium-padding-inline: var(--dbv-kit-btn-padding-inline);
--dbv-kit-btn-medium-font-size: var(--dbv-kit-btn-font-size);
--dbv-kit-btn-medium-height: var(--dbv-kit-control-height-medium);
--dbv-kit-btn-medium-gap: var(--dbv-kit-btn-gap);
/*Large button*/
--dbv-kit-btn-large-padding-inline: calc(var(--dbv-kit-btn-padding-inline) * 1.25);
--dbv-kit-btn-large-font-size: calc(var(--dbv-kit-btn-font-size) * 1.125);
--dbv-kit-btn-large-height: var(--dbv-kit-control-height-large);
--dbv-kit-btn-large-gap: calc(var(--dbv-kit-btn-gap) * 1.25);
/*Extra large button*/
--dbv-kit-btn-xlarge-padding-inline: calc(var(--dbv-kit-btn-padding-inline) * 1.5);
--dbv-kit-btn-xlarge-font-size: calc(var(--dbv-kit-btn-font-size) * 1.25);
--dbv-kit-btn-xlarge-height: var(--dbv-kit-control-height-xlarge);
--dbv-kit-btn-xlarge-gap: calc(var(--dbv-kit-btn-gap) * 1.5);
}
}
@@ -0,0 +1,23 @@
@layer base {
:root {
/* Primary Button */
--dbv-kit-btn-primary-foreground: var(--tw-color-white);
--dbv-kit-btn-primary-background: var(--dbv-kit-color-primary-600);
--dbv-kit-btn-primary-background-hover: var(--dbv-kit-color-primary-700);
--dbv-kit-btn-primary-background-active: var(--dbv-kit-color-primary-800);
/* Secondary Button */
--dbv-kit-btn-secondary-foreground: var(--dbv-kit-color-primary-600);
--dbv-kit-btn-secondary-background: transparent;
--dbv-kit-btn-secondary-background-hover: var(--dbv-kit-color-primary-50);
--dbv-kit-btn-secondary-background-active: var(--dbv-kit-color-primary-100);
--dbv-kit-btn-secondary-border-color: var(--dbv-kit-color-primary-600);
/* Danger Button */
--dbv-kit-btn-danger-foreground: var(--tw-color-white);
--dbv-kit-btn-danger-background: var(--tw-color-red-600);
--dbv-kit-btn-danger-background-hover: var(--tw-color-red-700);
--dbv-kit-btn-danger-background-active: var(--tw-color-red-800);
--dbv-kit-btn-danger-color-outline: var(--tw-color-red-300);
}
}
@@ -0,0 +1,94 @@
@import './_base.css';
@import './_sizes.css';
@layer base {
.dbv-kit-checkbox {
display: inline-flex;
user-select: none;
align-items: start;
min-height: var(--dbv-kit-checkbox-height);
gap: var(--dbv-kit-checkbox-gap);
line-height: var(--dbv-kit-checkbox-height);
font-size: var(--dbv-kit-checkbox-font-size);
color: var(--dbv-kit-checkbox-foreground);
outline: var(--dbv-kit-control-outline-color);
&:hover {
cursor: pointer;
.dbv-kit-checkbox__check {
box-shadow: 0 0 0 2px var(--dbv-kit-checkbox-hover-shadow-color);
}
}
&[data-checked='true'] {
border-color: var(--dbv-kit-checkbox-border-color-checked);
}
&[data-disabled='true'] {
pointer-events: none;
opacity: var(--dbv-kit-control-disabled-opacity);
}
}
.dbv-kit-checkbox__check {
--check-size: round(calc(var(--dbv-kit-checkbox-height) * var(--dbv-kit-checkbox-check-size)), 2px);
margin-top: calc(var(--dbv-kit-checkbox-height) * (calc(1 - var(--dbv-kit-checkbox-check-size)) / 2));
height: var(--check-size);
line-height: var(--check-size);
width: var(--check-size);
min-width: var(--check-size);
border-radius: var(--dbv-kit-checkbox-border-radius);
background-color: var(--dbv-kit-checkbox-background);
border-color: var(--dbv-kit-checkbox-border-color);
border-width: var(--dbv-kit-checkbox-border-width);
border-style: var(--dbv-kit-checkbox-border-style);
color: var(--dbv-kit-checkbox-icon-color);
outline-offset: var(--dbv-kit-control-outline-offset);
outline-width: var(--dbv-kit-control-outline-width);
outline-color: var(--dbv-kit-control-outline-color);
transition-property: stroke-dashoffset;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
transition-duration: 150ms;
stroke-dasharray: 20;
stroke-dashoffset: 20;
&[data-focus-visible] {
outline-style: solid;
}
&[data-checked='true'],
&[data-indeterminate='true'] {
background-color: var(--dbv-kit-checkbox-background-checked);
border-color: var(--dbv-kit-checkbox-border-color-checked);
stroke-dashoffset: 0;
}
}
/* ---------------------------- */
/* Sizes */
.dbv-kit-checkbox--small {
--dbv-kit-checkbox-font-size: var(--dbv-kit-checkbox-small-font-size);
--dbv-kit-checkbox-height: var(--dbv-kit-checkbox-small-height);
--dbv-kit-checkbox-gap: var(--dbv-kit-checkbox-small-gap);
}
.dbv-kit-checkbox--medium {
--dbv-kit-checkbox-font-size: var(--dbv-kit-checkbox-medium-font-size);
--dbv-kit-checkbox-height: var(--dbv-kit-checkbox-medium-height);
--dbv-kit-checkbox-gap: var(--dbv-kit-checkbox-medium-gap);
}
.dbv-kit-checkbox--large {
--dbv-kit-checkbox-font-size: var(--dbv-kit-checkbox-large-font-size);
--dbv-kit-checkbox-height: var(--dbv-kit-checkbox-large-height);
--dbv-kit-checkbox-gap: var(--dbv-kit-checkbox-large-gap);
}
.dbv-kit-checkbox--xlarge {
--dbv-kit-checkbox-font-size: var(--dbv-kit-checkbox-xlarge-font-size);
--dbv-kit-checkbox-height: var(--dbv-kit-checkbox-xlarge-height);
--dbv-kit-checkbox-gap: var(--dbv-kit-checkbox-xlarge-gap);
}
}
@@ -0,0 +1,75 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 { Checkbox as AriaCheckbox, VisuallyHidden, type CheckboxProps as AriaKitCheckboxProps } from '@ariakit/react';
import { useState } from 'react';
import clsx from 'clsx';
import './Checkbox.css';
import type { ControlSize } from '../types/controls.js';
import { componentProviderWrapper } from '../componentProviderWrapper.js';
export interface CheckboxProps extends Omit<AriaKitCheckboxProps, 'render' | 'size'> {
size?: ControlSize;
icon?: React.ReactNode;
indeterminate?: boolean;
indeterminateIcon?: React.ReactNode;
}
export function CheckboxBase({ children, className, icon, indeterminate, indeterminateIcon, size = 'medium', ...props }: CheckboxProps) {
const [innerChecked, setInnerChecked] = useState(props.defaultChecked ?? false);
const checked = props.checked ?? innerChecked;
const [focusVisible, setFocusVisible] = useState(false);
return (
<label
className={clsx('dbv-kit-checkbox', `dbv-kit-checkbox--${size}`, className)}
data-disabled={props.disabled || undefined}
data-checked={checked}
data-focus-visible={focusVisible || undefined}
>
<VisuallyHidden>
<AriaCheckbox
{...props}
className="dbv-kit-checkbox__input"
clickOnEnter
onFocusVisible={() => setFocusVisible(true)}
onBlur={() => setFocusVisible(false)}
onChange={event => {
setInnerChecked(event.target.checked);
props.onChange?.(event);
}}
/>
</VisuallyHidden>
<div
className="dbv-kit-checkbox__check"
data-indeterminate={indeterminate}
data-checked={checked}
data-focus-visible={focusVisible || undefined}
>
{checked &&
(icon ?? (
<svg fill="none" stroke="currentColor" strokeWidth="2" viewBox="0 0 16 16">
<polyline points="3,7 7,11 13,4" />
</svg>
))}
{indeterminate &&
!checked &&
(indeterminateIcon ?? (
<svg fill="none" stroke="currentColor" strokeWidth="2" viewBox="0 0 16 16">
<line x1="3" y1="8" x2="13" y2="8" />
</svg>
))}
</div>
<span className="dbv-kit-checkbox__text">{children}</span>
</label>
);
}
export const Checkbox = componentProviderWrapper('Checkbox', CheckboxBase);
@@ -0,0 +1,27 @@
@layer base {
:root {
/* Checkbox sizes */
--dbv-kit-checkbox-height: var(--dbv-kit-control-height-medium);
--dbv-kit-checkbox-gap: calc(var(--tw-spacing) * 1.25);
--dbv-kit-checkbox-check-size: 0.5625;
/* Checkbox colors */
--dbv-kit-checkbox-foreground: var(--tw-color-black);
--dbv-kit-checkbox-background: transparent;
--dbv-kit-checkbox-background-checked: var(--dbv-kit-color-primary-600);
--dbv-kit-checkbox-hover-shadow-color: var(--dbv-kit-color-primary-200);
--dbv-kit-checkbox-icon-color: var(--tw-color-white);
/* Checkbox border */
--dbv-kit-checkbox-border-width: calc(var(--dbv-kit-control-border-width) * 2);
--dbv-kit-checkbox-border-radius: var(--dbv-kit-control-border-radius);
--dbv-kit-checkbox-border-style: solid;
--dbv-kit-checkbox-border-color: var(--dbv-kit-color-control-inactive);
--dbv-kit-checkbox-border-color-checked: var(--dbv-kit-color-primary-600);
/* Checkbox label font */
--dbv-kit-checkbox-font-weight: var(--tw-font-weight-normal);
--dbv-kit-checkbox-font-size: var(--dbv-kit-font-size-base);
}
}
@@ -0,0 +1,23 @@
@layer base {
:root {
/* Small checkbox */
--dbv-kit-checkbox-small-font-size: calc(var(--dbv-kit-checkbox-font-size) * 0.875);
--dbv-kit-checkbox-small-height: var(--dbv-kit-control-height-small);
--dbv-kit-checkbox-small-gap: calc(var(--dbv-kit-checkbox-gap) * 0.5);
/* Medium checkbox */
--dbv-kit-checkbox-medium-font-size: var(--dbv-kit-checkbox-font-size);
--dbv-kit-checkbox-medium-height: var(--dbv-kit-control-height-medium);
--dbv-kit-checkbox-medium-gap: var(--dbv-kit-checkbox-gap);
/* Large checkbox */
--dbv-kit-checkbox-large-font-size: calc(var(--dbv-kit-checkbox-font-size) * 1.125);
--dbv-kit-checkbox-large-height: var(--dbv-kit-control-height-large);
--dbv-kit-checkbox-large-gap: calc(var(--dbv-kit-checkbox-gap) * 1.25);
/* Extra large checkbox */
--dbv-kit-checkbox-xlarge-font-size: calc(var(--dbv-kit-checkbox-font-size) * 1.25);
--dbv-kit-checkbox-xlarge-height: var(--dbv-kit-control-height-xlarge);
--dbv-kit-checkbox-xlarge-gap: calc(var(--dbv-kit-checkbox-gap) * 1.5);
}
}
@@ -0,0 +1,19 @@
import { createContext } from 'react';
import type { ButtonBase } from './Button/Button.js';
import type { CheckboxBase } from './Checkbox/Checkbox.js';
import type { Radio } from './Radio/Radio.js';
import type { InputBase } from './Input/Input.js';
import type { RadioGroup } from './Radio/RadioGroup.js';
import type { Select } from './Select/Select.js';
import type { SelectField } from './Select/SelectField.js';
export interface IComponentProvider {
Button?: typeof ButtonBase;
Input?: typeof InputBase;
Checkbox?: typeof CheckboxBase;
Radio?: typeof Radio;
RadioGroup?: typeof RadioGroup;
Select?: typeof Select;
SelectField?: typeof SelectField;
}
export const ComponentProvider = createContext<IComponentProvider>({});
@@ -0,0 +1,77 @@
@import './_base.css';
@import './_sizes.css';
@import './_variants.css';
@layer base {
.dbv-kit-input-wrapper {
position: relative;
display: flex;
flex-direction: column;
}
.dbv-kit-input {
background: var(--dbv-kit-input-background);
border-radius: var(--dbv-kit-input-radius);
border-color: var(--dbv-kit-input-border-color);
border-width: var(--dbv-kit-input-border-width);
border-style: var(--dbv-kit-input-border-style);
color: var(--dbv-kit-input-foreground);
padding-inline: var(--dbv-kit-input-padding);
font-size: var(--dbv-kit-input-font-size);
height: var(--dbv-kit-input-height);
&:not(:disabled):hover {
border-color: var(--dbv-kit-color-control-hover);
}
&:disabled {
cursor: not-allowed;
opacity: var(--dbv-kit-control-disabled-opacity);
}
&::placeholder {
color: var(--dbv-kit-input-placeholder-foreground);
}
&:focus-visible,
&[data-focus-visible] {
outline: var(--dbv-kit-control-outline-width) solid var(--dbv-kit-control-outline-color);
outline-offset: var(--dbv-kit-control-outline-offset);
}
}
.dbv-kit-input__title {
color: var(--dbv-kit-input-label-foreground);
padding-inline-start: var(--dbv-kit-input-label-padding);
margin-block-end: var(--tw-spacing);
}
.dbv-kit-input__title--required {
&:after {
content: '*';
color: var(--dbv-kit-color-control-required);
margin-inline-start: 0.125rem;
}
}
/* ---------------------------- */
/* Sizes */
.dbv-kit-input--small {
--dbv-kit-input-height: var(--dbv-kit-input-small-height);
--dbv-kit-input-padding: var(--dbv-kit-input-small-padding);
--dbv-kit-input-font-size: var(--dbv-kit-input-small-font-size);
}
.dbv-kit-input--large {
--dbv-kit-input-height: var(--dbv-kit-input-large-height);
--dbv-kit-input-padding: var(--dbv-kit-input-large-padding);
--dbv-kit-input-font-size: var(--dbv-kit-input-large-font-size);
}
.dbv-kit-input--xlarge {
--dbv-kit-input-height: var(--dbv-kit-input-xlarge-height);
--dbv-kit-input-padding: var(--dbv-kit-input-xlarge-padding);
--dbv-kit-input-font-size: var(--dbv-kit-input-xlarge-font-size);
}
}
@@ -0,0 +1,29 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 ComponentPropsWithRef } from 'react';
import './Input.css';
import clsx from 'clsx';
import { componentProviderWrapper } from '../componentProviderWrapper.js';
export interface InputProps extends Omit<ComponentPropsWithRef<'input'>, 'size'> {
size?: 'small' | 'medium' | 'large' | 'xlarge';
label?: React.ReactNode;
}
export const InputBase: React.FC<InputProps> = function Input({ size, className, ...props }) {
const classNameToApply = clsx(`dbv-kit-input`, `dbv-kit-input--${size ?? 'medium'}`, className);
return (
<label className="dbv-kit-input-wrapper">
{props.label && <div className={clsx('dbv-kit-input__title', props.required && 'dbv-kit-input__title--required')}>{props.label}</div>}
<input className={classNameToApply} {...props} />
</label>
);
};
export const Input = componentProviderWrapper('Input', InputBase);
@@ -0,0 +1,22 @@
@layer base {
:root {
--dbv-kit-input-radius: var(--dbv-kit-control-border-radius);
--dbv-kit-input-font-size: calc(var(--dbv-kit-font-size-base) * 0.875);
--dbv-kit-input-background: var(--dbv-kit-color-background);
--dbv-kit-input-border-color: var(--dbv-kit-color-control-inactive);
--dbv-kit-input-border-width: var(--dbv-kit-control-border-width);
--dbv-kit-input-border-style: solid;
--dbv-kit-input-foreground: var(--dbv-kit-color-foreground);
--dbv-kit-input-label-foreground: var(--dbv-kit-color-control-label);
--dbv-kit-input-label-padding: var(--tw-spacing);
--dbv-kit-input-height: var(--dbv-kit-control-height-medium);
--dbv-kit-input-padding: calc(var(--tw-spacing) * 2.5);
--dbv-kit-input-placeholder-foreground: var(--tw-color-gray-500);
--dbv-kit-input-option-active-background: var(--dbv-kit-color-primary-200);
--dbv-kit-input-option-active-border: var(--dbv-kit-color-primary-500);
--dbv-kit-input-option-active-foreground: var(--dbv-kit-color-foreground);
--dbv-kit-input-option-hover-background: var(--dbv-kit-color-primary-100);
}
}
@@ -0,0 +1,23 @@
@layer base {
:root {
/* Small input */
--dbv-kit-input-small-padding: calc(var(--dbv-kit-input-padding) * 0.5);
--dbv-kit-input-small-font-size: calc(var(--dbv-kit-input-font-size) * 0.875);
--dbv-kit-input-small-height: var(--dbv-kit-control-height-small);
/* Medium input */
--dbv-kit-input-medium-padding: var(--dbv-kit-input-padding);
--dbv-kit-input-medium-font-size: var(--dbv-kit-input-font-size);
--dbv-kit-input-medium-height: var(--dbv-kit-control-height-medium);
/* Large input */
--dbv-kit-input-large-padding: calc(var(--dbv-kit-input-padding) * 1.25);
--dbv-kit-input-large-font-size: calc(var(--dbv-kit-input-font-size) * 1.125);
--dbv-kit-input-large-height: var(--dbv-kit-control-height-large);
/* Extra large input */
--dbv-kit-input-xlarge-padding: calc(var(--dbv-kit-input-padding) * 1.5);
--dbv-kit-input-xlarge-font-size: calc(var(--dbv-kit-input-font-size) * 1.25);
--dbv-kit-input-xlarge-height: var(--dbv-kit-control-height-xlarge);
}
}
@@ -0,0 +1,15 @@
@layer base {
:root {
--dbv-kit-input-validation-error-background: var(--dbv-kit-color-error-background);
--dbv-kit-input-validation-error-foreground: var(--dbv-kit-color-error-text);
--dbv-kit-input-validation-error-border: var(--dbv-kit-color-error-border);
--dbv-kit-input-validation-info-background: var(--dbv-kit-color-info-background);
--dbv-kit-input-validation-info-foreground: var(--dbv-kit-color-info-text);
--dbv-kit-input-validation-info-order: var(--dbv-kit-color-info-border);
--dbv-kit-input-validation-warning-background: var(--dbv-kit-color-warning-background);
--dbv-kit-input-validation-warning-foreground: var(--dbv-kit-color-warning-text);
--dbv-kit-input-validation-warning-border: var(--dbv-kit-color-warning-border);
}
}
@@ -0,0 +1,115 @@
@import './_base.css';
@import './_sizes.css';
@layer base {
.dbv-kit-radio {
display: inline-flex;
align-items: start;
gap: var(--dbv-kit-radio-gap);
cursor: pointer;
height: var(--dbv-kit-radio-height);
&:hover .dbv-kit-radio__input:not([aria-disabled='true']) ~ .dbv-kit-radio__control {
background-color: var(--dbv-kit-radio-inactive-hover-background);
box-shadow: 0 0 0 var(--dbv-kit-control-outline-offset) var(--dbv-kit-radio-hover-shadow-color);
}
}
.dbv-kit-radio--small {
--dbv-kit-radio-font-size: var(--dbv-kit-radio-small-font-size);
--dbv-kit-radio-gap: var(--dbv-kit-radio-small-gap);
--dbv-kit-radio-height: var(--dbv-kit-radio-small-height);
--dbv-kit-radio-dot-size: var(--dbv-kit-radio-small-dot-size);
}
.dbv-kit-radio--medium {
--dbv-kit-radio-font-size: var(--dbv-kit-radio-medium-font-size);
--dbv-kit-radio-gap: var(--dbv-kit-radio-medium-gap);
--dbv-kit-radio-height: var(--dbv-kit-radio-medium-height);
--dbv-kit-radio-dot-size: var(--dbv-kit-radio-medium-dot-size);
}
.dbv-kit-radio--large {
--dbv-kit-radio-font-size: var(--dbv-kit-radio-large-font-size);
--dbv-kit-radio-gap: var(--dbv-kit-radio-large-gap);
--dbv-kit-radio-height: var(--dbv-kit-radio-large-height);
--dbv-kit-radio-dot-size: var(--dbv-kit-radio-large-dot-size);
}
.dbv-kit-radio--xlarge {
--dbv-kit-radio-font-size: var(--dbv-kit-radio-xlarge-font-size);
--dbv-kit-radio-gap: var(--dbv-kit-radio-xlarge-gap);
--dbv-kit-radio-height: var(--dbv-kit-radio-xlarge-height);
--dbv-kit-radio-dot-size: var(--dbv-kit-radio-xlarge-dot-size);
}
.dbv-kit-radio__input {
border: 0px;
clip: rect(0px, 0px, 0px, 0px);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0px;
position: absolute;
white-space: nowrap;
width: 1px;
&[aria-checked='true'] + .dbv-kit-radio__control {
border-color: var(--dbv-kit-radio-active-border);
background-color: var(--dbv-kit-radio-active-background);
&::after {
scale: 1;
}
}
&[data-focus-visible='true'] ~ .dbv-kit-radio__control {
outline: var(--dbv-kit-control-outline-width) solid var(--dbv-kit-control-outline-color);
outline-offset: var(--dbv-kit-control-outline-offset);
box-shadow: 0 0 0 var(--dbv-kit-control-outline-offset) var(--dbv-kit-radio-hover-shadow-color);
}
&[aria-disabled='true'] ~ .dbv-kit-radio__text,
&[aria-disabled='true'] ~ .dbv-kit-radio__control {
opacity: var(--dbv-kit-control-disabled-opacity);
}
}
.dbv-kit-radio__control {
--ring-size: round(calc(var(--dbv-kit-radio-height) * var(--dbv-kit-radio-ring-size)), 2px);
position: relative;
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: var(--ring-size);
height: var(--ring-size);
margin-top: calc((var(--dbv-kit-radio-height) - (var(--ring-size))) * 0.5);
border-radius: 50%;
border: 2px solid var(--dbv-kit-radio-inactive-border);
background-color: var(--dbv-kit-radio-inactive-background);
transition:
background-color 0.3s,
border-color 0.3s;
&::after {
content: '';
width: round(calc(var(--dbv-kit-radio-height) * var(--dbv-kit-radio-dot-size)), 2px);
height: round(calc(var(--dbv-kit-radio-height) * var(--dbv-kit-radio-dot-size)), 2px);
border-radius: 50%;
background-color: var(--dbv-kit-radio-active-foreground);
scale: 0;
transition-property: scale;
transition-timing-function: var(--tw-ease-in-out);
transition-duration: 0.2s;
}
}
.dbv-kit-radio__title {
display: inline-block;
vertical-align: middle;
line-height: var(--dbv-kit-radio-height);
font-size: var(--dbv-kit-radio-font-size);
}
}
@@ -0,0 +1,26 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 clsx from 'clsx';
import type { ControlSize } from '../types/controls.js';
import { _Radio, type RadioProps as _RadioProps } from './index.js';
import './Radio.css';
export interface RadioProps extends Omit<_RadioProps, 'size'> {
size?: ControlSize;
}
export function Radio({ children, className, size = 'medium', ...props }: RadioProps) {
return (
<label className={clsx(`dbv-kit-radio dbv-kit-radio--${size}`, className)}>
<_Radio className="dbv-kit-radio__input" {...props} />
<div className="dbv-kit-radio__control" />
<span className="dbv-kit-radio__title">{children}</span>
</label>
);
}
@@ -0,0 +1,26 @@
@layer base {
.dbv-kit-radio-group {
display: flex;
&.dbv-kit-radio-group--vertical {
flex-direction: column;
}
&:not(.dbv-kit-radio-group--vertical) .dbv-kit-radio {
margin-inline-end: calc(var(--dbv-kit-radio-gap) * 4);
}
}
.dbv-kit-radio-group__label {
display: block;
color: var(--dbv-kit-select-label-foreground);
padding-inline-start: var(--dbv-kit-select-label-padding-inline);
margin-block-end: var(--tw-spacing);
}
.dbv-kit-radio-group__label--required::after {
content: '*';
color: var(--dbv-kit-color-control-required);
margin-inline-start: 0.125rem;
}
}
@@ -0,0 +1,60 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 { useId } from 'react';
import clsx from 'clsx';
import './RadioGroup.css';
import { _RadioGroup, _RadioProvider, type RadioProviderProps } from './index.js';
type LabelProps =
| {
labelledBy: string;
label?: never;
['aria-label']?: never;
}
| {
labelledBy?: never;
label: React.ReactNode;
['aria-label']?: never;
}
| {
labelledBy?: never;
label?: never;
['aria-label']: string;
};
type RadioGroupProps = Pick<RadioProviderProps, 'value' | 'setValue' | 'store' | 'setActiveId' | 'rtl' | 'defaultValue'> &
LabelProps & {
required?: boolean;
className?: string;
vertical?: boolean;
children: React.ReactNode;
};
export function RadioGroup({ className, children, labelledBy, label, ['aria-label']: ariaLabel, ...props }: RadioGroupProps) {
const labelId = useId();
const labelledById = label ? labelId : labelledBy;
return (
<_RadioProvider {...props}>
<div className="dbv-kit-radio-group__container">
{label && (
<div id={labelId} className={clsx('dbv-kit-radio-group__label', props.required && 'dbv-kit-radio-group__label--required')}>
{label}
</div>
)}
<_RadioGroup
aria-labelledby={labelledById}
aria-label={ariaLabel}
className={clsx('dbv-kit-radio-group', className, props.vertical && 'dbv-kit-radio-group--vertical')}
>
{children}
</_RadioGroup>
</div>
</_RadioProvider>
);
}
@@ -0,0 +1,22 @@
@layer base {
:root {
--dbv-kit-radio-inactive-hover-background: transparent;
--dbv-kit-radio-inactive-hover-border: var(--tw-color-gray-400);
--dbv-kit-radio-inactive-background: transparent;
--dbv-kit-radio-inactive-foreground: var(--dbv-kit-color-control-inactive);
--dbv-kit-radio-inactive-border: var(--dbv-kit-color-control-inactive);
--dbv-kit-radio-active-background: transparent;
--dbv-kit-radio-active-border: var(--dbv-kit-color-primary-500);
--dbv-kit-radio-active-foreground: var(--dbv-kit-color-primary-500);
--dbv-kit-radio-hover-shadow-color: var(--dbv-kit-color-primary-200);
--dbv-kit-radio-height: var(--dbv-kit-control-height-medium);
--dbv-kit-radio-ring-size: 0.5625;
--dbv-kit-radio-dot-size: 0.25;
--dbv-kit-radio-font-size: calc(var(--dbv-kit-font-size-base) * 0.875);
--dbv-kit-radio-gap: var(--tw-spacing);
--dbv-kit-select-label-foreground: var(--dbv-kit-color-control-label);
--dbv-kit-select-label-padding-inline: var(--tw-spacing);
}
}
@@ -0,0 +1,27 @@
@layer base {
:root {
/* Small radio */
--dbv-kit-radio-small-gap: calc(var(--dbv-kit-radio-gap) * 0.5);
--dbv-kit-radio-small-font-size: calc(var(--dbv-kit-radio-font-size) * 0.875);
--dbv-kit-radio-small-height: var(--dbv-kit-control-height-small);
--dbv-kit-radio-small-dot-size: 0.25;
/* Medium radio */
--dbv-kit-radio-medium-gap: var(--dbv-kit-radio-gap);
--dbv-kit-radio-medium-font-size: var(--dbv-kit-radio-font-size);
--dbv-kit-radio-medium-height: var(--dbv-kit-control-height-medium);
--dbv-kit-radio-medium-dot-size: 0.25;
/* Large radio */
--dbv-kit-radio-large-gap: calc(var(--dbv-kit-radio-gap) * 1.25);
--dbv-kit-radio-large-font-size: calc(var(--dbv-kit-radio-font-size) * 1.125);
--dbv-kit-radio-large-height: var(--dbv-kit-control-height-large);
--dbv-kit-radio-large-dot-size: 0.25;
/* Extra large radio */
--dbv-kit-radio-xlarge-gap: calc(var(--dbv-kit-radio-gap) * 1.5);
--dbv-kit-radio-xlarge-font-size: calc(var(--dbv-kit-radio-font-size) * 1.25);
--dbv-kit-radio-xlarge-height: var(--dbv-kit-control-height-xlarge);
--dbv-kit-radio-xlarge-dot-size: 0.3;
}
}
@@ -0,0 +1,20 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 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 {
Radio as _Radio,
RadioGroup as _RadioGroup,
RadioProvider as _RadioProvider,
type RadioGroupProps,
type RadioProviderProps,
type RadioProps,
useRadioContext,
useRadioStore,
} from '@ariakit/react';
export { RadioGroup } from './RadioGroup.js';
export { Radio } from './Radio.js';

Some files were not shown because too many files have changed in this diff Show More