Начало работы: Rsbuild
Клиентское SPA на Rspack: стили и ThemeProvider — в src/index.tsx, атрибуты темы — в своём HTML-шаблоне
1. Создайте приложение
Проверено с Rsbuild 2.2.
npm create rsbuild@latest my-app -- --template react-ts --no-git
cd my-app
npm install
2. Установите пакет
Подходят react и react-dom 17, 18 и 19 (на React 17 id из useId появляются сразу после монтирования). Пакет — ES-модули (плюс CommonJS-копия для require()), без runtime-зависимостей, по файлу на модуль: в бандл попадают только импортированные компоненты, а как грузить и CSS только их — в разделе «Только нужный CSS» ниже. Шрифты — отдельные файлы: тема vercel (по умолчанию в ThemeProvider) использует Geist, поэтому рядом со стилями импортируйте valyro-ui/fonts/geist.css и valyro-ui/fonts/geist-mono.css, иначе текст будет системным шрифтом; glass использует системные шрифты, ей файлы не нужны. Пока пакет не опубликован, соберите и упакуйте его в репозитории (npm run build:core && npm pack ./dist/core) и установите tarball из корня репозитория: npm install /path/to/ValyroUI/valyro-ui-0.1.0.tgz.
npm install valyro-ui
3. Тема на <html>
Опции для атрибутов <html> у Rsbuild нет, а встроенный шаблон зашит в пакет. Создайте свой index.html и укажите его в html.template — Rsbuild сам добавит в него meta, title, скрипты и <link> на CSS.
<!doctype html>
<html lang="en" data-theme="glass" data-mode="light">
<head></head>
<body>
<div id="<%= mountId %>"></div>
</body>
</html>
4. Подключите шаблон
import { defineConfig } from '@rsbuild/core';
import { pluginReact } from '@rsbuild/plugin-react';
// Docs: https://rsbuild.rs/config/
export default defineConfig({
plugins: [pluginReact()],
html: {
// Custom template so <html> carries the theme before any JS runs.
template: './index.html',
},
});
5. Стили и ThemeProvider
Шаблонный src/App.css красит body (градиент, белый текст) — удалите его и импорт в App.tsx.
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import 'valyro-ui/styles.css';
import { ThemeProvider } from 'valyro-ui';
import App from './App';
const rootEl = document.getElementById('root');
if (rootEl) {
const root = createRoot(rootEl);
root.render(
<StrictMode>
<ThemeProvider theme="glass" mode="light">
<App />
</ThemeProvider>
</StrictMode>,
);
}
6. Используйте компоненты
Showcase — компонент из гайда по Next.js, без изменений.
import { Showcase } from './Showcase';
const App = () => {
return <Showcase />;
};
export default App;
7. Соберите
npm run build
npx tsc --noEmit
npm run preview