Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
d05caec
dbeaver/pro#8433 initial version of material ui refactor
sergeyteleshev Feb 26, 2026
bcdd010
fixes arrow colors
sergeyteleshev Mar 3, 2026
3339162
fixes arrow colors 2
sergeyteleshev Mar 3, 2026
53ef45a
fixes colors
sergeyteleshev Mar 3, 2026
9a01b59
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 4, 2026
b180900
pr fixes
sergeyteleshev Mar 4, 2026
cf7f3bb
removes layers due to it loses styles specificity race
sergeyteleshev Mar 4, 2026
6315779
fixes autocomplete styles
sergeyteleshev Mar 4, 2026
3fe11af
adds variables for typography
sergeyteleshev Mar 4, 2026
8887921
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 10, 2026
ac964d2
many composes changed
sergeyteleshev Mar 13, 2026
099922d
moves switch logic to module styles
sergeyteleshev Mar 13, 2026
e9f35da
removes elevation styles
sergeyteleshev Mar 13, 2026
3a3257a
removes unused code
sergeyteleshev Mar 13, 2026
78229ac
migrates ripple effect to tw class
sergeyteleshev Mar 13, 2026
4fa86cf
Revert "migrates ripple effect to tw class"
sergeyteleshev Mar 16, 2026
e32d078
uses classname theme-typography for button
sergeyteleshev Mar 16, 2026
5b5db8b
adds elevation styles
sergeyteleshev Mar 16, 2026
ca00d60
adds elevation styles 2
sergeyteleshev Mar 16, 2026
dad8a28
moves theme ripple
sergeyteleshev Mar 16, 2026
0739df4
reverts scss for sql editor
sergeyteleshev Mar 16, 2026
fa7c481
reverts scss for sql editor 2
sergeyteleshev Mar 16, 2026
20ca1b7
adds tailwindcss utilities + example
sergeyteleshev Mar 17, 2026
dba39f2
Revert "adds tailwindcss utilities + example"
sergeyteleshev Mar 19, 2026
c8cc5d1
creates tailwindcss plugin with shadow tokens + spread it across the app
sergeyteleshev Mar 19, 2026
bb882d7
moves typography to the tailwindcss styles
sergeyteleshev Mar 19, 2026
055b24f
refactors sql editor styles
sergeyteleshev Mar 20, 2026
218ac1d
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 20, 2026
62cb692
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 24, 2026
1d5aecc
moves styles from tailwindcss folder to styles
sergeyteleshev Mar 24, 2026
df80383
moves ripple to tailwindcss plugin
sergeyteleshev Mar 24, 2026
62bb054
removes unused files
sergeyteleshev Mar 24, 2026
3398eb5
removes unused file index
sergeyteleshev Mar 24, 2026
6c357a3
removes redundant tailwindcss import
sergeyteleshev Mar 26, 2026
0a8eddd
adds animation layer for tailwindcss
sergeyteleshev Mar 26, 2026
6aa0ad0
refactors animations
sergeyteleshev Mar 26, 2026
970fa0a
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 26, 2026
d95907c
build fix
sergeyteleshev Mar 27, 2026
d1efcf2
removes redundant imports of tailwindcss for styles
sergeyteleshev Mar 27, 2026
16c1b94
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 27, 2026
cd569d4
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
mr-anton-t Mar 30, 2026
f9b6a8e
Merge branch 'devel' into 8433-cb-replace-material-ui-with-native-css…
sergeyteleshev Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions webapp/packages/core-blocks/src/Button.css
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,6 @@

min-width: 64px;

font-family: Roboto, sans-serif;
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;

font-weight: 500;
letter-spacing: 0.0892857143em;
text-decoration: none;
Expand Down
42 changes: 25 additions & 17 deletions webapp/packages/core-blocks/src/Button.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { createElement } from 'react';
import { observable } from 'mobx';
import { observer } from 'mobx-react-lite';
import { Button as UIKitButton, ButtonIcon } from '@dbeaver/ui-kit';
import { Button as UIKitButton, ButtonIcon, clsx } from '@dbeaver/ui-kit';

import { IconOrImage } from './IconOrImage.js';
import { useObjectRef } from './useObjectRef.js';
Expand All @@ -19,20 +19,20 @@ import './Button.css';
export type ButtonProps = (React.ButtonHTMLAttributes<HTMLButtonElement | HTMLAnchorElement> &
React.LinkHTMLAttributes<HTMLLinkElement | HTMLButtonElement> &
React.HTMLAttributes<HTMLDivElement>) & {
loading?: boolean;
icon?: string;
viewBox?: string;
iconPlacement?: 'start' | 'end';
iconSize?: number;
variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
size?: 'small' | 'medium' | 'large';
tag?: 'button' | 'a' | 'div';
href?: string;
target?: '_blank' | '_self' | '_parent' | '_top';
loader?: boolean;
onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement | HTMLLinkElement | HTMLDivElement> | (() => Promise<any>);
download?: boolean;
};
loading?: boolean;
icon?: string;
viewBox?: string;
iconPlacement?: 'start' | 'end';
iconSize?: number;
variant?: 'primary' | 'secondary' | 'danger' | 'ghost';
size?: 'small' | 'medium' | 'large';
tag?: 'button' | 'a' | 'div';
href?: string;
target?: '_blank' | '_self' | '_parent' | '_top';
loader?: boolean;
onClick?: React.MouseEventHandler<HTMLButtonElement | HTMLAnchorElement | HTMLLinkElement | HTMLDivElement> | (() => Promise<any>);
download?: boolean;
};

export const Button = observer<ButtonProps>(function Button({
children,
Expand Down Expand Up @@ -81,7 +81,15 @@ export const Button = observer<ButtonProps>(function Button({

const Tag = createElement(tag);
return (
<UIKitButton render={Tag} {...rest} loading={loading} type={type} disabled={disabled} className={className} onClick={state.click}>
<UIKitButton
render={Tag}
{...rest}
loading={loading}
type={type}
disabled={disabled}
className={clsx(className, 'theme-typography')}
onClick={state.click}
>
{icon && (
<ButtonIcon placement={iconPlacement}>
<IconOrImage width={iconSize} icon={icon} viewBox={viewBox} />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* you may not use this file except in compliance with the License.
*/
.dialog {
composes: theme-background-surface theme-text-on-surface theme-elevation-z10 from global;
composes: theme-background-surface theme-text-on-surface from global;

&.fixedSize[data-size='small'] {
width: 404px;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -61,7 +61,7 @@ export const CommonDialogWrapper = observer<CommonDialogWrapperProps, HTMLDivEle
aria-label={ariaLabel}
open={context.visible}
data-size={size}
className={s(computedStyles, { dialog: true, fixedSize, fixedWidth, freeHeight }, className)}
className={s(computedStyles, { dialog: true, fixedSize, fixedWidth, freeHeight }, 'tw:shadow-xlarge', className)}
autoFocusOnShow={autoFocusOnShow}
autoFocusOnHide={autoFocusOnHide}
initialFocus={initialFocus as HTMLElement | React.RefObject<HTMLElement> | null | undefined}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
}

.error {
composes: theme-background-surface theme-text-on-surface theme-elevation-z10 from global;
composes: theme-background-surface theme-text-on-surface from global;
border-radius: 0.25rem;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
* Copyright (C) 2020-2026 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -87,7 +87,7 @@ const NestedDialog: React.FC<NestedDialogType> = function NestedDialog({ dialog,

return (
<DialogContext.Provider value={context}>
<ErrorBoundary className={s(styles, { error: true })} remount onClose={rejectDialog}>
<ErrorBoundary className={s(styles, { error: true }, 'tw:shadow-xlarge')} remount onClose={rejectDialog}>
<DialogComponent
visible={visible}
payload={dialog.payload}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
composes: theme-background-positive from global;
position: absolute;
opacity: 0;
transition: opacity 0.3s ease;
transition: opacity var(--duration-slow) var(--ease-soft);
bottom: 0;
right: 0;
box-sizing: border-box;
Expand Down
6 changes: 3 additions & 3 deletions webapp/packages/core-blocks/src/Expand/Expandable.css
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
display: grid;
grid-template-rows: 0fr;
transition-property: grid-template-rows;
transition-timing-function: ease-in-out;
transition-duration: 200ms;
transition-timing-function: var(--ease-smooth);
transition-duration: var(--duration-medium);

> * {
overflow: hidden;
Expand All @@ -36,7 +36,7 @@
opacity: 0.5;
width: var(--dbv-kit-disclosure-icon-size);
height: var(--dbv-kit-disclosure-icon-size);
transition: transform 150ms ease-in-out;
transition: transform var(--duration-medium) var(--ease-smooth);
transform-origin: center;
transform: rotate(-90deg);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* you may not use this file except in compliance with the License.
*/
.menu {
composes: theme-text-on-surface theme-background-surface theme-typography--caption theme-elevation-z3 from global;
composes: theme-text-on-surface theme-background-surface theme-typography--caption from global;
display: flex;
flex-direction: column;
max-height: 300px;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/

@layer components {
.field {
--dbv-kit-control-outline-offset: -8px;
Expand Down Expand Up @@ -41,34 +42,118 @@
border-width: var(--dbv-kit-control-outline-width);
}
}
}

.switchControl {
composes: theme-switch from global;
}
.switchControl {
position: relative;
display: inline-flex;
align-items: center;
width: 36px;
height: 20px;
vertical-align: middle;
outline: none;
flex-shrink: 0;

.disabled {
composes: theme-switch--disabled mdc-switch--disabled from global;
}
&:not(.disabled):hover .switchControlThumb {
box-shadow:
0px 3px 1px -2px rgba(0, 0, 0, 0.2),
0px 2px 2px 0px rgba(0, 0, 0, 0.14),
0px 1px 5px 0px rgba(0, 0, 0, 0.12),
0px 0px 0px 8px color-mix(in srgb, var(--theme-on-surface) 4%, transparent);
}

.checked {
composes: theme-switch--checked mdc-switch--checked from global;
}
&:not(.disabled):has(.switchInput:focus-visible) .switchControlThumb {
box-shadow:
0px 3px 1px -2px rgba(0, 0, 0, 0.2),
0px 2px 2px 0px rgba(0, 0, 0, 0.14),
0px 1px 5px 0px rgba(0, 0, 0, 0.12),
0px 0px 0px 12px color-mix(in srgb, var(--theme-on-surface) 8%, transparent);
}
}

.switchControlTrack {
composes: theme-switch__track from global;
}
.switchInput {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
margin: 0;
padding: 0;
z-index: 2;

.switchInput {
composes: theme-switch_native-control from global;
}
&:disabled {
cursor: default;
pointer-events: none;
}
}

.switchControlUnderlay {
composes: theme-switch__thumb-underlay from global;
}
.switchControlTrack {
box-sizing: border-box;
position: absolute;
top: 50%;
left: 0;
transform: translateY(-50%);
width: 100%;
height: 14px;
border: 1px solid var(--theme-on-surface, #000);
border-radius: 7px;
background-color: var(--theme-on-surface, #000);
opacity: 0.38;
border: none;
transition:
background-color var(--duration-fast) var(--ease-smooth-start),
border-color var(--duration-fast) var(--ease-smooth-start),
opacity var(--duration-fast) var(--ease-smooth-start);
}

.switchControlUnderlay {
margin-left: -2px;
display: flex;
align-items: center;
justify-content: center;
transition: margin-left var(--duration-fast) var(--ease-smooth-start);
}

.switchControlThumb {
box-sizing: border-box;
width: 20px;
height: 20px;
border: 10px solid var(--theme-switch-thumb, #fff);
border-radius: 50%;
background-color: var(--theme-surface, #fff);
box-shadow:
0px 3px 1px -2px rgba(0, 0, 0, 0.2),
0px 2px 2px 0px rgba(0, 0, 0, 0.14),
0px 1px 5px 0px rgba(0, 0, 0, 0.12);
pointer-events: none;
z-index: 1;
transition:
background-color var(--duration-fast) var(--ease-smooth-start),
border-color var(--duration-fast) var(--ease-smooth-start);
}

.checked {
& .switchControlTrack {
background-color: color-mix(in srgb, var(--theme-primary, #2a7cb4) 50%, transparent);
border-color: color-mix(in srgb, var(--theme-primary, #2a7cb4) 50%, transparent);
opacity: 1;
}

& .switchControlUnderlay {
margin-left: 18px;
}

.switchControlThumb {
composes: theme-switch__thumb from global;
& .switchControlThumb {
background-color: var(--theme-primary, #2a7cb4);
border-color: var(--theme-primary, #2a7cb4);
}
}

.disabled {
opacity: 0.38;
pointer-events: none;
}
}

.switchBody {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,39 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
.switchBody {
composes: theme-switch_dense from global;
@layer components {
.switchBody {
& .switchControl {
width: 24px;
height: 16px;
}

& .switchControlTrack {
height: 10px;
border-radius: 5px;
}

& .switchControlUnderlay {
margin-left: -3px;
}

& .switchControlThumb {
width: 14px;
height: 14px;
border-width: 7px;
}

& .checked .switchControlUnderlay {
margin-left: 13px;
}
}

/* overrides bold label style from SwitchDense.module.css because of specificity */
.switchBody .fieldLabel {
font-weight: initial;
}
}

.fieldLabel {
composes: theme-typography--body2 from global;
}

/* overrides bold label style from SwitchDense.module.css because of specificity */
.switchBody .fieldLabel {
font-weight: initial;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
.switchControl {
composes: theme-switch_primary from global;
}
@layer components {
.switchControl {
width: 36px;
height: 20px;
}

.fieldLabel {
font-weight: 500;
.fieldLabel {
font-weight: 500;
}
}
Loading
Loading