Rainbow logo
RainbowKit
2.2.4

Tema Khusus

Tema Khusus

Membuat tema khusus

Catatan: API ini tidak stabil dan kemungkinan akan berubah di masa mendatang. Kami menyarankan untuk tetap menggunakan tema bawaan untuk sementara.

Meskipun tema bawaan menyediakan beberapa tingkat kustomisasi, tipe Theme disediakan untuk membantu Anda mendefinisikan tema kustom Anda sendiri dengan akses tingkat rendah ke variabel tema dasar.

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}>
{/* Your App */}
</RainbowKitProvider>;
)

Anda dapat memperluas tema bawaan tanpa harus mendefinisikan ulang keseluruhan tema. Ini berguna ketika Anda hanya ingin mengganti token tema tertentu.

Untuk melakukannya, instal lodash.merge (atau setara):

npm install lodash.merge

Impor ini, bersama dengan tema yang ingin Anda perpanjang (misalnya: darkTheme) dan tipe TypeScript Theme:

import merge from 'lodash.merge';
import { RainbowKitProvider, darkTheme, Theme, } from '@rainbow-me/rainbowkit';

Kemudian, gabungkan tema bawaan, dengan token tema yang ingin Anda ganti. Dalam contoh ini, saya mengganti token accentColor untuk mencocokkan warna aksen merek saya.

const myTheme = merge(darkTheme(), {
colors: {
accentColor: '#07296d',
},
} as Theme);

Akhirnya, Anda sekarang dapat memberikan tema kustom Anda ke properti theme di RainbowKitProvider.

const App = () => {
return (
<RainbowKitProvider theme={myTheme} {...etc}>
{/* Your App */}
</RainbowKitProvider>
);
};

Jika aplikasi Anda dirender oleh server/statis dan memungkinkan pengguna untuk beralih manual antara tema, sistem tematikan RainbowKit dapat dihubungkan ke selektor CSS kustom dengan fungsi berikut yang dapat digunakan dengan sistem CSS-in-JS apa pun:

  • cssStringFromTheme
  • cssObjectFromTheme

Fungsi ini mengembalikan CSS yang mengatur semua variabel tema yang diperlukan. Karena string dan objek didukung, ini dapat diintegrasikan dengan sistem CSS-in-JS apa pun.

Sebagai contoh dasar, Anda dapat merender elemen style Anda sendiri dengan selektor kustom untuk setiap tema. Karena kita mengambil kontrol atas perenderan CSS tema, kita meneruskan null ke properti theme sehingga RainbowKitProvider tidak merender gaya apa pun untuk kita. Juga perhatikan penggunaan opsi extends pada fungsi cssStringFromTheme yang menghilangkan variabel tema yang sama dengan tema dasar.

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>
);
};