Токены дизайна представляют собой единицы абстракции для хранения значений, используемых в интерфейсе: цвета, размеры, отступы, шрифты и другие параметры визуального оформления. В FAST Element они служат связующим звеном между стилями компонентов и их поведением, обеспечивая единообразие и масштабируемость интерфейсов.
Токен создается через функцию DesignToken.create,
которая возвращает объект, способный хранить значение и распространять
его по компонентам. Каждый токен имеет уникальное имя и может иметь
значение по умолчанию.
Пример создания базового токена цвета:
import { DesignToken } from "@microsoft/fast-element";
const accentColor = DesignToken.create<string>("accent-color");
accentColor.setDefault("#0078D4");
Здесь:
accentColor — объект токена, хранящий значение
цвета.setDefault задает значение по умолчанию, используемое
компонентом, если не задано другое.Токены интегрируются в стили компонентов через CSS-переменные. В FAST
Element для этого используется синтаксис ${token} внутри
шаблонов стилей:
import { css, FASTElement } from "@microsoft/fast-element";
const styles = css`
:host {
background-color: ${accentColor};
color: white;
padding: 16px;
border-radius: 8px;
}
`;
class MyButton extends FASTElement {}
MyButton.styles = styles;
В этом примере значение accentColor автоматически
конвертируется в CSS-переменную, которую можно переопределить на уровне
родительского компонента или документа.
Токены могут быть глобальными, доступными всем компонентам, или локальными, применяемыми только к конкретному компоненту:
const localPadding = DesignToken.create<number>("local-padding");
localPadding.setDefault(12);
styles = css`
:host {
padding: ${localPadding}px;
}
`;
Глобальные токены удобно использовать для базовой палитры цветов, типографики и основных размеров, а локальные — для специфических компонентов.
Значение токена можно изменить через метод setValueFor
для конкретного элемента:
accentColor.setValueFor(document.body, "#FF5733");
В этом случае все компоненты, использующие токен
accentColor, внутри document.body
автоматически получат новое значение.
FAST Element поддерживает наследование токенов: если токен переопределен на родительском элементе, дочерние элементы автоматически используют это значение. Это делает возможным создание тем и динамическое изменение внешнего вида приложений без изменения исходного кода компонентов.
Токены могут хранить не только простые значения (цвет, число, строку), но и объекты, массивы или функции, что позволяет создавать более гибкие настройки дизайна:
const spacingToken = DesignToken.create<{ small: number; large: number }>("spacing");
spacingToken.setDefault({ small: 4, large: 16 });
Использование в CSS-шаблонах может быть реализовано через вычисляемые значения:
const styles = css`
:host {
padding: ${x => x.spacing.small}px ${x => x.spacing.large}px;
}
`;
Токены дизайна — основной инструмент для поддержки тем в FAST Element. Можно создать несколько наборов значений токенов для разных тем и применять их к документу или отдельным компонентам, что позволяет динамически менять внешний вид интерфейса:
const darkThemeColor = "#1A1A1A";
const lightThemeColor = "#FFFFFF";
function applyTheme(isDark: boolean) {
accentColor.setValueFor(document.body, isDark ? darkThemeColor : lightThemeColor);
}
Токены дизайна в FAST Element позволяют создавать модульные, масштабируемые и управляемые интерфейсы, обеспечивая чистую архитектуру компонентов и простую поддержку визуального стиля на всех уровнях приложения.