Как работать с иконками
React-иконки поставляются в пакете @salutejs/sdds-icons с поддержкой tree-shaking. Иконки доступны в размерах 16, 24 и 36.
Установка
npm install @salutejs/sdds-icons
Совместимость
Пакет поставляется только в формате ES Modules. Для его использования необходимы:
- синтаксис
import; - сборщик с поддержкой поля
exportsвpackage.json; - TypeScript с
moduleResolution, равнымbundler,node16илиnodenext.
CommonJS и require() не поддерживаются:
// Не поддерживается
const icons = require('@salutejs/sdds-icons/24');
Использование
Выберите размер иконки в пути импорта. Пакет поддерживает именованный импорт из общего файла размера:
import { AddFill } from '@salutejs/sdds-icons/24';
export const AddButton = () => <AddFill />;
Также доступен прямой импорт конкретной иконки. Он позволяет сборщику не обрабатывать общий файл со всеми иконками выбранного размера:
import AddFill from '@salutejs/sdds-icons/24/AddFill';
export const AddButton = () => <AddFill />;
У пакета нет экспорта из корня, поэтому размер необходимо указывать всегда. Доступны размеры 16, 24 и 36:
import { AddFill as AddFill16 } from '@salutejs/sdds-icons/16';
import { AddFill as AddFill24 } from '@salutejs/sdds-icons/24';
import { AddFill as AddFill36 } from '@salutejs/sdds-icons/36';
Каждая точка входа содержит только SVG-иконки соответствующего размера. Компоненты создают один элемент svg, наследуют цвет через currentColor, поддерживают ref и принимают стандартные свойства SVG.
Размер по умолчанию соответствует выбранному варианту. Отображаемые ширину и высоту можно переопределить стандартными SVG-свойствами:
<AddFill width={32} height={32} color="tomato" />
Через свойство gradient можно передать CSS-градиент. В этом случае оптимизированный SVG используется как CSS-маска, а градиент заполняет всю область иконки:
<AddFill gradient="linear-gradient(135deg, #00d6ff 0%, #9b51e0 100%)" />
Для отображения градиентов Content Security Policy приложения должна разрешать data: в директиве img-src.
Динамические иконки
Если имя иконки приходит во время выполнения, например из CMS или с сервера, используйте отдельную динамическую точку входа нужного размера:
import { DynamicIcon } from '@salutejs/sdds-icons/24/dynamic';
export const ServerIcon = () => <DynamicIcon name="AddFill" />;
Иконка загружается отдельным модулем только после появления компонента в браузере. Пока модуль загружается, можно показать fallback-компонент:
import { DynamicIcon } from '@salutejs/sdds-icons/24/dynamic';
export const ServerIcon = () => <DynamicIcon name="AddFill" fallback={<span>Загрузка…</span>} />;
Для произвольной строки доступна проверка, которая одновременно сужает TypeScript-тип:
import { DynamicIcon, isIconName } from '@salutejs/sdds-icons/24/dynamic';
export const ServerIcon = ({ iconName }: { iconName: string }) =>
isIconName(iconName) ? <DynamicIcon name={iconName} /> : null;
Также динамическая точка входа экспортирует IconName, iconNames и isIconName. Реестр загрузчиков остается внутренней деталью реализации DynamicIcon.
Динамический API предназначен только для случаев, когда имя заранее неизвестно. Он заставляет сборщик обработать весь реестр и создать отдельный модуль для каждой иконки на каждый размер. Для обычного интерфейса статические импорты быстрее при сборке и не требуют дополнительного запроса в браузере.
Старый пакет @salutejs/plasma-icons будет поддерживаться до 31 декабря 2026.