Rainbow logo
RainbowKit
2.2.4

سمة مخصصة

سمة مخصصة

إنشاء سمة مخصصة

ملاحظة: هذا الواجهة البرمجية للتطبيقات غير مستقرة ومرجح أن تتغير في المستقبل القريب. نوصي بالالتزام باستخدام السمات المدمجة في الوقت الحالي.

بينما توفر السمات المدمجة بعض مستوى من التخصيص، يتم توفير نوع 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}>
{/* Your App */}
</RainbowKitProvider>;
)

يمكنك تمديد سمة مدمجة دون الحاجة إلى إعادة تعريف السمة بالكامل. هذا مفيد عندما تريد فقط تجاوز رموز السمة المحددة.

للقيام بذلك، قم بتثبيت lodash.merge (أو ما يعادله):

npm install lodash.merge

استورده مع السمة التي تريد تمديدها (على سبيل المثال: darkTheme) ونوع Theme في TypeScript:

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

إذا كان تطبيقك مُقدمًا بواسطة الخادم/ثابت ويسمح للمستخدمين بالتنقل يدويًا بين السمات، يمكن ربط نظام السمات الخاص بـ RainbowKit بمحددات CSS المخصصة باستخدام الدوال التالية التي يمكن استخدامها مع أي نظام CSS في Javascript:

  • cssStringFromTheme
  • cssObjectFromTheme

تعيد هذه الدوال CSS الذي يحدد جميع متغيرات السمة المطلوبة. نظرًا لدعم السلاسل النصية والكائنات، يمكن دمج هذا مع أي نظام CSS في Javascript.

كمثال بسيط، يمكنك عرض عنصر 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>
);
};