Чертёж
blueprint — это технический чертёж: тонкие линии на почти чёрном листе, прямые углы и метка совмещения — маленький крестик — на каждом углу карточки, диалога и ряда показателей. Всё, что что-то называет или чем-то управляет, — кнопка, подпись поля, вкладка, тег, заголовок столбца, ссылка в панели — набрано моноширинным шрифтом, прописными с разрядкой, а заголовки и основной текст остаются в гротеске, набранном плотно. Сплошная линия — это край, а пунктирная делит то, что внутри, как чертёж обозначает невидимый контур: строки таблицы, разделитель, путь к шагу, который ещё впереди. Цветов немного. Сплошная кнопка, отмеченный флажок, заполненная полоса и всё выбранное — это тушь, напечатанная в инверсии; один чертёжный синий отмечает фокус и метку над заголовком; успех, предупреждение и опасность сохраняют свои цвета для того, о чём они говорят. Ничто не отбрасывает тени. Тёмная тема — исходный вид; светлая сохраняет каждую линию и каждую метку и печатает их тушью на белой бумаге.
Карточка
Та же разметка, переоформленная одной таблицей стилей.
Аккаунт
Профиль
Подтверждение
Что такое пресет?
Он следует тёмной теме?
Можно ли по-прежнему использовать theme()?
Сегодня
Пресет выпущен
Весь облик одним вызовом.
Вчера
Документация написана
Понедельник
Первый набросок
Как подключить
import { iconSet, styles } from 'sitelo/ui'
iconSet('square')
head(
title('Мой сайт'),
styles({ preset: 'blueprint' }),
)
// <link rel="stylesheet" href="/su/ui-c9428b65.css">
// <link rel="stylesheet" href="/su/blueprint-4d1f8a20.css">iconSet('square') рисует иконки в тон — прямыми тонкими линиями с квадратными концами и острыми углами, как в примере выше, — включая те, что компоненты рисуют сами. Вызовите его один раз, в модуле, который импортируют ваши страницы.
Задайте странице фон var(--su-bp-backdrop), чтобы получить фон пресета с тонкой сеткой поверх, или просто var(--su-bg). Пресет использует Geist или Inter, а также Geist Mono, JetBrains Mono или IBM Plex Mono, если страница их загружает, а иначе — системные шрифты; сам он ничего не скачивает.
body {
background: var(--su-bp-backdrop);
color: var(--su-text);
font-family: var(--su-font-sans);
}Свои цвета
theme() по-прежнему работает поверх, так что пресет — это отправная точка, а не форк. Основная палитра — это тушь: сплошная кнопка, отмеченный флажок, заполненная полоса, всё выбранное, — поэтому primary перекрашивает всё это разом. Остальные токены принадлежат самому пресету: --su-bp-accent — синий, которым рисуется фокус и отмечается заголовок; --su-bp-mark — метки совмещения, которые убирает transparent; --su-bp-field — линия вокруг поля; --su-bp-track — жёлоб, по которому идёт индикатор прогресса; --su-bp-grid и --su-bp-cell — линии фона и размер его клеток; и --su-bp-tracking — разрядка прописных в подписи. Здесь синий становится сигнальным оранжевым, а вместе с ним и метки.
head(
styles({ preset: 'blueprint' }),
theme(
{ bpAccent: '#c2410c', bpMark: '#c2410c' },
{ dark: { bpAccent: '#ff7a3d', bpMark: '#ff7a3d' } },
),
)