redirecter for ao3 that adds opengraph metadata

resolve merge conflict

Changed files
+871 -50
src
app
series
[seriesId]
works
[workId]
icons
lib
+2
src/app/series/[seriesId]/opengraph-image.jsx
···
import { getSeries } from "@fujocoded/ao3.js"
import sanitizeData from "@/lib/sanitizeData.js"
import OGImage from "@/lib/ogimage.js"
+
import OGImage from "@/lib/ogimagelocked.js"
import baseFonts from "@/lib/baseFonts.js"
import titleFonts from "@/lib/titleFonts.js"
import defaults from "@/lib/ogdefaults.js"
···
const { seriesId } = await params
const addr = `series/${seriesId}`
const data = await getSeries({seriesId: seriesId})
+
if (data.locked) return OGImageLocked({theme: theme})
const imageParams = await sanitizeData({type: 'series', data: data, props: defaults})
const theme = imageParams.theme
console.log(theme)
+2
src/app/works/[workId]/chapters/[chapterId]/opengraph-image.jsx
···
import { getWork } from "@fujocoded/ao3.js"
import sanitizeData from "@/lib/sanitizeData.js"
import OGImage from "@/lib/ogimage.js"
+
import OGImageLocked from "@/lib/ogimagelocked.js"
import baseFonts from "@/lib/baseFonts.js"
import titleFonts from "@/lib/titleFonts.js"
import defaults from "@/lib/ogdefaults.js"
···
const { workId, chapterId } = await params
const addr = `works/${workId}/chapters/${chapterId}`
const data = await getWork({workId: workId, chapterId: chapterId})
+
if (data.locked) return OGImageLocked({theme: theme})
const imageParams = await sanitizeData({type: 'work', data: data, props: defaults})
const theme = imageParams.theme
const baseFont = baseFonts[imageParams.baseFont].displayName
+2
src/app/works/[workId]/opengraph-image.jsx
···
import { getWork } from "@fujocoded/ao3.js"
import sanitizeData from "@/lib/sanitizeData.js"
import OGImage from "@/lib/ogimage.js"
+
import OGImageLocked from "@/lib/ogimagelocked.js"
import baseFonts from "@/lib/baseFonts.js"
import titleFonts from "@/lib/titleFonts.js"
import defaults from "@/lib/ogdefaults.js"
···
const { workId } = await params
const addr = `works/${workId}`
const data = await getWork({workId: workId})
+
if (data.locked) return OGImageLocked({theme: theme})
const imageParams = await sanitizeData({type: 'work', data: data, props: defaults})
const theme = imageParams.theme
const baseFont = baseFonts[imageParams.baseFont].displayName
+8
src/icons/lock.js
···
+
export default function Lock ({bg, fg, width, height}) {
+
return (
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640" width={width} height={height}>
+
<ellipse cx="320" cy="320" rx="320" ry="320" fill={bg} />
+
<path d="M256 160L256 224L384 224L384 160C384 124.7 355.3 96 320 96C284.7 96 256 124.7 256 160zM192 224L192 160C192 89.3 249.3 32 320 32C390.7 32 448 89.3 448 160L448 224C483.3 224 512 252.7 512 288L512 512C512 547.3 483.3 576 448 576L192 576C156.7 576 128 547.3 128 512L128 288C128 252.7 156.7 224 192 224z" fill={fg} />
+
</svg>
+
)
+
}
+17 -17
src/lib/ogimage.js
···
{image.topLine}
</div>
-
{image.props.rating && image.rating === 'E' && (<Explicit fg={theme.background} bg={theme.accent} width={28} height={28} />)}
-
{image.props.rating && image.rating === 'M' && (<Mature fg={theme.background} bg={theme.accent} width={28} height={28} />)}
-
{image.props.rating && image.rating === 'T' && (<Teen fg={theme.background} bg={theme.accent} width={28} height={28} />)}
-
{image.props.rating && image.rating === 'G' && (<General fg={theme.background} bg={theme.accent} width={28} height={28} />)}
-
{image.props.rating && image.rating === 'NR' && (<NotRated fg={theme.background} bg={theme.accent} width={28} height={28} />)}
+
{image.props.rating && image.rating === 'E' && (<Explicit fg={theme.accentColor} bg={theme.accent} width={28} height={28} />)}
+
{image.props.rating && image.rating === 'M' && (<Mature fg={theme.accentColor} bg={theme.accent} width={28} height={28} />)}
+
{image.props.rating && image.rating === 'T' && (<Teen fg={theme.accentColor} bg={theme.accent} width={28} height={28} />)}
+
{image.props.rating && image.rating === 'G' && (<General fg={theme.accentColor} bg={theme.accent} width={28} height={28} />)}
+
{image.props.rating && image.rating === 'NR' && (<NotRated fg={theme.accentColor} bg={theme.accent} width={28} height={28} />)}
-
{image.props.warnings && image.warning === 'NW' && (<NoWarnings fg={theme.background} bg={theme.accent2} width={28} height={28} />)}
-
{image.props.warnings && image.warning === 'CNTW' && (<ChoseNotToWarn fg={theme.background} bg={theme.accent2} width={28} height={28} />)}
-
{image.props.warnings && image.warning === 'W' && (<Warnings fg={theme.background} bg={theme.accent2} width={28} height={28} />)}
+
{image.props.warnings && image.warning === 'NW' && (<NoWarnings fg={theme.accent2Color} bg={theme.accent2} width={28} height={28} />)}
+
{image.props.warnings && image.warning === 'CNTW' && (<ChoseNotToWarn fg={theme.accent2Color} bg={theme.accent2} width={28} height={28} />)}
+
{image.props.warnings && image.warning === 'W' && (<Warnings fg={theme.accent2Color} bg={theme.accent2} width={28} height={28} />)}
-
{image.props.category && image.category === 'F' && (<Yuri fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
-
{image.props.category && image.category === 'M' && (<Yaoi fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
-
{image.props.category && image.category === 'FM' && (<Het fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
-
{image.props.category && image.category === 'G' && (<Gen fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
-
{image.props.category && image.category === 'MX' && (<MultiShip fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
-
{image.props.category && image.category === 'O' && (<OtherShip fg={theme.background} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'F' && (<Yuri fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'M' && (<Yaoi fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'FM' && (<Het fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'G' && (<Gen fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'MX' && (<MultiShip fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
+
{image.props.category && image.category === 'O' && (<OtherShip fg={theme.accent3Color} bg={theme.accent3} width={28} height={28} />)}
</div>
<div
style={{
···
<span
style={{
backgroundColor: theme.accent2,
-
color: theme.descBackground,
+
color: theme.accent2Color,
padding: "3px 5px",
borderRadius: 5
}}
···
<span
style={{
backgroundColor: theme.accent3,
-
color: theme.descBackground,
+
color: theme.accent3Color,
padding: "3px 5px",
borderRadius: 5
}}
···
<span
style={{
backgroundColor: theme.accent4,
-
color: theme.descBackground,
+
color: theme.accent4Color,
padding: "3px 5px",
borderRadius: 5
}}
+27
src/lib/ogimagelocked.js
···
+
import { ImageResponse } from "next/og"
+
import General from "@/icons/locked.js"
+
+
export default async function OGImageLocked ({ theme }) {
+
return new ImageResponse(
+
(
+
<div
+
style={{
+
display: "flex",
+
flexDirection: "column",
+
justifyContent: "center",
+
alignItems: "center",
+
color: theme.color,
+
backgroundColor: theme.background,
+
fontFamily: baseFont,
+
fontSize: 24,
+
padding: 20,
+
width: "100%",
+
height: "100%",
+
}}
+
>
+
<Locked bg={theme.background} fg={theme.color} width={480} height={480} />
+
</div>
+
),
+
opts
+
)
+
}
+13 -15
src/lib/sanitizeData.js
···
-
import { getWork } from "@fujocoded/ao3.js"
-
import { setArchiveBaseUrl, resetArchiveBaseUrl } from "@fujocoded/ao3.js/urls"
import DOM from "fauxdom"
import { readFile } from 'node:fs/promises'
import { join } from 'node:path'
···
import baseFonts from '@/lib/baseFonts.js'
import titleFonts from '@/lib/titleFonts.js'
-
const getHighestRating = async (works, archive = null) => {
+
const getWork = async (workId) => {
+
const x = await fetch('https://veryroundbird.house')
+
const data = await fetch(`http://${process.env.DOMAIN}/api/works/${workId}`)
+
const work = await data.json()
+
return work
+
}
+
+
const getHighestRating = async (works) => {
const ratings = await Promise.all(works.map(async (w) => {
-
if (archive) setArchiveBaseUrl('https://'+archive)
-
const work = await getWork({workId: w.id})
-
if (archive) resetArchiveBaseUrl()
+
const work = await getWork(w.id)
return work.rating
}))
if (ratings.includes("Not Rated")) {
···
const getHighestWarning = async (works, archive = null) => {
const warnings = await Promise.all(works.map(async (w) => {
-
if (archive) setArchiveBaseUrl('https://'+archive)
-
const work = await getWork({workId: w.id})
-
if (archive) resetArchiveBaseUrl()
+
const work = await getWork(w.id)
return work.tags.warnings
}))
+
console.log(warnings)
const warningsUnique = warnings.reduce((a, b) => { return a.concat(b) }).filter((w, i) => { return i === warnings.indexOf(w) })
if (warningsUnique.length === 1 && warningsUnique[0] === "Creator Chose Not To Use Archive Warnings") {
return "CNTW"
···
const getCategory = async (works, archive = null) => {
const categories = await Promise.all(works.map(async (w) => {
-
if (archive) setArchiveBaseUrl('https://'+archive)
-
const work = await getWork({workId: w.id})
-
if (archive) resetArchiveBaseUrl()
+
const work = await getWork(w.id)
return work.category
}))
const categoriesJoined = categories.reduce((a, b) => { return a.concat(b) })
···
const titleFont = propsParsed.titleFont ? propsParsed.titleFont : process.env.DEFAULT_TITLE_FONT
const titleFontData = titleFonts[titleFont]
const themeData = propsParsed.theme ? themes[propsParsed.theme] : themes[process.env.DEFAULT_THEME]
-
if (archive) setArchiveBaseUrl('https://'+archive)
-
const parentWork = type === 'work' && data.chapterInfo ? await getWork({workId: data.id}) : null
-
if (archive) resetArchiveBaseUrl()
+
const parentWork = type === 'work' && data.chapterInfo ? await getWork(data.id) : null
const bfs = await Promise.all(baseFontData.defs.map(async (bf) => {
return {
name: baseFontData.displayName,
+800 -18
src/lib/themes.js
···
descBackground: '#FFFFFF',
descColor: '#000000',
accent: '#FFFFFF',
-
accent2: '#990000',
-
accent3: '#009900',
-
accent4: '#000099'
+
accentColor: '#990000',
+
accent2: '#CC9999',
+
accent2Color: '#990000',
+
accent3: '#EEBBBB',
+
accent3Color: '#990000',
+
accent4: '#FFDDDD',
+
accent4Color: '#990000'
},
softEra: {
name: 'Soft Era',
···
descBackground: '#F9F5F5',
descColor: '#414141',
accent: '#DB90A7',
+
accentColor: '#F9F5F5',
accent2: '#EEAABE',
+
accent2Color: '#F9F5F5',
accent3: '#82B4E3',
-
accent4: '#a29acb'
+
accent3Color: '#F9F5F5',
+
accent4: '#a29acb',
+
accent4Color: '#F9F5F5',
},
wildCherry: {
name: 'Wild Cherry',
···
descBackground: '#FFFFFF',
descColor: '#2B1F32',
accent: '#E15D97',
+
accentColor: '#FFFFFF',
accent2: '#0AACC5',
+
accent2Color: '#FFFFFF',
accent3: '#FFB86C',
-
accent4: '#35BA66'
+
accent3Color: '#2B1F32',
+
accent4: '#35BA66',
+
accent4Color: '#FFFFFF',
},
rosePine: {
name: 'Rosé Pine',
···
descBackground: '#1f1d2e',
descColor: '#e0def4',
accent: '#eb6f92',
-
accent2: '#31748f',
+
accentColor: '#191724',
+
accent2: '#9ccfd8',
+
accent2Color: '#191724',
accent3: '#f6c177',
-
accent4: '#c4a7e7'
+
accent3Color: '#191724',
+
accent4: '#c4a7e7',
+
accent4Color: '#191724',
},
rosePineDawn: {
name: 'Rosé Pine Dawn',
···
descBackground: '#fffaf3',
descColor: '#575279',
accent: '#eb6f92',
+
accentColor: '#faf4ed',
accent2: '#286983',
+
accent2Color: '#faf4ed',
accent3: '#ea9d34',
-
accent4: '#907aa9'
+
accent3Color: '#faf4ed',
+
accent4: '#907aa9',
+
accent4Color: '#faf4ed',
},
rosePineMoon: {
name: 'Rosé Pine Moon',
···
descBackground: '#2a273f',
descColor: '#e0def4',
accent: '#b4637a',
-
accent2: '#3e8fb0',
+
accentColor: '#232136',
+
accent2: '#9ccfd8',
+
accent2Color: '#232136',
accent3: '#f6c177',
-
accent4: '#c4a7e7'
+
accent3Color: '#232136',
+
accent4: '#c4a7e7',
+
accent4Color: '#232136',
},
solarizedLight: {
name: 'Solarized Light',
···
descBackground: '#eee8d5',
descColor: '#002b36',
accent: '#d33682',
+
accentColor: '#fdf6e3',
accent2: '#2aa198',
+
accent2Color: '#fdf6e3',
accent3: '#859900',
-
accent4: '#6c71c4'
+
accent3Color: '#fdf6e3',
+
accent4: '#6c71c4',
+
accent4Color: '#fdf6e3',
},
solarizedDark: {
name: 'Solarized Dark',
···
descBackground: '#073642',
descColor: '#fdf6e3',
accent: '#d33682',
+
accentColor: '#002b36',
accent2: '#2aa198',
+
accent2Color: '#002b36',
accent3: '#859900',
-
accent4: '#6c71c4'
+
accent3Color: '#002b36',
+
accent4: '#6c71c4',
+
accent4Color: '#002b36',
},
squidgeworld: {
name: 'Squidgeworld',
···
color: '#f5f5dc',
descBackground: '#f5f5dc',
descColor: '#2a2a2a',
-
accent: '#fece3f',
+
accent: '#FFC825',
+
accentColor: '#f5f5dc',
accent2: '#818D4C',
+
accent2Color: '#f5f5dc',
accent3: '#6D7A34',
-
accent4: '#556121'
+
accent3Color: '#f5f5dc',
+
accent4: '#556121',
+
accent4Color: '#f5f5dc',
},
superlove: {
name: 'Superlove',
···
color: '#ffffff',
descBackground: '#FFFFFF',
descColor: '#2a2a2a',
-
accent: '#F9E4E6',
+
accent: '#F4C4C5',
+
accentColor: '#ffffff',
accent2: '#a33961',
+
accent2Color: '#ffffff',
accent3: '#87254A',
-
accent4: '#6A1133'
+
accent3Color: '#ffffff',
+
accent4: '#6A1133',
+
accent4Color: '#ffffff',
},
catppuccinMocha: {
name: 'Catppuccin Mocha',
···
descBackground: '#313244',
descColor: '#bac2de',
accent: '#f5e0dc',
+
accentColor: '#1e1e2e',
accent2: '#cba6f7',
+
accent2Color: '#1e1e2e',
accent3: '#fab387',
-
accent4: '#89dceb'
+
accent3Color: '#1e1e2e',
+
accent4: '#89dceb',
+
accent4Color: '#1e1e2e',
},
catppuccinLatte: {
name: 'Catppuccin Latte',
···
accent: '#dc8a78',
accentColor: '#FFFFFF',
accent2: '#8839ef',
+
accent2Color: '#eff1f5',
accent3: '#fe640b',
-
accent4: '#04a5e5'
+
accent3Color: '#eff1f5',
+
accent4: '#04a5e5',
+
accent4Color: '#eff1f5',
+
},
+
atelierCave: {
+
name: 'Atelier Cave',
+
background: '#19171c',
+
color: '#655F6D',
+
descBackground: '#19171c',
+
descColor: '#E2DFE7',
+
accent: '#BE4678',
+
accentColor: '#E2DFE7',
+
accent2: '#2A9292',
+
accent2Color: '#E2DFE7',
+
accent3: '#AA573C',
+
accent3Color: '#E2DFE7',
+
accent4: '#A06E3B',
+
accent4Color: '#E2DFE7'
+
},
+
atelierDune: {
+
name: 'Atelier Dune',
+
background: '#20201d',
+
color: '#7D7A68',
+
descBackground: '#20201d',
+
descColor: '#7D7A68',
+
accent: '#D73737',
+
accentColor: '#FEFBEC',
+
accent2: '#60AC39',
+
accent2Color: '#FEFBEC',
+
accent3: '#AE9513',
+
accent3Color: '#FEFBEC',
+
accent4: '#6684E1',
+
accent4Color: '#FEFBEC'
+
},
+
atelierEstuary: {
+
name: 'Atelier Estuary',
+
background: '#22221b',
+
color: '#6C6B5A',
+
descBackground: '#22221b',
+
descColor: '#E7E6DF',
+
accent: '#BA6236',
+
accentColor: '#F4F3EC',
+
accent2: '#7D9726',
+
accent2Color: '#F4F3EC',
+
accent3: '#AE7313',
+
accent3Color: '#F4F3EC',
+
accent4: '#36A166',
+
accent4Color: '#F4F3EC'
+
},
+
atelierForest: {
+
name: 'Atelier Forest',
+
background: '#1b1918',
+
color: '#766E6B',
+
descBackground: '#1b1918',
+
descColor: '#F1EFEE',
+
accent: '#F22C40',
+
accentColor: '#F1EFEE',
+
accent2: '#7B9726',
+
accent2Color: '#F1EFEE',
+
accent3: '#DF5320',
+
accent3Color: '#F1EFEE',
+
accent4: '#407EE7',
+
accent4Color: '#F1EFEE'
+
},
+
atelierHeath: {
+
name: 'Atelier Heath',
+
background: '#1b1918',
+
color: '#776977',
+
descBackground: '#1b1918',
+
descColor: '#F7F3F7',
+
accent: '#CA402B',
+
accentColor: '#F7F3F7',
+
accent2: '#918B3B',
+
accent2Color: '#F7F3F7',
+
accent3: '#BB8A35',
+
accent3Color: '#F7F3F7',
+
accent4: '#516AEC',
+
accent4Color: '#F7F3F7'
+
},
+
atelierLakeside: {
+
name: 'Atelier Lakeside',
+
background: '#161b1d',
+
color: '#5A7B8C',
+
descBackground: '#161b1d',
+
descColor: '#EBF8FF',
+
accent: '#D22D72',
+
accentColor: '#EBF8FF',
+
accent2: '#568C3B',
+
accent2Color: '#EBF8FF',
+
accent3: '#935C25',
+
accent3Color: '#EBF8FF',
+
accent4: '#257FAD',
+
accent4Color: '#EBF8FF'
+
},
+
atelierPlateau: {
+
name: 'Atelier Plateau',
+
background: '#1b1818',
+
color: '#655D5D',
+
descBackground: '#1b1818',
+
descColor: '#F4ECEC',
+
accent: '#CA4949',
+
accentColor: '#F4ECEC',
+
accent2: '#4B8B8B',
+
accent2Color: '#F4ECEC',
+
accent3: '#A06E3B',
+
accent3Color: '#F4ECEC',
+
accent4: '#7272CA',
+
accent4Color: '#F4ECEC'
+
},
+
atelierSavanna: {
+
name: 'Atelier Savanna',
+
background: '#171c19',
+
color: '#5F6D64',
+
descBackground: '#1b1818',
+
descColor: '#ECF4EE',
+
accent: '#B16139',
+
accentColor: '#ECF4EE',
+
accent2: '#489963',
+
accent2Color: '#ECF4EE',
+
accent3: '#A07E3B',
+
accent3Color: '#ECF4EE',
+
accent4: '#478C90',
+
accent4Color: '#ECF4EE'
+
},
+
atelierSeaside: {
+
name: 'Atelier Seaside',
+
background: '#131513',
+
color: '#687D68',
+
descBackground: '#131513',
+
descColor: '#CFE8CF',
+
accent: '#E6193C',
+
accentColor: '#CFE8CF',
+
accent2: '#29A329',
+
accent2Color: '#CFE8CF',
+
accent3: '#98981B',
+
accent3Color: '#CFE8CF',
+
accent4: '#3D62F5',
+
accent4Color: '#CFE8CF'
+
},
+
atelierSulphurpool: {
+
name: 'Atelier Sulphurpool',
+
background: '#202746',
+
color: '#6B7394',
+
descBackground: '#202746',
+
descColor: '#DFE2F1',
+
accent: '#C94922',
+
accentColor: '#DFE2F1',
+
accent2: '#AC9739',
+
accent2Color: '#DFE2F1',
+
accent3: '#C08B30',
+
accent3Color: '#DFE2F1',
+
accent4: '#3D8FD1',
+
accent4Color: '#DFE2F1'
+
},
+
ayaka: {
+
name: 'Ayaka',
+
background: '#36283d',
+
color: '#FFFEFE',
+
descBackground: '#36283d',
+
descColor: '#FFFEFE',
+
accent: '#71ADE9',
+
accentColor: '#FFFEFE',
+
accent2: '#AB8CAE',
+
accent2Color: '#FFFEFE',
+
accent3: '#E59DB1',
+
accent3Color: '#FFFEFE',
+
accent4: '#8BB8E9',
+
accent4Color: '#FFFEFE'
+
},
+
ayuMirage: {
+
name: 'Ayu Mirage',
+
background: '#1F2430',
+
color: '#CBCCC6',
+
descBackground: '#1F2430',
+
descColor: '#CBCCC6',
+
accent: '#FF3333',
+
accentColor: '#1F2430',
+
accent2: '#BAE67E',
+
accent2Color: '#1F2430',
+
accent3: '#FFA759',
+
accent3Color: '#1F2430',
+
accent4: '#73D0FF',
+
accent4Color: '#1F2430'
+
},
+
base2ToneCave: {
+
name: 'Base2Tone Cave',
+
background: '#222021',
+
color: '#9f999b',
+
descBackground: '#2f2d2e',
+
descColor: '#ffebf2',
+
accent: '#936c7a',
+
accentColor: '#ffebf2',
+
accent2: '#cca133',
+
accent2Color: '#ffebf2',
+
accent3: '#d27998',
+
accent3Color: '#ffebf2',
+
accent4: '#706b6d',
+
accent4Color: '#ffebf2'
+
},
+
base2ToneDesert: {
+
name: 'Base2Tone Desert',
+
background: '#292724',
+
color: '#ada594',
+
descBackground: '#3d3a34',
+
descColor: '#f2ead9',
+
accent: '#816f4b',
+
accentColor: '#f2ead9',
+
accent2: '#ec9255',
+
accent2Color: '#f2ead9',
+
accent3: '#957e50',
+
accent3Color: '#f2ead9',
+
accent4: '#615c51',
+
accent4Color: '#f2ead9'
+
},
+
base2ToneDrawbridge: {
+
name: 'Base2Tone Drawbridge',
+
background: '#1b1f32',
+
color: '#9094a7',
+
descBackground: '#252a41',
+
descColor: '#9094a7',
+
accent: '#627af4',
+
accentColor: '#e1e6ff',
+
accent2: '#5cbcd6',
+
accent2Color: '#e1e6ff',
+
accent3: '#8b9efd',
+
accent3Color: '#e1e6ff',
+
accent4: '#444b6f',
+
accent4Color: '#e1e6ff'
+
},
+
base2ToneEarth: {
+
name: 'Base2Tone Earth',
+
background: '#322d29',
+
color: '#b5a9a1',
+
descBackground: '#3f3a37',
+
descColor: '#fff3eb',
+
accent: '#e6b84d',
+
accentColor: '#fff3eb',
+
accent2: '#d9b154',
+
accent2Color: '#fff3eb',
+
accent3: '#816d5f',
+
accent3Color: '#fff3eb',
+
accent4: '#b5a9a1',
+
accent4Color: '#fff3eb'
+
},
+
base2ToneEvening: {
+
name: 'Base2Tone Evening',
+
background: '#2a2734',
+
color: '#a4a1b5',
+
descBackground: '#363342',
+
descColor: '#eeebff',
+
accent: '#8a75f5',
+
accentColor: '#eeebff',
+
accent2: '#ffad5c',
+
accent2Color: '#eeebff',
+
accent3: '#afa0fe',
+
accent3Color: '#eeebff',
+
accent4: '#a4a1b5',
+
accent4Color: '#eeebff'
+
},
+
base2ToneField: {
+
name: 'Base2Tone Field',
+
background: '#18201e',
+
color: '#8ea4a0',
+
descBackground: '#242e2c',
+
descColor: '#a8fff1',
+
accent: '#0fbda0',
+
accentColor: '#242e2c',
+
accent2: '#3be381',
+
accent2Color: '#242e2c',
+
accent3: '#40ddc3',
+
accent3Color: '#242e2c',
+
accent4: '#8ea4a0',
+
accent4Color: '#242e2c'
+
},
+
base2ToneForest: {
+
name: 'Base2Tone Forest',
+
background: '#2a2d2a',
+
color: '#a1b5a1',
+
descBackground: '#353b35',
+
descColor: '#f0fff0',
+
accent: '#5c705c',
+
accentColor: '#f0fff0',
+
accent2: '#b1c44f',
+
accent2Color: '#f0fff0',
+
accent3: '#687d68',
+
accent3Color: '#f0fff0',
+
accent4: '#8fae8f',
+
accent4Color: '#f0fff0'
+
},
+
base2ToneLavender: {
+
name: 'Base2Tone Lavender',
+
background: '',
+
color: '',
+
descBackground: '',
+
descColor: '',
+
accent: '',
+
accentColor: '',
+
accent2: '',
+
accent2Color: '',
+
accent3: '',
+
accent3Color: '',
+
accent4: '',
+
accent4Color: ''
+
},
+
base2ToneMall: {
+
name: 'Base2Tone Mall',
+
background: '',
+
color: '',
+
descBackground: '',
+
descColor: '',
+
accent: '',
+
accentColor: '',
+
accent2: '',
+
accent2Color: '',
+
accent3: '',
+
accent3Color: '',
+
accent4: '',
+
accent4Color: ''
+
},
+
base2ToneMotel: {
+
name: 'Base2Tone Motel',
+
background: '',
+
color: '',
+
descBackground: '',
+
descColor: '',
+
accent: '',
+
accentColor: '',
+
accent2: '',
+
accent2Color: '',
+
accent3: '',
+
accent3Color: '',
+
accent4: '',
+
accent4Color: ''
+
},
+
base2TonePool: {
+
name: 'Base2Tone Pool',
+
background: '',
+
color: '',
+
descBackground: '',
+
descColor: '',
+
accent: '',
+
accentColor: '',
+
accent2: '',
+
accent2Color: '',
+
accent3: '',
+
accent3Color: '',
+
accent4: '',
+
accent4Color: ''
+
},
+
base2TonePorch: {
+
name: 'Base2Tone Porch',
+
background: '',
+
color: '',
+
descBackground: '',
+
descColor: '',
+
accent: '',
+
accentColor: '',
+
accent2: '',
+
accent2Color: '',
+
accent3: '',
+
accent3Color: '',
+
accent4: '',
+
accent4Color: ''
+
},
+
base2ToneSpace: {
+
name: 'Base2Tone Space',
+
background: '#24242e',
+
color: '#a1a1b5',
+
descBackground: '#333342',
+
descColor: '#cecee3',
+
accent: '#7676f4',
+
accentColor: '#ebebff',
+
accent2: '#f37b3f',
+
accent2Color: '#ebebff',
+
accent3: '#fe8c52',
+
accent3Color: '#ebebff',
+
accent4: '#737391',
+
accent4Color: '#ebebff'
+
},
+
base2ToneSuburb: {
+
name: 'Base2Tone Suburb',
+
background: '#1e202f',
+
color: '#4f5472',
+
descBackground: '#292c3d',
+
descColor: '#ebedff',
+
accent: '#7586f5',
+
accentColor: '#ebedff',
+
accent2: '#fe81b5',
+
accent2Color: '#ebedff',
+
accent3: '#fb6fa9',
+
accent3Color: '#ebedff',
+
accent4: '#5b6080',
+
accent4Color: '#ebedff'
+
},
+
blueDolphin: {
+
name: "Blue Dolphin",
+
background: '#006984',
+
color: '#A3F7FF',
+
descBackground: '#006984',
+
descColor: '#FFFFFF',
+
accent: '#FF8288',
+
accentColor: '#292D3E',
+
accent2: '#B4E88D',
+
accent2Color: '#292D3E',
+
accent3: '#F4D69F',
+
accent3Color: '#292D3E',
+
accent4: '#82AAFF',
+
accent4Color: '#292D3E'
+
},
+
borland: {
+
name: "Borland",
+
background: '#0000a4',
+
color: '#FFFFB6',
+
descBackground: '#0000a4',
+
descColor: '#FFFFB6',
+
accent: '#FF6C60',
+
accentColor: '#292D3E',
+
accent2: '#B4E88D',
+
accent2Color: '#292D3E',
+
accent3: '#F4D69F',
+
accent3Color: '#292D3E',
+
accent4: '#82AAFF',
+
accent4Color: '#292D3E'
+
},
+
butrin: {
+
name: 'Butrin',
+
background: '#4b3b3c',
+
color: '#F2F2F2',
+
descBackground: '#4b3b3c',
+
descColor: '#F2F2F2',
+
accent: '#F2B1B1',
+
accentColor: '#4b3b3c',
+
accent2: '#B2D8B2',
+
accent2Color: '#4b3b3c',
+
accent3: '#87CEFA',
+
accent3Color: '#4b3b3c',
+
accent4: '#D8BFD8',
+
accent4Color: '#4b3b3c'
+
},
+
gooey: {
+
name: "Gooey",
+
background: '#000009',
+
color: '#FFFFFF',
+
descBackground: '#1F222D',
+
descColor: '#FFFFFF',
+
accent: '#BB4F6C',
+
accentColor: '#FFFFFF',
+
accent2: '#C65E3D',
+
accent2Color: '#FFFFFF',
+
accent3: '#72CCAE',
+
accent3Color: '#FFFFFF',
+
accent4: '#58B6CA',
+
accent4Color: '#FFFFFF'
+
},
+
gruvbox: {
+
name: 'Gruvbox',
+
background: '#FBF1C7',
+
color: '#4f5472',
+
descBackground: '#FBF1C7',
+
descColor: '#3C3836',
+
accent: '#9D0006',
+
accentColor: '#4F4F4F',
+
accent2: '#A8FF60',
+
accent2Color: '#4F4F4F',
+
accent3: '#96CBFE',
+
accent3Color: '#4F4F4F',
+
accent4: '#FF73FD',
+
accent4Color: '#4F4F4F'
+
},
+
gruvboxDark: {
+
name: 'Gruvbox Dark',
+
background: '#282828',
+
color: '#7C6F64',
+
descBackground: '#282828',
+
descColor: '#ebedff',
+
accent: '#FB4934',
+
accentColor: '#282828',
+
accent2: '#B8BB26',
+
accent2Color: '#282828',
+
accent3: '#FABD2F',
+
accent3Color: '#282828',
+
accent4: '#83A598',
+
accent4Color: '#282828'
+
},
+
monoAmber: {
+
name: "Mono Amber",
+
background: '#2b1900',
+
color: '#FF9400',
+
descBackground: '#2b1900',
+
descColor: '#FF9400',
+
accent: '#FF9400',
+
accentColor: '#402500',
+
accent2: '#FF9400',
+
accent2Color: '#402500',
+
accent3: '#FF9400',
+
accent3Color: '#402500',
+
accent4: '#FF9400',
+
accent4Color: '#402500'
+
},
+
monoCyan: {
+
name: "Mono Cyan",
+
background: '#00222b',
+
color: '#00CCFF',
+
descBackground: '#00222b',
+
descColor: '#00CCFF',
+
accent: '#00CCFF',
+
accentColor: '#003340',
+
accent2: '#00CCFF',
+
accent2Color: '#003340',
+
accent3: '#00CCFF',
+
accent3Color: '#003340',
+
accent4: '#00CCFF',
+
accent4Color: '#003340'
+
},
+
monoGreen: {
+
name: "Mono Green",
+
background: '#022b00',
+
color: '#0BFF00',
+
descBackground: '#022b00',
+
descColor: '#0BFF00',
+
accent: '#0BFF00',
+
accentColor: '#034000',
+
accent2: '#0BFF00',
+
accent2Color: '#034000',
+
accent3: '#0BFF00',
+
accent3Color: '#034000',
+
accent4: '#0BFF00',
+
accent4Color: '#034000'
+
},
+
monoRed: {
+
name: "Mono Red",
+
background: '#2b0c00',
+
color: '#FF3600',
+
descBackground: '#2b0c00',
+
descColor: '#FF3600',
+
accent: '#FF3600',
+
accentColor: '#401200',
+
accent2: '#FF3600',
+
accent2Color: '#401200',
+
accent3: '#FF3600',
+
accent3Color: '#401200',
+
accent4: '#FF3600',
+
accent4Color: '#401200'
+
},
+
monoWhite: {
+
name: "Mono White",
+
background: '#262626',
+
color: '#FAFAFA',
+
descBackground: '#262626',
+
descColor: '#FAFAFA',
+
accent: '#FAFAFA',
+
accentColor: '#3B3B3B',
+
accent2: '#FAFAFA',
+
accent2Color: '#3B3B3B',
+
accent3: '#FAFAFA',
+
accent3Color: '#3B3B3B',
+
accent4: '#FAFAFA',
+
accent4Color: '#3B3B3B'
+
},
+
monoYellow: {
+
name: "Mono Yellow",
+
background: '#2b2400',
+
color: '#FFD300',
+
descBackground: '#2b2400',
+
descColor: '#FFD300',
+
accent: '#FFD300',
+
accentColor: '#403500',
+
accent2: '#FFD300',
+
accent2Color: '#403500',
+
accent3: '#FFD300',
+
accent3Color: '#403500',
+
accent4: '#FFD300',
+
accent4Color: '#403500'
+
},
+
seaShells: {
+
name: "Sea Shells",
+
background: '#09141b',
+
color: '#DEB88D',
+
descBackground: '#09141b',
+
descColor: '#FEE4CE',
+
accent: '#D15123',
+
accentColor: '#FEE4CE',
+
accent2: '#027C9B',
+
accent2Color: '#FEE4CE',
+
accent3: '#1E4950',
+
accent3Color: '#FEE4CE',
+
accent4: '#434B53',
+
accent4Color: '#FEE4CE'
+
},
+
seafoamPastel: {
+
name: "Seafoam Pastel",
+
background: '#243435',
+
color: '#E0E0E0',
+
descBackground: '#243435',
+
descColor: '#E0E0E0',
+
accent: '#825D4D',
+
accentColor: '#FEE4CE',
+
accent2: '#728C62',
+
accent2Color: '#FEE4CE',
+
accent3: '#ADA16D',
+
accent3Color: '#FEE4CE',
+
accent4: '#4D7B82',
+
accent4Color: '#FEE4CE'
+
},
+
seoul256: {
+
name: "Seoul 256",
+
background: '#3a3a3a',
+
color: '#e4e4e4',
+
descBackground: '#4e4e4e',
+
descColor: '#d0d0d0',
+
accent: '#d68787',
+
accentColor: '#4e4e4e',
+
accent2: '#87af87',
+
accent2Color: '#4e4e4e',
+
accent3: '#add4fb',
+
accent3Color: '#4e4e4e',
+
accent4: '#d7afaf',
+
accent4Color: '#4e4e4e'
+
},
+
seoul256Light: {
+
name: "Seoul 256 Light",
+
background: '#dadada',
+
color: '#4e4e4e',
+
descBackground: '#e4e4e4',
+
descColor: '#3a3a3a',
+
accent: '#870100',
+
accentColor: '#eeeeee',
+
accent2: '#d8865f',
+
accent2Color: '#eeeeee',
+
accent3: '#87025f',
+
accent3Color: '#eeeeee',
+
accent4: '#008787',
+
accent4Color: '#eeeeee'
+
},
+
shel: {
+
name: "Shel",
+
background: '#2C2423',
+
color: '#8FBAEC',
+
descBackground: '#2C2423',
+
descColor: '#F5EEEC',
+
accent: '#F588B9',
+
accentColor: '#F5EEEC',
+
accent2: '#AB6423',
+
accent2Color: '#F5EEEC',
+
accent3: '#2C64A2',
+
accent3Color: '#F5EEEC',
+
accent4: '#6C24A2',
+
accent4Color: '#F5EEEC'
+
},
+
slate: {
+
name: "Slate",
+
background: '#222222',
+
color: '#8CDFE0',
+
descBackground: '#222222',
+
descColor: '#E0E0E0',
+
accent: '#E2A8BF',
+
accentColor: '#222222',
+
accent2: '#81D778',
+
accent2Color: '#222222',
+
accent3: '#C4C9C0',
+
accent3Color: '#222222',
+
accent4: '#A481D3',
+
accent4Color: '#222222'
+
},
+
vaughn: {
+
name: "Vaughn",
+
background: '#25234F',
+
color: '#FFFFFF',
+
descBackground: '#25234F',
+
descColor: '#FFFFFF',
+
accent: '#60B48A',
+
accentColor: '#25234F',
+
accent2: '#DFAF8F',
+
accent2Color: '#25234F',
+
accent3: '#F08CC3',
+
accent3Color: '#25234F',
+
accent4: '#8CD0D3',
+
accent4Color: '#25234F'
+
},
+
warmNeon: {
+
name: "Warm Neon",
+
background: '#404040',
+
color: '#9CC090',
+
descBackground: '#404040',
+
descColor: '#FEFCFC',
+
accent: '#2ABBD4',
+
accentColor: '#FEFCFC',
+
accent2: '#39B13A',
+
accent2Color: '#FEFCFC',
+
accent3: '#4261C5',
+
accent3Color: '#FEFCFC',
+
accent4: '#F920FB',
+
accent4Color: '#FEFCFC'
+
},
+
website: {
+
name: "Website",
+
background: '#132f35',
+
color: '#ffd48f',
+
descBackground: '#183c44',
+
descColor: '#ffd48f',
+
accent: '#ff5757',
+
accentColor: '#235662',
+
accent2: '#ecff14',
+
accent2Color: '#235662',
+
accent3: '#4cbfff',
+
accent3Color: '#235662',
+
accent4: '#ff4cc2',
+
accent4Color: '#235662'
+
},
+
wryan: {
+
name: "Wryan",
+
background: '#101010',
+
color: '#899CA1',
+
descBackground: '#101010',
+
descColor: '#f0efd0',
+
accent: '#8C4665',
+
accentColor: '#C0C0C0',
+
accent2: '#287373',
+
accent2Color: '#C0C0C0',
+
accent3: '#7C7C99',
+
accent3Color: '#C0C0C0',
+
accent4: '#395573',
+
accent4Color: '#C0C0C0'
+
},
+
zenburn: {
+
name: "Zenburn",
+
background: '#3a3a3a',
+
color: '#f0efd0',
+
descBackground: '#333333',
+
descColor: '#f0efd0',
+
accent: '#cc9393',
+
accentColor: '#333333',
+
accent2: '#dfaf87',
+
accent2Color: '#333333',
+
accent3: '#efef87',
+
accent3Color: '#333333',
+
accent4: '#bca3a3',
+
accent4Color: '#333333'
}
}