M: Minor UI improvements

This commit is contained in:
Ivan 2024-09-12 11:17:01 +03:00
parent 76d54fa709
commit dc60c79f81
8 changed files with 95 additions and 51 deletions

View File

@ -0,0 +1,29 @@
import clsx from 'clsx';
import { motion } from 'framer-motion';
import { CProps } from '@/components/props';
import { animateDropdownItem } from '@/styling/animations';
interface DividerAnimatedProps extends CProps.Styling {
vertical?: boolean;
margins?: string;
}
function DividerAnimated({ vertical, margins = 'mx-2', className, ...restProps }: DividerAnimatedProps) {
return (
<motion.div
variants={animateDropdownItem}
className={clsx(
margins, //prettier: split-lines
className,
{
'border-x': vertical,
'border-y': !vertical
}
)}
{...restProps}
/>
);
}
export default DividerAnimated;

View File

@ -36,12 +36,12 @@ function Tooltip({
'max-h-[calc(100svh-6rem)]', 'max-h-[calc(100svh-6rem)]',
'overflow-y-auto overflow-x-hidden sm:overflow-hidden overscroll-contain', 'overflow-y-auto overflow-x-hidden sm:overflow-hidden overscroll-contain',
'border shadow-md', 'border shadow-md',
'text-balance', 'text-pretty',
layer, layer,
className className
)} )}
classNameArrow={layer} classNameArrow={layer}
style={{ ...{ paddingTop: '2px', paddingBottom: '2px' }, ...style }} style={{ ...{ paddingTop: '2px', paddingBottom: '2px', paddingLeft: '8px', paddingRight: '8px' }, ...style }}
variant={darkMode ? 'dark' : 'light'} variant={darkMode ? 'dark' : 'light'}
place={place} place={place}
{...restProps} {...restProps}

View File

@ -1,6 +1,5 @@
'use client'; 'use client';
import clsx from 'clsx';
import { createContext, useCallback, useContext, useLayoutEffect, useMemo, useState } from 'react'; import { createContext, useCallback, useContext, useLayoutEffect, useMemo, useState } from 'react';
import Tooltip from '@/components/ui/Tooltip'; import Tooltip from '@/components/ui/Tooltip';
@ -147,17 +146,17 @@ export const OptionsState = ({ children }: OptionsStateProps) => {
> >
<> <>
<Tooltip <Tooltip
float float // prettier: split-lines
id={`${globals.tooltip}`} id={`${globals.tooltip}`}
layer='z-topmost' layer='z-topmost'
place='right-start' place='right-start'
className={clsx('mt-8', 'max-w-[20rem]')} className='mt-8 max-w-[20rem]'
/> />
<Tooltip <Tooltip
float float
id={`${globals.value_tooltip}`} id={`${globals.value_tooltip}`}
layer='z-topmost' layer='z-topmost'
className={clsx('max-w-[calc(min(40rem,100dvw-2rem))]')} className='max-w-[calc(min(40rem,100dvw-2rem))] text-justify'
/> />
{children} {children}

View File

@ -15,6 +15,7 @@ import {
IconShare IconShare
} from '@/components/Icons'; } from '@/components/Icons';
import Button from '@/components/ui/Button'; import Button from '@/components/ui/Button';
import DividerAnimated from '@/components/ui/DividerAnimated';
import Dropdown from '@/components/ui/Dropdown'; import Dropdown from '@/components/ui/Dropdown';
import DropdownButton from '@/components/ui/DropdownButton'; import DropdownButton from '@/components/ui/DropdownButton';
import { useAccessMode } from '@/context/AccessModeContext'; import { useAccessMode } from '@/context/AccessModeContext';
@ -94,9 +95,11 @@ function MenuOssTabs({ onDestroy }: MenuOssTabsProps) {
onClick={handleDelete} onClick={handleDelete}
/> />
) : null} ) : null}
<DividerAnimated margins='mx-3 my-1' />
{user ? ( {user ? (
<DropdownButton <DropdownButton
className='border-t-2'
text='Создать новую схему' text='Создать новую схему'
icon={<IconNewItem size='1rem' className='icon-primary' />} icon={<IconNewItem size='1rem' className='icon-primary' />}
onClick={handleCreateNew} onClick={handleCreateNew}

View File

@ -20,7 +20,7 @@ function ToolbarVersioning({ blockReload }: ToolbarVersioningProps) {
<MiniButton <MiniButton
titleHtml={ titleHtml={
blockReload blockReload
? 'Невозможно откатить КС, прикрепленную к операционной схеме' ? 'Невозможно откатить КС, <br>прикрепленную к операционной схеме'
: !controller.isContentEditable : !controller.isContentEditable
? 'Откатить к версии' ? 'Откатить к версии'
: 'Переключитесь на <br/>неактуальную версию' : 'Переключитесь на <br/>неактуальную версию'

View File

@ -27,6 +27,7 @@ import {
IconUpload IconUpload
} from '@/components/Icons'; } from '@/components/Icons';
import Button from '@/components/ui/Button'; import Button from '@/components/ui/Button';
import DividerAnimated from '@/components/ui/DividerAnimated';
import Dropdown from '@/components/ui/Dropdown'; import Dropdown from '@/components/ui/Dropdown';
import DropdownButton from '@/components/ui/DropdownButton'; import DropdownButton from '@/components/ui/DropdownButton';
import { useAccessMode } from '@/context/AccessModeContext'; import { useAccessMode } from '@/context/AccessModeContext';
@ -184,9 +185,11 @@ function MenuRSTabs({ onDestroy }: MenuRSTabsProps) {
onClick={handleDelete} onClick={handleDelete}
/> />
) : null} ) : null}
<DividerAnimated margins='mx-3 my-1' />
{user ? ( {user ? (
<DropdownButton <DropdownButton
className='border-t-2'
text='Создать новую схему' text='Создать новую схему'
icon={<IconNewItem size='1rem' className='icon-primary' />} icon={<IconNewItem size='1rem' className='icon-primary' />}
onClick={handleCreateNew} onClick={handleCreateNew}
@ -235,8 +238,10 @@ function MenuRSTabs({ onDestroy }: MenuRSTabsProps) {
disabled={!controller.isContentEditable || controller.isProcessing} disabled={!controller.isContentEditable || controller.isProcessing}
onClick={handleInlineSynthesis} onClick={handleInlineSynthesis}
/> />
<DividerAnimated margins='mx-3 my-1' />
<DropdownButton <DropdownButton
className='border-t-2'
text='Упорядочить список' text='Упорядочить список'
titleHtml='Упорядочить список, исходя из <br/>логики типов и связей конституент' titleHtml='Упорядочить список, исходя из <br/>логики типов и связей конституент'
icon={<IconSortList size='1rem' className='icon-primary' />} icon={<IconSortList size='1rem' className='icon-primary' />}

View File

@ -141,7 +141,32 @@ div:not(.dense) > p {
@apply rounded; @apply rounded;
} }
:is(.sticky) { .border,
.border-x,
.border-y,
.border-b,
.border-t,
.border-l,
.border-r,
.border-2,
.border-x-2,
.border-y-2,
.border-b-2,
.border-t-2,
.border-l-2,
.border-r-2,
.divide-x,
.divide-y,
.divide-x-2,
.divide-y-2 {
border-color: var(--cl-bg-40);
@apply divide-inherit;
.dark & {
border-color: var(--cd-bg-40);
}
}
.sticky {
z-index: 20; z-index: 20;
} }
} }

View File

@ -21,35 +21,8 @@
} }
@layer components { @layer components {
:is( .clr-app,
.clr-border, .clr-btn-nav {
.border,
.border-x,
.border-y,
.border-b,
.border-t,
.border-l,
.border-r,
.border-2,
.border-x-2,
.border-y-2,
.border-b-2,
.border-t-2,
.border-l-2,
.border-r-2,
.divide-x,
.divide-y,
.divide-x-2,
.divide-y-2
) {
border-color: var(--cl-bg-40);
@apply divide-inherit;
.dark & {
border-color: var(--cd-bg-40);
}
}
:is(.clr-app, .clr-btn-nav) {
background-color: var(--cl-bg-100); background-color: var(--cl-bg-100);
.dark & { .dark & {
background-color: var(--cd-bg-100); background-color: var(--cd-bg-100);
@ -86,14 +59,18 @@
} }
} }
:is(.clr-controls, .clr-tab, .clr-btn-default) { .clr-controls,
.clr-tab,
.clr-btn-default {
background-color: var(--cl-bg-80); background-color: var(--cl-bg-80);
.dark & { .dark & {
background-color: var(--cd-bg-80); background-color: var(--cd-bg-80);
} }
} }
:is(.clr-primary, .clr-btn-primary:hover, .clr-btn-primary:focus-visible) { .clr-primary,
.clr-btn-primary:hover,
.clr-btn-primary:focus-visible {
@apply transition; @apply transition;
color: var(--cl-prim-fg-100); color: var(--cl-prim-fg-100);
background-color: var(--cl-prim-bg-100); background-color: var(--cl-prim-bg-100);
@ -103,7 +80,8 @@
} }
} }
:is(.clr-selected, .clr-btn-primary) { .clr-selected,
.clr-btn-primary {
color: var(--cl-fg-100); color: var(--cl-fg-100);
background-color: var(--cl-prim-bg-80); background-color: var(--cl-prim-bg-80);
.dark & { .dark & {
@ -142,14 +120,17 @@
} }
} }
:is(.clr-text-primary, .clr-text-url) { .clr-text-primary,
.clr-text-url {
color: var(--cl-prim-fg-80); color: var(--cl-prim-fg-80);
.dark & { .dark & {
color: var(--cd-prim-fg-80); color: var(--cd-prim-fg-80);
} }
} }
:is(.clr-text-controls, .clr-btn-nav, .clr-btn-clear) { .clr-text-controls,
.clr-btn-nav,
.clr-btn-clear {
color: var(--cl-fg-80); color: var(--cl-fg-80);
&:disabled { &:disabled {
color: var(--cl-fg-60); color: var(--cl-fg-60);
@ -169,7 +150,9 @@
} }
} }
:is(.clr-text-default, input:disabled:not(::placeholder), textarea:disabled:not(::placeholder)) { .clr-text-default,
input:disabled:not(::placeholder),
textarea:disabled:not(::placeholder) {
opacity: 1; opacity: 1;
-webkit-text-fill-color: var(--cl-fg-100); -webkit-text-fill-color: var(--cl-fg-100);
color: var(--cl-fg-100); color: var(--cl-fg-100);
@ -225,11 +208,6 @@
@apply top-[1.9rem] pt-1 right-1/2 translate-x-1/2; @apply top-[1.9rem] pt-1 right-1/2 translate-x-1/2;
} }
.cc-modal-blur {
opacity: 0.3;
backdrop-filter: blur(2px);
}
.cc-label { .cc-label {
@apply text-sm font-medium cursor-default select-text whitespace-nowrap; @apply text-sm font-medium cursor-default select-text whitespace-nowrap;
} }
@ -261,6 +239,11 @@
backdrop-filter: blur(3px); backdrop-filter: blur(3px);
} }
.cc-modal-blur {
opacity: 0.3;
backdrop-filter: blur(2px);
}
.cc-shadow-border { .cc-shadow-border {
@apply shadow-sm shadow-[var(--cl-bg-40)] dark:shadow-[var(--cd-bg-40)]; @apply shadow-sm shadow-[var(--cl-bg-40)] dark:shadow-[var(--cd-bg-40)];
} }