Add pink media stage and sharing modal system

This commit is contained in:
DCCONSTRUCTIONS
2026-07-10 18:21:14 +03:00
parent ebae662b52
commit f1e28c267a
29 changed files with 917 additions and 64 deletions
+11 -1
View File
@@ -79,6 +79,16 @@ Window — единая механика открытия modal и правой
ConfirmationModal оборачивает Window и защищает async-confirm от повторного запуска. До завершения операции закрытие можно заблокировать.
## ShareAccessModal
Workflow-sharing modal из нового Engine: заголовок ресурса, compact avatar stack, список участников, редактирование ролей, удаление доступа, email и роль нового участника. Компонент сохраняет Engine-геометрию `600 px` и controls `46 px`, но не импортирует ACL API. Consumer передаёт members, permissions и callbacks.
Владелец отмечается `immutable`; отсутствие права управления задаётся `canManage`. Backdrop по умолчанию не закрывает access-modal, чтобы пользователь не потерял введённое приглашение.
## ShareLinkModal
Read-only link/copy окно из BIM Viewer. React-компонент использует общий Window, а Vanilla DOM consumer использует `createShareLinkController` вместе с `createModalController`. URL формируется сервисом модели; дизайн-система отвечает только за presentation, copy-state и ошибки адаптера.
## SegmentedControl
Pill navigation для верхней панели и компактного переключения режимов. Active segment использует активную поверхность темы; это не обязательно основной accent приложения.
@@ -130,7 +140,7 @@ Pill navigation для верхней панели и компактного п
## Icon
`Icon` предоставляет только подтверждённый общий subset иконок. Каноническое имя описывает смысл (`close`, `expand`, `refresh`), а не конкретный путь SVG. Базовые размеры — `16`, `18` и `20 px`, stroke — `1.8`.
`Icon` предоставляет только подтверждённый общий subset иконок. Каноническое имя описывает смысл (`close`, `expand`, `refresh`), а не конкретный путь SVG. Default glyph — `17 px`, stroke — `1.7`; внутри кнопок glyph оптически уменьшается до `90%`, но размеры surface/hit target остаются прежними.
Поверхность, круглая форма, hit target, active и disabled состояния принадлежат `IconButton`, `Button` или navigation item. Полный список находится в `registry/icons.json` и `docs/ICONS.md`.
+1 -1
View File
@@ -21,7 +21,7 @@
## DOM consumer
CMS/BIM подключают те же tokens/core styles и `@nodedc/ui-dom`. `createApplicationWorkspaceController`, `createMediaSourceController`, `createFloatingLayer` и `createModalController` связывают стабильную DOM-анатомию с тем же поведением, не вводя React в приложение.
CMS/BIM подключают те же tokens/core styles и `@nodedc/ui-dom`. `createApplicationWorkspaceController`, `createMediaSourceController`, `createShareLinkController`, `createFloatingLayer` и `createModalController` связывают стабильную DOM-анатомию с тем же поведением, не вводя React в приложение.
## Adapter boundary
+4 -4
View File
@@ -6,11 +6,11 @@
| Контекст | Размер glyph | Hit target |
| --- | ---: | ---: |
| Плотная строка/label | `16px` | задаёт строка |
| Обычная кнопка | `18px` | `46px` круг или кнопка с текстом |
| Крупное оконное действие | `20px` | `46.72px` круг |
| Плотная строка/label | `1516px` | задаёт строка |
| Обычная кнопка | `1617px` | `46px` круг или кнопка с текстом |
| Крупное оконное действие | `18px` | `46.72px` круг |
Базовый stroke — `1.8`. Иконка наследует `currentColor`. Фон и active/disabled/hover состояния принадлежат `IconButton`, `Button`, navigation item или другому компоненту поверхности.
Базовый stroke — `1.7`. Внутри кнопок glyph дополнительно получает optical scale `0.9`; hit target и наружная окружность не уменьшаются. Иконка наследует `currentColor`. Фон и active/disabled/hover состояния принадлежат `IconButton`, `Button`, navigation item или другому компоненту поверхности.
## Группы
+4 -1
View File
@@ -38,19 +38,22 @@ CMS подтверждает необходимость DOM-пакета без
- NdcGlassSelect;
- NdcGlassModal;
- новый NDC Agent Inspector;
- GraphsPanel workflow sharing modal и NdcUserAvatarStack;
- styles, непосредственно обслуживающие эти элементы.
Все остальные legacy inspectors и старые plates не участвуют в принятии решений. Их будущее приведение к новому дизайну должно идти через эту библиотеку.
Размеры зафиксированы непосредственно по разрешённым исходникам: панель `390 px`, контент `330 px`, control row `154/14/162 px`, control height `46 px`, split-select `276/8/46 px`, section header `50 px` и radius `12 px`. Скриншоты от 10 июля 2026 года использованы как визуальная проверка, а не как замена исходному CSS.
Workflow sharing добавлен как отдельный разрешённый reference: modal `600 px`, compact stack до трёх avatar, roles `viewer/editor/admin`, immutable owner и приглашение через email. ACL endpoints, directory lookup и тексты backend-ошибок остаются Engine-domain.
## Task Manager / Ops
Используются только уже стандартизированные shared patterns и документы по dropdown/modal behavior. Известные legacy CustomMenu и screen-local wrappers не являются источником компонентов.
## BIM Viewer
Используется как ограничение архитектуры: общий UI должен работать без React. В baseline включены общие требования к toolbar, settings menu и glass select, но не BIM-domain controls.
Используется как ограничение архитектуры: общий UI должен работать без React. Аудит `frontend/index.html`, `dcViewer.css`, `dcViewer.js`, `measurementModal.js` и `objectModal.js` подтвердил шесть modal-композиций: save form, delete confirmation, share link, contextual measurement/object actions, expandable comment detail и large version history. В библиотеку вынесены общая window-механика и share-link controller; BIM-таблицы, комментарии и операции над моделью остаются domain content.
## Аудит иконок
+2 -1
View File
@@ -38,6 +38,8 @@ NODE.DC-приложения отличаются цветовой схемой,
Accent задаётся RGB tuple. On-accent вычисляется по luminance и не должен вручную прописываться белым или чёрным в отдельном компоненте.
Default accent текущего NODE.DC shell — `#ff2f92`. Каталог позволяет менять его через presets и `ColorField`, чтобы проверить любой consumer-цвет без создания новой темы или fork компонентов.
Semantic status не обязан совпадать с accent. Например, ошибка остаётся danger, даже если приложение использует красный брендовый accent.
## Область применения
@@ -53,4 +55,3 @@ Portal-компоненты рендерятся в `document.body`, поэто
## Совместимость
Существующие `--nodedc-*` имена сохранены намеренно. Это уменьшает стоимость будущего подключения Launcher, Engine, Task Manager и BIM Viewer.
+14
View File
@@ -44,6 +44,20 @@ Inline absolute dropdown внутри card/sidebar/sticky container являет
7. body scroll блокируется;
8. после закрытия focus возвращается на предыдущий trigger.
## Карта modal-паттернов
| Тип | Источник | Каноническая реализация |
| --- | --- | --- |
| Form/create/save | Launcher, CMS, BIM | `Window` + Field/Select + footer actions |
| Destructive confirmation | Launcher, Engine, BIM | `ConfirmationModal` |
| Workflow access sharing | новый Engine | `ShareAccessModal` |
| Resource link sharing | BIM Viewer | `ShareLinkModal` / `createShareLinkController` |
| Context actions | BIM measurement/object | `Window size="sm"` + application-owned actions |
| Expandable detail | BIM comment workspace | `Window` или `ApplicationPanel`, domain content остаётся в BIM |
| Large data/history | BIM version history | `Window size="lg"`, data table остаётся domain composition |
Новый тип появляется только если отличается поведением слоя или имеет устойчивую независимую anatomy. Разная таблица, форма или текст внутри Window не создают новую modal-систему.
## Side window / inspector
Side window использует ту же механику, но placement `end` и ограниченную ширину. Это канон для: