Files
speckle-server/packages/tailwind-theme/src/plugin.ts
T
2023-06-13 09:33:10 +03:00

239 lines
6.5 KiB
TypeScript

import plugin from 'tailwindcss/plugin.js'
import preset from './preset.js'
export const lightThemeVariables = {
/* used only as the page background */
'--foundation-page': '#f1f5f9',
/* used as the background for any elements that sit on the page */
'--foundation': '#fcfcfc',
'--foundation-2': '#fcfcfc',
'--foundation-3': '#fcfcfc',
'--foundation-4': '#fcfcfc',
'--foundation-5': '#fcfcfc',
/* for hover/focus states */
'--foundation-focus': '#dbeafe',
/* for disabled backgrounds */
'--foundation-disabled': '#e5e5e5',
/* default foreground color */
'--foreground': '#334155',
/* dimmer foreground color, e.g. caption text */
'--foreground-2': '#94a3b8',
/* disabled foreground color */
'--foreground-disabled': '#a3a3a3',
/* primary color when used for text directly on top of foundation-page */
'--foreground-primary': '#3b82f6',
/* foreground color when put on top of a primary colored background */
'--foreground-on-primary': '#fff',
/* primary color */
'--primary': '#3b82f6',
/* focused primary color */
'--primary-focus': '#2563eb',
/* muted primary color */
'--primary-muted': '#e8eff8',
/* outline variations */
'--outline-1': '#3b82f6',
'--outline-2': '#93c5fd',
'--outline-3': '#cbd5e1',
/* success variations */
'--success': '#34d399',
'--success-lighter': '#d1fae5',
'--success-darker': '#064e3b',
/* warning variations */
'--warning': '#fbbf24',
'--warning-lighter': '#fef3c7',
'--warning-darker': '#78350f',
/* info variations */
'--info': '#38bdf8',
'--info-lighter': '#e0f2fe',
'--info-darker': '#0c4a6e',
/* danger variations */
'--danger': '#f87171',
'--danger-lighter': '#fee2e2',
'--danger-darker': '#7f1d1d'
}
export const darkThemeVariables = {
/* used only as the page background */
'--foundation-page': '#18181b',
/* used as the background for any elements that sit on the page */
'--foundation': '#27272a',
'--foundation-2': '#303034',
'--foundation-3': '#52525b',
'--foundation-4': '#71717a',
'--foundation-5': '#a1a1aa',
/* for hover/focus states */
'--foundation-focus': '#52525b',
/* for disabled backgrounds */
'--foundation-disabled': '#3c3c3d',
/* default foreground color */
'--foreground': '#f4f4f5',
/* dimmer foreground color, e.g. caption text */
'--foreground-2': '#71717a',
/* disabled foreground color */
'--foreground-disabled': '#5a5a5f',
/* primary color when used for text directly on top of foundation-page */
'--foreground-primary': '#bfdbfe',
/* foreground color when put on top of a primary colored background */
'--foreground-on-primary': '#fafafa',
/* primary color */
'--primary': '#3b82f6',
/* focused primary color */
'--primary-focus': '#60a5fa',
/* muted primary color */
'--primary-muted': '#1d1d20',
/* outline variations */
'--outline-1': '#a1a1aa',
'--outline-2': '#52525b',
'--outline-3': '#3f3f46',
/* success variations */
'--success': '#34d399',
'--success-lighter': '#a7f3d0',
'--success-darker': '#064e3b',
/* warning variations */
'--warning': '#facc15',
'--warning-lighter': '#fef08a',
'--warning-darker': '#78350f',
/* info variations */
'--info': '#38bdf8',
'--info-lighter': '#bae6fd',
'--info-darker': '#0c4a6e',
/* danger variations */
'--danger': '#f87171',
'--danger-lighter': '#fecaca',
'--danger-darker': '#7f1d1d'
}
export default plugin(function ({ addComponents, addBase }) {
addBase({
"[type='checkbox']:focus, [type='radio']:focus": {
'@apply ring-offset-foundation': {}
},
"input[type='range']": {
'@apply appearance-none bg-transparent': {}
},
"input[type='range']::-webkit-slider-runnable-track": {
'@apply bg-black/25 rounded-full': {}
},
"input[type='range']::-moz-range-track": {
'@apply bg-black/25 rounded-full': {}
},
"input[type='range']::-ms-track": {
'@apply bg-black/25 rounded-full': {}
},
body: {
'@apply font-sans': {}
},
html: {
'--simple-scrollbar-width': '4px',
...lightThemeVariables,
'&.dark': {
...darkThemeVariables
}
},
// weird hack cause for some reason tailwind sometimes omits this if I use `.dark` selector instead (tailwind bug?)
[`html[class*="dark"]`]: {
...darkThemeVariables
}
})
addComponents({
// Font sizes
'.h1': {
'@apply text-5xl leading-10': {}
},
'.h2': {
'@apply text-4xl leading-10': {}
},
'.h3': {
'@apply text-3xl leading-9': {}
},
'.h4': {
'@apply text-2xl leading-8': {}
},
'.h5': {
'@apply text-xl leading-7': {}
},
'.h6': {
'@apply text-lg leading-6': {}
},
'.label': {
'@apply text-sm font-medium leading-5': {}
},
'.label--light': {
'@apply font-normal': {}
},
'.label-light': {
'@apply label label--light': {}
},
'.normal': {
'@apply text-base font-normal': {}
},
'.caption': {
'@apply text-xs': {}
},
'.text-tiny': {
'font-size': '0.6rem',
'line-height': '1rem'
},
// Grid/layout container that limits max width to expected sizes that we use in our designs
'.layout-container': {
'@apply mx-auto': {},
/* base/mobile - fluid, no max width, just padding */
'@apply px-4': {},
/* sm+ - also fluid, increased padding */
"@media (min-width: theme('screens.sm'))": {
'@apply px-8': {}
},
/* lg+ (from this point on, no padding just limited max width) */
"@media (min-width: theme('screens.lg'))": {
'@apply px-6 max-w-full': {}
},
/* xl+ */
"@media (min-width: theme('screens.xl'))": {
'@apply max-w-[1216px]': {}
},
/* 2xl+ */
"@media (min-width: theme('screens.2xl'))": {
'@apply max-w-[1312px]': {}
}
},
// Simple scrollbar (OSX-like) to use instead of the ugly browser one
'.simple-scrollbar': {
'scrollbar-width': 'var(--simple-scrollbar-width)',
'scrollbar-color': 'var(--foreground-2)',
'&::-webkit-scrollbar': {
width: 'var(--simple-scrollbar-width)',
height: '6px'
},
'&::-webkit-scrollbar-track': {
'border-radius': '15px',
background: 'var(--foundation-disabled)'
},
'&::-webkit-scrollbar-thumb': {
'border-radius': '15px',
background: 'var(--foreground-2)'
},
'&::-webkit-scrollbar-thumb:hover': {
background: 'var(--foreground-2)'
},
'&::-webkit-scrollbar-thumb:active': {
background: 'rgba(90 90 90 10100%)'
}
}
})
}, preset)