Користувацька тема
Користувацька тема
Створення користувацької теми
Примітка: Цей API нестабільний і, ймовірно, зміниться
у найближчому майбутньому. Рекомендуємо наразі користуватись вбудованими темами.
Хоча вбудовані теми забезпечують певний рівень налаштування, тип Theme
дозволяє визначити власні користувацькі теми з доступом до базових змінних теми.
import { RainbowKitProvider, Theme } from '@rainbow-me/rainbowkit';
const myCustomTheme: Theme = {
blurs: {
modalOverlay: '...',
},
colors: {
accentColor: '...',
accentColorForeground: '...',
actionButtonBorder: '...',
actionButtonBorderMobile: '...',
actionButtonSecondaryBackground: '...',
closeButton: '...',
closeButtonBackground: '...',
connectButtonBackground: '...',
connectButtonBackgroundError: '...',
connectButtonInnerBackground: '...',
connectButtonText: '...',
connectButtonTextError: '...',
connectionIndicator: '...',
downloadBottomCardBackground: '...',
downloadTopCardBackground: '...',
error: '...',
generalBorder: '...',
generalBorderDim: '...',
menuItemBackground: '...',
modalBackdrop: '...',
modalBackground: '...',
modalBorder: '...',
modalText: '...',
modalTextDim: '...',
modalTextSecondary: '...',
profileAction: '...',
profileActionHover: '...',
profileForeground: '...',
selectedOptionBorder: '...',
standby: '...',
},
fonts: {
body: '...',
},
radii: {
actionButton: '...',
connectButton: '...',
menuButton: '...',
modal: '...',
modalMobile: '...',
},
shadows: {
connectButton: '...',
dialog: '...',
profileDetailsAction: '...',
selectedOption: '...',
selectedWallet: '...',
walletLogo: '...',
},
};
const App = () => (
<RainbowKitProvider theme={myCustomTheme} {...etc}>
{}
</RainbowKitProvider>;
)
Ви можете розширити вбудовану тему, не переозначаючи всю тему знову. Це корисно, коли ви хочете перевизначити лише певні токени теми.
Для цього встановіть lodash.merge
(або еквівалент):
Імпортуйте його разом із темою, яку ви хочете розширити (наприклад: darkTheme
), та типом TypeScript Theme
:
import merge from 'lodash.merge';
import {
RainbowKitProvider,
darkTheme,
Theme,
} from '@rainbow-me/rainbowkit';
Потім об'єднайте вбудовану тему з токенами теми, які ви хочете перевизначити. У цьому прикладі я перевизначаю токен accentColor
щоб відповідати акцентному кольору мого бренду.
const myTheme = merge(darkTheme(), {
colors: {
accentColor: '#07296d',
},
} as Theme);
Нарешті, ви можете передати свою користувацьку тему як властивість theme
до RainbowKitProvider
.
const App = () => {
return (
<RainbowKitProvider theme={myTheme} {...etc}>
{}
</RainbowKitProvider>
);
};
Якщо ваш додаток створюється на сервері або статично і дозволяє користувачам вручну переключатися між темами, система тем RainbowKit може бути підключена до користувацьких селекторів CSS за допомогою наступних функцій, які можна використовувати з будь-якою системою CSS-in-JS:
cssStringFromTheme
cssObjectFromTheme
Ці функції повертають CSS, що встановлює всі необхідні змінні теми. Оскільки підтримуються як рядки, так і об'єкти, це можна інтегрувати з будь-якою системою CSS-in-JS.
Для простого прикладу, ви можете створити свій власний елемент style
з користувацькими селекторами для кожної теми. Оскільки ми самостійно контролюємо рендеринг CSS теми, ми передаємо null
в властивість theme
щоб RainbowKitProvider не рендерив жодних стилів для нас. Також зверніть увагу на використання опції extends у функції cssStringFromTheme, яка виключає будь-які змінні теми, що є однаковими з базовою темою.
import {
RainbowKitProvider,
cssStringFromTheme,
lightTheme,
darkTheme,
} from '@rainbow-me/rainbowkit';
const App = () => {
return (
<RainbowKitProvider theme={null} {...etc}>
<style
dangerouslySetInnerHTML={{
__html: `
:root {
${cssStringFromTheme(lightTheme)}
}
html[data-dark] {
${cssStringFromTheme(darkTheme, {
extends: lightTheme,
})}
}
`,
}}
/>
{}
</RainbowKitProvider>
);
};