FAST Element — это библиотека для создания Web Components, предоставляющая гибкую и производительную основу для реализации дизайн-систем. В отличие от обычных HTML-элементов, FAST Element позволяет полностью контролировать структуру, стиль и поведение компонентов, сохраняя совместимость с современными браузерами.
Ключевые преимущества FAST Element:
Компонент в FAST Element создается через класс, наследуемый от
FASTElement. Основная структура включает:
Пример базового компонента:
import { FASTElement, html, css } from "@microsoft/fast-element";
const template = html`
`;
const styles = css`
button {
padding: 8px 16px;
border: none;
background-color: #0078d4;
color: white;
border-radius: 4px;
cursor: pointer;
}
`;
export class MyButton extends FASTElement {
label = "Нажми меня";
handleClick() {
console.log("Кнопка нажата");
}
}
FASTElement.define({ name: "my-button", template, styles, elementClass: MyButton });
Здесь label — реактивное свойство,
которое автоматически обновляет текст кнопки при изменении.
FAST Element использует реактивные свойства для синхронизации данных и DOM. Свойства могут быть следующих типов:
String,
Number, Boolean)Свойства объявляются в классе с помощью декоратора
@observable или через defineProperty.
import { observable, FASTElement } from "@microsoft/fast-element";
export class Counter extends FASTElement {
@observable count = 0;
increment() {
this.count++;
}
}
Любое изменение count автоматически отразится в шаблоне,
если оно связано через привязку.
FAST Element поддерживает несколько видов привязки:
${x => x.property}) — значение отображается, но не
изменяет свойство при изменении в DOM.@bind или
value.bind) — синхронизирует данные между свойством
компонента и элементом формы.@event="${x => x.method()}") — связывает DOM-события с
методами компонента.Пример двусторонней привязки:
const template = html`
x.onInput()}">
`;
export class MyInput extends FASTElement {
@observable value = "";
onInput() {
console.log(this.value);
}
}
FAST Element использует HTML-шаблоны с поддержкой слотов для организации вложенного контента. Слоты позволяют создавать универсальные компоненты с настраиваемым содержимым.
const template = html`
`;
Слоты можно использовать для:
Это позволяет строить сложные интерфейсы без жесткой привязки к внутренней разметке.
FAST Element поддерживает темизацию через Design Tokens — специальные переменные, которые задают цвета, отступы, типографику и другие параметры.
import { designToken, FASTElement, css } from "@microsoft/fast-element";
export const primaryColor = designToken({
name: "primary-color",
initialValue: "#0078d4"
});
const styles = css`
button {
background-color: ${primaryColor};
color: white;
}
`;
Design Tokens позволяют централизованно менять стиль всей дизайн-системы без изменения компонентов.
FAST Element идеально подходит для модульных дизайн-систем:
Архитектура FAST Element обеспечивает строгую разделенность логики, представления и стиля, что делает её надежным инструментом для масштабируемых интерфейсов.
FAST Element оптимизирован для высокой производительности:
Это делает библиотеку подходящей даже для крупных приложений с сотнями интерактивных компонентов.
Компоненты FAST Element можно расширять, создавая новые на базе существующих:
export class PrimaryButton extends MyButton {
static styles = css`
${MyButton.styles}
button {
background-color: green;
}
`;
}
Наследование позволяет создавать специализированные версии стандартных компонентов без дублирования кода.