СправочникКомпонентыВечнозелёнаяобновлено 2026.083 мин чтения
ОбзорЧасть III · Интерактив и обрамление
Часть III · Интерактив и обрамление

Интерактив и обрамление

Живое canvas-демо и контракт, который за ним стоит, а затем тихие компоненты, в которые оправлена каждая заметка, — те, что вы видите с самой первой страницы.

§3.1DemoMount — вживую

Разделение труда — привычное для пакета: разметка крепления (сцена, слот управления, слот подписи) едет в пакете, а модуль демо и его загрузчик принадлежат сайту. Этот сайт держит загрузчик в src/lib/demo-loader.ts и один раз вызывает mountAllDemos() из лейаута; вызов происходит на каждой странице, но чанк модуля демо скачивается только там, где есть крепление [data-demo].

Демо, принимающее ввод указателя на своём холсте, передаёт interactive — тогда сцена забирает касания себе и показывает перекрестье. Это демо пассивное (только отрисовка): флаг оно не ставит, и свайп по холсту по-прежнему листает страницу. Рисует оно интерференцию волн от двух источников тушью самой страницы, поэтому следует за темой:

Демо · Интерференция волн от двух источников
Демо · Интерференция волн от двух источников

Два точечных источника испускают круговые волны; где гребень встречает гребень — тушь скапливается, где гребень встречает впадину — проступает бумага. Переключите тему: демо заново обмакнёт перо в живые токены.

Контракт модуля — один экспорт по умолчанию, mount(ctx), возвращающий функцию очистки; идентификаторы модулей вроде waves/interference загрузчик разрешает как сайту угодно (здесь — import.meta.glob).

§3.2Обрамление страницы

Остальные компоненты не наполняют заметку, а оправляют её:

  • Hero открывает заметку: надзаголовок, крупный титул, лид, проходящий полный конвейер Markdown, строка мета — и необязательный tocLabel, добавляющий в сайдбар ненумерованную строку «вступление». Frontmatter-title заметки остаётся коротким каноническим — для <title> и карточек; заголовок в hero может быть длинным.
  • PartHero открывает главу хаба — это шапка этой самой страницы. Его надзаголовок не набирают руками: маршрут передаёт подпись главы «Часть III · …» через props.partLabel.
  • Part режет длинную одностраничную заметку на части; пресет нумерации превращает его в групповые строки сайдбара вида «Часть II · Основы». Так нарезана страница «Всё и сразу».
  • HubCard и .hub-grid — карточки главной хаба; .path — его рамка читательского маршрута; обе — на обзоре этой галереи.
  • LocalToc отрисовывает список переходов внутри страницы; он принимает обе формы оглавления, которые дают два пресета нумерации, и прячется, пока записей меньше настраиваемого минимума. Ниже — вживую, на оглавлении этой главы.
  • SidebarMemory сохраняет прокрутку сайдбара между переходами и центрирует текущий пункт (по умолчанию [aria-current="page"]), когда тот оказался бы вне поля зрения. Кладите его внутрь скролл-бокса сайдбара, после разметки навигации; он отрабатывает до первой отрисовки, и сайдбар никогда не мигает, отмотанный к верху. Сайдбар этого демо носит его.
  • LineageSvg оправляет нарисованный вручную SVG (родословную метода, дерево таксономии) в карточку — одна такая ниже.
  • PageFooter — мелкий набор в подвале заметки; строка под каждой здешней заметкой.
  • Навигационные детали живут в главе о вики; Markdown-сторона галереи — «Всё и сразу».

§3.3LocalToc и LineageSvg — вживую

LocalToc, которому скормлено собственное, собранное на этапе сборки оглавление этой страницы, — те же данные, что потребляет сайдбар, выданные заметке как props.toc:

И LineageSvg вокруг нарисованной от руки диаграммы, прокрашенной целиком семантическими токенами, — потому она сидит на обеих темах:

Рис. — где сидит слой внешнего вида
tokens.cssbase.cssbrowse.csscomponents

§3.4Обрамление без компонента

Несколько деталей — просто классы в base.css, для сайтов, которые отрисовывают их из собственного лейаута или пишут как HTML прямо в прозе:

КлассЧто это
.page-head + .kicker, .page-desc, .page-dateшапка страницы из frontmatter (надзаголовок, h1, описание, дата), отрисованная лейаутом вместо <Hero>
.banner, .banner-fallbackоднострочное уведомление под шапкой; вариант fallback — приглушённый
.page-footдвухколоночный подвал мелким набором (левый слот, правый слот)
.speakглосса простыми словами под заголовком глубокого разбора; её подпись задаёт --speak-label
.path + .title, .route, .arrowрамка читательского маршрута на хабе
.ref-tagмаленький моноширинный тег в списке литературы (площадка, год)
.tag, .tag.teal / .mustard / .violetбейджи карточек статей, применимы где угодно
.measured + .measured-head, .measured-body, .measured-pane (.doc), .measured-tagсравнительная карточка «задокументировано против измерено»: сплошная бирюзовая шапка над двумя панелями, панель .doc несёт заявление, вторая — измерение; силуэт, не похожий ни на один callout
.paper .idea-labelмаленькая подпись ключевой идеи в верхнем регистре внутри тела PaperCard, например <span class="idea-label">Ключевая идея</span>
Заголовки, разделы и текст заметок — на этом языке.
    ↑↓ · Enter · Escastro-inkstone