M: Update manuals

This commit is contained in:
Ivan 2024-08-03 11:30:47 +03:00
parent 95d38cea7c
commit cc8cb2d53c
10 changed files with 199 additions and 60 deletions

View File

@ -62,7 +62,7 @@ export { VscLibrary as IconLibrary } from 'react-icons/vsc';
export { IoLibrary as IconLibrary2 } from 'react-icons/io5'; export { IoLibrary as IconLibrary2 } from 'react-icons/io5';
export { BiDiamond as IconTemplates } from 'react-icons/bi'; export { BiDiamond as IconTemplates } from 'react-icons/bi';
export { GiHoneycomb as IconOSS } from 'react-icons/gi'; export { GiHoneycomb as IconOSS } from 'react-icons/gi';
export { LuBaby as IconChild } from 'react-icons/lu'; export { GrInherit as IconChild } from 'react-icons/gr';
export { RiParentLine as IconParent } from 'react-icons/ri'; export { RiParentLine as IconParent } from 'react-icons/ri';
export { BiSpa as IconPredecessor } from 'react-icons/bi'; export { BiSpa as IconPredecessor } from 'react-icons/bi';
export { RiHexagonLine as IconRSForm } from 'react-icons/ri'; export { RiHexagonLine as IconRSForm } from 'react-icons/ri';

View File

@ -14,7 +14,7 @@ function InfoConstituenta({ data, className, ...restProps }: InfoConstituentaPro
return ( return (
<div className={clsx('dense min-w-[15rem]', className)} {...restProps}> <div className={clsx('dense min-w-[15rem]', className)} {...restProps}>
<h2> <h2>
Конституента {data.alias} {data.alias}
{data.is_inherited ? ' (наследуется)' : ''} {data.is_inherited ? ' (наследуется)' : ''}
</h2> </h2>
{data.term_resolved ? ( {data.term_resolved ? (

View File

@ -1,15 +1,19 @@
import { import {
IconChild,
IconClone, IconClone,
IconControls, IconControls,
IconDestroy, IconDestroy,
IconEdit, IconEdit,
IconFilter,
IconList, IconList,
IconMoveDown, IconMoveDown,
IconMoveUp, IconMoveUp,
IconNewItem, IconNewItem,
IconOSS, IconOSS,
IconPredecessor,
IconReset, IconReset,
IconSave, IconSave,
IconSettings,
IconStatusOK, IconStatusOK,
IconText, IconText,
IconTree IconTree
@ -23,37 +27,64 @@ function HelpCstEditor() {
return ( return (
<div className='dense'> <div className='dense'>
<h1>Редактор конституенты</h1> <h1>Редактор конституенты</h1>
<div className='flex flex-col sm:flex-row sm:gap-3'>
<div className='flex flex-col'>
<li> <li>
<IconOSS className='inline-icon' /> переход к связанной <LinkTopic text='ОСС' topic={HelpTopic.CC_OSS} /> <IconOSS className='inline-icon' /> переход к <LinkTopic text='ОСС' topic={HelpTopic.CC_OSS} />
</li> </li>
<li> <li>
<IconSave className='inline-icon' /> сохранить изменения: Ctrl + S <IconPredecessor className='inline-icon' /> переход к исходной
</li> </li>
<li> <li>
<IconReset className='inline-icon' /> сбросить несохраненные изменения <IconList className='inline-icon' /> список конституент
</li> </li>
<li> <li>
<IconClone className='inline-icon icon-green' /> клонировать текущую: Alt + V <IconSave className='inline-icon' /> сохранить: Ctrl + S
</li>
<li>
<IconReset className='inline-icon' /> сбросить изменения
</li>
<li>
<IconClone className='inline-icon icon-green' /> клонировать: Alt + V
</li> </li>
<li> <li>
<IconNewItem className='inline-icon icon-green' /> новая конституента <IconNewItem className='inline-icon icon-green' /> новая конституента
</li> </li>
<li> <li>
<IconDestroy className='inline-icon icon-red' /> удаление текущей <IconDestroy className='inline-icon icon-red' /> удалить
</li> </li>
</div>
<h2>Термин и Текстовое определение</h2> <div className='flex flex-col'>
<h2>Список конституент</h2>
<li> <li>
<IconEdit className='inline-icon' /> кнопка переименования справа от{' '} <IconMoveDown className='inline-icon' />
<LinkTopic text='Имени' topic={HelpTopic.CC_CONSTITUENTA} /> <IconMoveUp className='inline-icon' /> Alt + вверх/вниз
</li> </li>
<li> <li>
<IconEdit className='inline-icon' /> кнопка редактирования словоформ справа от{' '} <IconFilter className='inline-icon' />
<LinkTopic text='Термина' topic={HelpTopic.CC_CONSTITUENTA} /> <IconSettings className='inline-icon' /> фильтрация по графу термов
</li> </li>
<li>Ctrl + Пробел открывает редактирование отсылок</li> <li>
<IconChild className='inline-icon' /> отображение наследованных
</li>
<li>
<span style={{ backgroundColor: colors.bgSelected }}>текущая конституента</span>
</li>
<li>
<span style={{ backgroundColor: colors.bgGreen50 }}>
<LinkTopic text='основа' topic={HelpTopic.CC_RELATIONS} /> текущей
</span>
</li>
<li>
<span style={{ backgroundColor: colors.bgOrange50 }}>
<LinkTopic text='порожденные' topic={HelpTopic.CC_RELATIONS} /> текущей
</span>
</li>
</div>
</div>
<h2>Определение понятия</h2> <h2>Формальное определение</h2>
<li> <li>
<IconStatusOK className='inline-icon' /> индикатор статуса определения сверху <IconStatusOK className='inline-icon' /> индикатор статуса определения сверху
</li> </li>
@ -69,26 +100,12 @@ function HelpCstEditor() {
</li> </li>
<li>Ctrl + Пробел дополняет до незанятого имени</li> <li>Ctrl + Пробел дополняет до незанятого имени</li>
<h2>Список конституент</h2> <h2>Термин и Текстовое определение</h2>
<li> <li>
<IconList className='inline-icon' /> отображение списка конституент <IconEdit className='inline-icon' /> редактирование <LinkTopic text='Имени' topic={HelpTopic.CC_CONSTITUENTA} />{' '}
</li> / <LinkTopic text='Термина' topic={HelpTopic.CC_CONSTITUENTA} />
<li>
<IconMoveDown className='inline-icon' />
<IconMoveUp className='inline-icon' /> Alt + вверх/вниз перемещение
</li>
<li>фильтрация в верхней части</li>
<li>
<span style={{ backgroundColor: colors.bgSelected }}>цветом фона</span> выделена текущая конституента
</li>
<li>
<span style={{ backgroundColor: colors.bgGreen50 }}>цветом фона</span> выделена{' '}
<LinkTopic text='основа' topic={HelpTopic.CC_RELATIONS} /> текущей
</li>
<li>
<span style={{ backgroundColor: colors.bgOrange50 }}>цветом фона</span> выделены{' '}
<LinkTopic text='порожденные' topic={HelpTopic.CC_RELATIONS} /> текущей
</li> </li>
<li>Ctrl + Пробел открывает редактирование отсылок</li>
</div> </div>
); );
} }

View File

@ -1,8 +1,100 @@
import {
IconAnimation,
IconAnimationOff,
IconConnect,
IconDestroy,
IconEdit2,
IconExecute,
IconFitImage,
IconGrid,
IconImage,
IconLineStraight,
IconLineWave,
IconNewItem,
IconReset,
IconRSForm,
IconSave
} from '@/components/Icons';
import Divider from '@/components/ui/Divider';
import LinkTopic from '@/components/ui/LinkTopic';
import { HelpTopic } from '@/models/miscellaneous';
function HelpOssGraph() { function HelpOssGraph() {
return ( return (
<div> <div className='flex flex-col'>
<h1>Граф синтеза</h1> <h1>Граф синтеза</h1>
<p>TBD.</p> <div className='flex flex-col sm:flex-row'>
<div className='w-full sm:w-[14rem]'>
<h1>Настройка графа</h1>
<li>
<IconFitImage className='inline-icon' /> Вписать в экран
</li>
<li>
<IconGrid className='inline-icon' /> Отображение сетки
</li>
<li>
<IconLineWave className='inline-icon' />
<IconLineStraight className='inline-icon' /> Тип линии
</li>
<li>
<IconAnimation className='inline-icon' />
<IconAnimationOff className='inline-icon' /> Анимация
</li>
</div>
<Divider vertical margins='mx-3 mt-3' className='hidden sm:block' />
<div className='w-full sm:w-[21rem]'>
<h1>Изменение узлов</h1>
<li>Клик на операцию выделение</li>
<li>Esc сбросить выделение</li>
<li>
<IconEdit2 className='inline-icon' /> Двойной клик редактирование
</li>
<li>
<IconNewItem className='inline-icon icon-green' /> Новая операция
</li>
<li>
<IconDestroy className='inline-icon icon-red' /> Delete удалить выбранные
</li>
</div>
</div>
<Divider margins='my-3' className='hidden sm:block' />
<div className='flex flex-col-reverse mb-3 sm:flex-row'>
<div className='w-full sm:w-[14rem]'>
<h1>Общие</h1>
<li>
<IconReset className='inline-icon' /> Сбросить изменения
</li>
<li>
<IconSave className='inline-icon' /> Сохранить положения
</li>
<li>
<IconImage className='inline-icon' /> Сохранить в формат SVG
</li>
</div>
<Divider vertical margins='mx-3' className='hidden sm:block' />
<div className='dense w-[21rem]'>
<h1>Контекстное меню</h1>
<li>
<IconRSForm className='inline-icon icon-green' /> Переход к связанной{' '}
<LinkTopic text='КС' topic={HelpTopic.CC_SYSTEM} />
</li>
<li>
<IconNewItem className='inline-icon icon-green' /> Создать пустую КС для загрузки
</li>
<li>
<IconConnect className='inline-icon' /> Выбрать КС для загрузки
</li>
<li>
<IconExecute className='inline-icon icon-green' /> Выполнить (активировать) операцию
</li>
</div>
</div>
</div> </div>
); );
} }

View File

@ -26,6 +26,7 @@ function HelpTermGraph() {
const { colors } = useConceptOptions(); const { colors } = useConceptOptions();
return ( return (
<div className='flex flex-col'> <div className='flex flex-col'>
<h1>Граф термов</h1>
<div className='flex flex-col sm:flex-row'> <div className='flex flex-col sm:flex-row'>
<div className='w-full sm:w-[14rem]'> <div className='w-full sm:w-[14rem]'>
<h1>Настройка графа</h1> <h1>Настройка графа</h1>
@ -78,7 +79,7 @@ function HelpTermGraph() {
<IconFilter className='inline-icon' /> Открыть настройки <IconFilter className='inline-icon' /> Открыть настройки
</li> </li>
<li> <li>
<IconFitImage className='inline-icon' /> Вписать граф в экран <IconFitImage className='inline-icon' /> Вписать в экран
</li> </li>
<li> <li>
<IconImage className='inline-icon' /> Сохранить в формат PNG <IconImage className='inline-icon' /> Сохранить в формат PNG

View File

@ -135,7 +135,7 @@ function OssTabs() {
<TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}> <TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}>
<MenuOssTabs onDestroy={onDestroySchema} /> <MenuOssTabs onDestroy={onDestroySchema} />
<TabLabel label='Карточка' titleHtml={`Название: <b>${schema.title ?? ''}</b>`} /> <TabLabel label='Карточка' title={schema.title ?? ''} />
<TabLabel label='Граф' /> <TabLabel label='Граф' />
</TabList> </TabList>

View File

@ -1,5 +1,7 @@
'use client'; 'use client';
import clsx from 'clsx';
import { import {
IconClone, IconClone,
IconDestroy, IconDestroy,
@ -118,7 +120,11 @@ function ToolbarConstituenta({
/> />
</> </>
) : null} ) : null}
<BadgeHelp topic={HelpTopic.UI_RS_EDITOR} offset={4} className={PARAMETER.TOOLTIP_WIDTH} /> <BadgeHelp
topic={HelpTopic.UI_RS_EDITOR}
offset={4}
className={clsx(PARAMETER.TOOLTIP_WIDTH, 'sm:max-w-[40rem]')}
/>
</Overlay> </Overlay>
); );
} }

View File

@ -257,10 +257,7 @@ function RSTabs() {
<TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}> <TabList className={clsx('mx-auto w-fit', 'flex items-stretch', 'border-b-2 border-x-2 divide-x-2')}>
<MenuRSTabs onDestroy={onDestroySchema} /> <MenuRSTabs onDestroy={onDestroySchema} />
<TabLabel <TabLabel label='Карточка' titleHtml={`${schema.title ?? ''}<br />Версия: ${labelVersion(schema)}`} />
label='Карточка'
titleHtml={`Название: <b>${schema.title ?? ''}</b><br />Версия: ${labelVersion(schema)}`}
/>
<TabLabel <TabLabel
label='Содержание' label='Содержание'
titleHtml={`Конституент: ${schema.stats?.count_all ?? 0}<br />Ошибок: ${schema.stats?.count_errors ?? 0}`} titleHtml={`Конституент: ${schema.stats?.count_all ?? 0}<br />Ошибок: ${schema.stats?.count_errors ?? 0}`}

View File

@ -2,8 +2,10 @@
import { useLayoutEffect, useMemo, useState } from 'react'; import { useLayoutEffect, useMemo, useState } from 'react';
import { IconChild } from '@/components/Icons';
import SelectGraphFilter from '@/components/select/SelectGraphFilter'; import SelectGraphFilter from '@/components/select/SelectGraphFilter';
import SelectMatchMode from '@/components/select/SelectMatchMode'; import SelectMatchMode from '@/components/select/SelectMatchMode';
import MiniButton from '@/components/ui/MiniButton';
import SearchBar from '@/components/ui/SearchBar'; import SearchBar from '@/components/ui/SearchBar';
import useLocalStorage from '@/hooks/useLocalStorage'; import useLocalStorage from '@/hooks/useLocalStorage';
import { CstMatchMode, DependencyMode } from '@/models/miscellaneous'; import { CstMatchMode, DependencyMode } from '@/models/miscellaneous';
@ -25,6 +27,7 @@ function ConstituentsSearch({ schema, activeID, activeExpression, dense, setFilt
const [filterMatch, setFilterMatch] = useLocalStorage(storage.cstFilterMatch, CstMatchMode.ALL); const [filterMatch, setFilterMatch] = useLocalStorage(storage.cstFilterMatch, CstMatchMode.ALL);
const [filterSource, setFilterSource] = useLocalStorage(storage.cstFilterGraph, DependencyMode.ALL); const [filterSource, setFilterSource] = useLocalStorage(storage.cstFilterGraph, DependencyMode.ALL);
const [filterText, setFilterText] = useState(''); const [filterText, setFilterText] = useState('');
const [showInherited, setShowInherited] = useLocalStorage(storage.cstFilterShowInherited, true);
useLayoutEffect(() => { useLayoutEffect(() => {
if (!schema || schema.items.length === 0) { if (!schema || schema.items.length === 0) {
@ -48,8 +51,21 @@ function ConstituentsSearch({ schema, activeID, activeExpression, dense, setFilt
if (filterText) { if (filterText) {
result = result.filter(cst => matchConstituenta(cst, filterText, filterMatch)); result = result.filter(cst => matchConstituenta(cst, filterText, filterMatch));
} }
if (!showInherited) {
result = result.filter(cst => !cst.is_inherited);
}
setFiltered(result); setFiltered(result);
}, [filterText, setFiltered, filterSource, activeExpression, schema?.items, schema, filterMatch, activeID]); }, [
filterText,
setFiltered,
filterSource,
activeExpression,
schema?.items,
schema,
filterMatch,
activeID,
showInherited
]);
const selectGraph = useMemo( const selectGraph = useMemo(
() => <SelectGraphFilter value={filterSource} onChange={newValue => setFilterSource(newValue)} dense={dense} />, () => <SelectGraphFilter value={filterSource} onChange={newValue => setFilterSource(newValue)} dense={dense} />,
@ -72,6 +88,15 @@ function ConstituentsSearch({ schema, activeID, activeExpression, dense, setFilt
/> />
{selectMatchMode} {selectMatchMode}
{selectGraph} {selectGraph}
{schema && schema?.stats.count_inherited > 0 ? (
<MiniButton
noHover
titleHtml={`Наследованные: <b>${showInherited ? 'отображать' : 'скрывать'}</b>`}
icon={<IconChild size='1rem' className={showInherited ? 'icon-primary' : 'clr-text-controls'} />}
className='h-fit self-center'
onClick={() => setShowInherited(prev => !prev)}
/>
) : null}
</div> </div>
); );
} }

View File

@ -123,7 +123,8 @@ export const storage = {
ossEdgeAnimate: 'oss.edge_animate', ossEdgeAnimate: 'oss.edge_animate',
cstFilterMatch: 'cst.filter.match', cstFilterMatch: 'cst.filter.match',
cstFilterGraph: 'cst.filter.graph' cstFilterGraph: 'cst.filter.graph',
cstFilterShowInherited: 'cst.filter.show_inherited'
}; };
/** /**