# 04. Layout Engine ## Назначение Layout Engine отвечает за композицию страницы из секций по данным конфигурации и управляет только структурой и позиционированием, без доменной бизнес-логики. ## Поведение системы - Engine читает page.sections. - Секции сортируются по order. - Для каждой секции применяется layout-стратегия. - Виджеты размещаются внутри секции согласно layout-параметрам. ## Обязательные свойства JSON - section.id - section.type - section.order - section.widgets ## Опциональные свойства JSON - section.layout.strategy - section.layout.columns - section.layout.gap - section.layout.align - section.visibility.desktop/tablet/mobile - section.featureFlag ## Строгие правила - Layout определяется только конфигурацией. - Виджет не может переопределять секционный grid/columns на уровне страницы. - Если section.visible=false, секция не рендерится. - Секция должна рендериться в стандартном каркасе: section + page container. ## Пример JSON секции ```json { "id": "section-featured-products", "type": "product-collection", "order": 2, "layout": { "strategy": "grid", "columns": 4, "gap": "16px", "align": "stretch" }, "visibility": { "desktop": true, "tablet": true, "mobile": true }, "widgets": [ { "id": "widget-featured", "type": "product-carousel", "version": "1.0.0" } ] } ``` ## Ответственность Frontend - Корректно применять сортировку и layout-параметры. - Гарантировать единые отступы и контейнеры секций. - Безопасно деградировать при частично некорректном layout. ## Ответственность Backend - Отдавать корректные layout-атрибуты в bootstrap. - Не смешивать контентные данные с layout-инструкциями. - Поддерживать непротиворечивость секций внутри страницы.