70 lines
4.7 KiB
Markdown
70 lines
4.7 KiB
Markdown
# NDC Module Studio
|
||
|
||
Текущий living catalog эволюционирует в Module Studio без создания второго визуального приложения. Существующие разделы остаются `Visual Library`; рядом живут `Page Library` и `Applications`. Первый вертикальный срез не подключает Engine, Cesium, Authentik, Hub или Deploy.
|
||
|
||
## Page Template contract v0.1
|
||
|
||
Канонические TypeScript-контракты и manifests находятся в `@nodedc/page-patterns`, машинно-читаемый реестр — в `registry/pages.json`.
|
||
|
||
Первый шаблон `Map Page 0.1.0` формально фиксирует:
|
||
|
||
- template identity и pinned version;
|
||
- стартовую страницу и navigation defaults;
|
||
- разрешённые feature flags `Inspector`, `Toolbar`, `Assistant`;
|
||
- runtime-neutral slots `points`, `traces`, `routes`, `zones`, `selection`, `commands`, `assistant`;
|
||
- template-owned actions.
|
||
|
||
Шаблон не содержит Cesium token, Engine workflow, React component tree или свободные координаты элементов. Renderer/Cesium adapter и Capability Bindings являются отдельными следующими слоями.
|
||
|
||
## Application Manifest v0.1
|
||
|
||
Каноническая JSON Schema: `registry/schemas/application-manifest-v0.1.schema.json`.
|
||
|
||
Manifest фиксирует:
|
||
|
||
- identity, slug, draft status и версию;
|
||
- ссылку на Design Profile и Dark/Light;
|
||
- хотя бы одну страницу и pinned page-template version;
|
||
- navigation visibility;
|
||
- только заранее разрешённые feature flags;
|
||
- favicon source;
|
||
- server-controlled timestamps.
|
||
|
||
Manifest не хранит runtime credentials, capability bindings, arbitrary component tree, свободные координаты элементов или deployment secrets.
|
||
|
||
## Draft lifecycle
|
||
|
||
Catalog server предоставляет минимальный временный API:
|
||
|
||
- `GET /api/applications` — список drafts;
|
||
- `GET /api/page-templates` — получить канонический page registry;
|
||
- `POST /api/applications` — создать draft из явно выбранных `templateId` и `templateVersion`;
|
||
- `GET /api/applications/:id` — открыть draft;
|
||
- `PUT /api/applications/:id` — атомарно сохранить draft.
|
||
|
||
Файлы находятся в `runtime-data/applications` и исключены из Git. Этот store доказывает lifecycle `create → save → reload → open`; целевой production store позже принадлежит Platform `application-core`.
|
||
|
||
## Согласованный UX Application Projects
|
||
|
||
- круглая кнопка `+` в заголовке Applications открывает модалку создания модуля;
|
||
- текущий модуль выбирается через Hub-style searchable selector, а не через плоский список проектов;
|
||
- root модуля содержит metadata, ссылку на один pinned Design Profile и Application Composition;
|
||
- Dark/Light, favicon, Glass и прочие визуальные параметры не настраиваются внутри модуля;
|
||
- две равные колонки `Доступные страницы / Конфигурация приложения` работают только с готовыми Page Templates;
|
||
- drag-and-drop меняет состав и порядок ссылок на шаблоны, но не создаёт свободный canvas;
|
||
- после сохранения страницы появляются в левой навигации и открывают визуальный preview;
|
||
- режимы `Настройка / Предпросмотр` разделяют Studio controls и поведение будущего приложения;
|
||
- удаление draft выполняется только через destructive confirmation modal.
|
||
|
||
## Design Profile lifecycle
|
||
|
||
Visual Library использует отдельный Hub-style selector профилей. Общая кнопка Save открывает каноническую модалку `Сохранить / Сохранить как новый`. Приложение хранит только pinned `profile id + version + theme`; media, favicon и material settings принадлежат Design Profile.
|
||
|
||
Временный catalog server предоставляет:
|
||
|
||
- `GET /api/design-profiles`;
|
||
- `GET /api/design-profiles/:id`;
|
||
- `POST /api/design-profiles`;
|
||
- `PUT /api/design-profiles/:id`;
|
||
- `DELETE /api/applications/:id` с переносом draft в локальное deleted-storage.
|