Данные символов
Thykes Symbols — вариативный шрифт символов. Он опубликован по адресу https://thykes.com/v0/symbols/ вместе с контурами в JSON для приложений и инструментов, которые читают набор по сети.
Компоненты Thykes эти файлы не используют. Их глифы берутся из шрифта иконок, который
загружает thykes.js; см.
Файлы
| URL | Что в нём |
|---|---|
/v0/symbols/manifest.json |
Оглавление: версия, оси шрифта, все символы и хеш SHA-256 каждого файла шрифта |
/v0/symbols/ThykesSymbols.woff2 |
Вариативный шрифт, сжатый для веба |
/v0/symbols/ThykesSymbols.ttf |
Тот же шрифт без сжатия, для инструментов, которые не читают WOFF2 |
/v0/symbols/figma/<name>.json |
Контуры одного символа во всех весах и масштабах, например figma/trash.json. Из этих же файлов собрана документация набора в Figma |
Каждый файл можно запрашивать с любого источника (Access-Control-Allow-Origin: *), и он
отдаётся с Cache-Control: public, max-age=0, must-revalidate, поэтому браузер при каждой
загрузке проверяет, нет ли более новой копии.
Манифест
{
"family": "Thykes Symbols",
"version": "0.3.0",
"sourceHash": "…",
"axes": { "wght": [100, 400, 900], "SCAL": [1, 2, 3] },
"symbols": [
{
"name": "check-circle-fill",
"codepoint": "U+F0023",
"keywords": ["check", "done", "success", "complete",
"confirmed", "circle", "fill", "solid"],
"layers": [
{ "name": "shape", "hierarchy": "tertiary",
"motionGroup": 1, "codepoint": "U+F0024" },
{ "name": "mark", "hierarchy": "primary",
"motionGroup": 0, "knockout": true, "codepoint": "U+F0025" }
]
}
],
"outputs": {
"ThykesSymbols.ttf": "<sha-256, hex>",
"ThykesSymbols.woff2": "<sha-256, hex>"
}
}| Поле | Значение |
|---|---|
family |
Имя семейства шрифта, Thykes Symbols |
version |
Версия набора по семантическому версионированию (см. |
sourceHash |
Хеш исходников, из которых собраны файлы. Меняется при каждой пересборке с изменёнными исходниками; его можно не читать |
axes |
Каждая ось шрифта в виде [минимум, по умолчанию, максимум]. wght — насыщенность, от 100 до 900; SCAL — масштаб, от 1 до 3 |
symbols |
Все символы по алфавиту |
symbols[].name |
Имя символа, например trash. Это же имя у файла его контуров |
symbols[].codepoint |
Символ, который рисует всю фигуру одним цветом |
symbols[].keywords |
Слова для поиска символа |
symbols[].layers |
Части символа, снизу вверх |
layers[].hierarchy |
Насколько слой заметен: primary, secondary или tertiary |
layers[].motionGroup |
Число; слои с одинаковым числом двигаются вместе, когда символ анимируется по частям |
layers[].codepoint |
Символ, который рисует только этот слой. Есть только у символов из нескольких слоёв |
layers[].knockout |
true, если в одноцветном символе слой вырезан дырой (галочка в check-circle-fill). Как отдельный слой он сплошной и лежит сверху |
outputs |
Хеш SHA-256 каждого файла шрифта в шестнадцатеричном виде |
В следующих версиях у слоя могут появиться другие пометки; незнакомые поля пропускайте.
Кодовые точки
Каждая кодовая точка, и в манифесте, и в файлах контуров, записана как U+ и её
шестнадцатеричное значение заглавными буквами: "U+F0023". Они лежат в области
Supplementary Private Use Area-A, начиная с U+F0000. Кодовая точка никогда не меняется и
не используется повторно.
const char = String.fromCodePoint(parseInt(symbol.codepoint.slice(2), 16));
Чтобы раскрасить слои по отдельности, поставьте символы слоёв в одно место друг на друга в порядке манифеста, первый снизу, и дайте каждому свой цвет.
Насыщенность и масштаб
У шрифта две оси. wght — насыщенность, она следует CSS-свойству font-weight; девять
именованных начертаний:
| Начертание | wght |
|---|---|
| Ultralight | 100 |
| Thin | 200 |
| Light | 300 |
| Regular | 400 |
| Medium | 500 |
| Semibold | 600 |
| Bold | 700 |
| Heavy | 800 |
| Black | 900 |
SCAL — масштаб: 1, 2 и 3 — это масштабы S, M и L, тот же символ в 0,8, 1 и 1,28 размера
M. Задаётся через font-variation-settings.
@font-face {
font-family: 'Thykes Symbols';
src: url(https://thykes.com/v0/symbols/ThykesSymbols.woff2) format('woff2');
font-weight: 100 900;
font-display: block;
}
.symbol { font-family: 'Thykes Symbols'; font-synthesis: none; line-height: 1; }
.symbol-small { font-variation-settings: 'SCAL' 1; }
.symbol-large { font-variation-settings: 'SCAL' 3; }Для скринридера символ ничего не значит: скройте его через aria-hidden="true" и дайте
контролу собственную подпись. Шрифт проверен в Chromium и WebKit; Firefox пока не проверен.
Контуры символа
Каждый figma/<name>.json содержит один символ во всех 27 сочетаниях насыщенности и
масштаба.
| Поле | Значение |
|---|---|
name, codepoint, keywords |
Как в манифесте |
density |
Класс штриха символа: open, standard или dense. У более плотных символов штрих чуть тоньше |
layers |
Слои снизу вверх: name, hierarchy, motionGroup и, где нужно, knockout. covers перечисляет более ранние слои, которые этот слой перекрывает; рисуйте его после них |
metrics |
Рамка рисунка: em 100 (px), baselineY 85, capLineY 15 и unitsPerPx 10 (единиц шрифта на px) |
strokeRegularM |
Толщина штриха в Regular M, в px при em 100 px |
skeletonRegularM |
Для каждого слоя — осевые линии в Regular M, пути, вдоль которых проведены штрихи. У слоя их может не быть (пустой список) |
instances |
По записи на каждое сочетание насыщенности и масштаба, ключ "Weight/Scale", от "Ultralight/S" до "Black/L" |
instances[].advance |
Ширина рамки символа в px вместе с боковыми полями |
instances[].layers |
Контур каждого слоя, ключ — имя слоя |
instances[].mono |
Одноцветный контур с вырезанным слоем knockout. Есть только у символов с таким слоем |
Каждый контур — это данные пути SVG (M, L, C и Z, абсолютные) в px в рамке высотой
100 px и шириной advance, ось y направлена вниз, один знак после запятой. Заливайте по
правилу nonzero.
{
"name": "trash",
"codepoint": "U+F0089",
"density": "dense",
"metrics": { "em": 100, "baselineY": 85, "capLineY": 15, "unitsPerPx": 10 },
"strokeRegularM": 5.9,
"instances": {
"Regular/M": {
"advance": 93.9,
"layers": { "trash": "M14.9 32.5C13.3 32.5 …Z" }
}
}
}Версии
versionследует семантическому версионированию: новый символ повышает минорный номер (с 0.3.0 до 0.4.0), перерисованный — номер патча (с 0.3.0 до 0.3.1).- Внутри
/v0/каждое обновление совместимо и заменяет файлы на месте. - Изменение, которое сломало бы читателя, выходит в новой папке,
/v1/symbols/, а/v0/symbols/продолжает отдаваться. Это удалённый или переименованный символ, файл или поле и другая запись кодовых точек. - Сначала читайте
manifest.json. Шрифт актуален, если его SHA-256 совпадает сoutputs; чтобы загрузить новый шрифт в обход кеша, добавьте хеш к его адресу, напримерThykesSymbols.woff2?v=<hash>.