Theme
Pintora has some builtin themes. Check the Live Editor to experiment each theme's look.
default
, default light theme, based on Ayu Light palette.dark
, dark theme, based on Dracula palette.larkLight
, light theme, based on Lark palette.larkDark
, dark theme, based on Lark palette.
You can set theme through the setConfig
method.
pintora.default.setConfig({
themeConfig: {
theme: 'dark',
// override some of the theme's variables
themeVariables: {
primaryColor: '#A8DADC',
}
}
})
Define and apply a new theme
At first glance, a theme is an object that fits to the ITheme
interface.
export interface ITheme {
/**
* Indicate if this is a dark theme, if not specified, will be treat as a light theme
*/
isDark?: boolean
/**
* While toggling between light/dark theme, will switch to this if this is specified
*/
schemeOppsiteTheme?: string
primaryColor: string
secondaryColor: string
teritaryColor: string
primaryLineColor: string
secondaryLineColor: string
primaryBorderColor: string
secondaryBorderColor: string
textColor: string
primaryTextColor: string
secondaryTextColor: string
teritaryTextColor: string
/**
* Background color for the canvas, by default, it will be transparent
*/
canvasBackground?: string
groupBackground: string
background1: string
/**
* Used in area that needs to display dark text, like erDiagram's atrributes
*/
lightestBackground?: string
/**
* Text color for note, by default, it will be the same with `textColor`
*/
noteTextColor?: string
/**
* Background color for note, by default, it will be slightly light yellow
*/
noteBackground?: string
}
For example, the default theme:
// ayu light
export const AYU_LIGHT = {
white: '#fff',
normalDark: '#3b4044',
neutralGray: '#f8f8f2',
cyan: '#55b4d4',
green: '#9c0',
orange: '#fdb05e',
pink: '#f07171',
purple: '#af71d0',
red: '#e45649',
yellow: '#f5f1be'
}
export class ThemeDefault implements ITheme {
schemeOppsiteTheme = 'dark'
primaryColor = AYU_LIGHT.orange
secondaryColor = AYU_LIGHT.yellow
teritaryColor = AYU_LIGHT.purple
primaryLineColor = AYU_LIGHT.normalDark
secondaryLineColor = AYU_LIGHT.normalDark
textColor = AYU_LIGHT.normalDark
primaryTextColor = AYU_LIGHT.normalDark
secondaryTextColor = AYU_LIGHT.normalDark
teritaryTextColor = AYU_LIGHT.normalDark
primaryBorderColor = AYU_LIGHT.normalDark
secondaryBorderColor = AYU_LIGHT.neutralGray
groupBackground = AYU_LIGHT.white
background1 = AYU_LIGHT.neutralGray
noteBackground = AYU_LIGHT.yellow
}
You can override the themeVariables
:
pintora.default.setConfig({
themeConfig: {
themeVariables: { ...yourThemeObject }
}
})
Register a theme
You can see the demo in Codepen.
interface IPintoraStandalone {
themeRegistry: {
registerTheme(name: string, variables: ITheme): void
}
}
/** @typedef {import('@pintora/standalone').ITheme} ITheme */
// from a neovim theme https://github.com/EdenEast/nightfox.nvim
// duskfox https://coolors.co/393552-eb6f92-a3be8c-f6c177-569fba-c4a7e7-9ccfd8-e0def4-ea9a97-eb98c3
const PALETTE = {
normalDark: '#393552',
pink: '#EB6F92',
purple: '#C4A7E7',
blue: '#569FBA',
yellow: '#F6C177',
green: '#A3BE8C',
lightBlue: '#9CCFD8',
pastelPink: '#EA9A97',
lightPurple: '#E0DEF4',
white: '#f9f9f9',
};
/** @type {ITheme} */
const themeDuskFox = {
schemeOppsiteTheme: 'default',
isDark: true,
primaryColor: PALETTE.pink,
secondaryColor: PALETTE.purple,
teritaryColor: PALETTE.blue,
primaryLineColor: PALETTE.lightPurple,
secondaryLineColor: PALETTE.lightBlue,
textColor: PALETTE.white,
primaryTextColor: PALETTE.normalDark,
secondaryTextColor: PALETTE.white,
teritaryTextColor: PALETTE.lightPurple,
primaryBorderColor: PALETTE.white,
secondaryBorderColor: PALETTE.blue,
canvasBackground: PALETTE.normalDark,
background1: PALETTE.pastelPink,
lightestBackground: PALETTE.white,
groupBackground: PALETTE.normalDark,
noteBackground: PALETTE.yellow,
noteTextColor: PALETTE.normalDark,
};
pintora.default.themeRegistry.registerTheme('duskfox', themeDuskFox);
// use it somewhere after
pintora.default.setConfig({
themeConfig: {
theme: 'duskfox',
},
});