F: Improve Manuals and Help UI
Some checks are pending
Frontend CI / build (22.x) (push) Waiting to run
Frontend CI / notify-failure (push) Blocked by required conditions

This commit is contained in:
Ivan 2025-07-21 15:09:30 +03:00
parent ba6cc05e13
commit 0485776a42
16 changed files with 244 additions and 197 deletions

View File

@ -83,7 +83,7 @@ export { TbGps as IconCoordinates } from 'react-icons/tb';
export { IoLibrary as IconLibrary2 } from 'react-icons/io5';
export { BiDiamond as IconTemplates } from 'react-icons/bi';
export { TbHexagons as IconOSS } from 'react-icons/tb';
export { BiScreenshot as IconConceptBlock } from 'react-icons/bi';
export { MdOutlineSelectAll as IconConceptBlock } from 'react-icons/md';
export { TbHexagon as IconRSForm } from 'react-icons/tb';
export { TbAssembly as IconRSFormOwned } from 'react-icons/tb';
export { TbBallFootball as IconRSFormImported } from 'react-icons/tb';

View File

@ -1,5 +1,7 @@
import { Suspense, useState } from 'react';
import { HelpTopic } from '@/features/help';
import { ComboBox } from '@/components/input/combo-box';
import { Loader } from '@/components/loader';
import { ModalView } from '@/components/modal';
@ -14,7 +16,11 @@ export function DlgAIPromptDialog() {
const { items: prompts } = useAvailableTemplatesSuspense();
return (
<ModalView header='Генератор запросом LLM' className='w-100 sm:w-160 px-6 flex flex-col h-120'>
<ModalView
header='Генератор запросом LLM'
className='w-100 sm:w-160 px-6 flex flex-col h-120'
helpTopic={HelpTopic.ASSISTANT}
>
<ComboBox
id='prompt-select'
items={prompts}

View File

@ -2,6 +2,7 @@ import { Controller, useForm, useWatch } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { useAuthSuspense } from '@/features/auth';
import { HelpTopic } from '@/features/help';
import { Checkbox, TextArea, TextInput } from '@/components/input';
import { ModalForm } from '@/components/modal';
@ -52,6 +53,7 @@ export function DlgCreatePromptTemplate() {
onSubmit={event => void handleSubmit(onSubmit)(event)}
submitInvalidTooltip='Введите уникальное название шаблона'
className='cc-column w-140 max-h-120 py-2 px-6'
helpTopic={HelpTopic.ASSISTANT}
>
<TextInput id='dlg_prompt_label' {...register('label')} label='Название шаблона' error={errors.label} />
<TextArea id='dlg_prompt_description' {...register('description')} label='Описание' error={errors.description} />

View File

@ -137,6 +137,7 @@ export function FormPromptTemplate({ promptTemplate, className, isMutable, toggl
title='Сгенерировать пример запроса'
icon={<IconSample size='1.25rem' className='icon-primary' />}
onClick={() => setSampleResult(!!sampleResult ? null : generateSample(text))}
disabled={!text}
/>
</div>

View File

@ -1,6 +1,8 @@
import { Suspense } from 'react';
import { urls, useConceptNavigation } from '@/app';
import { HelpTopic } from '@/features/help';
import { BadgeHelp } from '@/features/help/components/badge-help';
import { Loader } from '@/components/loader';
import { TabLabel, TabList, TabPanel, Tabs } from '@/components/tabs';
@ -59,6 +61,9 @@ export function TemplatesTabs({ activeID, tab }: TemplatesTabsProps) {
<TabLabel label='Список' />
<TabLabel label='Шаблон' />
<TabLabel label='Переменные' />
<div className='flex px-1'>
<BadgeHelp topic={HelpTopic.ASSISTANT} offset={5} />
</div>
</TabList>
<div className='overflow-x-hidden'>
<TabPanel>

View File

@ -0,0 +1,10 @@
// TODO: write content
export function HelpConceptStructuring() {
return (
<div className='text-justify'>
<h1>Структурирование предметной области</h1>
<p>Описание иерархии блоков и ее назначение в рамках предметной области.</p>
</div>
);
}

View File

@ -0,0 +1,14 @@
// TODO: write content
export function HelpAssistant() {
return (
<div className='text-justify'>
<h1>ИИ помощник</h1>
<p>Описание интерфейса редактирования промптов.</p>
<p>
Функционал находится в режиме тестовой эксплуатации. Подключение чат-бота напрямую не поддерживается. Полученный
запрос предполагается отправлять во внешний LLM чат вручную.
</p>
</div>
);
}

View File

@ -36,9 +36,9 @@ export function HelpThesaurus() {
<h1>Тезаурус</h1>
<p>
Данный раздел содержит основные термины и определения, используемые в работе с Порталом. Термины сгруппированы
по ключевым сущностям. Более подробно описание отношений между терминами даются в отдельных разделах данной
Справки через гиперссылки. Также указываются графические обозначения (иконки, цвета), используемые для
обозначения соответствующих сущностей в интерфейсе Портала.
по ключевым сущностям. Дополнительные сведения о связях между терминами представлены в других разделах справки и
доступны через гиперссылки. Также указаны графические обозначения (иконки, цвета), используемые для визуальной
идентификации соответствующих сущностей.
</p>
<h2>Концептуальная схема</h2>
@ -46,14 +46,14 @@ export function HelpThesaurus() {
<IconRSForm size='1rem' className='inline-icon' />
{'\u2009'}
<LinkTopic text='Концептуальная схема' topic={HelpTopic.CC_SYSTEM} /> (<i>система определений, КС</i>)
совокупность отдельных понятий и утверждений, а также связей между ними, задаваемых определениями.
совокупность понятий и утверждений, а также связей между ними, задаваемых определениями.
</p>
<p>
Экспликация КС изложение (процесс и результат) концептуальной схемы с помощью заданного языка описания
набора формальных конструкций и правил построения определений.
Экспликация КС изложение концептуальной схемы с использованием заданного языка описания (набор синтаксических
конструкций и правил построения определений).
</p>
<p>
Родоструктурная экспликация КС экспликация КС с помощью{' '}
Родоструктурная экспликация КС экспликация КС с использованием{' '}
<LinkTopic text='аппарата родов структур' topic={HelpTopic.RSLANG} />.
</p>
<p>
@ -62,186 +62,179 @@ export function HelpThesaurus() {
</p>
<p>
Ядро концептуальной схемы совокупность базовых понятий, аксиом и промежуточных производных понятий,
необходимых для формирования выражений аксиом. Остальные конституенты относят к Телу концептуальной схемы.
Ядро КС базовые понятия, аксиомы и производные понятия, необходимые для формулировки аксиом. Остальные
конституенты образуют Тело КС.
</p>
<ul>
По <b>отношению к операциям ОСС</b> выделены:
Типы КС относительно операций ОСС:
<li>
<IconRSForm size='1rem' className='inline-icon' />
{'\u2009'}свободная КС КС не прикрепленная ни к одной операции в ОСС;
{'\u2009'}Свободная КС не связана с операцией в ОСС.
</li>
<li>
<IconRSFormOwned size='1rem' className='inline-icon' />
{'\u2009'}собственная КС данной ОСС КС, прикрепленная к операции в ОСС, чьи владелец и расположение
совпадают с соответствующими атрибутами ОСС.
{'\u2009'}Собственная КС данной ОСС прикреплена к операции, совпадающей по владельцу и расположению с данной
ОСС.
</li>
<li>
<IconRSFormImported size='1rem' className='inline-icon' />
{'\u2009'}внешняя КС данной ОСС КС, прикрепленная к операции в ОСС, чьи владелец или расположение не
совпадают с соответствующими атрибутами ОСС;
{'\u2009'}Внешняя КС данной ОСС прикреплена к операции, владельцы или расположение которой отличаются от
соответствующих атрибутов ОСС.
</li>
</ul>
<h2>Конституента</h2>
<p>
Конституента выделенная часть КС, являющаяся отдельным понятием, схемой построения понятия, либо утверждением,
Конституента часть КС, являющаяся отдельным понятием, схемой построения понятия, либо утверждением,
связывающим введенные понятия. <LinkTopic text='Аттрибутами конституенты' topic={HelpTopic.CC_CONSTITUENTA} /> в
родоструктурной экспликации являются Термин, Конвенция, Типизация (Структура), Формальное определение, Текстовое
определение, Комментарий.
</p>
<br />
<ul>
По <b>характеру формального определения в рамках КС</b> выделены классы:
<b>Классификация по характеру формального определения</b>
<li>
базовое понятие (<i>неопределяемое понятие</i>) не имеет определения и задано конвенцией и аксиомами;
Базовое понятие (<i>неопределяемое понятие</i>) не имеет определения и задано конвенцией и аксиомами.
</li>
<li>
производное понятие (<i>выводимое понятие</i>) имеет определение.
Производное понятие (<i>выводимое понятие</i>) имеет формальное определение.
</li>
<li>утверждение определяется через логическое выражение.</li>
<li>шаблон определения содержит несвязанный параметр в определении.</li>
<li>Утверждение задается логическим выражением.</li>
<li>Шаблон содержит несвязанный параметр в определении.</li>
</ul>
<br />
<ul>
По <b>назначению</b> выделены типы конституент:
<b>Типы конституент</b>
<li>
<IconCstBaseSet size='1rem' className='inline-icon' />
{'\u2009'}базисное множество (X#) представляет неопределяемое понятие, представленное структурой множества,
чьи элементы различимы и не сравнимы с элементами других базисных множеств;
{'\u2009'}Базисное множество (X#) неопределяемое понятие, представленное множеством различимых элементов.
</li>
<li>
<IconCstConstSet size='1rem' className='inline-icon' />
{'\u2009'}константное множество (C#) представляет неопределяемое понятие, моделируемое термом теории множеств,
который поддерживает ряд формальных операций над его элементами;
{'\u2009'}Константное множество (C#) неопределяемое понятие, моделируемое термом теории множеств, который
поддерживает ряд формальных операций над его элементами.
</li>
<li>
<IconCstStructured size='1rem' className='inline-icon' />
{'\u2009'}родовая структура (S#) представляет неопределяемое понятие, имеющее определенную структуру,
построенную на базисных множествах и константных множеств. Содержание родовой структуры формируется{' '}
<LinkTopic text='отношением типизации' topic={HelpTopic.RSL_TYPES} />, аксиомами и конвенцией;
{'\u2009'}родовая структура (S#) неопределяемое понятие, имеющее структуру, построенную на базисных
множествах и константных множеств. Содержание родовой структуры формируется{' '}
<LinkTopic text='отношением типизации' topic={HelpTopic.RSL_TYPES} />, аксиомами и конвенцией.
</li>
<li>
<IconCstAxiom size='1rem' className='inline-icon' />
{'\u2009'}аксиома (A#) представляет утверждение, ограничивающее неопределяемые понятия и выводимые термы.
Интерпретация аксиомы должна быть истинна и является критерием корректности интерпретации КС в целом;
{'\u2009'}аксиома (A#) утверждение, ограничивающее неопределяемые понятия и выводимые термы. Интерпретация
всех аксиом должна быть истинна, чтобы КС являлась теорией данной предметной области.
</li>
<li>
<IconCstTerm size='1rem' className='inline-icon' />
{'\u2009'}терм (D#) представляет выводимое понятие через формальное определение;
{'\u2009'}терм (D#) выводимое понятие.
</li>
<li>
<IconCstFunction size='1rem' className='inline-icon' />
{'\u2009'}терм-функция (F#) представляет выводимое понятие (возможно параметризованное), имеющее характер
функционального отношения между набором аргументов и результатом;
{'\u2009'}терм-функция (F#) параметризованное выводимое понятие, имеющее характер функционального отношения
между набором аргументов и результатом.
</li>
<li>
<IconCstPredicate size='1rem' className='inline-icon' />
{'\u2009'}предикат-функция (P#) представляет выводимое понятие (возможно параметризованное), имеющее характер
логического выражения, проверяющее заданные аргументы на соответствие некоторому условию;
{'\u2009'}предикат-функция (P#) выводимое понятие, имеющее характер логического выражения, проверяющее
заданные аргументы на соответствие некоторому условию.
</li>
<li>
<IconCstTheorem size='1rem' className='inline-icon' />
{'\u2009'}теорема (T#) представляет ценное для предметной утверждение, значение которого может быть как
истинным так и ложным;
{'\u2009'}теорема (T#) предметно значимое утверждение, которое может быть как истинным так и ложным.
</li>
</ul>
<br />
<ul>
По <b>графу термов</b> выделены:
<b>Отношения по вхождению в определение</b>
<li>
<IconGraphOutputs size='1rem' className='inline-icon' />
{'\u2009'}потребители данной конституенты конституенты, определения которых используют данную конституенту
{'\u2009'}Потребители используют конституенту в своих определениях.
</li>
<li>
<IconGraphInputs size='1rem' className='inline-icon' />
{'\u2009'}поставщики данной конституенты конституенты, имена которых используются в определении данной
конституенты
{'\u2009'}Поставщики упоминаются в определении данной конституенты.
</li>
<li>
<IconGraphExpand size='1rem' className='inline-icon' />
{'\u2009'}зависимые от данной конституенты потребители данной конституенты напрямую или по цепочке
{'\u2009'}Зависимые потребители, напрямую или по цепочке.
</li>
<li>
<IconGraphCollapse size='1rem' className='inline-icon' />
{'\u2009'}влияющие на данную конституенту поставщики данной конституенты напрямую или по цепочке
{'\u2009'}Влияющие поставщики, напрямую или по цепочке.
</li>
</ul>
<br />
<ul>
Для описания <b>тесно связанных понятий</b> введены следующие термины:
<b>Тесно связанные понятия</b>
<li>
порождающее выражение формальное определение, основанное на одной внешней конституенте и использующее только
формальное разворачивание (не вводит нового предметного содержания);
</li>
<li>основа данного понятия понятие, на котором основано порождающее выражение данной конституенты;</li>
<li>
порожденное понятие данным понятием понятие, определением которого является порождающим выражением,
основанным на данном понятии.
Порождающее выражение формальное определение на основе одной внешней конституенты без добавления нового
содержания.
</li>
<li>Основа данного понятия понятие, на котором построено порождающее выражение.</li>
<li>Порожденное понятие определяется через порождающее выражение, основанное на другом понятии.</li>
</ul>
<br />
<ul>
Для характеристики <b>корректности определения</b> введены статусы конституент:
<b>Статусы корректности определения конституенты</b>
<li>
<IconStatusUnknown size='1rem' className='inline-icon' />
{'\u2009'}не проверено требуется проверка формального определения (промежуточный статус);
{'\u2009'}не проверено требуется проверка определения.
</li>
<li>
<IconStatusOK size='1rem' className='inline-icon' />
{'\u2009'}корректно формальное определение корректно;
{'\u2009'}корректно определение корректно.
</li>
<li>
<IconStatusError size='1rem' className='inline-icon' />
{'\u2009'}ошибочно ошибка в формальном определении;
{'\u2009'}ошибочно обнаружена ошибка.;
</li>
<li>
<IconStatusProperty size='1rem' className='inline-icon' />
{'\u2009'}неразмерное формальное определение задает невычислимое множество, для которого возможно вычислить
предикат проверки принадлежности;
{'\u2009'}неразмерное задает невычислимое множество, для которого возможна проверка принадлежности;
</li>
<li>
<IconStatusIncalculable size='1rem' className='inline-icon' />
{'\u2009'}невычислимо формальное определение невозможно интерпретировать напрямую;
{'\u2009'}невычислимо определение невозможно интерпретировать напрямую;
</li>
</ul>
<br />
<ul>
Для описания <b>отождествления</b> введены:
<li>отождествляемые конституенты конституенты, состоящие в отождествлении;</li>
<li>удаляемая конституента конституента, удаляемая в ходе отождествления;</li>
<li>
замещающая конституента конституента, обозначение которой замещает обозначение удаляемой конституенты в
формальных выражениях иных конституент в ходе отождествления;
</li>
<b>Отождествление конституент</b>
<li>Отождествляемые конституенты входят в отношение отождествления.</li>
<li>Удаляемая конституента, подлежащая удалению.</li>
<li>Замещающая конституента, чьё обозначение заменяет удаляемое.</li>
</ul>
<br />
<ul>
Для описания <b>наследования</b> конституент в рамках ОСС введены:
<b>Наследование конституент (в рамках ОСС)</b>
<li>
<IconChild size='1rem' className='inline-icon' />
{'\u2009'}наследованная конституента конституента, перенесенная из другой КС в ходе синтеза;
{'\u2009'}Наследованная конституента получена из другой КС.
</li>
<li>
<IconPredecessor size='1rem' className='inline-icon' />
{'\u2009'}собственная конституента конституента, не являющаяся наследованной;
{'\u2009'}Собственная не является наследованной.
</li>
<li>
<IconPredecessor size='1rem' className='inline-icon' />
{'\u2009'}исходная конституента для данной конституенты собственная конституента, прямым или опосредованным
наследником которой является данная конституента.
{'\u2009'}Исходная собственная конституента, прямым или опосредованным наследником которой является данная
конституента.
</li>
</ul>
@ -252,12 +245,8 @@ export function HelpThesaurus() {
<LinkTopic text='Операционная схема синтеза' topic={HelpTopic.CC_OSS} /> (ОСС) система операций над
концептуальными схемами.
</p>
<p>
Граф синтеза ориентированный граф, вершинами которого являются операции, а ребра указывают на использование
результата одной операции как аргумента другой операции.
</p>
<p>Граф синтеза ориентированный граф, где вершины операции, а ребра зависимости по результатам операций.</p>
<h2>Операция</h2>
<p>Операция выделенная часть ОСС, определяющая способ получения КС в рамках ОСС.</p>
<p>
<IconConsolidation className='inline-icon' />
@ -265,10 +254,10 @@ export function HelpThesaurus() {
</p>
<ul>
По <b>способу получения КС выделены</b>:
<b>Типы операций в ОСС</b>
<li>
<IconDownload size='1rem' className='inline-icon' />
{'\u2009'}загрузка КС из библиотеки;
{'\u2009'}загрузка КС из библиотеки.
</li>
<li>
<IconSynthesis size='1rem' className='inline-icon' />

View File

@ -1,4 +1,5 @@
import {
IconDownload,
IconFilterReset,
IconFolder,
IconFolderClosed,
@ -24,7 +25,7 @@ export function HelpLibrary() {
return (
<div>
<h1>Библиотека схем</h1>
<p>
<p className='m-0'>
В библиотеке собраны <IconRSForm size='1rem' className='inline-icon' />{' '}
<LinkTopic text='концептуальные схемы' topic={HelpTopic.CC_SYSTEM} /> (КС) <br />и
<IconOSS size='1rem' className='inline-icon' />{' '}
@ -42,6 +43,9 @@ export function HelpLibrary() {
<kbd>{isMac() ? 'Cmd + клик' : 'Ctrl + клик'}</kbd> по строке откроет схему в новой вкладке
</li>
<li>Фильтры атрибутов три позиции: да/нет/не применять</li>
<li>
<IconLeftClose size='1rem' className='inline-icon' /> отображение Проводника
</li>
<li>
<IconShow size='1rem' className='inline-icon' /> фильтры атрибутов применяются по клику
</li>
@ -54,23 +58,17 @@ export function HelpLibrary() {
<li>
<IconFilterReset size='1rem' className='inline-icon' /> сбросить фильтры
</li>
<li>
<IconLeftClose size='1rem' className='inline-icon' /> отображение Проводника
</li>
<li>
<IconSortAsc size='1rem' className='inline-icon' />
<IconSortDesc size='1rem' className='inline-icon' /> сортировка по клику на заголовок таблицы
</li>
<li>
<IconDownload size='1rem' className='inline-icon' /> выгрузка таблицы в файл
</li>
</ul>
<h2>Проводник</h2>
<ul>
<li>
<IconFolderEdit size='1rem' className='inline-icon' /> переименовать выбранную
</li>
<li>
<IconSubfolders size='1rem' className='inline-icon icon-green' /> схемы во вложенных папках
</li>
<li>
<kbd>клик</kbd> по папке отображает справа схемы в ней
</li>
@ -84,6 +82,12 @@ export function HelpLibrary() {
<li>
<kbd>клик</kbd> по иконке сворачивает/разворачивает вложенные
</li>
<li>
<IconFolderEdit size='1rem' className='inline-icon' /> переименовать выбранную
</li>
<li>
<IconSubfolders size='1rem' className='inline-icon' /> схемы во вложенных папках
</li>
<li>
<IconFolderEmpty size='1rem' className='inline-icon text-foreground' /> папка без схем
</li>

View File

@ -3,6 +3,7 @@ import {
IconAlias,
IconClone,
IconDestroy,
IconDownload,
IconMoveDown,
IconMoveUp,
IconNewItem,
@ -65,6 +66,9 @@ export function HelpRSList() {
<li>
<IconDestroy className='inline-icon icon-red' /> удаление выделенных: <kbd>Delete</kbd>
</li>
<li>
<IconDownload className='inline-icon' /> выгрузка таблицы в файл
</li>
</ul>
<Divider margins='my-2' />

View File

@ -1,109 +1,111 @@
import { HelpTopic } from './models/help-topic';
/**
* Retrieves label for {@link HelpTopic}.
*/
const labelHelpTopicRecord: Record<HelpTopic, string> = {
[HelpTopic.MAIN]: '🏠 Портал',
[HelpTopic.THESAURUS]: '📖 Тезаурус',
[HelpTopic.INTERFACE]: '🌀 Интерфейс',
[HelpTopic.UI_LIBRARY]: 'Библиотека',
[HelpTopic.UI_RS_MENU]: 'Меню схемы',
[HelpTopic.UI_RS_CARD]: 'Паспорт схемы',
[HelpTopic.UI_RS_LIST]: 'Список конституент',
[HelpTopic.UI_RS_EDITOR]: 'Редактор конституенты',
[HelpTopic.UI_GRAPH_TERM]: 'Граф термов',
[HelpTopic.UI_FORMULA_TREE]: 'Дерево разбора',
[HelpTopic.UI_TYPE_GRAPH]: 'Граф ступеней',
[HelpTopic.UI_CST_STATUS]: 'Статус конституенты',
[HelpTopic.UI_CST_CLASS]: 'Класс конституенты',
[HelpTopic.UI_OSS_GRAPH]: 'Граф синтеза',
[HelpTopic.UI_SUBSTITUTIONS]: 'Отождествления',
[HelpTopic.UI_RELOCATE_CST]: 'Перенос конституент',
[HelpTopic.CONCEPTUAL]: '♨️ Концептуализация',
[HelpTopic.CC_SYSTEM]: 'Система определений',
[HelpTopic.CC_CONSTITUENTA]: 'Конституента',
[HelpTopic.CC_RELATIONS]: 'Связи понятий',
[HelpTopic.CC_SYNTHESIS]: 'Синтез схем',
[HelpTopic.CC_STRUCTURING]: 'Структурирование',
[HelpTopic.CC_OSS]: 'Операционная схема',
[HelpTopic.CC_PROPAGATION]: 'Сквозные изменения',
[HelpTopic.RSLANG]: '🚀 Экспликация',
[HelpTopic.RSL_TYPES]: 'Типизация',
[HelpTopic.RSL_CORRECT]: 'Переносимость',
[HelpTopic.RSL_INTERPRET]: 'Интерпретируемость',
[HelpTopic.RSL_OPERATIONS]: 'Операции',
[HelpTopic.RSL_TEMPLATES]: 'Банк выражений',
[HelpTopic.TERM_CONTROL]: '🪸 Терминологизация',
[HelpTopic.ACCESS]: '🔐 Доступы',
[HelpTopic.VERSIONS]: '🏺 Версионирование',
[HelpTopic.ASSISTANT]: '🤖 ИИ-помощник',
[HelpTopic.INFO]: '📰 Информация',
[HelpTopic.INFO_RULES]: 'Правила',
[HelpTopic.INFO_CONTRIB]: 'Разработчики',
[HelpTopic.INFO_PRIVACY]: 'Обработка данных',
[HelpTopic.INFO_API]: 'REST API',
[HelpTopic.EXTEOR]: '🖥️ Экстеор'
};
const describeHelpTopicRecord: Record<HelpTopic, string> = {
[HelpTopic.MAIN]: 'общая справка по порталу',
[HelpTopic.THESAURUS]: 'термины Портала',
[HelpTopic.INTERFACE]: 'описание интерфейса пользователя',
[HelpTopic.UI_LIBRARY]: 'поиск и просмотр схем',
[HelpTopic.UI_RS_MENU]: 'меню редактирования схемы',
[HelpTopic.UI_RS_CARD]: 'общие атрибуты схемы',
[HelpTopic.UI_RS_LIST]: 'концептуальная схема <br/>в форме таблицы',
[HelpTopic.UI_RS_EDITOR]: 'редактирование конституенты',
[HelpTopic.UI_GRAPH_TERM]: 'интерфейс графа термов',
[HelpTopic.UI_FORMULA_TREE]: 'просмотр дерева разбора <br/>родоструктурного выражения',
[HelpTopic.UI_TYPE_GRAPH]: 'просмотр графа ступеней',
[HelpTopic.UI_CST_STATUS]: 'нотация статуса конституенты',
[HelpTopic.UI_CST_CLASS]: 'нотация класса конституенты',
[HelpTopic.UI_OSS_GRAPH]: 'графическая форма <br/>операционной схемы синтеза',
[HelpTopic.UI_SUBSTITUTIONS]: 'таблица отождествлений конституент',
[HelpTopic.UI_RELOCATE_CST]: 'перенос конституент<br/>в рамках ОСС',
[HelpTopic.CONCEPTUAL]: 'основы концептуализации',
[HelpTopic.CC_SYSTEM]: 'концептуальная схема <br/>как система понятий',
[HelpTopic.CC_CONSTITUENTA]: 'понятия конституенты и ее атрибутов',
[HelpTopic.CC_RELATIONS]: 'отношения между конституентами',
[HelpTopic.CC_SYNTHESIS]: 'операция синтеза концептуальных схем',
[HelpTopic.CC_STRUCTURING]: 'структурирование предметной области',
[HelpTopic.CC_OSS]: 'операционная схема синтеза',
[HelpTopic.CC_PROPAGATION]: 'сквозные изменения в ОСС',
[HelpTopic.RSLANG]: 'экспликация и язык родов структур',
[HelpTopic.RSL_TYPES]: 'система типов в <br/>родоструктурной экспликации',
[HelpTopic.RSL_CORRECT]: 'биективная переносимость',
[HelpTopic.RSL_INTERPRET]: 'интерпретация определений <br/>и утверждений',
[HelpTopic.RSL_OPERATIONS]: 'формальные операции',
[HelpTopic.RSL_TEMPLATES]: 'применение Банка выражений',
[HelpTopic.TERM_CONTROL]: 'контроль терминов и текстовых отсылок',
[HelpTopic.ACCESS]: 'организация доступов к схемам',
[HelpTopic.VERSIONS]: 'справка по управлению версиями схем',
[HelpTopic.ASSISTANT]: 'функционал ИИ-помощника',
[HelpTopic.INFO]: 'справочные, нормативные <br/>и технические документы',
[HelpTopic.INFO_RULES]: 'правила пользования Порталом',
[HelpTopic.INFO_CONTRIB]: 'признание вклада <br/>в создание Портала',
[HelpTopic.INFO_PRIVACY]: 'политика обработки <br/>персональных данных',
[HelpTopic.INFO_API]: 'интерфейс для разработчиков',
[HelpTopic.EXTEOR]: 'программа экспликации теорий <br/>"Экстеор" для Windows'
};
/** Retrieves label for {@link HelpTopic}. */
export function labelHelpTopic(topic: HelpTopic): string {
// prettier-ignore
switch (topic) {
case HelpTopic.MAIN: return '🏠 Портал';
case HelpTopic.THESAURUS: return '📖 Тезаурус';
case HelpTopic.INTERFACE: return '🌀 Интерфейс';
case HelpTopic.UI_LIBRARY: return 'Библиотека';
case HelpTopic.UI_RS_MENU: return 'Меню схемы';
case HelpTopic.UI_RS_CARD: return 'Паспорт схемы';
case HelpTopic.UI_RS_LIST: return 'Список конституент';
case HelpTopic.UI_RS_EDITOR: return 'Редактор конституенты';
case HelpTopic.UI_GRAPH_TERM: return 'Граф термов';
case HelpTopic.UI_FORMULA_TREE: return 'Дерево разбора';
case HelpTopic.UI_TYPE_GRAPH: return 'Граф ступеней';
case HelpTopic.UI_CST_STATUS: return 'Статус конституенты';
case HelpTopic.UI_CST_CLASS: return 'Класс конституенты';
case HelpTopic.UI_OSS_GRAPH: return 'Граф синтеза';
case HelpTopic.UI_SUBSTITUTIONS: return 'Отождествления';
case HelpTopic.UI_RELOCATE_CST: return 'Перенос конституент';
case HelpTopic.CONCEPTUAL: return '♨️ Концептуализация';
case HelpTopic.CC_SYSTEM: return 'Система определений';
case HelpTopic.CC_CONSTITUENTA: return 'Конституента';
case HelpTopic.CC_RELATIONS: return 'Связи понятий';
case HelpTopic.CC_SYNTHESIS: return 'Синтез схем';
case HelpTopic.CC_OSS: return 'Операционная схема';
case HelpTopic.CC_PROPAGATION: return 'Сквозные изменения';
case HelpTopic.RSLANG: return '🚀 Экспликация';
case HelpTopic.RSL_TYPES: return 'Типизация';
case HelpTopic.RSL_CORRECT: return 'Переносимость';
case HelpTopic.RSL_INTERPRET: return 'Интерпретируемость';
case HelpTopic.RSL_OPERATIONS: return 'Операции';
case HelpTopic.RSL_TEMPLATES: return 'Банк выражений';
case HelpTopic.TERM_CONTROL: return '🪸 Терминологизация';
case HelpTopic.ACCESS: return '🔐 Доступы';
case HelpTopic.VERSIONS: return '🏺 Версионирование';
case HelpTopic.INFO: return '📰 Информация';
case HelpTopic.INFO_RULES: return 'Правила';
case HelpTopic.INFO_CONTRIB: return 'Разработчики';
case HelpTopic.INFO_PRIVACY: return 'Обработка данных';
case HelpTopic.INFO_API: return 'REST API';
case HelpTopic.EXTEOR: return '🖥️ Экстеор';
}
return labelHelpTopicRecord[topic] ?? 'UNKNOWN TOPIC';
}
/**
* Retrieves description for {@link HelpTopic}.
*/
/** Retrieves description for {@link HelpTopic}. */
export function describeHelpTopic(topic: HelpTopic): string {
// prettier-ignore
switch (topic) {
case HelpTopic.MAIN: return 'общая справка по порталу';
case HelpTopic.THESAURUS: return 'термины Портала';
case HelpTopic.INTERFACE: return 'описание интерфейса пользователя';
case HelpTopic.UI_LIBRARY: return 'поиск и просмотр схем';
case HelpTopic.UI_RS_MENU: return 'меню редактирования схемы';
case HelpTopic.UI_RS_CARD: return 'общие атрибуты схемы';
case HelpTopic.UI_RS_LIST: return 'концептуальная схема <br/>в форме таблицы';
case HelpTopic.UI_RS_EDITOR: return 'редактирование конституенты';
case HelpTopic.UI_GRAPH_TERM: return 'интерфейс графа термов';
case HelpTopic.UI_FORMULA_TREE: return 'просмотр дерева разбора <br/>родоструктурного выражения';
case HelpTopic.UI_TYPE_GRAPH: return 'просмотр графа ступеней';
case HelpTopic.UI_CST_STATUS: return 'нотация статуса конституенты';
case HelpTopic.UI_CST_CLASS: return 'нотация класса конституенты';
case HelpTopic.UI_OSS_GRAPH: return 'графическая форма <br/>операционной схемы синтеза';
case HelpTopic.UI_SUBSTITUTIONS: return 'таблица отождествлений конституент';
case HelpTopic.UI_RELOCATE_CST: return 'перенос конституент<br/>в рамках ОСС';
case HelpTopic.CONCEPTUAL: return 'основы концептуализации';
case HelpTopic.CC_SYSTEM: return 'концептуальная схема <br/>как система понятий';
case HelpTopic.CC_CONSTITUENTA: return 'понятия конституенты и ее атрибутов';
case HelpTopic.CC_RELATIONS: return 'отношения между конституентами';
case HelpTopic.CC_SYNTHESIS: return 'операция синтеза концептуальных схем';
case HelpTopic.CC_OSS: return 'операционная схема синтеза';
case HelpTopic.CC_PROPAGATION: return 'сквозные изменения в ОСС';
case HelpTopic.RSLANG: return 'экспликация и язык родов структур';
case HelpTopic.RSL_TYPES: return 'система типов в <br/>родоструктурной экспликации';
case HelpTopic.RSL_CORRECT: return 'биективная переносимость';
case HelpTopic.RSL_INTERPRET: return 'интерпретация определений <br/>и утверждений';
case HelpTopic.RSL_OPERATIONS: return 'формальные операции';
case HelpTopic.RSL_TEMPLATES: return 'применение Банка выражений';
case HelpTopic.TERM_CONTROL: return 'контроль терминов и текстовых отсылок';
case HelpTopic.ACCESS: return 'организация доступов к схемам';
case HelpTopic.VERSIONS: return 'справка по управлению версиями схем';
case HelpTopic.INFO: return 'справочные, нормативные <br/>и технические документы';
case HelpTopic.INFO_RULES: return 'правила пользования Порталом';
case HelpTopic.INFO_CONTRIB: return 'признание вклада <br/>в создание Портала';
case HelpTopic.INFO_PRIVACY: return 'политика обработки <br/>персональных данных';
case HelpTopic.INFO_API: return 'интерфейс для разработчиков';
case HelpTopic.EXTEOR: return 'программа экспликации теорий <br/>"Экстеор" для Windows';
}
return describeHelpTopicRecord[topic] ?? 'UNKNOWN TOPIC';
}

View File

@ -26,6 +26,7 @@ export const HelpTopic = {
CC_CONSTITUENTA: 'concept-constituenta',
CC_RELATIONS: 'concept-relations',
CC_SYNTHESIS: 'concept-synthesis',
CC_STRUCTURING: 'concept-structuring',
CC_OSS: 'concept-operations-schema',
CC_PROPAGATION: 'concept-change-propagation',
@ -39,6 +40,7 @@ export const HelpTopic = {
TERM_CONTROL: 'terminology-control',
ACCESS: 'access',
VERSIONS: 'versions',
ASSISTANT: 'assistant',
INFO: 'documentation',
INFO_RULES: 'rules',
@ -79,6 +81,7 @@ export const topicParent = new Map<HelpTopic, HelpTopic>([
[HelpTopic.CC_CONSTITUENTA, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_RELATIONS, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_SYNTHESIS, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_STRUCTURING, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_OSS, HelpTopic.CONCEPTUAL],
[HelpTopic.CC_PROPAGATION, HelpTopic.CONCEPTUAL],

View File

@ -3,10 +3,12 @@ import { useWindowSize } from '@/hooks/use-window-size';
import { HelpConceptOSS } from '../../items/cc/help-concept-oss';
import { HelpConceptPropagation } from '../../items/cc/help-concept-propagation';
import { HelpConceptRelations } from '../../items/cc/help-concept-relations';
import { HelpConceptStructuring } from '../../items/cc/help-concept-structuring';
import { HelpConceptSynthesis } from '../../items/cc/help-concept-synthesis';
import { HelpConceptSystem } from '../../items/cc/help-concept-system';
import { HelpCstAttributes } from '../../items/cc/help-cst-attributes';
import { HelpAccess } from '../../items/help-access';
import { HelpAssistant } from '../../items/help-assistant';
import { HelpConcept } from '../../items/help-concept';
import { HelpExteor } from '../../items/help-exteor';
import { HelpInfo } from '../../items/help-info';
@ -77,6 +79,7 @@ export function TopicPage({ topic }: TopicPageProps) {
if (topic === HelpTopic.CC_CONSTITUENTA) return <HelpCstAttributes />;
if (topic === HelpTopic.CC_RELATIONS) return <HelpConceptRelations />;
if (topic === HelpTopic.CC_SYNTHESIS) return <HelpConceptSynthesis />;
if (topic === HelpTopic.CC_STRUCTURING) return <HelpConceptStructuring />;
if (topic === HelpTopic.CC_OSS) return <HelpConceptOSS />;
if (topic === HelpTopic.CC_PROPAGATION) return <HelpConceptPropagation />;
@ -90,6 +93,7 @@ export function TopicPage({ topic }: TopicPageProps) {
if (topic === HelpTopic.TERM_CONTROL) return <HelpTerminologyControl />;
if (topic === HelpTopic.ACCESS) return <HelpAccess />;
if (topic === HelpTopic.VERSIONS) return <HelpVersions />;
if (topic === HelpTopic.ASSISTANT) return <HelpAssistant />;
if (topic === HelpTopic.INFO) return <HelpInfo />;
if (topic === HelpTopic.INFO_RULES) return <HelpRules />;

View File

@ -80,7 +80,7 @@ export function DlgCreateBlock() {
canSubmit={isValid}
onSubmit={event => void methods.handleSubmit(onSubmit)(event)}
className='w-160 px-6 h-110'
helpTopic={HelpTopic.CC_OSS}
helpTopic={HelpTopic.CC_STRUCTURING}
>
<Tabs className='grid' selectedIndex={activeTab} onSelect={index => setActiveTab(index as TabID)}>
<TabList className='z-pop mx-auto -mb-5 flex border divide-x rounded-none'>

View File

@ -3,6 +3,8 @@
import { Controller, useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import { HelpTopic } from '@/features/help';
import { TextArea, TextInput } from '@/components/input';
import { ModalForm } from '@/components/modal';
import { useDialogsStore } from '@/stores/dialogs';
@ -56,6 +58,7 @@ export function DlgEditBlock() {
canSubmit={isValid}
onSubmit={event => void handleSubmit(onSubmit)(event)}
className='w-160 px-6 pb-2 h-fit cc-column'
helpTopic={HelpTopic.CC_STRUCTURING}
>
<TextInput
id='operation_title' //

View File

@ -88,12 +88,12 @@ const labelExpressionStatusRecord: Record<ExpressionStatus, string> = {
};
const describeExpressionStatusRecord: Record<ExpressionStatus, string> = {
[ExpressionStatus.VERIFIED]: 'выражение корректно и вычислимо',
[ExpressionStatus.INCORRECT]: 'ошибка в выражении',
[ExpressionStatus.VERIFIED]: 'корректно и вычислимо',
[ExpressionStatus.INCORRECT]: 'обнаружена ошибка',
[ExpressionStatus.INCALCULABLE]: 'интерпретация не вычисляется',
[ExpressionStatus.PROPERTY]: 'только проверка принадлежности',
[ExpressionStatus.UNKNOWN]: 'требует проверки выражения',
[ExpressionStatus.UNDEFINED]: 'произошла ошибка при проверке'
[ExpressionStatus.UNKNOWN]: 'требуется проверка',
[ExpressionStatus.UNDEFINED]: 'ошибка при проверке'
};
const labelGrammemeRecord: Partial<Record<Grammeme, string>> = {