* dbeaver/pro#7023 feat: add SearchPanel component and related styles to UI-kit
add chevron Icon to UI-kit (used in Search Panel)
* dbeaver/pro#7023 feat: add SearchPanel story
* dbeaver/pro#7023 feat: update SearchPanel integration in CodeMirror
* dbeaver/pro#7023 feat: add onReplaceToggle prop to SearchPanel for toggle functionality
* dbeaver/pro#7023 fix: replace-input styles
* dbeaver/pro#7023 feat: implement search functionality in DataGrid v2
* dbeaver/pro#7023 fix: update react-data-grid workspace reference in yarn.lock
* dbeaver/pro#7023 feat: don't focus cell on replace
* dbeaver/pro#7023 feat: add searchReadOnly prop to DataGrid and GridSearchPanel components
* dbeaver/pro#7023 fix: update styles for search panel
* dbeaver/pro#7023 feat: add theme variables for improved styling in storybook
* dbeaver/pro#7023 feat: update search panel styles in datagrid
* dbeaver/pro#7023 feat: improve search functionality by resetting active match index and triggering search on find actions
* dbeaver/pro#7023 refactor: useGridSearch
* dbeaver/pro#7023 fix: search panel styles
* dbeaver/pro#7023 feat: implement grid search state management
* dbeaver/pro#7023 feat: add refresh functionality to search components
* dbeaver/pro#7023 feat: add history action to refresh search results on undo/redo
* dbeaver/pro#7023 feat: add batch cell update functionality to data grid
That functionality comes in handy when we want to use Undo and Replace All functions together:
Before that commit we used to perform N operations where N is a number of replaced cells. And history would record them as atomic operations, so pressing Undo would revert only the last replace.
setMany enables batch editing and batch reverting, so now we can Replace All and then revert it by using one Undo operation
* dbeaver/pro#7023 refactor: remove unnecessary eslint disable comment in useGridSearch
* dbeaver/pro#7023 feat: select affected cell on history change
* dbeaver/pro#7023 feat: add searchReadOnly prop to DataGridTable for conditional read-only state
* dbeaver/pro#7023 refactor: simplify isReadOnly logic in GridSearchPanel
* dbeaver/pro#7023 refactor: use constants for flags
* dbeaver/pro#7023 refactor: update focus and refresh methods in GridSearchPanel
* dbeaver/pro#7023 refactor: consolidate grid search state update logic
* dbeaver/pro#7023 refactor: update scrollToCell method signature and related usages
* dbeaver/pro#7023 refactor: update handleCellChangeBatch to use ICellChange type
* dbeaver/pro#7023 refactor: remove unwanted code
* dbeaver/pro#7023 feat: refactor search functionality to use standalone functions
* dbeaver/pro#7023 feat: implement useDataGridSearch hook to avoid bloating the DataGrid component with the search-related logic
* dbeaver/pro#7023 feat: update search functionality to use onReplace for cell value updates
* dbeaver/pro#7023 feat: use Activity component for search panel visibility in DataGrid
* dbeaver/pro#7023 refactor: use common value transformation fn in set and setMany methods
* dbeaver/pro#7023 refactor: rename methods for "unnkeyed" cache
* dbeaver/pro#7023 refactor: unify cell edit history handling and remove batch edit references
* dbeaver/pro#7023 fix: update searchReadOnly logic
* dbeaver/pro#7023 refactor: replace rowsCountRef with useState (Error: Cannot access refs during render)
* dbeaver/pro#7023 refactor: expose getCellClassName via useImperativeHandle
Replaced onCellClassNameChange prop + useEffect with useImperativeHandle as suggested in code review. Using useState setter directly as callback ref either caused infinite re-renders (without deps) or lost context synchronization entirely (with stable deps). Settled on useCallback ref that sets both useRef (for method access) and useState (for context propagation).
* dbeaver/pro#7023 fix: Cmd+F not re-focusing the search panel when already open
* dbeaver/pro#7023 refactor: cell edit history compression
* dbeaver/pro#7023 fix: refresh search state on revert
* dbeaver/pro#7023 refactor: move focus blocking during replace into grid component
Previously DataGridTable checked isReplacing() before syncing
focus/selection, leaking grid internals
Now the grid's selectCell blocks during replacing internally and
supports deferred mode (setTimeout + rAF) for post-render focus sync.
* dbeaver/pro#7023 refactor: restructure grid search logic with useReducer and improve state management
* dbeaver/pro#7023 refactor: improve grid search
moved ref synchronization out of render,
unified search+scroll into one shared path,
added a SET_MATCHES no-op guard to reduce unnecessary updates,
removed duplicate open=false persistence from useDataGridSearch (single owner now in useGridSearch).
* dbeaver/pro#7023 refactor: update search state types
* dbeaver/pro#7023 refactor: restructure grid search state interfaces for improved clarity
* dbeaver/pro#7023 refactor: optimize match retrieval logic after removal in grid search
* dbeaver/pro#7023 refactor: sync refs and computed props in one effect
* dbeaver/pro#7023 fix: Esc double handling between SearchPanel and CaptureView hotkeys
* dbeaver/pro#7023 refactor: fix review comments in useGridSearch
* dbeaver/pro#7023 refactor: unify hotkey stop propagation via shared EventContext/EventStopPropagationFlag
* dbeaver/pro#7023 refactor: pass reactive cellText to useGridSearch
* dbeaver/pro#7023 refactor: update grid search reducer actions and navigation logic
reuse SET_ACTIVE_MATCH and computeActiveMatchIdx for consistency
* dbeaver/pro#7023 refactor: improve equality check for cell matches
* dbeaver/pro#7023 feat: implement cell change tracking subscriptions and cleanup logic
* dbeaver/pro#7023 refactor: remove redundant clearTrackedCellSubscriptions
Cleanup implemented in useTrackedGridSearchCellSubscriptions hook
* dbeaver/pro#7023 fix: cancel stale deferred selectCell to prevent infinite focus loop
When multiple rows are deleted, competing deferred selectCell timeouts
cause focusSyncRef mismatch and endless focus-change cycle.
* dbeaver/pro#7023 fix: update keyboard shortcut for search to use 'KeyF'
* dbeaver/pro#7023 feat: make search disabled by default
* dbeaver/pro#7023 fix: layout
* dbeaver/pro#7023 fix: update scrollBox selection method in Table component
---------
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: Viktor Kirst <viktor.kirst@dbeaver.com>
Co-authored-by: sergeyteleshev <iamsergeyteleshev@gmail.com>
* dbeaver/pro#7555 adds autocomplete on tab + refactors shortcuts api
* adds unit tests for getCommonAndOSSpecificKeys
* uses prec.high to give some space to overriding shortcuts
* reverts keysWin + fixes the tests
* pr fixes
* adds escape editor shortcut to the shortcuts helper
* shows only 1 shortcut for autocomplete + shows os specific keys first in help doc
* fixes shortcuts so no repeats applied
---------
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
* dbeaver/pro#7570 adds highlight for text spaces and new line
* refactors + changes colors
* allows to add props to extensions
* pointer events none for new line
* do not show enter symbol if line has no whitespaces below this line
* removes highlightTrailingWhitespace so the red background disappears
---------
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
Co-authored-by: Sychev Andrey <44414066+SychevAndrey@users.noreply.github.com>
* dbeaver/pro#6962 refactor: replace complex loader with-simple solution
* refactor: simplify function declarations in createLazyLoader
* fix: ensure notify is called after loading state updates in createLazyLoader
---------
Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
The problem was that In ReactCodemirror, the updateListener calls onChange whenever the document changes and it's not marked as a remote transaction, but in value panel, when we switch changes, the new value coming to the panel was considered as the user change.
So, update listener were calling onChange from TextValuePresentation which calls editAction.set() and changes the real cell value.
In order to fix it, this commit mark programmatic updates by dispatching transaction annotations together with a change.
Co-authored-by: Evgenia <139753579+EvgeniaBzzz@users.noreply.github.com>
In previous ticket CB-5555 we fixed cursor position on undo/redo actions by adding a check that if selection was not set. In that case we put the cursor to the end of inserted text. Due to previous fixes in CB-4134 we don't set a selection if cursor don't change it's position and initially it's 0. So our check from 5555 is being fired on initially opened script and cursor goes to the end.
To avoid that situation, this solution introduces a new isInitialScriptOpening flag that is used to check the first insertion.
When initially opening a script, the cursor will stay at the position where we explicitly set it (e.g., position 0).
After the first actual content change, the flag isInitialScriptOpening gets set to false.
Subsequent changes will then follow the normal cursor behavior (moving to end when there are changes but no explicit cursor position).
Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com>
* 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
* 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>
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>
* CB-5181 adds copy event handler for data viewer (cells, value panel)
* CB-5181 makes edit/copy settings independent from each other
* CB-5181 adds disable copy case for read state JsonLine (pre)
* CB-5181 changes message text for popup
* CB-5181 changes message text for popup 2
* СB-5181 fixes rus locale for copy message
---------
Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>
* CB-4633 blobToBase64 unit tests
* СB-4633 importLazyComponent tests
* CB-4633 OrderedMap unit tests
* CB-4633 removed test time limit from blobToBase64 test
* CB-4633 adds to ordered map unit tests for edge cases
* CB-4633 importLazy moved to core-blocks
* CB-4633 adds update-ts-references
---------
Co-authored-by: s.teleshev <s.teleshev@mu.se>
* CB-4134 adjust cursor position
* CB-4134 pass controlled cursor to the editor
* CB-4134 do not trim value
* CB-4134 revert const history
* CB-4134 review fixes
* CB-4134 remove onUpdate method
---------
Co-authored-by: Evgenia Bezborodova <139753579+EvgeniaBzzz@users.noreply.github.com>