From 7ea8befbe467802b8a70afc97aea15bde079a53e Mon Sep 17 00:00:00 2001 From: Dmitriy Osipov <75555523+teunlao@users.noreply.github.com> Date: Wed, 13 Sep 2023 14:07:42 +0200 Subject: [PATCH] CB-3863: migrate overlay to css-modules (#1976) --- .../src/Overlay/OVERLAY_BASE_STYLES.ts | 127 ------------------ .../core-blocks/src/Overlay/Overlay.m.css | 39 ++++++ .../core-blocks/src/Overlay/Overlay.tsx | 17 ++- .../src/Overlay/OverlayActions.m.css | 6 + .../src/Overlay/OverlayActions.tsx | 9 +- .../src/Overlay/OverlayHeader.m.css | 9 ++ .../core-blocks/src/Overlay/OverlayHeader.tsx | 10 +- .../src/Overlay/OverlayHeaderIcon.m.css | 11 ++ .../src/Overlay/OverlayHeaderIcon.tsx | 16 ++- .../src/Overlay/OverlayHeaderSubTitle.m.css | 8 ++ .../src/Overlay/OverlayHeaderSubTitle.tsx | 10 +- .../src/Overlay/OverlayHeaderTitle.m.css | 17 +++ .../src/Overlay/OverlayHeaderTitle.tsx | 16 ++- .../src/Overlay/OverlayMessage.m.css | 14 ++ .../src/Overlay/OverlayMessage.tsx | 15 ++- .../src/SqlEditorOverlay.m.css | 3 + .../src/SqlEditorOverlay.tsx | 17 +-- 17 files changed, 167 insertions(+), 177 deletions(-) delete mode 100644 webapp/packages/core-blocks/src/Overlay/OVERLAY_BASE_STYLES.ts create mode 100644 webapp/packages/core-blocks/src/Overlay/Overlay.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayActions.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayHeader.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.m.css create mode 100644 webapp/packages/core-blocks/src/Overlay/OverlayMessage.m.css create mode 100644 webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.m.css diff --git a/webapp/packages/core-blocks/src/Overlay/OVERLAY_BASE_STYLES.ts b/webapp/packages/core-blocks/src/Overlay/OVERLAY_BASE_STYLES.ts deleted file mode 100644 index 46317c1020..0000000000 --- a/webapp/packages/core-blocks/src/Overlay/OVERLAY_BASE_STYLES.ts +++ /dev/null @@ -1,127 +0,0 @@ -/* - * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2023 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 { css } from 'reshadow'; - -export const OVERLAY_BASE_STYLES = css` - overlay { - composes: theme-text-on-primary from global; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.4); - - &:not([|active]) { - display: none; - } - - &[|fill] { - background-color: var(--theme-background-surface); - } - } - - overlay { - margin: auto; - } - - overlay, - box { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - overflow: auto; - } - - box { - composes: theme-background-surface theme-text-on-surface theme-elevation-z6 from global; - border-radius: 0.25rem; - align-items: normal; - max-width: calc(100% - 48px); - max-height: calc(100% - 48px); - } - - overlay[|fill] box { - box-shadow: none; - } - - actions { - gap: 16px; - display: flex; - } - - header, - message, - actions { - flex-shrink: 0; - padding: 24px; - } - - message { - padding-right: 0px; - overflow: auto; - flex: 1; - - &:not(:first-child) { - padding-top: 0px; - } - } - - message-box { - padding-right: 24px; - } - - header { - position: relative; - display: grid; - grid-template-columns: max-content 1fr; - flex: 0 0 auto; - box-sizing: border-box; - } - - header-title, - sub-title { - max-width: 400px; - } - - header-title { - display: flex; - align-items: center; - justify-content: space-between; - position: relative; - min-height: 24px; - overflow: auto; - } - - icon-container { - display: flex; - align-items: center; - justify-content: center; - } - - IconOrImage { - width: 24px; - height: 24px; - margin-right: 16px; - } - - h3 { - margin: 0; - overflow: hidden; - text-overflow: ellipsis; - } - - sub-title { - composes: theme-typography--caption from global; - grid-column: 2; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - } -`; diff --git a/webapp/packages/core-blocks/src/Overlay/Overlay.m.css b/webapp/packages/core-blocks/src/Overlay/Overlay.m.css new file mode 100644 index 0000000000..e3afd4eac0 --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/Overlay.m.css @@ -0,0 +1,39 @@ +.overlay { + composes: theme-text-on-primary from global; + display: none; + flex-direction: column; + justify-content: center; + align-items: center; + overflow: auto; + position: absolute; + margin: auto; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + box-shadow: none; + + &.active { + display: flex; + } + + &.fill { + background-color: var(--theme-background-surface); + & .box { + box-shadow: none; + } + } +} + +.box { + composes: theme-background-surface theme-text-on-surface theme-elevation-z6 from global; + display: flex; + flex-direction: column; + justify-content: center; + overflow: auto; + border-radius: 0.25rem; + align-items: normal; + max-width: calc(100% - 48px); + max-height: calc(100% - 48px); +} diff --git a/webapp/packages/core-blocks/src/Overlay/Overlay.tsx b/webapp/packages/core-blocks/src/Overlay/Overlay.tsx index 95394888ae..8987b68190 100644 --- a/webapp/packages/core-blocks/src/Overlay/Overlay.tsx +++ b/webapp/packages/core-blocks/src/Overlay/Overlay.tsx @@ -6,9 +6,10 @@ * you may not use this file except in compliance with the License. */ import { observer } from 'mobx-react-lite'; -import styled, { use } from 'reshadow'; -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './Overlay.m.css'; interface Props { active?: boolean; @@ -17,13 +18,11 @@ interface Props { } export const Overlay = observer>(function Overlay({ active, fill, className, children }) { - if (!active) { - return null; - } + const styles = useS(style); - return styled(OVERLAY_BASE_STYLES)( - - {children} - , + return ( +
+
{children}
+
); }); diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayActions.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayActions.m.css new file mode 100644 index 0000000000..e1377c42ef --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayActions.m.css @@ -0,0 +1,6 @@ +.actions { + gap: 16px; + display: flex; + flex-shrink: 0; + padding: 24px; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayActions.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayActions.tsx index 92c27b3084..1ab55b2215 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayActions.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayActions.tsx @@ -6,14 +6,17 @@ * you may not use this file except in compliance with the License. */ import { observer } from 'mobx-react-lite'; -import styled from 'reshadow'; -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayActions.m.css'; interface Props { className?: string; } export const OverlayActions = observer>(function OverlayActions({ className, children }) { - return styled(OVERLAY_BASE_STYLES)({children}); + const styles = useS(style); + + return
{children}
; }); diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeader.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayHeader.m.css new file mode 100644 index 0000000000..84c91dec09 --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeader.m.css @@ -0,0 +1,9 @@ +.header { + flex-shrink: 0; + padding: 24px; + position: relative; + display: grid; + grid-template-columns: max-content 1fr; + flex: 0 0 auto; + box-sizing: border-box; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeader.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayHeader.tsx index b9c7ef92a6..85cc794223 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayHeader.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeader.tsx @@ -5,14 +5,16 @@ * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ -import styled from 'reshadow'; - -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayHeader.m.css'; interface Props { className?: string; } export const OverlayHeader: React.FC> = function OverlayHeader({ className, children }) { - return styled(OVERLAY_BASE_STYLES)(
{children}
); + const styles = useS(style); + + return
{children}
; }; diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.m.css new file mode 100644 index 0000000000..eae4c70646 --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.m.css @@ -0,0 +1,11 @@ +.iconContainer { + display: flex; + align-items: center; + justify-content: center; +} + +.iconOrImage { + width: 24px; + height: 24px; + margin-right: 16px; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.tsx index 45df0b3c55..0762bf0903 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderIcon.tsx @@ -5,10 +5,10 @@ * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ -import styled from 'reshadow'; - import { IconOrImage } from '../IconOrImage'; -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayHeaderIcon.m.css'; interface Props { icon?: string; @@ -17,14 +17,16 @@ interface Props { } export const OverlayHeaderIcon: React.FC> = function OverlayHeaderIcon({ icon, viewBox, className, children }) { + const styles = useS(style); + if (!icon && !children) { return null; } - return styled(OVERLAY_BASE_STYLES)( - - {icon && } + return ( +
+ {icon && } {children} - , +
); }; diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.m.css new file mode 100644 index 0000000000..2aeef9deda --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.m.css @@ -0,0 +1,8 @@ +.subTitle { + composes: theme-typography--caption from global; + grid-column: 2; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 400px; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.tsx index 75de360886..fadf54701a 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderSubTitle.tsx @@ -5,14 +5,16 @@ * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ -import styled from 'reshadow'; - -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayHeaderSubTitle.m.css'; interface Props { className?: string; } export const OverlayHeaderSubTitle: React.FC> = function OverlayHeaderSubTitle({ className, children }) { - return styled(OVERLAY_BASE_STYLES)({children}); + const styles = useS(style); + + return
{children}
; }; diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.m.css new file mode 100644 index 0000000000..5ed06b9043 --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.m.css @@ -0,0 +1,17 @@ +.headerTitle { + max-width: 400px; + display: flex; + align-items: center; + justify-content: space-between; + position: relative; + min-height: 24px; + overflow: auto; + margin: 0; + text-overflow: ellipsis; +} + +.headerTitleContent { + margin: 0; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.tsx index 578d06a9d4..626823a88e 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayHeaderTitle.tsx @@ -5,18 +5,20 @@ * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ -import styled from 'reshadow'; - -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayHeaderTitle.m.css'; interface Props { className?: string; } export const OverlayHeaderTitle: React.FC> = function OverlayHeaderTitle({ className, children }) { - return styled(OVERLAY_BASE_STYLES)( - -

{children}

-
, + const styles = useS(style); + + return ( +
+

{children}

+
); }; diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayMessage.m.css b/webapp/packages/core-blocks/src/Overlay/OverlayMessage.m.css new file mode 100644 index 0000000000..9524b2cf11 --- /dev/null +++ b/webapp/packages/core-blocks/src/Overlay/OverlayMessage.m.css @@ -0,0 +1,14 @@ +.message { + flex-shrink: 0; + padding: 24px 0px 24px 24px; + overflow: auto; + flex: 1; + + &:not(:first-child) { + padding-top: 0px; + } +} + +.messageBox { + padding-right: 24px; +} diff --git a/webapp/packages/core-blocks/src/Overlay/OverlayMessage.tsx b/webapp/packages/core-blocks/src/Overlay/OverlayMessage.tsx index 62daa21e6c..e587d5dac1 100644 --- a/webapp/packages/core-blocks/src/Overlay/OverlayMessage.tsx +++ b/webapp/packages/core-blocks/src/Overlay/OverlayMessage.tsx @@ -6,18 +6,21 @@ * you may not use this file except in compliance with the License. */ import { observer } from 'mobx-react-lite'; -import styled from 'reshadow'; -import { OVERLAY_BASE_STYLES } from './OVERLAY_BASE_STYLES'; +import { s } from '../s'; +import { useS } from '../useS'; +import style from './OverlayMessage.m.css'; interface Props { className?: string; } export const OverlayMessage = observer>(function OverlayMessage({ className, children }) { - return styled(OVERLAY_BASE_STYLES)( - - {children} - , + const styles = useS(style); + + return ( +
+
{children}
+
); }); diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.m.css b/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.m.css new file mode 100644 index 0000000000..55f3d279e9 --- /dev/null +++ b/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.m.css @@ -0,0 +1,3 @@ +.overlayActions { + justify-content: space-between; +} diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.tsx b/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.tsx index 2918502721..1f4ee566e0 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.tsx +++ b/webapp/packages/plugin-sql-editor/src/SqlEditorOverlay.tsx @@ -7,7 +7,6 @@ */ import { observer } from 'mobx-react-lite'; import { useEffect } from 'react'; -import styled, { css } from 'reshadow'; import { Button, @@ -19,7 +18,9 @@ import { OverlayHeaderSubTitle, OverlayHeaderTitle, OverlayMessage, + s, useResource, + useS, useTranslate, } from '@cloudbeaver/core-blocks'; import { @@ -35,19 +36,15 @@ import { NodeManagerUtils } from '@cloudbeaver/core-navigation-tree'; import type { ISqlEditorTabState } from './ISqlEditorTabState'; import { SqlDataSourceService } from './SqlDataSource/SqlDataSourceService'; +import style from './SqlEditorOverlay.m.css'; import { SqlEditorService } from './SqlEditorService'; -const viewerStyles = css` - OverlayActions { - justify-content: space-between; - } -`; - interface Props { state: ISqlEditorTabState; } export const SqlEditorOverlay = observer(function SqlEditorOverlay({ state }) { + const styles = useS(style); const translate = useTranslate(); const sqlEditorService = useService(SqlEditorService); const sqlDataSourceService = useService(SqlDataSourceService); @@ -96,7 +93,7 @@ export const SqlEditorOverlay = observer(function SqlEditorOverlay({ stat } }, [connected, initExecutionContext]); - return styled(viewerStyles)( + return ( @@ -104,7 +101,7 @@ export const SqlEditorOverlay = observer(function SqlEditorOverlay({ stat {dataContainer && {dataContainer}} {translate('sql_editor_restore_message')} - + @@ -112,6 +109,6 @@ export const SqlEditorOverlay = observer(function SqlEditorOverlay({ stat {translate('sql_editor_restore')} - , + ); });