feat(base-ui): make adjustments to global styling (#286)

This commit is contained in:
白熱
2023-10-14 19:32:34 +08:00
committed by GitHub
parent 979fc39c23
commit a962cc1edf
23 changed files with 252 additions and 710 deletions
+8 -1
View File
@@ -1,6 +1,10 @@
import path from 'node:path';
import cleanPlugin from 'esbuild-plugin-clean';
import stylePlugin from 'esbuild-style-plugin';
const nodeModules = path.resolve(process.cwd(), './node_modules');
/** @type {import('esbuild').BuildOptions} */
export default {
bundle: true,
@@ -17,7 +21,10 @@ export default {
generateScopedName: 'univer-[local]',
},
renderOptions: {
lessOptions: { rewriteUrls: 'all' },
lessOptions: {
rewriteUrls: 'all',
paths: [nodeModules],
},
},
}),
],
+8 -1
View File
@@ -1,9 +1,13 @@
import path from 'node:path';
import esbuild from 'esbuild';
import cleanPlugin from 'esbuild-plugin-clean';
import copyPlugin from 'esbuild-plugin-copy';
import stylePlugin from 'esbuild-style-plugin';
import minimist from 'minimist';
const nodeModules = path.resolve(process.cwd(), './node_modules');
const args = minimist(process.argv.slice(2));
const ctx = await esbuild[args.watch ? 'context' : 'build']({
@@ -27,7 +31,10 @@ const ctx = await esbuild[args.watch ? 'context' : 'build']({
generateScopedName: 'univer-[local]',
},
renderOptions: {
lessOptions: { rewriteUrls: 'all' },
lessOptions: {
rewriteUrls: 'all',
paths: [nodeModules],
},
},
}),
],
+8 -1
View File
@@ -1,9 +1,13 @@
import path from 'node:path';
import esbuild from 'esbuild';
import cleanPlugin from 'esbuild-plugin-clean';
import copyPlugin from 'esbuild-plugin-copy';
import stylePlugin from 'esbuild-style-plugin';
import minimist from 'minimist';
const nodeModules = path.resolve(process.cwd(), './node_modules');
const args = minimist(process.argv.slice(2));
const ctx = await esbuild[args.watch ? 'context' : 'build']({
@@ -27,7 +31,10 @@ const ctx = await esbuild[args.watch ? 'context' : 'build']({
generateScopedName: 'univer-[local]',
},
renderOptions: {
lessOptions: { rewriteUrls: 'all' },
lessOptions: {
rewriteUrls: 'all',
paths: [nodeModules],
},
},
}),
],
+8 -1
View File
@@ -1,9 +1,13 @@
import path from 'node:path';
import esbuild from 'esbuild';
import cleanPlugin from 'esbuild-plugin-clean';
import copyPlugin from 'esbuild-plugin-copy';
import stylePlugin from 'esbuild-style-plugin';
import minimist from 'minimist';
const nodeModules = path.resolve(process.cwd(), './node_modules');
const args = minimist(process.argv.slice(2));
const ctx = await esbuild[args.watch ? 'context' : 'build']({
@@ -27,7 +31,10 @@ const ctx = await esbuild[args.watch ? 'context' : 'build']({
generateScopedName: 'univer-[local]',
},
renderOptions: {
lessOptions: { rewriteUrls: 'all' },
lessOptions: {
rewriteUrls: 'all',
paths: [nodeModules],
},
},
}),
],
@@ -24,6 +24,8 @@
&-text {
.btn-text();
line-height: 1;
&-active {
color: var(--text-color);
background: #eee;
@@ -54,21 +54,15 @@
}
.btn-text() {
.button-color(var(--text-color), transparent, transparent);
line-height: 2;
.button-color(@text-color, transparent, transparent);
border-radius: @border-radius-base;
box-shadow: none;
&:hover {
color: var(--text-color);
background: #eee;
border-color: transparent;
}
&:hover,
&:active {
color: var(--text-color);
background: #eee;
color: @text-color;
background: @border-color;
border-color: transparent;
}
.button-disabled(var(--disabled-color); transparent; transparent);
@@ -105,7 +99,7 @@
}
&-sm {
.button-size(24px, 7px, @font-size-sm, @border-radius-base)
.button-size(28px, 7px, @font-size-sm, @border-radius-base)
}
}
@@ -135,7 +129,7 @@
}
&.btn-sm {
.button-size(24px, (30px / 2), @font-size-sm, 24px);
.button-size(28px, (30px / 2), @font-size-sm, 28px);
}
}
@@ -152,7 +146,7 @@
}
&.btn-sm {
min-width: 24px;
min-width: 28px;
border-radius: 50%;
}
}
@@ -1,11 +1,11 @@
@import '../../Basics/CSS/Skin/default.module.less';
@slider-bg: @text-color-secondary;
@slider-width: 144px;
@slider-width: 116px;
@slider-height: 4px;
@slider-radius: 15px;
@slider-handle-size: 20px;
@slider-handle-size: 12px;
@slider-value-width: 55px;
@slider-value-height: 28px;
@@ -18,7 +18,6 @@ export const Tooltip = (props: ITooltipProps) => {
overlay={<div className={styles.tooltipContent}>{typeof title === 'function' ? title() : title}</div>}
builtinPlacements={placements}
placement={placement}
mouseLeaveDelay={0.1}
mouseEnterDelay={0.2}
showArrow
destroyTooltipOnHide
+5 -4
View File
@@ -2,14 +2,14 @@
.layout-container {
// theme
background-color: var(--bg);
color: var(--text-color);
background-color: @bg-color;
color: @text-color;
height: 100%;
.content-container-horizontal {
display: flex;
min-height: 14em;
position: relative;
min-height: 14em;
display: flex;
.content-inner-left-container {
// position: relative;
@@ -30,6 +30,7 @@
.content-inner-right-container {
width: 50%;
background-color: @bg-color-secondary;
flex: 1;
// position: relative;
}
+3 -3
View File
@@ -10,7 +10,7 @@ import { Container } from '../Components/Container/Container';
import { IWorkbenchOptions } from '../controllers/ui/ui.controller';
import style from './app.module.less';
import { ContextMenu } from './components/contextmenu/contextmenu';
import { Toolbar } from './components/toolbar/toolbar';
import { DocBars } from './components/DocBars';
export interface IUniverAppProps extends IWorkbenchOptions {
footerComponents?: Set<() => ComponentType>;
@@ -95,7 +95,7 @@ export function App(props: IUniverAppProps) {
<Layout className={style.mainContent} style={{ position: 'relative' }}>
{/* header */}
<Header style={{ display: props.header ? 'block' : 'none' }}>
{props.toolbar && <Toolbar></Toolbar>}
{props.toolbar && <DocBars />}
</Header>
{/* content */}
<Layout>
@@ -123,7 +123,7 @@ export function App(props: IUniverAppProps) {
</Content>
</Layout>
{/* footer */}
<Footer style={{ display: props.footer ? 'flex' : 'none' }}>
<Footer style={{ display: props.footer ? 'block' : 'none' }}>
{footerComponents &&
Array.from(footerComponents.values()).map((component, index) =>
React.createElement(component(), { key: `${index}` })
@@ -45,10 +45,10 @@ export function ToolbarButton(props: IBaseToolbarButtonProps) {
};
const _className = joinClassNames(
styles.btn,
`${styles.btn}-text`,
styles.toolbarBtn,
`${styles.toolbarBtn}-text`,
{
[`${styles.btn}-text-active`]: active,
[`${styles.toolbarBtn}-text-active`]: active,
},
className
);
@@ -1,6 +1,6 @@
@import '../../../../Components/Button/Style/mixin.less';
.btn {
.toolbar-btn {
line-height: @line-height-base;
.btn();
.btn-default();
@@ -12,13 +12,13 @@
&-text {
.button-color(var(--text-color), transparent, transparent);
box-shadow: none;
&:hover {
color: var(--text-color);
background-color: var(--grey-100);
border-color: transparent;
}
// &:active {
// color: var(--text-color);
// background: #eee;
@@ -0,0 +1,37 @@
import { useContext, useEffect, useState } from 'react';
import { AppContext } from '../../../Common/AppContext';
import { IDisplayMenuItem, IMenuItem, MenuPosition } from '../../../services/menu/menu';
import { IMenuService } from '../../../services/menu/menu.service';
import styles from './index.module.less';
import { ToolbarItem } from './ToolbarItem';
export function DocBars() {
const context = useContext(AppContext);
const [menuItems, setMenuItems] = useState<Array<IDisplayMenuItem<IMenuItem>>>([]);
useEffect(() => {
// this.props.getComponent?.(this); // pass the UI to the controller, which is not good...
const menuService = context.injector!.get(IMenuService);
const update = () => {
setMenuItems(menuService.getMenuItems(MenuPosition.TOOLBAR));
};
// TODO: dispose
menuService.menuChanged$.subscribe(() => update());
update();
}, []);
return (
<section className={styles.docBars}>
<div className={styles.menubar}>{/* TODO: Start */}</div>
<div className={`${styles.toolbarWarp} ${styles.toolbar}`}>
{menuItems.map((item) => (
<ToolbarItem key={item.id} {...item} />
))}
</div>
</section>
);
}
@@ -14,7 +14,7 @@ import {
IValueOption,
MenuItemType,
} from '../../../services/menu/menu';
import { ToolbarButton } from './button/toolbar-button';
import { ToolbarButton } from './Button/ToolbarButton';
import styles from './index.module.less';
export interface IToolbarItemStatus {
@@ -0,0 +1,143 @@
@import '../../../Basics/CSS/Skin/default.module.less';
.doc-bars {
box-sizing: border-box;
.menubar {
height: 40px;
border-bottom: 1px solid @border-color-base;
}
.toolbar {
position: relative;
height: 40px;
font-size: var(--font-size);
background-color: @bg-color-secondary;
box-sizing: border-box;
display: flex;
align-items: center;
.single-button {
&.more-hide {
display: none;
}
&.more-show {
display: block;
}
}
color: var(--text-color);
padding: 0 15px;
height: 40px;
position: relative;
display: flex;
align-items: center;
> div {
height: 26px;
display: inline-block;
vertical-align: middle;
margin: 0 1px;
cursor: pointer;
&.select-button:hover {
background-color: #efefef;
}
}
.cols-menu {
overflow-y: auto;
}
.select-label-string {
.drop-content {
> div {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 90px;
}
}
}
.select-double-string {
.drop-content {
> div {
width: 24px;
}
}
}
.select-color-picker-parent {
.select-item-content {
width: 100%;
}
.select-color-picker {
cursor: default;
&:hover {
background: var(--bg);
}
.select-item {
padding: 0;
}
.color-picker-outer {
box-shadow: none;
}
}
}
.select-line-bold-parent {
.select-item-content {
width: 100%;
}
}
.select-single {
// height: 26px;
// line-height: 26px;
}
.select-input {
// height: 26px;
// line-height: 26px;
}
.select-double {
// height: 26px;
// line-height: 26px;
}
button {
padding: 0 4px; // FIXME Set the BIUS buttons, the target is 26 * 26, padding 4px, but only 27.6 * 26 can be obtained
display: flex;
align-items: center;
// height: 26px;
font-size: 18px;
border-radius: var(--border-radius-base);
}
span[role='img'].univericon-nextIcon {
font-size: 12px;
}
.text-button {
span[role='img'] {
font-size: 24px;
}
button {
padding: 0 5px;
}
}
}
.button() {
padding: 0px;
line-height: 1;
}
}
@@ -0,0 +1 @@
export { DocBars } from './DocBars';
@@ -1,26 +0,0 @@
type BarProps = {
list: Array<Record<string, string>>;
img: string;
onClick?: (item: {}, index: number) => void;
};
export const DataBar = (props: BarProps) => {
const { list, img, onClick } = props;
const background = `url(${img}) no-repeat`;
const handleClick = (item: {}, index: number) => {
onClick?.call(this, item, index);
};
return (
<div style={{ display: 'flex' }}>
{list.map((item, index) => (
<div
key={index}
onClick={() => handleClick(item, index)}
style={{ width: '28px', height: '26px', background, backgroundPosition: `${item.x} ${item.y}` }}
></div>
))}
</div>
);
};
@@ -1,312 +0,0 @@
@import '../../../Basics/CSS/Skin/default.module.less';
.universheet-wa-editor.toolbar {
height: 32px;
background: var(--bg);
position: relative;
padding: 5px 0 3px 15px;
border-bottom: 1px solid var(--bg);
white-space: nowrap;
transition: all 0.2s;
box-sizing: initial;
span[role='img'] {
font-size: 24px;
display: inline-block;
}
span[role='img'].univericon-nextIcon {
font-size: 13px;
}
span[role='img'].univericon-rightIcon {
font-size: 13px;
}
.universheet-toolbar-left-skin {
width: 15px;
position: absolute;
left: 0;
top: 1px;
bottom: 1px;
}
.universheet-inline-block {
display: inline-block;
}
.universheet-flex {
display: flex;
}
.universheet-toolbar-button,
.universheet-toolbar-menu-button {
vertical-align: middle;
&:hover {
background: rgba(0, 0, 0, 0.06);
}
button {
min-width: 26px;
height: 26px;
padding: 0;
border: none;
.toolbar-button();
span {
height: 100%;
vertical-align: text-bottom;
}
}
}
.universheet-toolbar-button-outer-box,
.universheet-toolbar-menu-button-outer-box {
.outer-inner-box();
}
.universheet-toolbar-select {
position: relative;
}
.universheet-toolbar-button-inner-box,
.universheet-toolbar-menu-button-inner-box {
padding: 0 2px;
padding: 0;
text-align: center;
height: 26px;
min-width: 26px;
font-size: 12px;
}
.universheet-toolbar-menu-button-caption {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-left: 1px;
text-align: center;
height: 100%;
}
.universheet-toolbar-menu-button-text {
width: 55px !important;
}
.universheet-toolbar-separator {
line-height: normal;
list-style: none;
outline: 0;
overflow: hidden;
padding: 0;
text-decoration: none;
width: 0;
height: 20px;
vertical-align: top;
border-left: 1px solid #e0e0e0;
margin: 5px 1px;
}
.universheet-toolbar-combo-button {
font-weight: 700;
vertical-align: inherit;
margin: 0 1px;
.toolbar-button();
}
.universheet-toolbar-combo-button-inner-box,
.universheet-toolbar-combo-button-outer-box {
.outer-inner-box();
}
.universheet-toolbar-zoom-combobox .universheet-toolbar-combo-button-caption {
width: 36px !important;
}
.universheet-toolbar-combo-button-caption {
padding: 0;
margin: 0 0 0 -3px;
}
.universheet-toolbar-textinput {
-webkit-border-radius: 1px;
-moz-border-radius: 1px;
border-radius: 1px;
border: 1px solid #d9d9d9;
border-top: 1px solid silver;
font-size: 13px;
height: 25px;
padding: 1px 0 1px 8px;
}
.universheet-toolbar-combo-button-input {
background: 0 0;
border: 1px solid transparent !important;
color: var(--text-color);
font-family: Arial, sans-serif !important;
font-size: 11px !important;
font-weight: 700 !important;
height: 20px !important;
overflow: hidden !important;
color: rgba(0, 0, 0, 0.7);
height: 22px !important;
width: 22px;
}
.universheet-cols-menu {
.menu-button();
width: 252px;
left: 0;
top: 26px;
display: none;
}
.universheet-cols-menu .universheet-cols-menuitem-hover,
.universheet-cols-menu .universheet-cols-menuitem:hover {
background-color: #efefef;
}
.universheet-cols-menu .universheet-cols-menuitem {
position: relative;
color: var(--text-color);
cursor: pointer;
list-style: none;
margin: 0;
padding: 1px 6em 1px 20px;
white-space: nowrap;
padding-left: 8px;
vertical-align: middle;
padding-right: 24px;
user-select: none;
line-height: 16px;
}
.universheet-submenu-arrow {
-webkit-transition: all 218ms;
-moz-transition: all 218ms;
-o-transition: all 218ms;
transition: all 218ms;
font-size: 12px;
left: auto;
right: 15px;
top: 50%;
transform: translateY(-50%);
padding-right: 0;
position: absolute;
text-align: right;
opacity: 0.5;
color: #000;
user-select: none;
font-family: Arial;
}
.universheet-toolbar-dblbutton {
.universheet-toolbar-next-button {
border-left: 1px solid transparent;
position: relative;
.universheet-next-menu {
position: absolute;
z-index: 2;
background-color: #fff;
box-shadow: @box-shadow-base;
font-size: 12px;
width: fit-content;
.univer-menu-item > div {
width: 100%;
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding: 0 5px 0 0;
.universheet-next-menu-icon {
width: 25px;
& ~ div {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
}
}
}
svg {
font-size: 24px;
vertical-align: top;
}
}
svg {
font-size: 12px;
vertical-align: middle;
}
}
.universheet-color-bottom {
width: 10px;
margin: 0 auto;
outline: 2px solid;
position: relative;
bottom: 7px;
}
button.univer-btn {
min-width: 15px;
&:active {
background: transparent !important;
}
}
:hover .universheet-toolbar-next-button {
border-left: 1px solid #e0e0e0;
}
}
}
// 重复样式
.outer-inner-box() {
border: 0;
vertical-align: top;
margin: 0;
padding: 0;
}
.toolbar-button() {
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
background: 0;
border: 1px solid transparent;
outline: 0;
padding: 0;
list-style: none;
font-size: 11px;
text-decoration: none;
cursor: default;
height: 26px;
line-height: 26px;
color: var(--text-color);
}
.menu-button() {
border-radius: 0;
box-shadow: 0 2px 4px rgb(0 0 0 / 20%);
transition: opacity 218ms;
background: #fff;
border: 1px solid rgba(0, 0, 0, 0.2);
cursor: default;
font-size: 13px;
margin: 0;
outline: 0;
padding: 6px 0;
position: absolute;
z-index: 2;
box-sizing: border-box;
user-select: none;
}
@@ -1,182 +0,0 @@
@import '../../../Basics/CSS/Skin/default.module.less';
.toolbar-warp {
max-height: fit-content;
width: 100%;
overflow: unset;
box-sizing: border-box;
font-size: var(--font-size);
background-color: var(--bg);
position: relative;
display: flex;
align-items: center;
border-bottom: 1px solid var(--border-color-base);
.single-button {
&.more-hide {
display: none;
}
&.more-show {
display: block;
}
}
}
.toolbar {
max-width: 100%;
color: var(--text-color);
padding: 0 15px;
height: 40px;
position: relative;
display: flex;
align-items: center;
>div {
height: 26px;
display: inline-block;
vertical-align: middle;
margin: 0 1px;
cursor: pointer;
&.select-button:hover {
background-color: #efefef;
}
}
.cols-menu {
overflow-y: auto;
}
.select-label-string {
.drop-content {
>div {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 90px;
}
}
}
.select-double-string {
.drop-content {
>div {
width: 24px;
}
}
}
.select-color-picker-parent {
.select-item-content {
width: 100%;
}
.select-color-picker {
cursor: default;
&:hover {
background: var(--bg);
}
.select-item {
padding: 0;
}
.color-picker-outer {
box-shadow: none;
}
}
}
.select-line-bold-parent {
.select-item-content {
width: 100%;
}
}
.select-single {
// height: 26px;
// line-height: 26px;
}
.select-input {
// height: 26px;
// line-height: 26px;
}
.select-double {
// height: 26px;
// line-height: 26px;
}
button {
padding: 0 4px; // FIXME Set the BIUS buttons, the target is 26 * 26, padding 4px, but only 27.6 * 26 can be obtained
display: flex;
align-items: center;
// height: 26px;
font-size: 18px;
border-radius: var(--border-radius-base);
}
span[role='img'].univericon-nextIcon {
font-size: 12px;
}
.text-button {
span[role="img"] {
font-size: 24px;
}
button {
padding: 0 5px;
}
}
}
.more-button {
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%);
.button();
&.more-show {
display: block;
}
}
.more-tool {
// height: 40px;
// display: none;
// align-items: center;
padding: 0 10px;
background-color: var(--bg);
box-shadow: @box-shadow-base;
position: absolute;
right: 2em;
top: 40px;
z-index: 2;
&.more-show {
display: flex;
}
button {
.button();
}
}
.button() {
padding: 0px;
line-height: 1;
}
.tooltip-title {
opacity: 1;
}
.bottom {
display: none;
}
@@ -1,71 +0,0 @@
import { Component, createRef } from 'react';
import { BaseComponentProps } from '../../../BaseComponent';
import { AppContext } from '../../../Common/AppContext';
import { Container } from '../../../Components/Container/Container';
import { IDisplayMenuItem, IMenuItem, MenuPosition } from '../../../services/menu/menu';
import { IMenuService } from '../../../services/menu/menu.service';
import styles from './index.module.less';
import { ToolbarItem } from './toolbar-item';
interface IToolbarState {
menuItems: Array<IDisplayMenuItem<IMenuItem>>;
}
interface IToolbarProps extends BaseComponentProps {
style?: React.CSSProperties;
}
export class Toolbar extends Component<IToolbarProps, IToolbarState> {
static override contextType = AppContext;
declare context: React.ContextType<typeof AppContext>;
toolbarRef = createRef<HTMLDivElement>();
moreBtnRef = createRef();
moreToolRef = createRef();
clientWidth = 0;
constructor(props: IToolbarProps) {
super(props);
this.initialize();
}
initialize() {
this.state = {
menuItems: [],
};
}
override componentDidMount() {
this.props.getComponent?.(this); // pass the UI to the controller, which is not good...
const menuService = this.context.injector!.get(IMenuService);
const update = () => {
this.setState({
menuItems: menuService.getMenuItems(MenuPosition.TOOLBAR),
});
};
// TODO: dispose
menuService.menuChanged$.subscribe(() => update());
update();
}
override render() {
const { menuItems } = this.state;
return (
<Container style={{ position: 'relative' }}>
<div className={`${styles.toolbarWarp} ${styles.toolbar}`} ref={this.toolbarRef}>
{menuItems.map((item) => (
<ToolbarItem key={item.id} {...item} />
))}
</div>
</Container>
);
}
}
@@ -1,5 +1,3 @@
import { Button, Icon } from '@univerjs/base-ui';
import styles from './index.module.less';
import { ZoomSlider } from './zoom-slider';
@@ -11,9 +9,6 @@ interface ICountBarProps {
export function CountBar(props: ICountBarProps) {
return (
<section className={styles.countBar}>
<Button>
<Icon.Sheet.RegularIcon />
</Button>
<ZoomSlider />
</section>
);
@@ -1,10 +1,9 @@
import { BaseComponentProps } from '@univerjs/base-ui';
import { ISheetUIPluginConfig } from '../../Basics';
import { CountBar } from '../CountBar';
import { SheetBar } from '../SheetBar';
import styles from './index.module.less';
export interface BaseSheetContainerProps extends BaseComponentProps {
export interface BaseSheetContainerProps {
config: ISheetUIPluginConfig;
changeLocale: (locale: string) => void;
methods?: any;
@@ -12,9 +11,9 @@ export interface BaseSheetContainerProps extends BaseComponentProps {
export function RenderSheetFooter() {
return (
<>
<section className={styles.sheetContainer}>
<SheetBar />
<CountBar />
</>
</section>
);
}
@@ -1,77 +1,11 @@
.layout-container {
// theme
background-color: var(--bg);
color: var(--text-color);
height: 100%;
@import '@univerjs/base-ui/src/Basics/CSS/Skin/default.module.less';
.content-container-horizontal {
display: flex;
min-height: 14em;
position: relative;
.content-inner-left-container {
// position: relative;
width: 50%;
padding-right: 10px;
flex: none;
.hover-cursor {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 10px;
background: gray;
cursor: e-resize;
}
}
.content-inner-right-container {
width: 50%;
flex: 1;
// position: relative;
}
}
.content-container-vertical {
display: flex;
flex-direction: column;
min-height: 14em;
position: relative;
.content-inner-left-container {
// position: relative;
height: 50%;
padding-bottom: 10px;
flex: none;
.hover-cursor {
position: absolute;
left: 0;
bottom: 0;
height: 10px;
width: 100%;
background: gray;
cursor: n-resize;
}
}
.content-inner-right-container {
height: 50%;
flex: 1;
}
}
.main-content {
background: var(--bg);
}
.outer-right-container {
// position: relative;
flex: 0 0 280px;
> div {
position: absolute;
width: 100%;
}
}
.sheet-container {
height: 40px;
padding: 0 @padding-lg;
border-top: 1px solid @border-color;
box-sizing: border-box;
display: flex;
justify-content: space-between;
align-items: center;
}