Обзор Подключение Claude Design Как менять Основа Живой пример Компоненты Микро Средние Крупные Готовые блоки llms.txt Репозиторий
v1.0.0 СветлаяТёмнаяКак в системе
Компоненты37от кнопки до дровера
Готовые блоки4страницы целиком
Токены122светлая и тёмная тема
Стили текста11Onest · Inter · JetBrains Mono

Визуальный язык Пульса — парящие карточки на тонированной земле, пилюли, стекло, чернильное главное действие, дровер с режимами, параметры пилюлями, чат как в мессенджере — оформлен как библиотека компонентов. Она одинаково работает в HTML, PHP, React, Svelte, Astro и Tailwind.

Web ComponentsДве темыТелефонКаталог для нейросетей

Подключение

Две строки в <head> — и все компоненты доступны как теги. Шрифты, значки и обе темы приезжают вместе с ними.

HTML / PHP / AstroTailwind 4Tailwind 3ReactSvelte 5Нейросети
<link rel="stylesheet" href="https://ds.partsbooster.com/v1/pulse-ds.css">
<script type="module" src="https://ds.partsbooster.com/v1/pulse-ds.js"></script>

<body class="pz-app">
  <pz-page-header title="Заказы">
    <pz-button slot="actions" variant="ink" icon="add">Заказ</pz-button>
  </pz-page-header>
</body>
Тема: .dark или data-theme="dark" на <html> (или любом блоке), data-theme="auto" — по системе. Сообщения — PulseDS.toast(), подтверждения — PulseDS.confirmDialog().

Claude Design и нейросети

Та же система живёт в Claude: из неё делаются макеты, слайды и прототипы, а Claude Code собирает по ней настоящие экраны. Всё — из этого репозитория, поэтому макет и код не расходятся.

Чтобы новые макеты и слайды сразу были в стиле Пульса, отметьте артефакт дизайн-системой по умолчанию в claude.ai.
Нейросеть не рисует стили, а собирает экран из готового: читает llms.txt (подключение, правила, все компоненты с атрибутами и примерами, готовые блоки) и пишет теги <pz-*>. В Claude Code это делает скилл pulse-ds и правило в глобальном CLAUDE.md — без напоминаний. Открыть llms.txt custom-elements.json

Как менять дизайн-систему

Правка делается один раз — в репозитории — и расходится везде: в приложения через CDN, в Claude через артефакт.

  1. Попросите Claude в Claude Code«в pulse-ds сделай кнопки выше» или «добавь компонент таблицы». Он работает в labs/pulse-ds по его CLAUDE.md.
  2. Компонент или токенКомпонент — папка src/components/pz-* (код + описание), значение — tokens/tokens.json. Каталог, типы и этот сайт обновятся сами.
  3. Проверкаnpm test и витрина глазами: светлая, тёмная, телефон.
  4. ВыкаткаПоднять version, слить в main, джоба deploy в GitLab CI. Через 5 минут правка во всех приложениях на v1.
  5. Claude Designnpm run artifact и публикация в артефакт — макеты в Claude совпадают с кодом.

Форма, тени, компоненты и движение общие. Приложение меняет только слой бренда — несколько токенов в одном файле после pulse-ds.css:

/* brand.css */
:root {
  --pz-accent: #0f9fb4;
  --pz-accent-2: #3cc6d6;
  --pz-grad: linear-gradient(135deg, #3cc6d6, #0f9fb4);
  --pz-font-head: "Manrope", var(--pz-font-text);
}

Основа

Токены — CSS-переменные --pz-*; в Tailwind — утилиты с префиксом pz-. Переключите тему вверху — значения поменяются здесь же.

Поверхности
--pz-bgЗемля: фон приложения под градиентом --ground.
--pz-bg-2Фон дровера и вложенных панелей.
--pz-surfaceКарточки, белые пилюли, выбранный сегмент.
--pz-surface-2Колодцы внутри карточек, поля форм.
--pz-wellДорожки полос этапов и колец.
--pz-segДорожка сегмента и степпера.
--pz-glassСтекло плавающих шапок.
--pz-glass-strongСтекло меню, листов, палитры.
--pz-scrimЗатемнение под окном и листом.
--pz-hoverНаведение на пункт меню, день календаря, строку на белом.
Текст и линии
--pz-fgОсновной текст и заголовки.
--pz-text-2Вторичный текст, описания.
--pz-mutedПодписи, мета-строки.
--pz-faintПлейсхолдеры, заглавные подписи.
--pz-chevШевроны, выключенные точки, ручки.
--pz-hairПодложка hover, чипы, тончайшие заливки.
--pz-hair-2Контуры пустых пилюль и полей.
--pz-inkГлавное действие, тосты, выбранный чип.
--pz-ink-2Верх градиента чернил.
--pz-on-inkТекст на чернилах.
--pz-selectionВыделение текста.
Бренд и ссылки
--pz-linkСсылки, кольцо фокуса, непрочитанное.
--pz-link-softОреол фокуса, выделение.
--pz-accentБренд: логотип, «ждут тебя», горящий срок.
--pz-accent-2Светлый край оранжевого градиента.
--pz-accent-softПодложка горящего срока.
--pz-accent-deepТекст на accent-soft.
Типы записей
--pz-ideaИдея.
--pz-idea-softИдея.
--pz-taskЗадача.
--pz-task-softЗадача.
--pz-bugБаг.
--pz-bug-softБаг.
--pz-docДокумент.
--pz-doc-softДокумент.
--pz-annОбъявление.
--pz-ann-softОбъявление.
Смыслы и этапы
--pz-okУспех.
--pz-ok-softУспех.
--pz-ok-brightУспех.
--pz-warnВнимание.
--pz-warn-softВнимание.
--pz-dangerОшибка и удаление.
--pz-danger-softОшибка и удаление.
--pz-st-newЦвет этапа в полосе.
--pz-st-discЦвет этапа в полосе.
--pz-st-workЦвет этапа в полосе.
--pz-st-doneЦвет этапа в полосе.
--pz-pri-highВажность «Высокая»: янтарный текст.
--pz-pri-high-softВажность «Высокая»: подложка, отличается от danger-soft.
ИИ и чат
--pz-chat-aФон чата, верх.
--pz-chat-bФон чата, низ.
--pz-bubЧужой пузырь.
--pz-bub-meСвой пузырь.
--pz-bub-me-fgТекст своего пузыря.
--pz-ai-aСлой ИИ, начало градиента.
--pz-ai-bСлой ИИ, конец градиента.
--pz-ai-fgТекст и иконки ИИ.
Служебные
--pz-accent-fgТекст на оранжевом градиенте.
--pz-glass-edgeСветлая кромка стекла.
--pz-veilПолупрозрачная подложка значка на ИИ-пилюле.
--pz-toast-btnКнопка внутри чернильного тоста.
--pz-orb-aШар пустого состояния, блик.
--pz-orb-bШар пустого состояния, край.
.pz-h056px/56px · 600 · -0.04em
Пульс недели
.pz-h134px/38px · 600 · -0.032em
Корзина и оформление
.pz-h224px/29px · 600 · -0.026em
Все темы в норме
.pz-h318px/23px · 600 · -0.018em
Ждут тебя
.pz-h415px/20px · 600 · -0.01em
Чеклист
.pz-body-lg16px/25px · 400
Гостевой чекаут, автосоздание аккаунта после оплаты.
.pz-body14px/21px · 400 · -0.003em
Дима отдал на проверку 8 ч назад.
.pz-small13px/18px · 400
куратор Дима С.
.pz-micro12px/16px · 500
09:10
.pz-cap11px/14px · 600 · 0.08em
ЖИВЫЕ ОБСУЖДЕНИЯ
.pz-id13px/16px · 600
ПРО-140
r-pill999px
r-card24px
r-panel28px
r-in16px
r-tile14px
r-ctl13px
r-well20px
r-menu22px
r-area15px
r-tip10px
sh-cardПарящая карточка.
sh-card-hoverКарточка и пилюля на hover.
sh-btnБелые пилюли и круглые кнопки.
sh-segВыбранный сегмент, активный пункт меню, открытая строка.
sh-popМеню и выпадашки.
sh-floatДровер, панель чатов, окна, листы.
sh-inkЧернильные кнопки и тосты.
sh-glassСтеклянные шапки и поле чата.
space-22px — Между строками списка.
space-44px — Внутри групп иконок.
space-88px — Между пилюлями в строке.
space-1212px — Между блоками в карточке.
space-1616px — Между карточками.
space-2424px — Поля карточки.
space-3232px — Между секциями.

Живой пример

Шапка с ИИ-брифом, сетка виджетов-карточек: «Ждут тебя», ключевые числа, «Где горит», ИИ-итог. Числа — табличные цифры, графики — sparkline/диаграммы по правилам dataviz. Основа «Моего Пульса» и любых сводок.

Эта неделя
Все
горит
2,41 млн ₽
+8 % к плану1 284 заказа
Склад Москва
заказы старше 24 ч
Поставщик Emex
нет ответа по ценам
Больше всего движения в «Возвратах»: закрыто 14, новых 9. Предлагаю назначить второго ответственного по PayPal — очередь растёт третью неделю. НазначитьПозже

Микро 17

Контролы: кнопки, поля, выбор, метки

<pz-icon>

Значок

Основа

Значок Material Symbols Rounded по имени. Размеры 16/18/20/24; у активного пункта и статуса — заливка (fill).

Размеры и тона
Код
<div class="pz-row"><pz-icon name="monitor_heart" size="24"></pz-icon><pz-icon name="forum" tone="muted"></pz-icon><pz-icon name="auto_awesome" tone="ai"></pz-icon><pz-icon name="check_circle" tone="ok" fill></pz-icon><pz-icon name="local_fire_department" tone="accent" fill size="18"></pz-icon></div>
API: 4 атрибутов
namestringИмя значка из Material Symbols (add, search, forum, monitor_heart…).
sizenumberРазмер в px. По умолчанию — размер значка контрола (--ic), иначе 20.
fillbooleanЗалитый вариант: активный пункт, статус.
tonemuted · faint · link · accent · ok · danger · aiЦвет. Без атрибута — цвет текста.
Правила
  • Значок без подписи рядом — только внутри pz-icon-button с label (aria-label обязателен).
  • Эмодзи вместо значков не используются, кроме реакций в чате.
<pz-button>

Кнопка

Действия

Кнопка-пилюля. Белая — обычное действие, чернильная — одно главное на экран, тихая (ghost), синяя — отправка в чате, danger — удаление.

Варианты
СоздатьПоделитьсяОтменаОтправитьУдалить
Код
<div class="pz-row"><pz-button variant="ink" icon="add">Создать</pz-button><pz-button icon="ios_share">Поделиться</pz-button><pz-button variant="ghost">Отмена</pz-button><pz-button variant="blue" icon="send">Отправить</pz-button><pz-button variant="danger" icon="delete">Удалить</pz-button></div>
Размеры рядом и состояния
МалаяФильтр
СохраняюНедоступна
Создать
Код
<div class="pz-stack tight"><div class="pz-row pz-sm"><pz-button>Малая</pz-button><pz-button dropdown>Фильтр</pz-button></div><div class="pz-row"><pz-button loading>Сохраняю</pz-button><pz-button disabled>Недоступна</pz-button></div><div class="pz-row pz-lg"><pz-button variant="ink" icon="add" dropdown>Создать</pz-button></div></div>
API: 10 атрибутов, 1 событий, 3 слотов
variantwhite · ink · ghost · blue · danger · whiteВид. ink — главное действие (в тёмной теме светлое).
sizesm · md · lg · mdВысота 32/40/48. Обычно задаётся рядом (.pz-sm/.pz-lg на предке), а не кнопкой.
iconstringЗначок слева.
icon-endstringЗначок справа.
dropdownbooleanШеврон справа — кнопка открывает меню.
loadingbooleanКольцо вместо значка, нажатия не проходят.
disabledboolean
blockbooleanНа всю ширину.
hrefstringСделать ссылкой <a>.
typebutton · submit · reset · buttonsubmit отправляет форму, в которой стоит кнопка.
@clickОбычный click; при disabled и loading не всплывает.
slot ·Подпись.
slot startПеред подписью (аватар, плитка).
slot endПосле подписи (счётчик pz-counter).
Правила
  • На экране одно чернильное действие, не считая «+ Создать» в шапке.
  • Кнопки цвет не несут: только чернильные, белые или тихие. Цветная — только синяя «Отправить» в чате.
  • Прямоугольных кнопок с радиусом 8–10 px не бывает.
  • Элементы одного ряда — одной высоты: размер задаёт ряд (класс .pz-sm / .pz-lg), а не отдельная кнопка.
<pz-icon-button>

Кнопка-значок

Действия

Круглая кнопка со значком. Без заливки по умолчанию, solid — белая с тенью, ink — чернильная. Счётчик и точка непрочитанного.

Варианты
Код
<div class="pz-row"><pz-icon-button icon="more_horiz" label="Ещё"></pz-icon-button><pz-icon-button icon="close" label="Закрыть" variant="solid"></pz-icon-button><pz-icon-button icon="add" label="Создать" variant="ink"></pz-icon-button><pz-icon-button icon="send" label="Отправить" variant="blue"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" variant="solid" dot></pz-icon-button></div>
API: 10 атрибутов, 1 событий
iconstringЗначок.
labelstringПодпись для экранных дикторов и подсказка. Обязательна.
variantplain · solid · ink · blue · plain
sizesm · md · lg · md
onbooleanВыбрана (в группе — чернильная).
badgestringЧисло в чернильном кружке.
dotbooleanОранжевая точка — есть новое.
fillbooleanЗалитый значок.
hrefstring
disabledboolean
@click
Правила
  • label обязателен: иконка без подписи всегда с aria-label.
  • Несколько кнопок-значков рядом — в pz-icon-group (белая пилюля), а не россыпью.
<pz-icon-group>

Группа значков

Действия

Белая пилюля с кнопками-значками внутри: шапка страницы (чаты, объявления, колокольчик), переключатель вида. Выбранная — чернильная.

Шапка и переключатель вида
Код
<div class="pz-row"><pz-icon-group size="lg" label="Сообщения"><pz-icon-button icon="forum" label="Чаты" badge="3"></pz-icon-button><pz-icon-button icon="campaign" label="Объявления"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" dot></pz-icon-button></pz-icon-group><pz-icon-group label="Вид"><pz-icon-button icon="view_agenda" label="Список" on></pz-icon-button><pz-icon-button icon="view_kanban" label="Доска"></pz-icon-button><pz-sep></pz-sep><pz-icon-button icon="tune" label="Настроить"></pz-icon-button></pz-icon-group></div>
API: 2 атрибутов, 1 слотов
sizesm · md · lg · md
labelstringaria-label группы.
slot ·pz-icon-button и разделители <pz-sep>.
<pz-field>

Поле ввода

Ввод

Поле с подписью сверху и подсказкой или ошибкой снизу: однострочное, многострочное (multiline), поиск-пилюля (variant="search"). Работает в <form> как обычный input.

Поля формы
Код
<div class="pz-stack tight" style="max-width:420px"><pz-field label="Название" placeholder="Коротко, что сделать" required></pz-field><pz-field label="Почта" type="email" value="anna@" error="Нужен адрес целиком"></pz-field><pz-field label="Описание" multiline autogrow hint="Можно Markdown"></pz-field><pz-field label="Недоступно" value="Только чтение" disabled></pz-field></div>
Поиск-пилюля
Код
<div class="pz-row"><pz-field variant="search" size="lg" placeholder="Поиск и команды" kbd="⌘K" style="width:320px"></pz-field><pz-field variant="search" placeholder="Найти в списке" clearable value="бриф"></pz-field></div>
API: 24 атрибутов, 2 событий, 2 слотов
labelstringПодпись сверху (500 13 px, без капслока).
valuestring
placeholderstring
namestringИмя в FormData.
typetext · email · password · number · search · tel · url · date · time · text
hintstringПодсказка под полем.
errorstringТекст ошибки: поле красным ореолом, текст вместо подсказки.
iconstringЗначок слева.
kbdstringКлавиша справа (⌘K).
multilinebooleanМногострочное, от 88 px.
rowsnumber · 3
autogrowbooleanРастёт по тексту.
clearablebooleanКрестик очистки, когда есть текст.
variantfield · search · fieldsearch — пилюля с тенью для поиска.
sizesm · md · lg · mdДля поиска — высота пилюли; для поля sm — 32.
requiredboolean
disabledboolean
readonlyboolean
autofocusboolean
autocompletestring
maxlengthnumber
minstring
maxstring
inputmodestring
@input—Каждый ввод (родное событие; значение — el.value).
@pz-change{ value }Значение зафиксировано (blur, Enter, очистка).
slot startПеред текстом (аватар, чип).
slot endПосле текста (кнопка-значок).
Правила
  • Поле — прямоугольник с подписью сверху, не пилюля. Пилюля — только поиск (variant="search").
  • Ошибка — в атрибуте error, а не отдельным текстом рядом.
  • На телефоне шрифт поля 16 px — iOS не увеличивает страницу (токен уже это делает).
<pz-checkbox>

Флажок и радио

Ввод

Флажок 18 px (включённый — синий с галочкой) и радио (type="radio" в <pz-radio-group>). Подпись — содержимое, пояснение — hint.

Флажки и радио
Сверстать корзинуПроверить оплатуЧеклист
Каждый деньРаз в неделю
Код
<div class="pz-row" style="gap:32px;align-items:flex-start"><div class="pz-stack tight"><pz-checkbox checked>Сверстать корзину</pz-checkbox><pz-checkbox>Проверить оплату</pz-checkbox><pz-checkbox indeterminate hint="2 из 5 подзадач">Чеклист</pz-checkbox></div><pz-radio-group><pz-checkbox type="radio" name="w" value="day" checked>Каждый день</pz-checkbox><pz-checkbox type="radio" name="w" value="week">Раз в неделю</pz-checkbox></pz-radio-group></div>
API: 7 атрибутов, 1 событий, 1 слотов
checkedboolean
indeterminatebooleanЧастично выбрано (минус).
typecheckbox · radio · checkbox
namestring
valuestring · on
hintstringВторая строка серым.
disabledboolean
@pz-change{ checked, value }
slot ·Подпись.
Правила
  • Включить/выключить настройку — pz-toggle в pz-setting-row; флажок — для выбора нескольких пунктов и чеклистов.
  • Выбор одного из 2–5 вариантов в строке — pz-segmented, а не радио.
<pz-toggle>

Тумблер

Ввод

Тумблер 44×26: включённый — синий градиент. Для настроек — внутри pz-setting-row, подпись и пояснение даёт строка.

Состояния
Код
<div class="pz-row"><pz-toggle checked label="Уведомления"></pz-toggle><pz-toggle label="Дайджест"></pz-toggle><pz-toggle disabled label="Недоступно"></pz-toggle></div>
API: 5 атрибутов, 1 событий
checkedboolean
labelstringaria-label, если рядом нет подписи.
namestring
valuestring · on
disabledboolean
@pz-change{ checked }
<pz-segmented>

Сегмент и вкладки

Ввод

Выбор одного из 2–6 вариантов в строке: вкладки страницы, переключатель вида, фильтр. Выбранный — чернильная пилюля; на белой карточке — мягкая синяя заливка (variant="soft").

Вкладки и фильтр
ВсеВ работеЖдут меняГотовоДеньНеделяМесяцСписокДоска
Код
<div class="pz-stack tight"><pz-segmented value="work"><pz-option value="all">Все</pz-option><pz-option value="work" count="12">В работе</pz-option><pz-option value="wait" count="3" hot>Ждут меня</pz-option><pz-option value="done">Готово</pz-option></pz-segmented><pz-segmented size="sm" value="week"><pz-option value="day">День</pz-option><pz-option value="week">Неделя</pz-option><pz-option value="month">Месяц</pz-option></pz-segmented><pz-segmented icons value="list"><pz-option value="list" icon="view_agenda">Список</pz-option><pz-option value="board" icon="view_kanban">Доска</pz-option></pz-segmented></div>
API: 7 атрибутов, 1 событий, 1 слотов
valuestringВыбранный вариант (value у pz-option). По умолчанию — первый.
variantink · soft · inksoft — на белой карточке, в меню, дровере.
sizesm · md · mdsm 28 — вторичный фильтр внутри карточки (сразу soft).
fillbooleanРастянуть на всю ширину.
iconsbooleanТолько значки (подписи — в подсказках).
labelstringaria-label группы.
namestring
@pz-change{ value }
slot ·<pz-option value icon count hot disabled>Подпись</pz-option> — варианты.
Правила
  • Сегмент не бывает выше 40 px; вкладки страницы — тоже сегмент.
  • Счётчик count — серым, горящий (hot) — оранжевым.
<pz-chip>

Чип

Метки

Метка 26 px: тип записи, тег, срок. Ненажимаемый — тонированный; нажимаемый (clickable) — белый с тенью; выбранный фильтр — чернильный (on).

Типы и смыслы
ИдеяЗадачаБагДокументОбъявлениеСегодняИИ-итогоплата
Код
<div class="pz-row"><pz-chip tone="idea" icon="lightbulb">Идея</pz-chip><pz-chip tone="task" icon="task_alt">Задача</pz-chip><pz-chip tone="bug" icon="bug_report">Баг</pz-chip><pz-chip tone="doc" icon="description">Документ</pz-chip><pz-chip tone="ann" icon="campaign">Объявление</pz-chip><pz-chip tone="hot" icon="schedule">Сегодня</pz-chip><pz-chip tone="ai" icon="auto_awesome">ИИ-итог</pz-chip><pz-chip>оплата</pz-chip></div>
Фильтры
ВсеБагиИсполнитель: Дима
Код
<div class="pz-row"><pz-chip clickable on>Все</pz-chip><pz-chip clickable tone="bug" icon="bug_report">Баги</pz-chip><pz-chip clickable removable>Исполнитель: Дима</pz-chip></div>
API: 6 атрибутов, 2 событий, 1 слотов
toneneutral · idea · task · bug · doc · ann · ok · warn · hot · lnk · ai · danger · neutral
iconstring
clickablebooleanКнопка-фильтр.
onbooleanВыбран (чернильный).
outbooleanБелый с тенью, ненажимаемый.
removablebooleanКрестик, событие pz-remove.
@click
@pz-removeНажат крестик.
slot ·Текст.
Правила
  • Статус записи — pz-badge (точка + слово), а не чип.
  • Горящий срок — tone="hot".
<pz-badge>

Бейдж статуса

Метки

Статус записи: белая пилюля 28 с точкой цвета этапа и словом. Этапы: новые, обсуждаем, в работе, на проверке, сделано, выключено, блокер.

Этапы
НоваяОбсуждаемВ работеНа проверкеСделаноБлокерВ архиве
Код
<div class="pz-row"><pz-badge status="new">Новая</pz-badge><pz-badge status="disc">Обсуждаем</pz-badge><pz-badge status="work">В работе</pz-badge><pz-badge status="rev">На проверке</pz-badge><pz-badge status="done">Сделано</pz-badge><pz-badge status="block">Блокер</pz-badge><pz-badge status="off">В архиве</pz-badge></div>
API: 2 атрибутов, 1 слотов
statusnew · disc · work · rev · done · off · blockЭтап → цвет точки.
colorstringСвой цвет точки (CSS-цвет или var(--pz-…)).
slot ·Название статуса.
<pz-counter>

Счётчик

Метки

Число в пилюле 22 px: синий — обращаются ко мне, оранжевый (hot) — ждут тебя, серый (mute), чернильный (ink), plain — серое число без подложки.

Тона
Код
<div class="pz-row"><pz-counter value="3"></pz-counter><pz-counter tone="hot" value="5"></pz-counter><pz-counter tone="mute" value="12"></pz-counter><pz-counter tone="ink" value="1"></pz-counter><pz-counter tone="plain" value="37"></pz-counter></div>
API: 2 атрибутов
toneblue · hot · mute · ink · plain · blue
valuestringЧисло (или содержимое).
<pz-kbd>

Клавиша

Метки

Подсказка клавиши: ⌘K, ⌘N, ↵, Esc. В поле — атрибут kbd у pz-field, в пункте меню — kbd у pz-menu-item.

Клавиши
⌘K⌘N↵Esc
Код
<div class="pz-row"><pz-kbd>⌘K</pz-kbd><pz-kbd>⌘N</pz-kbd><pz-kbd>↵</pz-kbd><pz-kbd>Esc</pz-kbd></div>
API: 1 слотов
slot ·Клавиша.
<pz-avatar>

Аватар и лица

Люди

Аватар: фото или инициалы на мягкой подложке (цвет стабилен по имени). <pz-faces max> — стопка лиц участников с «+N».

Аватары и стопка
Код
<div class="pz-row"><pz-avatar name="Анна Котова"></pz-avatar><pz-avatar name="Дима Смирнов" size="36"></pz-avatar><pz-avatar name="Олег" solid size="36"></pz-avatar><pz-avatar name="Борис" icon="smart_toy" size="36"></pz-avatar><pz-faces max="3"><pz-avatar name="Анна"></pz-avatar><pz-avatar name="Дима"></pz-avatar><pz-avatar name="Олег"></pz-avatar><pz-avatar name="Ира"></pz-avatar><pz-avatar name="Саша"></pz-avatar></pz-faces></div>
API: 6 атрибутов
namestringИмя: инициалы, цвет и подсказка.
srcstringФото; при ошибке загрузки — инициалы.
sizenumber · 3024 / 30 / 36 / 44 / 56 / 72.
solidbooleanСплошной цвет, белые буквы.
iconstringЗначок вместо инициалов.
ringbooleanБелая обводка (в стопке ставится сама).
<pz-tile>

Плитка значка

Основа

Тонированная плитка со значком: тип записи, пространство, тема, раздел. Подложка — цвет 15 %, глиф того же цвета. logo — оранжевый градиент бренда.

Типы, размеры, свой цвет
Код
<div class="pz-row"><pz-tile tone="logo" icon="ecg_heart"></pz-tile><pz-tile tone="idea" icon="lightbulb"></pz-tile><pz-tile tone="task" icon="task_alt"></pz-tile><pz-tile tone="bug" icon="bug_report"></pz-tile><pz-tile tone="doc" icon="description"></pz-tile><pz-tile tone="ann" icon="campaign"></pz-tile><pz-tile tone="ai" icon="auto_awesome"></pz-tile><pz-tile color="#d6418f" icon="shopping_cart" size="sm"></pz-tile><pz-tile color="#0f9fb4" icon="local_shipping" size="xs"></pz-tile><pz-tile tone="ink" icon="add" round size="lg"></pz-tile></div>
API: 6 атрибутов
iconstring
toneidea · task · bug · doc · ann · ok · warn · hot · lnk · ai · danger · ink · logo
colorstringСвой цвет (цвет пространства/темы): #hex или var(--pz-…).
sizexs · sm · md · lg · md28 / 36 / 44 / 56.
roundboolean
labelstringПодпись для экранных дикторов, если плитка несёт смысл.
Правила
  • Тёмного глифа на насыщенном цвете не бывает: только подложка 15 % и глиф того же цвета.
<pz-tooltip>

Подсказка

Подсказки

Чернильная плашка над элементом по наведению и фокусу (задержка 400 мс), с клавишей. Оборачивает элемент.

С клавишей
Поиск
Код
<div class="pz-row"><pz-tooltip text="Быстрая подача" kbd="⌘N"><pz-icon-button icon="bolt" label="Быстрая подача" variant="solid"></pz-icon-button></pz-tooltip><pz-tooltip text="Поиск и команды" kbd="⌘K" placement="bottom"><pz-button icon="search">Поиск</pz-button></pz-tooltip></div>
API: 3 атрибутов, 1 слотов
textstring
kbdstringКлавиша справа.
placementtop · bottom · top
slot ·Элемент, к которому подсказка.
Правила
  • Для кнопки-значка подсказка уже есть (title из label); pz-tooltip — когда нужна клавиша или длинный текст.
<pz-spinner>

Кольцо загрузки

Состояния

Кольцо загрузки цвета текста. Для кнопки — атрибут loading у pz-button, для содержимого — pz-skeleton.

Размеры
Код
<div class="pz-row"><pz-spinner></pz-spinner><pz-spinner size="28"></pz-spinner></div>
API: 2 атрибутов
sizenumber · 20
labelstring · Загрузка
<pz-skeleton>

Скелетон

Состояния

Заглушка на время загрузки: строки текста (lines) или блок нужного размера. Форма повторяет будущее содержимое.

Карточка загружается
Код
<pz-card style="max-width:360px"><div class="pz-row nowrap" style="gap:12px"><pz-skeleton width="44px" height="44px" radius="14px" style="flex:none"></pz-skeleton><pz-skeleton lines="2" style="flex:1"></pz-skeleton></div><pz-skeleton lines="3" style="margin-top:16px"></pz-skeleton></pz-card>
API: 4 атрибутов
linesnumberСколько строк текста.
widthstring · 100%
heightstring · 12px
radiusstring · 10px

Средние 11

Составные: параметры, меню, карточки, списки

<pz-card>

Карточка и колодец

Поверхности

Парящая белая карточка — виджет, блок формы, секция. Шапка: плитка, заголовок, счётчик, подзаголовок, действия справа. Вложенные блоки — <pz-well> (колодец без тени).

Виджет с колодцами
Все
Проверить оплату PayPal
Дима отдал на проверку 8 ч назад
Ответить по возвратам
срок сегодня

Закрыто 14 задач, 2 бага ждут решения. Больше всего движения в «Оплате».

Открыть сводку
Код
<div class="pz-grid"><pz-card title="Ждут тебя" count="3" icon="hourglass_top" tone="hot"><pz-button slot="actions" variant="ghost">Все</pz-button><div class="pz-stack tight"><pz-well><b>Проверить оплату PayPal</b><div class="pz-small">Дима отдал на проверку 8 ч назад</div></pz-well><pz-well><b>Ответить по возвратам</b><div class="pz-small">срок сегодня</div></pz-well></div></pz-card><pz-card title="Итог недели" icon="auto_awesome" tone="ai" tint="ai" subtitle="ИИ-сводка по пространству"><p class="pz-body" style="margin:0">Закрыто 14 задач, 2 бага ждут решения. Больше всего движения в «Оплате».</p><pz-button slot="footer" size="sm">Открыть сводку</pz-button></pz-card></div>
API: 10 атрибутов, 5 слотов
titlestringЗаголовок h3.
subtitlestring
countstringСерое число рядом с заголовком.
iconstringПлитка слева от заголовка.
tonestringТон плитки (как у pz-tile).
colorstringСвой цвет плитки.
hoverbooleanПоднимается на 3 px при наведении (кликабельная карточка).
hrefstringВся карточка — ссылка.
padmd · sm · none · mdПоля 22×24 / 16×18 / 0 (для списков и картинок до края).
tintai · hotТонированная подложка: ИИ-итог, горящее.
slot ·Содержимое.
slot actionsСправа в шапке (кнопки sm, сегмент).
slot headerПод заголовком (чипы, лица).
slot leadВместо плитки (аватар).
slot footerНиз карточки (кнопки).
Правила
  • Каждый виджет — отдельная карточка; карточки не вкладываются друг в друга — внутри колодцы.
  • Карточки раскладываются .pz-grid или .pz-stack с зазором 16.
<pz-param-pill>

Пилюля-параметр

Параметры

Параметр записи одной пилюлей: исполнитель, срок, важность, тема, связи. Лид-круг (значок или аватар), значение, тихая подпись, шеврон. Ряд пилюль заменяет лист свойств.

Ряд параметров
Код
<div class="pz-row"><pz-param-pill avatar="Дима Смирнов" value="Дима"></pz-param-pill><pz-param-pill icon="event" value="Сегодня" label="срок" hot></pz-param-pill><pz-param-pill icon="flag" value="Высокая"></pz-param-pill><pz-param-pill icon="sell" value="Метка" none></pz-param-pill><pz-param-pill icon="person_add" ai value="Анна" label="предлагает ИИ"></pz-param-pill><pz-param-pill size="sm" icon="link" value="2 связи"></pz-param-pill></div>
API: 13 атрибутов, 2 слотов
valuestringЗначение (или содержимое).
labelstringТихая подпись после значения («срок», «важность»).
iconstringЗначок в круге.
avatarstringИмя человека — аватар в круге.
srcstringФото для аватара.
nonebooleanНе задано: пунктирный контур, серый текст («+ Исполнитель»).
hotbooleanГорит: просроченный или сегодняшний срок.
aibooleanПредложение ИИ.
openbooleanМеню открыто — ореол (pz-dropdown ставит сам).
errorboolean
sizesm · md · md
no-chevronbooleanБез шеврона (параметр только для чтения).
disabledboolean
slot ·Значение.
slot leadСвой лид вместо icon/avatar.
Правила
  • Параметры — пилюлями в одну строку (.pz-row), таблицы «подпись — значение» нет.
  • Выбор значения — pz-dropdown с pz-menu (поиск-шапка) или pz-calendar.
<pz-dropdown>

Выпадашка

Параметры

Триггер + стеклянная плавающая панель (меню, календарь, любая форма). Верхний слой, закрытие кликом мимо и Esc, переворот у края экрана; на телефоне — лист снизу.

Исполнитель с поиском
КомандаДима СмирновАнна КотоваОлег ПетровБорисБез исполнителя
Код
<pz-dropdown><pz-param-pill slot="trigger" avatar="Дима Смирнов" value="Дима"></pz-param-pill><pz-menu search="Найти человека" select="single"><pz-menu-label>Команда</pz-menu-label><pz-menu-item value="dima" avatar="Дима Смирнов" hint="frontend" selected>Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова" hint="дизайн">Анна Котова</pz-menu-item><pz-menu-item value="oleg" avatar="Олег Петров">Олег Петров</pz-menu-item><pz-menu-item value="boris" icon="smart_toy" hint="ИИ-исполнитель">Борис</pz-menu-item><pz-sep></pz-sep><pz-menu-item value="" icon="person_off">Без исполнителя</pz-menu-item></pz-menu></pz-dropdown>
Меню «Создать» и срок
СоздатьЗадачаБагИдеяДокументЧерновики
Код
<div class="pz-row"><pz-dropdown placement="bottom-end"><pz-button slot="trigger" variant="ink" icon="add" dropdown>Создать</pz-button><pz-menu><pz-menu-item icon="task_alt" kbd="T">Задача</pz-menu-item><pz-menu-item icon="bug_report" kbd="B">Баг</pz-menu-item><pz-menu-item icon="lightbulb" kbd="I">Идея</pz-menu-item><pz-menu-item icon="description">Документ</pz-menu-item><pz-sep></pz-sep><pz-menu-item icon="draft" hint="3 черновика">Черновики</pz-menu-item></pz-menu></pz-dropdown><pz-dropdown flush><pz-param-pill slot="trigger" icon="event" value="Пятница" label="срок"></pz-param-pill><pz-calendar></pz-calendar></pz-dropdown></div>
API: 6 атрибутов, 2 событий, 2 слотов
openboolean
placementbottom-start · bottom-end · top-start · top-end · bottom-start
flushbooleanБез внутренних полей (календарь, своя разметка).
widthstring"trigger" — по ширине триггера, или CSS-длина.
sheetbooleanВсегда листом снизу.
titlestringЗаголовок листа на телефоне.
@pz-open
@pz-close
slot triggerКнопка, пилюля-параметр, аватар — что открывает.
slot ·Содержимое панели: pz-menu, pz-calendar, форма.
Правила
  • Меню почти непрозрачно (glass-strong 0.98), размытие только усиливает — содержимое страницы сквозь меню не читается.
  • Выбор пункта закрывает панель и возвращает фокус на триггер.
<pz-menu>

Меню

Параметры

Список пунктов для pz-dropdown: действия или выбор значения. Поиск-шапка (search) фильтрует на месте, ↑↓ ↵ с клавиатуры, группы с подписями, галочка у выбранного.

Меню записи (без выпадашки)
Во весь экранСкопировать ссылкуСлить с задачейУдалить
Код
<pz-card pad="sm" style="max-width:300px"><pz-menu><pz-menu-item icon="open_in_full" kbd="F">Во весь экран</pz-menu-item><pz-menu-item icon="link">Скопировать ссылку</pz-menu-item><pz-menu-item icon="call_merge" hint="объединить с похожей">Слить с задачей</pz-menu-item><pz-sep></pz-sep><pz-menu-item icon="delete" danger>Удалить</pz-menu-item></pz-menu></pz-card>
API: 3 атрибутов, 3 событий, 1 слотов
searchstringПлейсхолдер поиска — включает поиск-шапку.
selectsingle · multipleРежим выбора: пункты отмечаются галочкой, событие pz-change.
emptystring · Ничего не нашлосьТекст, когда поиск ничего не нашёл.
@pz-select{ value, item, selected }Нажат пункт (закрывает выпадашку, кроме multiple).
@pz-change{ value }Изменился выбор (select).
@pz-search{ query }Ввод в поиске — для подгрузки с сервера.
slot ·<pz-menu-item value icon avatar hint kbd selected danger disabled href>Текст</pz-menu-item>, <pz-menu-label>Группа</pz-menu-label>, <pz-sep>.
Правила
  • Наведение — тонированная заливка, выбранное — синий текст и галочка; белой плашки с тенью внутри меню нет.
  • Опасное действие (удалить) — danger, внизу, после разделителя.
<pz-calendar>

Календарь

Параметры

Выбор даты в две панели: быстрые варианты слева (Сегодня, Завтра, Пятница, Через неделю…), месяц справа. На телефоне варианты — пилюли над месяцем. Обычно — внутри <pz-dropdown flush>.

Отдельно
Код
<pz-card pad="none" style="display:inline-block"><pz-calendar></pz-calendar></pz-card>
API: 4 атрибутов, 2 событий
valuestringISO-дата YYYY-MM-DD; пусто — без срока.
no-quickbooleanБез панели быстрых вариантов — только месяц.
no-nonebooleanБез варианта «Без срока» (дата обязательна).
minstringРаньше этой даты выбрать нельзя.
@pz-change{ value }
@pz-select{ value }Закрывает выпадашку.
<pz-list-row>

Строка записи

Списки

Строка списка записей внутри карточки: плитка типа, номер, заголовок, мета-строка, справа — лица, срок, статус. Наведение — колодец, открытая — мягкая синяя заливка.

Список в карточке
СегодняВ работе
Код
<pz-card pad="sm" style="max-width:720px"><div style="display:grid;gap:2px"><pz-list-row icon="bug_report" tone="bug" id-label="ПРО-141" title="Корзина теряет купон после входа" meta="Дима · обновлено 2 ч назад" unread><pz-chip slot="end" tone="hot" icon="schedule">Сегодня</pz-chip><pz-avatar slot="end" name="Дима Смирнов" size="24"></pz-avatar></pz-list-row><pz-list-row icon="task_alt" tone="task" id-label="ПРО-140" title="Гостевой чекаут" meta="Анна · в работе" selected><pz-badge slot="end" status="work">В работе</pz-badge></pz-list-row><pz-list-row icon="lightbulb" tone="idea" title="Оплата частями" meta="12 голосов · обсуждаем"><pz-faces slot="end" max="2" size="24"><pz-avatar name="Анна"></pz-avatar><pz-avatar name="Олег"></pz-avatar><pz-avatar name="Ира"></pz-avatar></pz-faces></pz-list-row></div></pz-card>
API: 10 атрибутов, 1 событий, 4 слотов
titlestringЗаголовок (или содержимое).
metastringВторая строка серым.
id-labelstringНомер записи (ПРО-140), моноширинным.
iconstringПлитка слева.
tonestring
colorstring
hrefstring
selectedbooleanОткрыта в дровере.
unreadbooleanСиняя точка слева.
denseboolean
@clickОткрыть запись (обычно — в pz-drawer).
slot ·Заголовок.
slot metaМета-строка с разметкой.
slot leadСвой лид (аватар).
slot endСправа: pz-faces, pz-chip, pz-badge, pz-counter.
Правила
  • Строки — внутри pz-card pad="sm" одна под другой (gap 2), без линий-разделителей.
<pz-stepper>

Степпер и этапы

Статус

Степпер статуса записи — одна рейка: этапы пилюлями, подсказка «что дальше», действие справа. <pz-stages> — компактная лента этапов конвейера (сделано → сейчас → дальше).

Статус записи
На проверку
Код
<pz-stepper steps="Новая, Обсуждаем, В работе, Проверка, Готово" current="2" hint="Осталось 2 пункта чеклиста" interactive><pz-button variant="ink" icon="send">На проверку</pz-button></pz-stepper>
Этапы конвейера
Код
<pz-stages steps="Разбор, План, Код, Проверка, Выкатка" current="2"></pz-stages>
API: 4 атрибутов, 1 событий, 1 слотов
stepsstringЭтапы через запятую: «Новая, Обсуждаем, В работе, Проверка, Готово».
currentnumber · 0Индекс текущего этапа (с нуля).
hintstringЧто дальше: «Ждёт ревью Анны».
interactivebooleanЭтапы нажимаются — событие pz-change.
@pz-change{ index, step }
slot ·Действие справа (pz-button, обычно ink — «Отдать на проверку»).
<pz-attachment>

Вложение

Списки

Файл, картинка или ссылка: ряд 56 с квадратом-превью и двумя строками. add — пунктирная кнопка «Прикрепить». Раскладка — .pz-row.

Вложения
Код
<div class="pz-row"><pz-attachment name="Договор поставки 2026.pdf" meta="1,2 МБ" removable></pz-attachment><pz-attachment kind="img" name="Макет корзины.png" meta="840 КБ"></pz-attachment><pz-attachment kind="link" name="figma.com/file/…" meta="Figma"></pz-attachment><pz-attachment add meta="или перетащи файл"></pz-attachment></div>
API: 8 атрибутов, 2 событий
namestring
metastringРазмер, источник.
kindfile · img · link · file
thumbstringПревью картинки.
hrefstring
iconstring
addboolean
removablebooleanКрестик при наведении, событие pz-remove.
@click
@pz-remove
<pz-setting-row>

Строка настройки

Формы

Настройка в колодце: заголовок и пояснение слева, контрол справа (тумблер, сегмент, кнопка). Стопка строк — .pz-stack.tight внутри карточки.

Настройки уведомлений
TelegramПочтаНет
Код
<pz-card title="Уведомления" style="max-width:620px"><div class="pz-stack tight"><pz-setting-row title="Telegram" hint="Сразу, когда что-то ждёт тебя" icon="send" tone="lnk"><pz-toggle checked label="Telegram"></pz-toggle></pz-setting-row><pz-setting-row title="Сводка «Пока тебя не было»" hint="После суток отсутствия"><pz-segmented size="sm" value="tg"><pz-option value="tg">Telegram</pz-option><pz-option value="mail">Почта</pz-option><pz-option value="off">Нет</pz-option></pz-segmented></pz-setting-row></div></pz-card>
API: 4 атрибутов, 2 слотов
titlestring
hintstringПояснение серым.
iconstringПлитка слева.
tonestring
slot ·Контрол справа.
slot hintПояснение с разметкой.
<pz-toast>

Тост

Обратная связь

Короткое сообщение чернильной пилюлей снизу по центру, с действием («Вернуть»). Вызывается функцией toast(текст, { action, onAction, tone, ms }).

Вид (статично) и вызов
Задача удаленаСохраненоПоказать тост
Код
<div class="pz-stack tight" style="justify-items:start"><pz-toast action="Вернуть">Задача удалена</pz-toast><pz-toast tone="ok">Сохранено</pz-toast><pz-button onclick="PulseDS.toast('Ссылка скопирована', { tone: 'ok' })">Показать тост</pz-button></div>
API: 3 атрибутов, 1 событий
actionstringКнопка действия справа.
iconstring
toneok · errЗначок успеха или ошибки.
@pz-actionНажата кнопка действия.
Правила
  • Тост — для подтверждения действия и отмены, не для ошибок формы (они — в error у поля).
<pz-empty>

Пустое состояние

Обратная связь

Когда показывать нечего или загрузка упала: шар со значком, заголовок, короткий текст и действие.

Пусто, всё сделано, ошибка
Новая идеяПовторить
Код
<div class="pz-grid"><pz-card><pz-empty icon="lightbulb" title="Идей пока нет" text="Подай первую — команда увидит её в ленте и сможет проголосовать."><pz-button variant="ink" icon="add">Новая идея</pz-button></pz-empty></pz-card><pz-card><pz-empty compact tone="ok" icon="done_all" title="Всё разобрано" text="Ничего не ждёт тебя."></pz-empty></pz-card><pz-card><pz-empty compact tone="err" title="Не загрузилось" text="Нет связи с сервером."><pz-button icon="refresh" size="sm">Повторить</pz-button></pz-empty></pz-card></div>
API: 5 атрибутов, 2 слотов
iconstring · inbox
titlestring
textstring
toneerr · okerr — ошибка (значок cloud_off), ok — «всё сделано».
compactbooleanВнутри карточки.
slot ·Действия (кнопки).
slot textТекст с разметкой вместо атрибута text.
Правила
  • Текст говорит, что делать дальше, а не только «пусто».

Крупные 9

Панели и каркас: дровер, шапка, сайдбар, чат

<pz-drawer>

Дровер записи

Панели

Запись открывается дровером, а не отдельной страницей. Три режима: справа рядом со списком (side), окном (window), на весь экран (full). Шапка с ↑↓ «1 из 5», пилюлей номера и переключателем режимов; ряд параметров; тело; низ. На телефоне — на весь экран.

Запись в дровере
Открыть записьВ работе

Покупатель оформляет заказ без аккаунта; аккаунт создаётся после оплаты, письмо со ссылкой на пароль.

Форма без пароляПисьмо после оплаты
ОтложитьНа проверку
Код
<pz-button icon="open_in_new" onclick="this.nextElementSibling.show()">Открыть запись</pz-button><pz-drawer id-label="ПРО-140" icon="task_alt" tone="task" title="Гостевой чекаут без регистрации" index="2" total="5"><pz-badge slot="header" status="work">В работе</pz-badge><pz-icon-button slot="actions" icon="more_horiz" label="Ещё" variant="solid" size="sm"></pz-icon-button><pz-param-pill slot="params" avatar="Анна Котова" value="Анна" size="sm"></pz-param-pill><pz-param-pill slot="params" icon="event" value="Пятница" label="срок" size="sm"></pz-param-pill><pz-param-pill slot="params" icon="flag" value="Высокая" size="sm"></pz-param-pill><pz-stepper steps="Новая, В работе, Проверка, Готово" current="1" hint="Осталось 2 пункта"></pz-stepper><p class="pz-body-lg" style="margin:0">Покупатель оформляет заказ без аккаунта; аккаунт создаётся после оплаты, письмо со ссылкой на пароль.</p><pz-well title="Чеклист"><div class="pz-stack tight"><pz-checkbox checked>Форма без пароля</pz-checkbox><pz-checkbox>Письмо после оплаты</pz-checkbox></div></pz-well><pz-button slot="footer" variant="ghost">Отложить</pz-button><span slot="footer" class="pz-spacer"></span><pz-button slot="footer" variant="ink" icon="send">На проверку</pz-button></pz-drawer>
API: 11 атрибутов, 5 событий, 6 слотов
openboolean
modeside · window · full · side
titlestringЗаголовок записи (h2).
id-labelstringНомер записи в пилюле (ПРО-140).
iconstringПлитка типа в пилюле номера.
tonestring
indexnumberПозиция в списке (с 1).
totalnumberСколько в списке — показывает ↑↓ и «1 из N».
no-modesbooleanБез переключателя режимов.
pushbooleanВ режиме side ужимать страницу (pz-app-shell сдвигает контент).
widthstring · 560pxШирина в режиме side.
@pz-open
@pz-close
@pz-mode{ mode }
@pz-prev
@pz-next
slot ·Тело: описание, чеклист (pz-well), вложения, степпер.
slot paramsРяд pz-param-pill / pz-dropdown под заголовком.
slot actionsКнопки в шапке перед «Закрыть» (ещё, поделиться).
slot headerПосле пилюли номера (бейдж статуса).
slot titleСвой заголовок вместо title (правка на месте).
slot footerНиз: главное действие справа.
Правила
  • Esc закрывает; ↑↓ — соседние записи (pz-prev / pz-next, данные меняет приложение).
  • Параметры — пилюлями в slot="params", не листом свойств.
  • Обсуждение записи — в чате (pz-chat), не блоком комментариев внизу.
<pz-dialog>

Диалог

Панели

Окно по центру с затемнением: подтверждение, короткая форма. На телефоне — лист снизу. Подтверждение одной строкой — confirmDialog({ title, text, ok, danger }).

Форма и подтверждение
ПригласитьОтменаПригласитьУдалить
Код
<div class="pz-row"><pz-button icon="person_add" onclick="this.nextElementSibling.show()">Пригласить</pz-button><pz-dialog title="Пригласить в пространство" text="Ссылка придёт на почту." icon="person_add" tone="lnk"><pz-field label="Почта" type="email" placeholder="name@company.ru"></pz-field><pz-button slot="footer" variant="ghost" onclick="this.closest('pz-dialog').close()">Отмена</pz-button><pz-button slot="footer" variant="ink">Пригласить</pz-button></pz-dialog><pz-button variant="danger" icon="delete" onclick="PulseDS.confirmDialog({ title: 'Удалить задачу?', text: 'Вернуть её будет нельзя.', ok: 'Удалить', danger: true }).then(ok => ok && PulseDS.toast('Удалено'))">Удалить</pz-button></div>
API: 7 атрибутов, 2 событий, 2 слотов
openboolean
titlestring
textstring
iconstringПлитка слева от заголовка.
tonestring
sizesm · md · lg · md400 / 480 / 720.
persistentbooleanНе закрывать по Esc и клику мимо.
@pz-open
@pz-close{ value }
slot ·Тело (поля формы).
slot footerДействия справа: ghost «Отмена» + ink или danger.
Правила
  • Для записи — pz-drawer, не диалог. Диалог — для подтверждений и форм на 1–3 поля.
<pz-sheet>

Лист снизу

Панели

Стеклянный лист снизу с ручкой — действия и выбор на телефоне. Меню pz-dropdown становится листом само; pz-sheet — для своих экранов (фильтры, «ещё»).

Фильтры
ФильтрыСбросить
ВсеМоиЖдутПоказать 12
Код
<pz-button icon="tune" onclick="this.nextElementSibling.show()">Фильтры</pz-button><pz-sheet title="Фильтры"><pz-button slot="actions" variant="ghost" size="sm">Сбросить</pz-button><div class="pz-stack tight"><pz-segmented fill value="all"><pz-option value="all">Все</pz-option><pz-option value="mine">Мои</pz-option><pz-option value="wait">Ждут</pz-option></pz-segmented><pz-setting-row title="Только горящие"><pz-toggle label="Только горящие"></pz-toggle></pz-setting-row><pz-button variant="ink" block>Показать 12</pz-button></div></pz-sheet>
API: 2 атрибутов, 1 событий, 2 слотов
openboolean
titlestring
@pz-close
slot ·Содержимое (pz-menu, поля, кнопки).
slot actionsСправа от заголовка.
<pz-page-header>

Шапка страницы

Каркас

Заголовок страницы H1 с плиткой раздела и контекстным чипом, ИИ-строка или подзаголовок под ним; справа — действия высотой 48 (поиск, группа значков, «+ Создать», аватар); ниже — вкладки.

Мой Пульс
Все пространстваСоздатьВсёМоя работаЖдут меня
Код
<pz-page-header title="Мой Пульс" ai="3 записи ждут тебя, одна горит. Дима закрыл 4 задачи по корзине."><pz-chip slot="chip" clickable icon="expand_more">Все пространства</pz-chip><pz-field slot="actions" variant="search" placeholder="Поиск и команды" kbd="⌘K" style="width:260px"></pz-field><pz-icon-group slot="actions" label="Сообщения"><pz-icon-button icon="forum" label="Чаты" badge="2"></pz-icon-button><pz-icon-button icon="notifications" label="Уведомления" dot></pz-icon-button></pz-icon-group><pz-button slot="actions" variant="ink" icon="add">Создать</pz-button><pz-avatar slot="actions" name="Иван Яким" solid size="40"></pz-avatar><pz-segmented slot="tabs" value="all"><pz-option value="all">Всё</pz-option><pz-option value="mine" count="5">Моя работа</pz-option><pz-option value="wait" count="3" hot>Ждут меня</pz-option></pz-segmented></pz-page-header>
API: 6 атрибутов, 5 слотов
titlestring
subtitlestring
aistringИИ-строка (бриф) со значком auto_awesome — вместо подзаголовка.
iconstringПлитка раздела.
tonestring
colorstring
slot actionsСправа: pz-field variant="search", pz-icon-group, pz-dropdown с «Создать», pz-avatar.
slot chipРядом с заголовком: охват, статус, лица.
slot tabsВкладки и фильтры (pz-segmented).
slot leadСвой лид.
slot subtitleПодзаголовок с разметкой.
Правила
  • Заголовок страницы один; действия справа — одной высоты (48), это задаёт сама шапка.
<pz-app-shell>

Каркас приложения

Каркас

Сайдбар слева прямо на тонированной земле и колонка контента; на телефоне вместо сайдбара — плавающий таб-бар. collapsed — рельс из значков. Дровер с push ужимает контент.

Каркас (уменьшено)
Мой ПульсИдеиДокументыТемыКорзинаДоставкаНастройки
Код
<div style="height:520px;overflow:hidden;border-radius:20px;box-shadow:var(--pz-sh-card)"><pz-app-shell style="min-height:520px"><pz-nav-brand slot="brand" title="Продукт" caption="Пульс" color="#5b4fd6"></pz-nav-brand><pz-nav-item slot="sidebar" icon="monitor_heart" active count="3" count-tone="hot">Мой Пульс</pz-nav-item><pz-nav-item slot="sidebar" icon="lightbulb">Идеи</pz-nav-item><pz-nav-item slot="sidebar" icon="description">Документы</pz-nav-item><pz-nav-section slot="sidebar">Темы</pz-nav-section><pz-nav-item slot="sidebar" tile="shopping_cart" color="#d6418f" count="2" count-tone="hot">Корзина</pz-nav-item><pz-nav-item slot="sidebar" tile="local_shipping" color="#0f9fb4">Доставка</pz-nav-item><pz-nav-item slot="sidebar-bottom" icon="settings">Настройки</pz-nav-item><pz-page-header title="Мой Пульс" ai="Всё спокойно: ничего не горит."></pz-page-header><div class="pz-grid"><pz-card title="Ждут тебя" count="3"><pz-skeleton lines="3"></pz-skeleton></pz-card><pz-card title="Моя работа"><pz-skeleton lines="3"></pz-skeleton></pz-card></div></pz-app-shell></div>
API: 2 атрибутов, 5 слотов
collapsedbooleanРельс 76 px.
no-groundbooleanБез своей земли (если она уже на body.pz-app).
slot brandВерх сайдбара: pz-nav-brand (переключатель пространства).
slot sidebarpz-nav-item, pz-nav-section.
slot sidebar-bottomНиз сайдбара: настройки, профиль.
slot ·Контент: pz-page-header + карточки.
slot tabbarpz-tabbar для телефона.
Правила
  • Сайдбар не карточка: пункты лежат на земле, активный — белая пилюля с тенью.
  • Пункты сайдбара — разделы текущего пространства; глобальные действия — в шапке страницы.
<pz-nav-item>

Навигация сайдбара

Каркас

Пункт сайдбара 42 px: значок или плитка темы, подпись, счётчик. Активный — белая пилюля с тенью. <pz-nav-section> — подпись группы, <pz-nav-brand> — логотип и переключатель пространства (триггер для pz-dropdown).

Сайдбар
ЗакреплённыеПродуктМагазин
Мой ПульсБорисИдеиТемыКорзинаОплатаТема
Код
<div style="width:264px;display:grid;gap:2px"><pz-dropdown><pz-nav-brand slot="trigger" title="Продукт" caption="Пульс" color="#5b4fd6"></pz-nav-brand><pz-menu search="Найти пространство" select="single"><pz-menu-label>Закреплённые</pz-menu-label><pz-menu-item value="p" selected icon="rocket_launch" hint="ты здесь · 3 ждут тебя" kbd="⌘1">Продукт</pz-menu-item><pz-menu-item value="s" icon="storefront" hint="в норме" kbd="⌘2">Магазин</pz-menu-item></pz-menu></pz-dropdown><div style="height:14px"></div><pz-nav-item icon="monitor_heart" active count="3" count-tone="hot">Мой Пульс</pz-nav-item><pz-nav-item icon="smart_toy" count="2" count-tone="blue">Борис</pz-nav-item><pz-nav-item icon="lightbulb" count="4">Идеи</pz-nav-item><pz-nav-section>Темы<pz-icon-button slot="action" icon="add" label="Новая тема" size="sm"></pz-icon-button></pz-nav-section><pz-nav-item tile="shopping_cart" color="#d6418f" count="2" count-tone="hot">Корзина</pz-nav-item><pz-nav-item tile="payments" color="#1d7d53">Оплата</pz-nav-item><pz-nav-item add>Тема</pz-nav-item></div>
API: 9 атрибутов, 1 слотов
iconstring
tilestringЗначок в плитке (для тем и пространств).
colorstringЦвет плитки.
tonestring
hrefstring
activeboolean
countstring
count-toneplain · blue · hot · mute · plainhot — ждут моего шага.
addbooleanТихий пункт «+ Тема».
slot ·Подпись.
<pz-tabbar>

Таб-бар телефона

Каркас

Плавающая стеклянная пилюля снизу на телефоне (≤760 px): 4 вкладки и круглая чернильная «+» по центру. На широком экране скрыт (always — показывать всегда).

Таб-бар
ПульсИдеиЧатыЕщё
Код
<div style="max-width:420px"><pz-tabbar always><pz-tab icon="monitor_heart" active badge="3">Пульс</pz-tab><pz-tab icon="lightbulb">Идеи</pz-tab><pz-tab fab icon="add" label="Создать"></pz-tab><pz-tab icon="forum" badge="2">Чаты</pz-tab><pz-tab icon="menu">Ещё</pz-tab></pz-tabbar></div>
API: 1 атрибутов, 1 слотов
alwaysbooleanПоказывать и на широком экране, в потоке (для витрины).
slot ·<pz-tab icon href active badge>Подпись</pz-tab>, <pz-tab fab icon="add" label="Создать"></pz-tab>.
<pz-ai-block>

ИИ-блок

ИИ

Тёплый слой ИИ: итог, вердикт, вопрос или предложение ИИ-исполнителя (Борис). Заголовок со значком, вердикт пилюлей, текст, этапы конвейера, действия.

Вопрос Бориса
Купон применять до расчёта доставки или после? В коде сейчас — после, а в ТЗ — до.До доставкиПослеОбсудить в чате
Код
<pz-ai-block title="Борис спрашивает" verdict="Нужен ответ" verdict-tone="warn" style="max-width:620px"><pz-avatar slot="avatar" name="Борис" icon="smart_toy" size="28"></pz-avatar>Купон применять до расчёта доставки или после? В коде сейчас — после, а в ТЗ — до.<pz-stages slot="stages" steps="Разбор, План, Код, Проверка" current="2"></pz-stages><pz-button slot="actions" variant="ink">До доставки</pz-button><pz-button slot="actions">После</pz-button><pz-button slot="actions" variant="ghost">Обсудить в чате</pz-button></pz-ai-block>
API: 5 атрибутов, 4 слотов
titlestring · ИИ
iconstring · auto_awesome
verdictstringПилюля справа: «Готово к выкатке», «Нужен ответ».
verdict-toneok · warn · danger
compactboolean
slot ·Текст.
slot avatarАватар исполнителя слева от заголовка.
slot stagespz-stages — этапы конвейера.
slot actionsКнопки ответа.
Правила
  • ИИ всегда узнаётся: градиент ai, значок auto_awesome или аватар исполнителя. Не смешивать с обычными карточками.
<pz-chat>

Чат

Чаты

Обсуждение — как в мессенджере: фон с узором, пузыри (свой справа, голубой), стеклянное поле ввода с синей кнопкой «Отправить». <pz-chat> — лента, <pz-bubble> — сообщение, <pz-composer> — поле (Enter — отправить, Shift+Enter — строка).

Чат записи
Купон слетает после входа — воспроизвёл на стенде.Похоже, корзина гостя не сливается с корзиной аккаунта.Да, слияние теряет поле coupon. Поправлю сегодня.
Код
<div style="height:420px;max-width:560px;border-radius:24px;overflow:hidden;box-shadow:var(--pz-sh-card)"><pz-chat><pz-bubble author="Дима Смирнов" time="09:10">Купон слетает после входа — воспроизвёл на стенде.</pz-bubble><pz-bubble author="Дима Смирнов" time="09:11" cont>Похоже, корзина гостя не сливается с корзиной аккаунта.</pz-bubble><pz-bubble me time="09:14">Да, слияние теряет поле coupon. Поправлю сегодня.</pz-bubble><pz-composer slot="composer" placeholder="Сообщение в ПРО-141"></pz-composer></pz-chat></div>
API: 1 атрибутов, 2 событий, 3 слотов
titlestring
@pz-send{ value }От pz-composer: отправить сообщение (preventDefault — не очищать поле).
@pz-attachОт pz-composer: нажата скрепка.
slot ·pz-bubble me author avatar time cont.
slot headerПлавающие стеклянные пилюли сверху (название, участники).
slot composerpz-composer.
Правила
  • Обсуждение записи — только в чате; встроенного блока комментариев нет.
  • Подряд идущие сообщения одного автора — cont (без имени и аватара).

Готовые блоки

Эталонные композиции целиком: копируйте и меняйте данные. С них нейросеть начинает любую новую страницу.

Входящие В доставке Возвраты Отчёты Выручка Настройки Заказ Все Оплачены Ждут ответа Фильтры
Новый ждёт 2 ч Собираем
Новый Дима СмирновАнна Котова
Колодки передние, 04465-334509 980 ₽
Доставка СДЭК2 500 ₽
Отменить заказ Взять в работу
ВходящиеДоставка ОтчётыЕщё
Код
<pz-app-shell style="min-height:640px">
  <pz-nav-brand slot="brand" title="Заказы" caption="Магазин" color="#2466c4" icon="storefront"></pz-nav-brand>
  <pz-nav-item slot="sidebar" icon="inbox" active count="12" count-tone="hot">Входящие</pz-nav-item>
  <pz-nav-item slot="sidebar" icon="local_shipping" count="38">В доставке</pz-nav-item>
  <pz-nav-item slot="sidebar" icon="assignment_return">Возвраты</pz-nav-item>
  <pz-nav-section slot="sidebar">Отчёты</pz-nav-section>
  <pz-nav-item slot="sidebar" icon="monitoring">Выручка</pz-nav-item>
  <pz-nav-item slot="sidebar-bottom" icon="settings">Настройки</pz-nav-item>

  <pz-page-header title="Входящие" icon="inbox" tone="hot" subtitle="Новые заказы, которые ещё никто не взял">
    <pz-field slot="actions" variant="search" placeholder="Номер, клиент, артикул" style="width:280px"></pz-field>
    <pz-button slot="actions" variant="ink" icon="add">Заказ</pz-button>
    <pz-segmented slot="tabs" value="all">
      <pz-option value="all" count="12">Все</pz-option>
      <pz-option value="paid" count="9">Оплачены</pz-option>
      <pz-option value="wait" count="3" hot>Ждут ответа</pz-option>
    </pz-segmented>
    <pz-chip slot="tabs" clickable icon="filter_list">Фильтры</pz-chip>
  </pz-page-header>

  <pz-card pad="sm">
    <div style="display:grid;gap:2px">
      <pz-list-row icon="shopping_bag" tone="task" id-label="#48213" title="Тормозные колодки Toyota Camry" meta="Иван Петров · 12 480 ₽ · оплачен 10 мин назад" unread onclick="document.getElementById('order').show()">
        <pz-badge slot="end" status="new">Новый</pz-badge>
      </pz-list-row>
      <pz-list-row icon="shopping_bag" tone="task" id-label="#48212" title="Масляный фильтр, 4 шт." meta="ООО «Автодом» · 3 120 ₽">
        <pz-chip slot="end" tone="hot" icon="schedule">ждёт 2 ч</pz-chip>
      </pz-list-row>
      <pz-list-row icon="shopping_bag" tone="task" id-label="#48210" title="Амортизаторы передние" meta="Ольга С. · 18 900 ₽">
        <pz-badge slot="end" status="work">Собираем</pz-badge><pz-avatar slot="end" name="Дима Смирнов" size="24"></pz-avatar>
      </pz-list-row>
    </div>
  </pz-card>

  <pz-drawer id="order" push id-label="#48213" icon="shopping_bag" tone="task" title="Тормозные колодки Toyota Camry" index="1" total="12">
    <pz-badge slot="header" status="new">Новый</pz-badge>
    <pz-param-pill slot="params" avatar="Иван Петров" value="Иван Петров" size="sm"></pz-param-pill>
    <pz-param-pill slot="params" icon="payments" value="12 480 ₽" label="оплачен" size="sm"></pz-param-pill>
    <pz-dropdown slot="params"><pz-param-pill slot="trigger" icon="person" value="Ответственный" none size="sm"></pz-param-pill>
      <pz-menu search="Найти" select="single"><pz-menu-item value="dima" avatar="Дима Смирнов">Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова">Анна Котова</pz-menu-item></pz-menu></pz-dropdown>
    <pz-stepper steps="Новый, Собираем, Отправлен, Доставлен" current="0" hint="Взять в работу и собрать"></pz-stepper>
    <pz-well title="Состав">
      <div class="pz-row between"><span>Колодки передние, 04465-33450</span><b class="pz-num">9 980 ₽</b></div>
      <div class="pz-row between" style="margin-top:8px"><span>Доставка СДЭК</span><b class="pz-num">2 500 ₽</b></div>
    </pz-well>
    <div class="pz-row"><pz-attachment name="Счёт 48213.pdf" meta="86 КБ"></pz-attachment></div>
    <pz-button slot="footer" variant="ghost">Отменить заказ</pz-button>
    <span slot="footer" class="pz-spacer"></span>
    <pz-button slot="footer" variant="ink" icon="play_arrow">Взять в работу</pz-button>
  </pz-drawer>

  <pz-tabbar slot="tabbar">
    <pz-tab icon="inbox" active badge="12">Входящие</pz-tab><pz-tab icon="local_shipping">Доставка</pz-tab>
    <pz-tab fab icon="add" label="Новый заказ"></pz-tab><pz-tab icon="monitoring">Отчёты</pz-tab><pz-tab icon="menu">Ещё</pz-tab>
  </pz-tabbar>
</pz-app-shell>
Эта неделя
Все
горит
2,41 млн ₽
+8 % к плану1 284 заказа
Склад Москва
заказы старше 24 ч
Поставщик Emex
нет ответа по ценам
Больше всего движения в «Возвратах»: закрыто 14, новых 9. Предлагаю назначить второго ответственного по PayPal — очередь растёт третью неделю. НазначитьПозже
Код
<div class="pz-page" style="padding:0">
  <pz-page-header title="Сводка" ai="Выручка за неделю выше плана на 8 %. Три возврата ждут решения, один — дольше суток.">
    <pz-chip slot="chip" clickable icon="expand_more">Эта неделя</pz-chip>
    <pz-icon-group slot="actions" label="Действия"><pz-icon-button icon="refresh" label="Обновить"></pz-icon-button><pz-icon-button icon="ios_share" label="Поделиться"></pz-icon-button></pz-icon-group>
  </pz-page-header>
  <div class="pz-grid">
    <pz-card title="Ждут тебя" count="3" icon="hourglass_top" tone="hot">
      <pz-button slot="actions" variant="ghost">Все</pz-button>
      <div style="display:grid;gap:2px">
        <pz-list-row dense icon="assignment_return" tone="bug" title="Возврат #9921" meta="ждёт 26 ч"><pz-chip slot="end" tone="hot">горит</pz-chip></pz-list-row>
        <pz-list-row dense icon="payments" tone="task" title="Подтвердить оплату PayPal" meta="Дима · 8 ч"></pz-list-row>
        <pz-list-row dense icon="help" tone="idea" title="Вопрос по поставщику" meta="Анна · 1 ч"></pz-list-row>
      </div>
    </pz-card>
    <pz-card title="Выручка" icon="monitoring" tone="ok" subtitle="за 7 дней">
      <div class="pz-h0 pz-num">2,41 <span class="pz-h3 pz-muted">млн ₽</span></div>
      <div class="pz-row" style="margin-top:10px"><pz-chip tone="ok" icon="trending_up">+8 % к плану</pz-chip><pz-chip>1 284 заказа</pz-chip></div>
    </pz-card>
    <pz-card title="Где горит" icon="local_fire_department" tone="hot">
      <div class="pz-stack tight">
        <pz-well pad="sm"><div class="pz-row between"><b>Склад Москва</b><pz-counter tone="hot" value="7"></pz-counter></div><div class="pz-small">заказы старше 24 ч</div></pz-well>
        <pz-well pad="sm"><div class="pz-row between"><b>Поставщик Emex</b><pz-counter tone="mute" value="2"></pz-counter></div><div class="pz-small">нет ответа по ценам</div></pz-well>
      </div>
    </pz-card>
    <pz-ai-block title="Итог недели" verdict="В норме" verdict-tone="ok">
      Больше всего движения в «Возвратах»: закрыто 14, новых 9. Предлагаю назначить второго ответственного по PayPal — очередь растёт третью неделю.
      <pz-button slot="actions" variant="ink">Назначить</pz-button><pz-button slot="actions" variant="ghost">Позже</pz-button>
    </pz-ai-block>
  </div>
</div>
Дима СмирновАнна КотоваБорис ВысокаяОбычнаяНизкая
Очистить Сохранить черновик Создать
Код
<form class="pz-stack" style="max-width:720px" onsubmit="event.preventDefault(); PulseDS.toast('Задача создана', { tone: 'ok', action: 'Открыть' })">
  <pz-card>
    <div class="pz-stack">
      <pz-field name="title" label="Что сделать" placeholder="Коротко, глаголом: «Починить купон в корзине»" required></pz-field>
      <div class="pz-row">
        <pz-dropdown><pz-param-pill slot="trigger" icon="person_add" value="Исполнитель" none></pz-param-pill>
          <pz-menu search="Найти человека" select="single"><pz-menu-item value="dima" avatar="Дима Смирнов">Дима Смирнов</pz-menu-item><pz-menu-item value="anna" avatar="Анна Котова">Анна Котова</pz-menu-item><pz-menu-item value="boris" icon="smart_toy" hint="ИИ-исполнитель">Борис</pz-menu-item></pz-menu></pz-dropdown>
        <pz-dropdown flush><pz-param-pill slot="trigger" icon="event" value="Срок" none></pz-param-pill><pz-calendar></pz-calendar></pz-dropdown>
        <pz-dropdown><pz-param-pill slot="trigger" icon="flag" value="Обычная"></pz-param-pill>
          <pz-menu select="single"><pz-menu-item value="high" icon="flag">Высокая</pz-menu-item><pz-menu-item value="mid" icon="flag" selected>Обычная</pz-menu-item><pz-menu-item value="low" icon="flag">Низкая</pz-menu-item></pz-menu></pz-dropdown>
      </div>
      <pz-field name="body" label="Подробности" multiline autogrow rows="4" hint="Как воспроизвести, что ожидается, ссылки"></pz-field>
      <div class="pz-row"><pz-attachment add meta="или перетащи файл"></pz-attachment></div>
      <pz-setting-row title="Сообщить в Telegram" hint="Исполнитель получит уведомление сразу"><pz-toggle name="notify" checked label="Сообщить в Telegram"></pz-toggle></pz-setting-row>
    </div>
    <pz-button slot="footer" variant="ghost" type="reset">Очистить</pz-button>
    <span slot="footer" class="pz-spacer"></span>
    <pz-button slot="footer">Сохранить черновик</pz-button>
    <pz-button slot="footer" variant="ink" type="submit" icon="add">Создать</pz-button>
  </pz-card>
</form>
Иван Якимов
владелец · 4 пространства
Изменить
СветлаяТёмнаяСистема
Выйти везде
Код
<div class="pz-stack" style="max-width:760px">
  <pz-card>
    <div class="pz-row nowrap" style="gap:16px"><pz-avatar name="Иван Якимов" size="56" solid></pz-avatar>
      <div style="flex:1;min-width:0"><div class="pz-h3">Иван Якимов</div><div class="pz-small">владелец · 4 пространства</div></div>
      <pz-button icon="edit" size="sm">Изменить</pz-button></div>
  </pz-card>
  <pz-card title="Интерфейс" icon="palette" tone="idea">
    <div class="pz-stack tight">
      <pz-setting-row title="Тема" hint="Светлая, тёмная или как в системе">
        <!-- по событию pz-change: PulseDS.setTheme(e.detail.value) -->
        <pz-segmented size="sm" value="auto"><pz-option value="light">Светлая</pz-option><pz-option value="dark">Тёмная</pz-option><pz-option value="auto">Система</pz-option></pz-segmented>
      </pz-setting-row>
      <pz-setting-row title="Компактные списки" hint="Меньше воздуха между строками"><pz-toggle label="Компактные списки"></pz-toggle></pz-setting-row>
    </div>
  </pz-card>
  <pz-card title="Уведомления" icon="notifications" tone="lnk">
    <div class="pz-stack tight">
      <pz-setting-row title="Telegram" hint="Сразу, когда что-то ждёт тебя"><pz-toggle checked label="Telegram"></pz-toggle></pz-setting-row>
      <pz-setting-row title="Дайджест недели" hint="Понедельник, 09:00"><pz-toggle checked label="Дайджест"></pz-toggle></pz-setting-row>
    </div>
  </pz-card>
  <pz-card title="Опасная зона" icon="warning" tone="danger">
    <pz-setting-row title="Выйти со всех устройств" hint="Понадобится войти заново"><pz-button variant="danger" size="sm" icon="logout">Выйти везде</pz-button></pz-setting-row>
  </pz-card>
</div>
ОбзорКод КомпонентыClaude