package d2themes
import (
"oss.terrastruct.com/d2/d2target"
"oss.terrastruct.com/d2/lib/color"
)
type Theme struct {
ID int64 `json:"id"`
Name string `json:"name"`
Colors ColorPalette `json:"colors"`
SpecialRules SpecialRules `json:"specialRules,omitempty"`
}
type SpecialRules struct {
Mono bool `json:"mono"`
NoCornerRadius bool `json:"noCornerRadius"`
OuterContainerDoubleBorder bool `json:"outerContainerDoubleBorder"`
ContainerDots bool `json:"containerDots"`
CapsLock bool `json:"capsLock"`
AllPaper bool `json:"allPaper"`
}
func (t *Theme ) IsDark () bool {
return t .ID >= 200 && t .ID < 300
}
func (t *Theme ) ApplyOverrides (overrides *d2target .ThemeOverrides ) {
if overrides == nil {
return
}
if overrides .B1 != nil {
t .Colors .B1 = *overrides .B1
}
if overrides .B2 != nil {
t .Colors .B2 = *overrides .B2
}
if overrides .B3 != nil {
t .Colors .B3 = *overrides .B3
}
if overrides .B4 != nil {
t .Colors .B4 = *overrides .B4
}
if overrides .B5 != nil {
t .Colors .B5 = *overrides .B5
}
if overrides .B5 != nil {
t .Colors .B5 = *overrides .B5
}
if overrides .B6 != nil {
t .Colors .B6 = *overrides .B6
}
if overrides .AA2 != nil {
t .Colors .AA2 = *overrides .AA2
}
if overrides .AA4 != nil {
t .Colors .AA4 = *overrides .AA4
}
if overrides .AA5 != nil {
t .Colors .AA5 = *overrides .AA5
}
if overrides .AB4 != nil {
t .Colors .AB4 = *overrides .AB4
}
if overrides .AB5 != nil {
t .Colors .AB5 = *overrides .AB5
}
if overrides .N1 != nil {
t .Colors .Neutrals .N1 = *overrides .N1
}
if overrides .N2 != nil {
t .Colors .Neutrals .N2 = *overrides .N2
}
if overrides .N3 != nil {
t .Colors .Neutrals .N3 = *overrides .N3
}
if overrides .N4 != nil {
t .Colors .Neutrals .N4 = *overrides .N4
}
if overrides .N5 != nil {
t .Colors .Neutrals .N5 = *overrides .N5
}
if overrides .N6 != nil {
t .Colors .Neutrals .N6 = *overrides .N6
}
if overrides .N7 != nil {
t .Colors .Neutrals .N7 = *overrides .N7
}
}
type Neutral struct {
N1 string `json:"n1"`
N2 string `json:"n2"`
N3 string `json:"n3"`
N4 string `json:"n4"`
N5 string `json:"n5"`
N6 string `json:"n6"`
N7 string `json:"n7"`
}
type ColorPalette struct {
Neutrals Neutral `json:"neutrals"`
B1 string `json:"b1"`
B2 string `json:"b2"`
B3 string `json:"b3"`
B4 string `json:"b4"`
B5 string `json:"b5"`
B6 string `json:"b6"`
AA2 string `json:"aa2"`
AA4 string `json:"aa4"`
AA5 string `json:"aa5"`
AB4 string `json:"ab4"`
AB5 string `json:"ab5"`
}
var CoolNeutral = Neutral {
N1 : "#0A0F25" ,
N2 : "#676C7E" ,
N3 : "#9499AB" ,
N4 : "#CFD2DD" ,
N5 : "#DEE1EB" ,
N6 : "#EEF1F8" ,
N7 : "#FFFFFF" ,
}
var WarmNeutral = Neutral {
N1 : "#170206" ,
N2 : "#535152" ,
N3 : "#787777" ,
N4 : "#CCCACA" ,
N5 : "#DFDCDC" ,
N6 : "#ECEBEB" ,
N7 : "#FFFFFF" ,
}
var DarkNeutral = Neutral {
N1 : "#F4F6FA" ,
N2 : "#BBBEC9" ,
N3 : "#868A96" ,
N4 : "#676D7D" ,
N5 : "#3A3D49" ,
N6 : "#191C28" ,
N7 : "#000410" ,
}
var DarkMauveNeutral = Neutral {
N1 : "#CDD6F4" ,
N2 : "#BAC2DE" ,
N3 : "#A6ADC8" ,
N4 : "#585B70" ,
N5 : "#45475A" ,
N6 : "#313244" ,
N7 : "#1E1E2E" ,
}
func ResolveThemeColor (theme Theme , code string ) string {
if !color .IsThemeColor (code ) {
return code
}
switch code {
case "N1" :
return theme .Colors .Neutrals .N1
case "N2" :
return theme .Colors .Neutrals .N2
case "N3" :
return theme .Colors .Neutrals .N3
case "N4" :
return theme .Colors .Neutrals .N4
case "N5" :
return theme .Colors .Neutrals .N5
case "N6" :
return theme .Colors .Neutrals .N6
case "N7" :
return theme .Colors .Neutrals .N7
case "B1" :
return theme .Colors .B1
case "B2" :
return theme .Colors .B2
case "B3" :
return theme .Colors .B3
case "B4" :
return theme .Colors .B4
case "B5" :
return theme .Colors .B5
case "B6" :
return theme .Colors .B6
case "AA2" :
return theme .Colors .AA2
case "AA4" :
return theme .Colors .AA4
case "AA5" :
return theme .Colors .AA5
case "AB4" :
return theme .Colors .AB4
case "AB5" :
return theme .Colors .AB5
default :
return ""
}
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .