Default Theme
The theme object is where you define your app's color palette, spacing scale, typography variants, border radius scales, and more.
It can also be used to create and manage style variants for any components created using Pearl UI.
#
Color paletteThe theme contains a theme.palette
object for providing colors for your project. By default, these colors can be referenced by the color
, borderColor
, backgroundColor
, shadowColor
, and textShadowColor
style properties.
We recommend adding a palette that ranges from 100
to 900
. Tools like Themera, Smart Swatch, Coolors, Eva Color Generator or Palx can be used to generate these palettes. You can also use the generatePalette function included in the Pearl UI library.
// theme.jsexport default { palette: { primary: { 50: "#F0F2FF", 100: "#E1E6FF", 200: "#C3CCFF", 300: "#A5B1FF", 400: "#8F9DFF", 500: "#6A7BFF", 600: "#4D5BDB", 700: "#3541B7", 800: "#212A93", 900: "#141B7A", },
secondary: { 50: "#FFF1F4", 100: "#FFE1E7", 200: "#FFC3D6", 300: "#FFA5CB", 400: "#FF8FC9", 500: "#FF6AC6", 600: "#DB4DB3", 700: "#B7359F", 800: "#93218A", 900: "#78147A", }, // ... },};
Pearl UI provides a sensible default theme, but you can fully customize it to fit your design.
#
PrimaryPrimary 50
#F0F2FF
Primary 100
#E1E6FF
Primary 200
#C3CCFF
Primary 300
#A5B1FF
Primary 400
#8F9DFF
Primary 500
#6A7BFF
Primary 600
#4D5BDB
Primary 700
#3541B7
Primary 800
#212A93
Primary 900
#141B7A
#
SecondarySecondary 50
#FFF1F4
Secondary 100
#FFE1E7
Secondary 200
#FFC3D6
Secondary 300
#FFA5CB
Secondary 400
#FF8FC9
Secondary 500
#FF6AC6
Secondary 600
#DB4DB3
Secondary 700
#B7359F
Secondary 800
#93218A
Secondary 900
#78147A
#
NeutralsNeutral 50
#FFFFFF
Neutral 100
#F7F9FC
Neutral 200
#EDF1F7
Neutral 300
#E4E9F2
Neutral 400
#C5CEE0
Neutral 500
#8F9BB3
Neutral 600
#58617A
Neutral 700
#2E3A59
Neutral 800
#222B45
Neutral 900
#1A2138
#
Alerts#
SuccessSuccess 50
#F6FBE6
Success 100
#F5FCCC
Success 200
#EAFA9A
Success 300
#D6F266
Success 400
#C0E640
Success 500
#A2D608
Success 600
#86B805
Success 700
#6C9A04
Success 800
#537C02
Success 900
#426601
#
InfoInfo 50
#ECFBFE
Info 100
#D8FEFB
Info 200
#B2FEFC
Info 300
#8CF6FC
Info 400
#6FE8FA
Info 500
#40D2F7
Info 600
#2EA6D4
Info 700
#207EB1
Info 800
#145B8F
Info 900
#0C4176
#
WarningWarning 50
#FFF9EB
Warning 100
#FFF7D6
Warning 200
#FFEDAE
Warning 300
#FFE085
Warning 400
#FFD367
Warning 500
#FFBF35
Warning 600
#DB9C26
Warning 700
#B77B1A
Warning 800
#935D10
Warning 900
#7A480A
#
DangerDanger 50
#FFEDEC
Danger 100
#FFE7D9
Danger 200
#FFCAB3
Danger 300
#FFA68D
Danger 400
#FF8371
Danger 500
#FF4B42
Danger 600
#DB3036
Danger 700
#B72133
Danger 800
#93152E
Danger 900
#7A0C2C
#
Named ColorsPearl UI supports the following CSS named colors by adding them to the default theme palette:
{ "transparent": "transparent", "aliceblue": "#f0f8ff", "antiquewhite": "#faebd7", "cyan": "#00ffff", "aquamarine": "#7fffd4", "azure": "#f0ffff", "beige": "#f5f5dc", "bisque": "#ffe4c4", "black": "#000000", "blanchedalmond": "#ffebcd", "blue": "#0000ff", "blueviolet": "#8a2be2", "brown": "#a52a2a", "burlywood": "#deb887", "cadetblue": "#5f9ea0", "chartreuse": "#7fff00", "chocolate": "#d2691e", "coral": "#ff7f50", "cornflowerblue": "#6495ed", "cornsilk": "#fff8dc", "crimson": "#dc143c", "darkblue": "#00008b", "darkcyan": "#008b8b", "darkgoldenrod": "#b8860b", "darkgray": "#a9a9a9", "darkgreen": "#006400", "darkkhaki": "#bdb76b", "darkmagenta": "#8b008b", "darkolivegreen": "#556b2f", "darkorange": "#ff8c00", "darkorchid": "#9932cc", "darkred": "#8b0000", "darksalmon": "#e9967a", "darkseagreen": "#8fbc8f", "darkslateblue": "#483d8b", "darkslategray": "#2f4f4f", "darkturquoise": "#00ced1", "darkviolet": "#9400d3", "deeppink": "#ff1493", "deepskyblue": "#00bfff", "dimgray": "#696969", "dodgerblue": "#1e90ff", "firebrick": "#b22222", "floralwhite": "#fffaf0", "forestgreen": "#228b22", "fuchsia": "#ff00ff", "gainsboro": "#dcdcdc", "ghostwhite": "#f8f8ff", "goldenrod": "#daa520", "gold": "#ffd700", "gray": "#808080", "green": "#008000", "greenyellow": "#adff2f", "honeydew": "#f0fff0", "hotpink": "#ff69b4", "indianred": "#cd5c5c", "indigo": "#4b0082", "ivory": "#fffff0", "khaki": "#f0e68c", "lavenderblush": "#fff0f5", "lavender": "#e6e6fa", "lawngreen": "#7cfc00", "lemonchiffon": "#fffacd", "lightblue": "#add8e6", "lightcoral": "#f08080", "lightcyan": "#e0ffff", "lightgoldenrodyellow": "#fafad2", "lightgreen": "#90ee90", "lightgrey": "#d3d3d3", "lightpink": "#ffb6c1", "lightsalmon": "#ffa07a", "lightseagreen": "#20b2aa", "lightskyblue": "#87cefa", "lightslategray": "#778899", "lightsteelblue": "#b0c4de", "lightyellow": "#ffffe0", "lime": "#00ff00", "limegreen": "#32cd32", "linen": "#faf0e6", "magenta": "#ff00ff", "maroon": "#800000", "mediumaquamarine": "#66cdaa", "mediumblue": "#0000cd", "mediumorchid": "#ba55d3", "mediumpurple": "#9370db", "mediumseagreen": "#3cb371", "mediumslateblue": "#7b68ee", "mediumspringgreen": "#00fa9a", "mediumturquoise": "#48d1cc", "mediumvioletred": "#c71585", "midnightblue": "#191970", "mintcream": "#f5fffa", "mistyrose": "#ffe4e1", "moccasin": "#ffe4b5", "navajowhite": "#ffdead", "navy": "#000080", "oldlace": "#fdf5e6", "olive": "#808000", "olivedrab": "#6b8e23", "orange": "#ffa500", "orangered": "#ff4500", "orchid": "#da70d6", "palegoldenrod": "#eee8aa", "palegreen": "#98fb98", "paleturquoise": "#afeeee", "palevioletred": "#db7093", "papayawhip": "#ffefd5", "peachpuff": "#ffdab9", "peru": "#cd853f", "pink": "#ffc0cb", "plum": "#dda0dd", "powderblue": "#b0e0e6", "purple": "#800080", "rebeccapurple": "#663399", "red": "#ff0000", "rosybrown": "#bc8f8f", "royalblue": "#4169e1", "saddlebrown": "#8b4513", "salmon": "#fa8072", "sandybrown": "#f4a460", "seagreen": "#2e8b57", "seashell": "#fff5ee", "sienna": "#a0522d", "silver": "#c0c0c0", "skyblue": "#87ceeb", "slateblue": "#6a5acd", "slategray": "#708090", "snow": "#fffafa", "springgreen": "#00ff7f", "steelblue": "#4682b4", "tan": "#d2b48c", "teal": "#008080", "thistle": "#d8bfd8", "tomato": "#ff6347", "turquoise": "#40e0d0", "violet": "#ee82ee", "wheat": "#f5deb3", "white": "#ffffff", "whitesmoke": "#f5f5f5", "yellow": "#ffff00", "yellowgreen": "#9acd32"}
#
TypographyThe typography system for the theme is created by setting the Component Style Config of Text
. Pearl UI uses Poppins as the default theme font and provides the following text variants:
#
Headers and TitlesHeading 1
Heading 2
Title 1
Title 2
Subtitle 1
Subtitle 2
#
ParagraphParagraph - Regular
Paragraph - Small
#
ButtonButton - Large
Button - Regular
Button - Small
Button - Tiny
#
OthersCaption
#
SpacingThe theme contains a theme.spacing
object which controls the spacing system. By default, these colors can be referenced by the padding
, and margin
style properties.
We adopt a t-shirt size naming convention for our sizing system, but you can customize it to whatever fits your fancy.
// theme.jsexport default { spacing: { hairline: 2, xs: 4, s: 8, m: 16, l: 24, xl: 32, "2xl": 40, "3xl": 48, "4xl": 56, "5xl": 64, "6xl": 72, "7xl": 80, "8xl": 88, "9xl": 96, },};
Name | Space | |
---|---|---|
hairline | 2 | |
xxs | 4 | |
xs | 8 | |
s | 12 | |
m | 16 | |
l | 24 | |
xl | 32 | |
2xl | 40 | |
3xl | 48 | |
4xl | 56 | |
5xl | 64 | |
6xl | 72 | |
7xl | 80 | |
8xl | 88 | |
9xl | 96 |
#
Border RadiusThe theme contains a theme.borderRadii
object which controls the system for border radii. By default, these colors can be referenced by the borderRadius
style properties.
We adopt a t-shirt size naming convention here as well.
// theme.jsexport default { borderRadii: { xs: 2, s: 4, m: 8, l: 16, xl: 24, "2xl": 32, full: 1000, },};
#
Shadow/ElevationThe theme contains a theme.elevation
object which controls the shadow/elevation system. By default, these colors can be referenced by the boxShadow
style properties.
We adopt a t-shirt size naming convention here as well.
// theme.jsexport default { elevation: { xs: { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 2, }, shadowOpacity: 0.08, shadowRadius: 2, elevation: 2, }, s: { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 4, }, shadowOpacity: 0.08, shadowRadius: 4, elevation: 4, }, m: { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 8, }, shadowOpacity: 0.08, shadowRadius: 8, elevation: 8, }, l: { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 12, }, shadowOpacity: 0.08, shadowRadius: 12, elevation: 12, }, xl: { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 16, }, shadowOpacity: 0.08, shadowRadius: 16, elevation: 16, }, "2xl": { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 20, }, shadowOpacity: 0.1, shadowRadius: 20, elevation: 20, }, "3xl": { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 24, }, shadowOpacity: 0.1, shadowRadius: 24, elevation: 24, }, "4xl": { shadowColor: "#1A2138", shadowOffset: { width: 0, height: 28, }, shadowOpacity: 0.16, shadowRadius: 28, elevation: 28, }, },};
info
The box shadows look slightly different between Android and iOS (They look more saturated on Android as shown below). This is due to the limitations of the Android Elevation API.
#
z-index valuesThe theme contains a theme.zIndices
object that provides pre-defined z-index values (inspired from Chakra UI). These values can help you control the stacking order of components and solve stacking issues very efficiently.
// theme.jsexport default { zIndices: { hide: -1, auto: "auto", base: 0, docked: 10, dropdown: 1000, sticky: 1100, banner: 1200, overlay: 1300, modal: 1400, popover: 1500, skipLink: 1600, toast: 1700, tooltip: 1800, },};