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',
},
});