سمة مخصصة
سمة مخصصة
إنشاء سمة مخصصة
ملاحظة: هذا الواجهة البرمجية للتطبيقات غير مستقرة ومرجح أن تتغير في المستقبل القريب. نوصي بالالتزام باستخدام السمات المدمجة في الوقت الحالي.
بينما توفر السمات المدمجة بعض مستوى من التخصيص، يتم توفير نوع 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
) ونوع 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}>
{}
</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>
);
};