Tacet

Tacet

320 иконок, у которых разрез контура задан данными, а не вырезан в геометрии. Отсюда анимация самоотрисовки, четыре плотности разрезов и сплошной режим — из одного источника, без второго комплекта файлов.

npm i tacet

как это устроено

Разрез — это данные

Каждому штриху даётся pathLength=100, а разрывы описываются парами «начало и ширина» в процентах от длины контура. Подвинуть разрез или убрать его — правка одного числа, а не перерисовка пути. Из этой же записи получается и анимация: она рисует контур, а разрезы остаются на месте.

"bell": [
  p("M6 8a6 6 0 1 1 12 0c0 4 1.5 5 2 6H4c.5-1 2-2 2-6Z",
    [[14,10],[60,10]]),
  p("M10 19a2 2 0 0 0 4 0", null, { accent: true }),
]

четыре плотности

Один глиф, четыре характера

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

A один разрез
B все разрезы
C один и акцент
D все и акцент
solid цельный

толщина

Крупная иконка не жиреет

Толщина штриха следует за размером по степенному закону, а не пропорционально: увеличенная вчетверо иконка не превращается в жирный чертёж. Нужен ровный волосок на любом размере — есть absoluteStroke.

24px · 1.50
48px · 2.05
96px · 2.83
128px · 3.19

чего нет у других

64 инструмента в одном стиле

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

saxophone
balalaika
handpan
duduk
bayan
harp
djembe
sitar
gusli
kalimba
didgeridoo
jaw-harp
accordion
banjo
cello
timpani

для агентов

Написано, когда какую иконку брать

Интерфейс всё чаще пишет ИИ-агент и выбирает иконку по имени — так и появляется trash там, где по смыслу archive. У каждого из 320 глифов записано, для чего он, с чем его путают и что взять вместо. Теги для поиска есть у всех наборов; руководства по выбору — нет ни у одного.

trash
Permanent deletion, the item is gone.
If the item is only moved out of sight and can come back, that is archive. If access is being denied rather than data removed, use ban.
archive
Moving out of the active list while keeping the data.
Do not use for deletion — that is trash.
check
A bare checkmark inside another control: a checkbox, a menu item, a chip.
For the result of an operation — «done, succeeded» — use check-circle: it reads as a status, not as a mark.
check-circle
Successful outcome of an operation or a completed state.
Inside a checkbox this is too loud — there use check.

Отдаётся как llms.txt и icons.json, а в коде — экспортом META из @tacet/core.