mirror of
https://github.com/p-stream/p-stream.git
synced 2026-01-11 20:10:32 +00:00
343 lines
10 KiB
TypeScript
343 lines
10 KiB
TypeScript
import { createTheme } from "../types";
|
|
|
|
const tokens = {
|
|
black: "hsla(0, 0%, 0%, 1)", // General black color
|
|
white: "hsla(0, 0%, 100%, 1)", // General white color
|
|
semantic: {
|
|
red: {
|
|
c100: "hsla(15, 40%, 65%, 1)", // Error text - washed out autumn red
|
|
c200: "hsla(15, 35%, 55%, 1)", // Video player scraping error - muted red-orange
|
|
c300: "hsla(15, 30%, 45%, 1)", // Danger button - deeper autumn red
|
|
c400: "hsla(15, 25%, 35%, 1)", // Not currently used - dark autumn red
|
|
},
|
|
green: {
|
|
c100: "hsla(60, 30%, 55%, 1)", // Success text - washed out autumn green
|
|
c200: "hsla(60, 25%, 45%, 1)", // Video player scraping success - muted yellow-green
|
|
c300: "hsla(60, 20%, 35%, 1)", // Not currently used - deeper autumn green
|
|
c400: "hsla(60, 15%, 25%, 1)", // Not currently used - dark autumn green
|
|
},
|
|
silver: {
|
|
c100: "hsla(45, 20%, 85%, 1)", // Primary button hover - washed out yellow
|
|
c200: "hsla(45, 15%, 75%, 1)", // Not currently used - muted yellow
|
|
c300: "hsla(45, 10%, 60%, 1)", // Secondary button text - subtle yellow tint
|
|
c400: "hsla(45, 8%, 45%, 1)", // Main text in video player context - warm gray
|
|
},
|
|
yellow: {
|
|
c100: "hsla(45, 60%, 75%, 1)", // Best onboarding highlight - washed out golden
|
|
c200: "hsla(45, 50%, 65%, 1)", // Dropdown highlight hover - muted golden
|
|
c300: "hsla(45, 40%, 55%, 1)", // Not currently used - deeper golden
|
|
c400: "hsla(45, 30%, 45%, 1)", // Dropdown highlight - dark golden
|
|
},
|
|
rose: {
|
|
c100: "hsla(20, 35%, 60%, 1)", // Authentication error text - washed out autumn rose
|
|
c200: "hsla(20, 30%, 50%, 1)", // Danger button hover - muted orange-red
|
|
c300: "hsla(20, 25%, 40%, 1)", // Danger button - deeper autumn rose
|
|
c400: "hsla(20, 20%, 30%, 1)", // Not currently used - dark autumn rose
|
|
},
|
|
},
|
|
blue: {
|
|
c50: "hsla(25, 100%, 85%, 1)", // soft orange
|
|
c100: "hsla(25, 80%, 70%, 1)", // brighter orange
|
|
c200: "hsla(25, 70%, 60%, 1)", // theme primary: warm orange
|
|
c300: "hsla(25, 60%, 45%, 1)", // accent B: darker orange
|
|
c400: "hsla(25, 50%, 35%, 1)", // light bar
|
|
c500: "hsla(25, 45%, 25%, 1)", // accent B background
|
|
c600: "hsla(25, 42%, 20%, 1)",
|
|
c700: "hsla(25, 40%, 16%, 1)",
|
|
c800: "hsla(25, 35%, 10%, 1)",
|
|
c900: "hsla(25, 30%, 7%, 1)",
|
|
},
|
|
purple: {
|
|
c50: "hsla(15, 100%, 75%, 1)", // soft red-orange for link hover - darker
|
|
c100: "hsla(15, 100%, 60%, 1)", // bright red-orange logo/link - much darker
|
|
c200: "hsla(15, 90%, 50%, 1)", // red-orange progress/loader - more saturated
|
|
c300: "hsla(15, 80%, 45%, 1)", // toggle/onboarding bar - more saturated
|
|
c400: "hsla(15, 75%, 40%, 1)", // card icon - more saturated
|
|
c500: "hsla(15, 70%, 32%, 1)", // accent A background - more saturated
|
|
c600: "hsla(15, 65%, 25%, 1)",
|
|
c700: "hsla(15, 60%, 18%, 1)",
|
|
c800: "hsla(15, 55%, 12%, 1)",
|
|
c900: "hsla(15, 50%, 8%, 1)",
|
|
},
|
|
ash: {
|
|
c50: "hsla(45, 39%, 60%, 1)", // subtle yellow-tinted gray
|
|
c100: "hsla(45, 24%, 55%, 1)", // warm yellow-gray
|
|
c200: "hsla(45, 10%, 35%, 1)", // sidebar border - yellow tint
|
|
c300: "hsla(45, 8%, 28%, 1)", // card divider - yellow tint
|
|
c400: "hsla(45, 6%, 22%, 1)", // bg + hover accents - yellow tint
|
|
c500: "hsla(25, 45%, 25%, 1)", // accent B background
|
|
c600: "hsla(25, 42%, 20%, 1)",
|
|
c700: "hsla(25, 40%, 16%, 1)",
|
|
c800: "hsla(25, 35%, 10%, 1)",
|
|
c900: "hsla(25, 30%, 7%, 1)", // deepest shade, shadows
|
|
},
|
|
shade: {
|
|
c25: "hsla(24, 80%, 70%, 1)", // red hover accent
|
|
c50: "hsla(25, 100%, 72%, 1)", // rich pumpkin for main text
|
|
c100: "hsla(25, 80%, 60%, 1)", // placeholder/icon
|
|
c200: "hsla(25, 60%, 45%, 1)", // hover bg
|
|
c300: "hsla(25, 60%, 35%, 1)", // pill background, auth border
|
|
c400: "hsla(25, 50%, 21%, 1)", // light bar
|
|
c500: "hsla(35, 25%, 22%, 1)", // dropdown background - subtle yellow tint
|
|
c600: "hsla(45, 20%, 16%, 1)", // modal/dropdown background - washed out yellow
|
|
c700: "hsla(60, 15%, 12%, 1)", // alt bg - subtle green tint
|
|
c800: "hsla(25, 38%, 8%, 1)", // main bg - lighter
|
|
c900: "hsla(25, 35%, 5%, 1)", // hover shadow - lighter
|
|
},
|
|
};
|
|
|
|
export default createTheme({
|
|
name: "autumn",
|
|
extend: {
|
|
colors: {
|
|
themePreview: {
|
|
primary: tokens.blue.c200,
|
|
secondary: tokens.shade.c50,
|
|
ghost: tokens.purple.c400,
|
|
},
|
|
|
|
// Branding
|
|
pill: {
|
|
background: tokens.shade.c300,
|
|
backgroundHover: tokens.shade.c200,
|
|
highlight: tokens.blue.c200,
|
|
|
|
activeBackground: tokens.shade.c300,
|
|
},
|
|
|
|
// meta data for the theme itself
|
|
global: {
|
|
accentA: tokens.blue.c200,
|
|
accentB: tokens.blue.c300,
|
|
},
|
|
|
|
// light bar
|
|
lightBar: {
|
|
light: tokens.blue.c400,
|
|
},
|
|
|
|
// Buttons
|
|
buttons: {
|
|
toggle: tokens.purple.c300,
|
|
toggleDisabled: tokens.ash.c500,
|
|
danger: tokens.semantic.rose.c300,
|
|
dangerHover: tokens.semantic.rose.c200,
|
|
|
|
secondary: tokens.ash.c700,
|
|
secondaryText: tokens.semantic.silver.c300,
|
|
secondaryHover: tokens.ash.c700,
|
|
primary: tokens.white,
|
|
primaryText: tokens.black,
|
|
primaryHover: tokens.semantic.silver.c100,
|
|
purple: tokens.purple.c500,
|
|
purpleHover: tokens.purple.c400,
|
|
cancel: tokens.ash.c500,
|
|
cancelHover: tokens.ash.c300,
|
|
},
|
|
|
|
// only used for body colors/textures
|
|
background: {
|
|
main: tokens.shade.c900,
|
|
secondary: tokens.shade.c600,
|
|
secondaryHover: tokens.shade.c400,
|
|
accentA: tokens.purple.c500,
|
|
accentB: tokens.blue.c500,
|
|
},
|
|
|
|
// Modals
|
|
modal: {
|
|
background: tokens.shade.c800,
|
|
},
|
|
|
|
// typography
|
|
type: {
|
|
logo: tokens.purple.c100,
|
|
emphasis: tokens.white,
|
|
text: tokens.shade.c50,
|
|
dimmed: tokens.shade.c50,
|
|
divider: tokens.ash.c500,
|
|
secondary: tokens.ash.c100,
|
|
danger: tokens.semantic.red.c100,
|
|
success: tokens.semantic.green.c100,
|
|
link: tokens.purple.c100,
|
|
linkHover: tokens.purple.c50,
|
|
},
|
|
|
|
// search bar
|
|
search: {
|
|
background: tokens.shade.c500,
|
|
hoverBackground: tokens.shade.c600,
|
|
focused: tokens.shade.c400,
|
|
placeholder: tokens.shade.c100,
|
|
icon: tokens.shade.c100,
|
|
text: tokens.white,
|
|
},
|
|
|
|
// media cards
|
|
mediaCard: {
|
|
hoverBackground: tokens.purple.c900,
|
|
hoverAccent: tokens.blue.c100,
|
|
hoverShadow: tokens.shade.c900,
|
|
shadow: tokens.purple.c700,
|
|
barColor: tokens.ash.c200,
|
|
barFillColor: tokens.purple.c100,
|
|
badge: tokens.shade.c700,
|
|
badgeText: tokens.ash.c100,
|
|
},
|
|
|
|
// Large card
|
|
largeCard: {
|
|
background: tokens.shade.c600,
|
|
icon: tokens.purple.c400,
|
|
},
|
|
|
|
// Dropdown
|
|
dropdown: {
|
|
background: tokens.shade.c600,
|
|
altBackground: tokens.shade.c700,
|
|
hoverBackground: tokens.shade.c500,
|
|
highlight: tokens.semantic.yellow.c400,
|
|
highlightHover: tokens.semantic.yellow.c200,
|
|
text: tokens.shade.c50,
|
|
secondary: tokens.shade.c100,
|
|
border: tokens.shade.c400,
|
|
contentBackground: tokens.shade.c500,
|
|
},
|
|
|
|
// Passphrase
|
|
authentication: {
|
|
border: tokens.shade.c300,
|
|
inputBg: tokens.shade.c600,
|
|
inputBgHover: tokens.shade.c500,
|
|
wordBackground: tokens.shade.c500,
|
|
copyText: tokens.shade.c100,
|
|
copyTextHover: tokens.ash.c50,
|
|
errorText: tokens.semantic.rose.c100,
|
|
},
|
|
|
|
// Settings page
|
|
settings: {
|
|
sidebar: {
|
|
activeLink: tokens.shade.c600,
|
|
badge: tokens.shade.c900,
|
|
|
|
type: {
|
|
secondary: tokens.shade.c200,
|
|
inactive: tokens.shade.c50,
|
|
icon: tokens.shade.c50,
|
|
iconActivated: tokens.purple.c200,
|
|
activated: tokens.purple.c50,
|
|
},
|
|
},
|
|
|
|
card: {
|
|
border: tokens.shade.c400,
|
|
background: tokens.shade.c400,
|
|
altBackground: tokens.shade.c400,
|
|
},
|
|
|
|
saveBar: {
|
|
background: tokens.shade.c800,
|
|
},
|
|
},
|
|
|
|
// Utilities
|
|
utils: {
|
|
divider: tokens.ash.c300,
|
|
},
|
|
|
|
// Onboarding
|
|
onboarding: {
|
|
bar: tokens.shade.c400,
|
|
barFilled: tokens.purple.c300,
|
|
divider: tokens.shade.c200,
|
|
card: tokens.shade.c800,
|
|
cardHover: tokens.shade.c700,
|
|
border: tokens.shade.c600,
|
|
good: tokens.purple.c100,
|
|
best: tokens.semantic.yellow.c100,
|
|
link: tokens.purple.c100,
|
|
},
|
|
|
|
// Error page
|
|
errors: {
|
|
card: tokens.shade.c800,
|
|
border: tokens.ash.c500,
|
|
|
|
type: {
|
|
secondary: tokens.ash.c100,
|
|
},
|
|
},
|
|
|
|
// About page
|
|
about: {
|
|
circle: tokens.ash.c500,
|
|
circleText: tokens.ash.c50,
|
|
},
|
|
|
|
// About page
|
|
editBadge: {
|
|
bg: tokens.ash.c500,
|
|
bgHover: tokens.ash.c400,
|
|
text: tokens.ash.c50,
|
|
},
|
|
|
|
progress: {
|
|
background: tokens.ash.c50,
|
|
preloaded: tokens.ash.c50,
|
|
filled: tokens.purple.c200,
|
|
},
|
|
|
|
// video player
|
|
video: {
|
|
buttonBackground: tokens.ash.c200,
|
|
|
|
autoPlay: {
|
|
background: tokens.ash.c700,
|
|
hover: tokens.ash.c500,
|
|
},
|
|
|
|
scraping: {
|
|
card: tokens.shade.c700,
|
|
error: tokens.semantic.red.c200,
|
|
success: tokens.semantic.green.c200,
|
|
loading: tokens.purple.c200,
|
|
noresult: tokens.ash.c100,
|
|
},
|
|
|
|
audio: {
|
|
set: tokens.purple.c200,
|
|
},
|
|
|
|
context: {
|
|
background: tokens.ash.c900,
|
|
light: tokens.shade.c50,
|
|
border: tokens.ash.c600,
|
|
hoverColor: tokens.ash.c600,
|
|
buttonFocus: tokens.ash.c500,
|
|
flagBg: tokens.ash.c500,
|
|
inputBg: tokens.ash.c600,
|
|
buttonOverInputHover: tokens.ash.c500,
|
|
inputPlaceholder: tokens.ash.c200,
|
|
cardBorder: tokens.ash.c700,
|
|
slider: tokens.ash.c50,
|
|
sliderFilled: tokens.purple.c200,
|
|
error: tokens.semantic.red.c200,
|
|
|
|
buttons: {
|
|
list: tokens.ash.c700,
|
|
active: tokens.ash.c900,
|
|
},
|
|
|
|
closeHover: tokens.ash.c800,
|
|
|
|
type: {
|
|
main: tokens.semantic.silver.c400,
|
|
secondary: tokens.ash.c200,
|
|
accent: tokens.purple.c200,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|