Initial commit

This commit is contained in:
malysheva committed 2026-10-09 04:24:38 +00:00
commit c534d5ce80
163 files changed
+11500

No files matched your search

@@ -0,0 +1,55 @@
# Модуль: Компоненты
**Ответственность**: содержит проверенные переиспользуемые визуальные примитивы, которые не принадлежат одному профилю документа.
**Расположение**: `.template/lib/presentation/components.typ`
## Публичный интерфейс
| Символ | Тип | Описание |
|--------|-----|----------|
| `corp-table()` | функция | Корпоративная таблица со сложной шапкой, spans и продолжениями |
| `formula()` | функция | Блочная формула, совместимая с профильной нумерацией |
| `info-block()` | функция | Цветная информационная плашка для замечаний и пояснений |
| `signature-block()` | функция | Один подписант с media policy |
| `multi-party-signing()` | функция | Подписание несколькими сторонами |
| `approval-block()` | функция | Блок утверждения отчёта |
| `company-footer()` | функция | Контакты и реквизиты организации в footer |
| `letter-header()` | функция | Общая геометрия исходящего письма и ТКП |
| `attachment-list()` | функция | Перечень приложений к письму или ТКП |
| `requisites-table()` | функция | Реквизиты одной или нескольких сторон |
## Зависимости
| Модуль | Что использует |
|--------|----------------|
| `.template/lib/domain/company.typ` | Нормализованные реквизиты и brand |
| `.template/lib/domain/parties.typ` | Signer, Approval и Party |
| `.template/lib/domain/attachments.typ` | AttachmentSet для перечней |
| `.template/lib/presentation/foundation.typ` | Design tokens и `render-media-slot()` |
| `.template/lib/shared/numbering.typ` | Общие numbering functions |
## Инварианты
- Компонент не читает JSON и не конструирует пользовательский path.
- Компонент не определяет global page settings.
- `corp-table` сохраняет поддержку auto/multirow headers, rowspan/colspan, repeat header и continuation label.
- `corp-table.list-layout` локально задаёт геометрию списков в ячейках; `auto` сохраняет оформление документа, а параметры конкретного списка имеют приоритет.
- `row_breakable: true` действительно передаётся в `table.cell(breakable:)`; режим проверяется fixture с одной строкой, которая продолжается на трёх страницах.
- Центрирование блока `corp-table` не наследуется текстом ячеек: шапка по умолчанию центрирована, тело выровнено влево; явный `align` имеет приоритет.
- Блок подписи сохраняет эталонную геометрию для обычных реквизитов и переключается на ограниченные равные боковые колонки при длинных наименованиях.
- Письмо и ТКП используют один эталонный footer; на страницах приложений footer скрывается.
- Обязательный positional `body` идёт первым в функциях, используемых через `.with`, если это требуется Typst.
- Компонент принимает domain-значение и layout options отдельно.
- Любая работа с изображением проходит через media slot или проверку `resource != none`.
- Компоненты не импортируют profile renderers.
## Намеренно НЕ обрабатывает
- Полный жизненный цикл документа.
- Profile-specific обязательность полей.
- Выбор компании по id.
- Сброс глобальных counters между главами.
## Заметки для агента
> `corp_table` считается особо хрупким: не переписывайте рекурсивное определение header rows без unit и visual fixtures на rowspan/colspan. Общность компонента доказывается использованием хотя бы в двух профилях; иначе оставьте его внутри конкретного renderer. Layout offsets изображений должны быть параметрами компонента или design tokens, но не данными Signer.