Skeleton — это библиотека компонентов и утилит для SvelteKit, ориентированная на создание быстрых и лёгких интерфейсов с минимальной зависимостью от внешних библиотек. Её архитектура выстроена вокруг принципов модульности, реактивности и полной интеграции с особенностями SvelteKit, что позволяет создавать приложения с высокой производительностью и чистым кодом.
Компоненты Skeleton организованы по принципу
модульности: каждый компонент — это отдельный .svelte файл
с чёткой ответственностью. Это обеспечивает:
Например, базовый компонент кнопки (Button.svelte)
содержит:
<script lang="ts">
export let type: 'button' | 'submit' = 'button';
export let disabled: boolean = false;
</script>
<button type={type} disabled={disabled} class="skeleton-button">
<slot />
</button>
<style>
.skeleton-button {
padding: 0.5rem 1rem;
border-radius: 0.375rem;
background-color: var(--skeleton-primary);
color: white;
font-weight: 500;
transition: background-color 0.2s;
}
.skeleton-button:disabled {
background-color: var(--skeleton-disabled);
}
</style>
Каждый компонент Skeleton использует реактивные свойства Svelte, что позволяет мгновенно обновлять интерфейс без лишних ререндеров.
Skeleton строится вокруг реактивной модели SvelteKit:
Минимизация императивного кода Логика
компонентов реализуется через реактивные переменные и
$store, а не через явное управление DOM.
Автоматическое управление состоянием Skeleton интегрируется с SvelteKit stores и позволяет использовать реактивные подписки для управления данными, формами и состояниями загрузки.
Оптимизация ререндеров Компоненты обновляются только при изменении соответствующих реактивных переменных, что снижает нагрузку на браузер и повышает производительность.
Skeleton придерживается унифицированной дизайн-системы, включающей переменные CSS, сетку и токены цвета. Основные аспекты:
--skeleton-primary,
--skeleton-accent, --skeleton-background.Пример использования токенов:
.skeleton-card {
background-color: var(--skeleton-background);
border-radius: 0.5rem;
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
padding: 1rem;
}
Skeleton учитывает особенности SvelteKit:
SSR и маршрутизация Компоненты полностью совместимы с серверным рендерингом, корректно обрабатывают маршруты и асинхронные данные.
Файловая структура SvelteKit Skeleton использует
привычные src/routes и src/lib для организации
компонентов, что упрощает импорт и поддержку.
Load-функции и сторы Компоненты могут напрямую
подключаться к стору или использовать асинхронные данные из
load, сохраняя реактивность и минимизируя код в
шаблоне.
Skeleton проектируется с учётом возможности расширения:
Пример кастомной темы:
:root {
--skeleton-primary: #4f46e5;
--skeleton-background: #f9fafb;
--skeleton-accent: #f59e0b;
}
Skeleton включает утилиты для:
Пример Skeleton Loader:
<div class="skeleton-loader" style="width: 100%; height: 1rem;"></div>
<style>
.skeleton-loader {
background: linear-gradient(90deg, #eee 25%, #ddd 50%, #eee 75%);
background-size: 200% 100%;
animation: loading 1.5s infinite;
}
@keyframes loading {
from { background-position: 200% 0; }
to { background-position: -200% 0; }
}
</style>
Skeleton проектируется с акцентом на минимальный вес и высокую скорость:
Каждый компонент проверяется на скорость ререндеров и отсутствие лишних DOM-операций, что обеспечивает плавную работу даже на слабых устройствах.
Skeleton сочетает философию минимализма с полной поддержкой современных подходов SvelteKit, создавая основу для быстрого и чистого фронтенд-развития.