ธีมที่กำหนดเอง
ธีมที่กำหนดเอง
การสร้างธีมที่กำหนดเอง
หมายเหตุ: API นี้ยังไม่เสถียรและอาจมีการเปลี่ยนแปลงในอนาคตอันใกล้ เราแนะนำให้ยึดติดกับ ธีมที่มีอยู่ในตัว ไปก่อนในขณะนี้.
ในขณะที่ธีมที่มีอยู่แบบ built-in ให้ระดับของการกำหนดเองบางอย่าง ประเภท 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 prop ของ RainbowKitProvider.
const App = () => {
return (
<RainbowKitProvider theme={myTheme} {...etc}>
{}
</RainbowKitProvider>
);
};
หากแอปของคุณเป็นแบบเซิร์ฟเวอร์/เรนเดอร์ทางสถิต และอนุญาตให้ผู้ใช้สลับธีมเอง ระบบธีมมิ่งของ RainbowKit สามารถเชื่อมต่อกับ CSS selector ที่กำหนดเองได้ด้วยฟังก์ชันต่อไปนี้ ซึ่งสามารถใช้ได้กับระบบ CSS-in-JS ใดๆ:
cssStringFromTheme
cssObjectFromTheme
ฟังก์ชันเหล่านี้จะคืนค่า CSS ที่ตั้งค่าตัวแปรธีมที่จำเป็นทั้งหมด ด้วยการสนับสนุนทั้งแบบ string และ object สิ่งนี้สามารถรวมเข้ากับระบบ CSS-in-JS ใดๆ ได้.
ตัวอย่างเช่นพื้นฐาน คุณสามารถเรนเดอร์ element style ของคุณเอง โดยใช้ selecter ที่กำหนดเองสำหรับแต่ละธีม เมื่อเราเป็นผู้ควบคุมการเรนเดอร์ของ CSS ของธีม เราจะส่ง null ไปยัง theme prop เพื่อให้ RainbowKitProvider ไม่เรนเดอร์สไตล์ใดๆ ให้เรา นอกจากนี้สังเกตการใช้ extends option ในฟังก์ชัน 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>
);
};