From 70ce00f2d091265ccc163bb0074130dd7063698f Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 6 Sep 2026 01:34:15 +0300 Subject: [PATCH] docs(ui): define compact feedback and nonblocking inspector close --- docs/COMPONENTS.md | 2 ++ docs/GOVERNANCE.md | 7 ++++++- registry/components.json | 5 ++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/COMPONENTS.md b/docs/COMPONENTS.md index 159e90a..b19e20f 100644 --- a/docs/COMPONENTS.md +++ b/docs/COMPONENTS.md @@ -104,6 +104,8 @@ Window — единая механика открытия modal и правой Содержание, сохранение и запросы принадлежат приложению. +Modeless Inspector закрывается независимо от результата автосохранения. Приложение сначала закрывает controlled `Window`, затем завершает сохранение асинхронно; сбой сообщает через компактный `ToastStack` с tone `error`, сохраняя draft текущего просмотра. Нельзя удерживать окно открытым, выводить внутри него browser-default `p`/heading или увеличивать текст ошибки до title-размера. + Для modeless Inspector доступен `draggable`: окно двигается за header, не блокирует приложение и ограничивается viewport. Modal-окна не становятся draggable автоматически. ## WorkspaceWindow diff --git a/docs/GOVERNANCE.md b/docs/GOVERNANCE.md index b3c80e0..018f723 100644 --- a/docs/GOVERNANCE.md +++ b/docs/GOVERNANCE.md @@ -29,6 +29,12 @@ Допустимы density variants, если они имеют устойчивое назначение (`default`, `compact`) и тестируются как часть API. +## Типографика и операционные сообщения + +Продуктовый интерфейс использует только типографические токены. Browser-default размеры у `h1`–`h6`, `p`, `strong` и form controls не являются допустимым стилем. `--nodedc-font-size-title` разрешён только для заголовка страницы или окна; названия конфигураций, статусы, ошибки, подписи полей и сообщения внутри рабочей сцены используют `md`, `sm`, `xs` или готовую типографику канонического компонента. + +Ошибка сохранения или запроса не рендерится свободным текстовым блоком поверх рабочей сцены. Приложение использует семантический error-state канонического поля либо `ToastStack`, который владеет размером текста, цветом, положением и закрытием. Ошибка автосохранения modeless-инспектора не блокирует закрытие окна: draft остаётся в текущем просмотре, окно закрывается сразу, а сбой показывается неблокирующим error toast. + ## Deprecated Перед удалением export: @@ -53,4 +59,3 @@ ## Владение У дизайн-системы должен быть явный code owner. Product team может предлагать компоненты, но общий API и theme contract проходят отдельное review, потому что изменение распространяется на все будущие приложения. - diff --git a/registry/components.json b/registry/components.json index 6cbf83c..2fbc949 100644 --- a/registry/components.json +++ b/registry/components.json @@ -207,7 +207,9 @@ "Open state belongs to the application; focus/layer behavior belongs to the component.", "The same window contract is used by Launcher, CMS and SEO; theme variables supply color differences.", "A right-side inspector is modeless by default: no dimming, no backdrop blur, no backdrop close, no focus trap and no body scroll lock.", - "A draggable inspector moves by its header and remains clamped to the viewport." + "A draggable inspector moves by its header and remains clamped to the viewport.", + "Closing a modeless inspector is never gated by autosave; preserve the draft, close immediately and report persistence failure through ToastStack.", + "Operational copy inside Window uses component typography tokens; browser-default paragraph or heading sizes are forbidden." ] }, { @@ -466,6 +468,7 @@ "behavior": ["controlled items", "independent 10 second default auto-dismiss per terminal item", "manual dismiss", "portal viewport", "polite live region"], "rules": [ "Applications own operation state and message copy; ToastStack owns viewport geometry and dismissal timing.", + "Errors and status copy use the compact Toast typography; consumers do not substitute browser-default paragraphs or title-sized text.", "Adding or updating another notification never restarts the lifetime of an existing item; each item owns its timer by stable id.", "Loading notifications remain until the operation updates or dismisses them.", "Status notifications never replace a blocking confirmation modal."