958 lines
29 KiB
JavaScript
958 lines
29 KiB
JavaScript
const plugin = require('tailwindcss/plugin')
|
|
const {
|
|
tailwindClasses
|
|
} = require('./src/lib/components/apps/editor/componentsPanel/tailwindUtils')
|
|
const { zIndexes } = require('./src/lib/zIndexes')
|
|
|
|
const figmaTokens = makeRgb(require('./src/lib/assets/tokens/tokens.json'))
|
|
const { darkModeName, lightModeName } = require('./src/lib/assets/tokens/colorTokensConfig')
|
|
|
|
const tokens = { dark: figmaTokens.tokens[darkModeName], light: figmaTokens.tokens[lightModeName] }
|
|
const primitives = figmaTokens.primitives.light
|
|
|
|
// Helper function to create color definition based on whether the value contains alpha
|
|
function createColorDefinition(colorName) {
|
|
// Check a sample value to see if it contains alpha (using light theme as reference)
|
|
const sampleValue = tokens.light[colorName]
|
|
if (sampleValue && sampleValue.includes('/')) {
|
|
// Alpha is already included, use as-is without allowing override
|
|
return `rgb(var(--color-${colorName}))`
|
|
} else {
|
|
// No alpha, allow Tailwind's alpha-value placeholder
|
|
return `rgb(var(--color-${colorName}) / <alpha-value>)`
|
|
}
|
|
}
|
|
|
|
/** @type {import('tailwindcss').Config} */
|
|
const config = {
|
|
//to generatd tailwind full, only include ./src/lib/components/apps/editor/componentsPanel/tailwindUtils.ts and run:
|
|
//npx tailwindcss -i src/lib/assets/app.css -o static/tailwind_full.css
|
|
//then copy content in that file
|
|
content: [
|
|
'./src/**/*.{html,js,svelte,ts}',
|
|
'!./src/lib/components/apps/utils.ts',
|
|
'!./src/lib/components/apps/editor/componentsPanel/tailwindUtils.ts'
|
|
],
|
|
safelist: [
|
|
'hljs',
|
|
'splitpanes__pane',
|
|
'splitpanes__splitter',
|
|
'wm-tab',
|
|
'autocomplete-list',
|
|
'autocomplete-list-item',
|
|
'autocomplete-list-item-create',
|
|
'selected',
|
|
'wm-tab-selected',
|
|
...Object.values(zIndexes).map((zIndex) => `z-[${zIndex}]`),
|
|
...tailwindClasses
|
|
],
|
|
theme: {
|
|
colors: {
|
|
current: 'currentcolor',
|
|
transparent: 'transparent',
|
|
white: '#ffffff',
|
|
black: '#000000',
|
|
|
|
// Surface colors (semantic)
|
|
surface: createColorDefinition('surface-primary'),
|
|
'surface-secondary': createColorDefinition('surface-secondary'),
|
|
'surface-sunken': createColorDefinition('surface-sunken'),
|
|
'surface-tertiary': createColorDefinition('surface-tertiary'),
|
|
'surface-hover': createColorDefinition('surface-hover'),
|
|
'surface-disabled': createColorDefinition('surface-disabled'),
|
|
'surface-selected': createColorDefinition('surface-selected'),
|
|
'surface-accent-primary': createColorDefinition('surface-accent-primary'),
|
|
'surface-accent-hover': createColorDefinition('surface-accent-hover'),
|
|
'surface-accent-clicked': createColorDefinition('surface-accent-clicked'),
|
|
'surface-accent-secondary': createColorDefinition('surface-accent-secondary'),
|
|
'surface-accent-secondary-hover': createColorDefinition('surface-accent-secondary-hover'),
|
|
'surface-accent-secondary-clicked': createColorDefinition('surface-accent-secondary-clicked'),
|
|
'surface-accent-selected': createColorDefinition('surface-accent-selected'),
|
|
'surface-input': createColorDefinition('surface-input'),
|
|
|
|
// Text colors (semantic)
|
|
primary: createColorDefinition('text-primary'),
|
|
secondary: createColorDefinition('text-secondary'),
|
|
tertiary: createColorDefinition('text-tertiary'),
|
|
hint: createColorDefinition('text-hint'),
|
|
disabled: createColorDefinition('text-disabled'),
|
|
emphasis: createColorDefinition('text-emphasis'),
|
|
accent: createColorDefinition('text-accent'),
|
|
|
|
// Inverse colors (computed from opposite theme)
|
|
'primary-inverse': createColorDefinition('text-primary-inverse'),
|
|
'secondary-inverse': createColorDefinition('text-secondary-inverse'),
|
|
'tertiary-inverse': createColorDefinition('text-tertiary-inverse'),
|
|
'emphasis-inverse': createColorDefinition('text-emphasis-inverse'),
|
|
'hint-inverse': createColorDefinition('text-hint-inverse'),
|
|
'disabled-inverse': createColorDefinition('text-disabled-inverse'),
|
|
|
|
// Border colors (semantic)
|
|
'border-light': createColorDefinition('border-light'),
|
|
'border-normal': createColorDefinition('border-normal'),
|
|
'border-accent': createColorDefinition('border-accent'),
|
|
'border-selected': createColorDefinition('border-selected'),
|
|
|
|
// Reserved colors (semantic)
|
|
ai: createColorDefinition('reserved-ai'),
|
|
'ai-inverse': createColorDefinition('reserved-ai-inverse'),
|
|
|
|
// Surface inverse colors (computed from opposite theme)
|
|
'surface-inverse': createColorDefinition('surface-primary-inverse'),
|
|
'surface-secondary-inverse': createColorDefinition('surface-secondary-inverse'),
|
|
'surface-hover-inverse': createColorDefinition('surface-hover-inverse'),
|
|
'surface-disabled-inverse': createColorDefinition('surface-disabled-inverse'),
|
|
'surface-selected-inverse': createColorDefinition('surface-selected-inverse'),
|
|
|
|
// Component colors
|
|
'component-virtual-node': createColorDefinition('component-virtual-node'),
|
|
|
|
// Design token colors
|
|
'light-blue': `rgb(${primitives['light-blue']})`,
|
|
'deep-blue': {
|
|
50: `rgb(${primitives['deep-blue-50']})`,
|
|
100: `rgb(${primitives['deep-blue-100']})`,
|
|
200: `rgb(${primitives['deep-blue-200']})`,
|
|
300: `rgb(${primitives['deep-blue-300']})`,
|
|
400: `rgb(${primitives['deep-blue-400']})`,
|
|
500: `rgb(${primitives['deep-blue-500']})`,
|
|
600: `rgb(${primitives['deep-blue-600']})`,
|
|
700: `rgb(${primitives['deep-blue-700']})`,
|
|
800: `rgb(${primitives['deep-blue-800']})`,
|
|
900: `rgb(${primitives['deep-blue-900']})`
|
|
},
|
|
red: {
|
|
50: `rgb(${primitives['red-50']})`,
|
|
100: `rgb(${primitives['red-100']})`,
|
|
200: `rgb(${primitives['red-200']})`,
|
|
300: `rgb(${primitives['red-300']})`,
|
|
400: `rgb(${primitives['red-400']})`,
|
|
500: `rgb(${primitives['red-500']})`,
|
|
600: `rgb(${primitives['red-600']})`,
|
|
700: `rgb(${primitives['red-700']})`,
|
|
800: `rgb(${primitives['red-800']})`,
|
|
900: `rgb(${primitives['red-900']})`,
|
|
950: `rgb(${primitives['red-950']})`
|
|
},
|
|
blue: {
|
|
50: `rgb(${primitives['blue-50']})`,
|
|
100: `rgb(${primitives['blue-100']})`,
|
|
200: `rgb(${primitives['blue-200']})`,
|
|
300: `rgb(${primitives['blue-300']})`,
|
|
400: `rgb(${primitives['blue-400']})`,
|
|
500: `rgb(${primitives['blue-500']})`,
|
|
600: `rgb(${primitives['blue-600']})`,
|
|
700: `rgb(${primitives['blue-700']})`,
|
|
800: `rgb(${primitives['blue-800']})`,
|
|
900: `rgb(${primitives['blue-900']})`,
|
|
950: `rgb(${primitives['blue-950']})`
|
|
},
|
|
green: {
|
|
50: `rgb(${primitives['green-50']})`,
|
|
100: `rgb(${primitives['green-100']})`,
|
|
200: `rgb(${primitives['green-200']})`,
|
|
300: `rgb(${primitives['green-300']})`,
|
|
400: `rgb(${primitives['green-400']})`,
|
|
500: `rgb(${primitives['green-500']})`,
|
|
600: `rgb(${primitives['green-600']})`,
|
|
700: `rgb(${primitives['green-700']})`,
|
|
800: `rgb(${primitives['green-800']})`,
|
|
900: `rgb(${primitives['green-900']})`,
|
|
950: `rgb(${primitives['green-950']})`
|
|
},
|
|
orange: {
|
|
50: `rgb(${primitives['orange-50']})`,
|
|
100: `rgb(${primitives['orange-100']})`,
|
|
200: `rgb(${primitives['orange-200']})`,
|
|
300: `rgb(${primitives['orange-300']})`,
|
|
400: `rgb(${primitives['orange-400']})`,
|
|
500: `rgb(${primitives['orange-500']})`,
|
|
600: `rgb(${primitives['orange-600']})`,
|
|
700: `rgb(${primitives['orange-700']})`,
|
|
800: `rgb(${primitives['orange-800']})`,
|
|
900: `rgb(${primitives['orange-900']})`,
|
|
950: `rgb(${primitives['orange-950']})`
|
|
},
|
|
purple: {
|
|
50: `rgb(${primitives['purple-50']})`,
|
|
100: `rgb(${primitives['purple-100']})`,
|
|
200: `rgb(${primitives['purple-200']})`,
|
|
300: `rgb(${primitives['purple-300']})`,
|
|
400: `rgb(${primitives['purple-400']})`,
|
|
500: `rgb(${primitives['purple-500']})`,
|
|
600: `rgb(${primitives['purple-600']})`,
|
|
700: `rgb(${primitives['purple-700']})`,
|
|
800: `rgb(${primitives['purple-800']})`,
|
|
900: `rgb(${primitives['purple-900']})`,
|
|
950: `rgb(${primitives['purple-950']})`
|
|
},
|
|
pink: {
|
|
50: `rgb(${primitives['pink-50']})`,
|
|
100: `rgb(${primitives['pink-100']})`,
|
|
200: `rgb(${primitives['pink-200']})`,
|
|
300: `rgb(${primitives['pink-300']})`,
|
|
400: `rgb(${primitives['pink-400']})`,
|
|
500: `rgb(${primitives['pink-500']})`,
|
|
600: `rgb(${primitives['pink-600']})`,
|
|
700: `rgb(${primitives['pink-700']})`,
|
|
800: `rgb(${primitives['pink-800']})`,
|
|
900: `rgb(${primitives['pink-900']})`,
|
|
950: `rgb(${primitives['pink-950']})`
|
|
},
|
|
lime: {
|
|
50: `rgb(${primitives['lime-50']})`,
|
|
100: `rgb(${primitives['lime-100']})`,
|
|
200: `rgb(${primitives['lime-200']})`,
|
|
300: `rgb(${primitives['lime-300']})`,
|
|
400: `rgb(${primitives['lime-400']})`,
|
|
500: `rgb(${primitives['lime-500']})`,
|
|
600: `rgb(${primitives['lime-600']})`,
|
|
700: `rgb(${primitives['lime-700']})`,
|
|
800: `rgb(${primitives['lime-800']})`,
|
|
900: `rgb(${primitives['lime-900']})`,
|
|
950: `rgb(${primitives['lime-950']})`
|
|
},
|
|
yellow: {
|
|
50: `rgb(${primitives['yellow-50']})`,
|
|
100: `rgb(${primitives['yellow-100']})`,
|
|
200: `rgb(${primitives['yellow-200']})`,
|
|
300: `rgb(${primitives['yellow-300']})`,
|
|
400: `rgb(${primitives['yellow-400']})`,
|
|
500: `rgb(${primitives['yellow-500']})`,
|
|
600: `rgb(${primitives['yellow-600']})`,
|
|
700: `rgb(${primitives['yellow-700']})`,
|
|
800: `rgb(${primitives['yellow-800']})`,
|
|
900: `rgb(${primitives['yellow-900']})`,
|
|
950: `rgb(${primitives['yellow-950']})`
|
|
},
|
|
magenta: {
|
|
100: `rgb(${primitives['magenta-100']})`,
|
|
200: `rgb(${primitives['magenta-200']})`,
|
|
300: `rgb(${primitives['magenta-300']})`,
|
|
400: `rgb(${primitives['magenta-400']})`,
|
|
500: `rgb(${primitives['magenta-500']})`,
|
|
600: `rgb(${primitives['magenta-600']})`,
|
|
700: `rgb(${primitives['magenta-700']})`,
|
|
800: `rgb(${primitives['magenta-800']})`,
|
|
900: `rgb(${primitives['magenta-900']})`,
|
|
950: `rgb(${primitives['magenta-950']})`
|
|
},
|
|
slate: {
|
|
50: '#f8fafc',
|
|
100: '#f1f5f9',
|
|
200: '#e2e8f0',
|
|
300: '#cbd5e1',
|
|
400: '#94a3b8',
|
|
500: '#64748b',
|
|
600: '#475569',
|
|
700: '#334155',
|
|
800: '#1e293b',
|
|
900: '#0f172a'
|
|
},
|
|
zinc: {
|
|
50: '#fafafa',
|
|
100: '#f4f4f5',
|
|
200: '#e4e4e7',
|
|
300: '#d4d4d8',
|
|
400: '#a1a1aa',
|
|
500: '#71717a',
|
|
600: '#52525b',
|
|
700: '#3f3f46',
|
|
800: '#27272a',
|
|
900: '#18181b'
|
|
},
|
|
neutral: {
|
|
50: '#fafafa',
|
|
100: '#f5f5f5',
|
|
200: '#e5e5e5',
|
|
300: '#d4d4d4',
|
|
400: '#a3a3a3',
|
|
500: '#737373',
|
|
600: '#525252',
|
|
700: '#404040',
|
|
800: '#262626',
|
|
900: '#171717'
|
|
},
|
|
stone: {
|
|
50: '#fafaf9',
|
|
100: '#f5f5f4',
|
|
200: '#e7e5e4',
|
|
300: '#d6d3d1',
|
|
400: '#a8a29e',
|
|
500: '#78716c',
|
|
600: '#57534e',
|
|
700: '#44403c',
|
|
800: '#292524',
|
|
900: '#1c1917'
|
|
},
|
|
amber: {
|
|
50: '#fffbeb',
|
|
100: '#fef3c7',
|
|
200: '#fde68a',
|
|
300: '#fcd34d',
|
|
400: '#fbbf24',
|
|
500: '#f59e0b',
|
|
600: '#d97706',
|
|
700: '#b45309',
|
|
800: '#92400e',
|
|
900: '#78350f'
|
|
},
|
|
emerald: {
|
|
50: '#ecfdf5',
|
|
100: '#d1fae5',
|
|
200: '#a7f3d0',
|
|
300: '#6ee7b7',
|
|
400: '#34d399',
|
|
500: '#10b981',
|
|
600: '#059669',
|
|
700: '#047857',
|
|
800: '#065f46',
|
|
900: '#064e3b'
|
|
},
|
|
teal: {
|
|
50: '#f0fdfa',
|
|
100: '#ccfbf1',
|
|
200: '#99f6e4',
|
|
300: '#5eead4',
|
|
400: '#2dd4bf',
|
|
500: '#14b8a6',
|
|
600: '#0d9488',
|
|
700: '#0f766e',
|
|
800: '#115e59',
|
|
900: '#134e4a'
|
|
},
|
|
cyan: {
|
|
50: '#ecfeff',
|
|
100: '#cffafe',
|
|
200: '#a5f3fc',
|
|
300: '#67e8f9',
|
|
400: '#22d3ee',
|
|
500: '#06b6d4',
|
|
600: '#0891b2',
|
|
700: '#0e7490',
|
|
800: '#155e75',
|
|
900: '#164e63'
|
|
},
|
|
sky: {
|
|
50: '#f0f9ff',
|
|
100: '#e0f2fe',
|
|
200: '#bae6fd',
|
|
300: '#7dd3fc',
|
|
400: '#38bdf8',
|
|
500: '#0ea5e9',
|
|
600: '#0284c7',
|
|
700: '#0369a1',
|
|
800: '#075985',
|
|
900: '#0c4a6e'
|
|
},
|
|
violet: {
|
|
50: '#f5f3ff',
|
|
100: '#ede9fe',
|
|
200: '#ddd6fe',
|
|
300: '#c4b5fd',
|
|
400: '#a78bfa',
|
|
500: '#8b5cf6',
|
|
600: '#7c3aed',
|
|
700: '#6d28d9',
|
|
800: '#5b21b6',
|
|
900: '#4c1d95'
|
|
},
|
|
fuchsia: {
|
|
50: '#fdf4ff',
|
|
100: '#fae8ff',
|
|
200: '#f5d0fe',
|
|
300: '#f0abfc',
|
|
400: '#e879f9',
|
|
500: '#d946ef',
|
|
600: '#c026d3',
|
|
700: '#a21caf',
|
|
800: '#86198f',
|
|
900: '#701a75'
|
|
},
|
|
rose: {
|
|
50: '#fff1f2',
|
|
100: '#ffe4e6',
|
|
200: '#fecdd3',
|
|
300: '#fda4af',
|
|
400: '#fb7185',
|
|
500: '#f43f5e',
|
|
600: '#e11d48',
|
|
700: '#be123c',
|
|
800: '#9f1239',
|
|
900: '#881337'
|
|
},
|
|
gray: {
|
|
50: '#f9fafb',
|
|
100: '#f3f4f6',
|
|
200: '#e5e7eb',
|
|
300: '#d1d5db',
|
|
400: '#9ca3af',
|
|
500: '#6b7280',
|
|
600: '#4b5563',
|
|
700: '#374151',
|
|
800: '#1f2937',
|
|
900: '#111827'
|
|
},
|
|
indigo: {
|
|
50: '#eef2ff',
|
|
100: '#e0e7ff',
|
|
200: '#c7d2fe',
|
|
300: '#a5b4fc',
|
|
400: '#818cf8',
|
|
500: '#6366f1',
|
|
600: '#4f46e5',
|
|
700: '#4338ca',
|
|
800: '#3730a3',
|
|
900: '#312e81'
|
|
},
|
|
frost: {
|
|
50: '#f5f7fa',
|
|
100: '#eaeef4',
|
|
200: '#cfd9e8',
|
|
300: '#a6bad3',
|
|
400: '#7594bb',
|
|
500: '#5e81ac',
|
|
600: '#415f88',
|
|
700: '#364d6e',
|
|
800: '#2f425d',
|
|
900: '#2b394f',
|
|
950: '#1d2534'
|
|
},
|
|
marine: {
|
|
50: '#E9E9F4',
|
|
100: '#859AC7',
|
|
200: '#586F9E',
|
|
300: '#4A5F8A',
|
|
400: '#394A6D',
|
|
500: '#323F5B'
|
|
},
|
|
nord: {
|
|
0: '#2E3440',
|
|
100: '#3B4252',
|
|
200: '#434C5E',
|
|
300: '#4C566A',
|
|
400: '#D8DEE9',
|
|
500: '#E5E9F0',
|
|
600: '#ECEFF4',
|
|
700: '#8FBCBB',
|
|
800: '#88C0D0',
|
|
900: '#81A1C1',
|
|
950: '#5E81AC'
|
|
}
|
|
},
|
|
fontFamily: {
|
|
// add double quotes if there is space in font name
|
|
main: ['Inter', 'sans-serif'],
|
|
mono: [
|
|
'ui-monospace',
|
|
'SFMono-Regular',
|
|
'Menlo',
|
|
'Monaco',
|
|
'Consolas',
|
|
'"Liberation Mono"',
|
|
'"Courier New"',
|
|
'monospace'
|
|
]
|
|
},
|
|
extend: {
|
|
border: {
|
|
color: 'red'
|
|
},
|
|
borderRadius: {
|
|
component: '0.250rem'
|
|
},
|
|
maxHeight: {
|
|
'1/2': '50vh',
|
|
'2/3': '66vh',
|
|
'3/4': '75vh'
|
|
},
|
|
minWidth: {
|
|
'1/4': '25%',
|
|
'1/3': '33%',
|
|
'1/2': '50%',
|
|
'2/3': '66%',
|
|
'3/4': '75%'
|
|
},
|
|
minHeight: {
|
|
'1/2': '50vh'
|
|
},
|
|
height: {
|
|
'2/3': '66vh'
|
|
},
|
|
transitionProperty: {
|
|
height: 'height'
|
|
},
|
|
fontSize: {
|
|
'2xs': '0.7rem',
|
|
'3xs': '0.65rem'
|
|
},
|
|
screens: {
|
|
fhd: '1900px',
|
|
qhd: '2500px',
|
|
'4k': '3800px'
|
|
},
|
|
dropShadow: {
|
|
base: ['0 2px 1px rgba(0, 0, 0, 0.06)', '0 2px 2px rgba(0, 0, 0, 0.1)']
|
|
},
|
|
animation: {
|
|
'spin-counter-clockwise': 'spin-counter-clockwise 1s linear infinite',
|
|
'zoom-in': 'zoom-in 0.25s ease-in-out',
|
|
'fade-out': 'fade-out 1s ease-in-out'
|
|
},
|
|
keyframes: {
|
|
'spin-counter-clockwise': {
|
|
to: { transform: 'rotate(-360deg)' }
|
|
},
|
|
'zoom-in': {
|
|
'0%': { transform: 'scale(0.95)' },
|
|
'100%': { transform: 'scale(1)' }
|
|
},
|
|
'fade-out': {
|
|
'0%': { opacity: '1' },
|
|
'100%': { opacity: '0' }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
plugins: [
|
|
require('@tailwindcss/forms'),
|
|
require('@tailwindcss/typography'),
|
|
plugin(({ addBase, addComponents, addUtilities, theme }) => {
|
|
let lightColorVariables = Object.fromEntries([
|
|
...Object.entries(tokens.light).map(([key, value]) => [`--color-${key}`, value]),
|
|
...Object.entries(tokens.dark).map(([key, value]) => [`--color-${key}-inverse`, value])
|
|
])
|
|
let darkColorVariables = Object.fromEntries([
|
|
...Object.entries(tokens.dark).map(([key, value]) => [`--color-${key}`, value]),
|
|
...Object.entries(tokens.light).map(([key, value]) => [`--color-${key}-inverse`, value])
|
|
])
|
|
|
|
addBase({
|
|
html: {
|
|
fontFamily: theme('fontFamily.main'),
|
|
fontSize: theme('fontSize.base'),
|
|
fontWeight: theme('fontWeight.normal'),
|
|
|
|
...lightColorVariables,
|
|
backgroundColor: 'rgb(var(--color-surface-primary))',
|
|
color: 'rgb(var(--color-text-primary))',
|
|
|
|
'--vscode-editorSuggestWidget-background': '#f3f3f3',
|
|
'--vscode-editorHoverWidget-foreground': '#616161',
|
|
'--vscode-editorHoverWidget-border': '#c8c8c8',
|
|
'--vscode-editorHoverWidget-statusBarBackground': '#e7e7e7',
|
|
'--vscode-editorSuggestWidget-foreground': '#eeffff',
|
|
'--vscode-editorSuggestWidget-highlightForeground': '#80cbc4',
|
|
'--vscode-editorSuggestWidget-selectedBackground': 'rgba(0, 0, 0, 0.31)',
|
|
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: theme('fontSize.lg')
|
|
},
|
|
|
|
'&.dark': {
|
|
backgroundColor: `rgb(${tokens.dark['surface-primary']})`,
|
|
color: `rgb(${tokens.dark['text-primary']})`,
|
|
|
|
...darkColorVariables,
|
|
|
|
'--vscode-editorSuggestWidget-background': '#252526',
|
|
'--vscode-editorHoverWidget-foreground': '#cccccc',
|
|
'--vscode-editorHoverWidget-border': '#454545',
|
|
'--vscode-editorHoverWidget-statusBarBackground': '#2c2c2d'
|
|
}
|
|
},
|
|
h1: {
|
|
fontSize: '24px',
|
|
fontWeight: theme('fontWeight.extrabold'),
|
|
lineHeight: '1.05',
|
|
[`@media (min-width: ${theme('screens.lg')})`]: {
|
|
fontSize: '26px'
|
|
},
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '29px'
|
|
},
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '34px'
|
|
}
|
|
},
|
|
h2: {
|
|
fontSize: '20px',
|
|
fontWeight: theme('fontWeight.extrabold'),
|
|
lineHeight: '1.1',
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '22px'
|
|
},
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '25px'
|
|
}
|
|
},
|
|
mark: {
|
|
backgroundColor: theme('colors.yellow.200'),
|
|
borderRadius: theme('borderRadius.sm')
|
|
},
|
|
h3: {
|
|
fontSize: '18px',
|
|
fontWeight: theme('fontWeight.bold'),
|
|
lineHeight: '1.2',
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '20px'
|
|
},
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '22px'
|
|
}
|
|
},
|
|
h4: {
|
|
fontSize: '18px',
|
|
fontWeight: theme('fontWeight.semibold'),
|
|
lineHeight: '1.3',
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '20px'
|
|
}
|
|
},
|
|
h5: {
|
|
fontSize: '16px',
|
|
fontWeight: theme('fontWeight.semibold'),
|
|
lineHeight: '1.5',
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '18px'
|
|
}
|
|
},
|
|
h6: {
|
|
fontSize: '16px',
|
|
fontWeight: theme('fontWeight.medium'),
|
|
lineHeight: '1.5',
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '18px'
|
|
}
|
|
},
|
|
button: {
|
|
fontWeight: theme('fontWeight.semibold')
|
|
},
|
|
a: {
|
|
color: 'rgb(var(--color-text-accent))'
|
|
},
|
|
'.dark input::placeholder': {
|
|
color: theme('colors.gray.400')
|
|
},
|
|
"[type='checkbox']:checked": {
|
|
backgroundImage: `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='black' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`
|
|
},
|
|
".dark [type='checkbox']:checked": {
|
|
backgroundImage: `url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")`
|
|
},
|
|
'input:not(.windmillapp):not(.no-default-style),input[type="text"]:not(.windmillapp):not(.no-default-style),input[type="email"]:not(.windmillapp):not(.no-default-style),input[type="url"]:not(.windmillapp):not(.no-default-style),input[type="password"]:not(.windmillapp):not(.no-default-style),input[type="number"]:not(.windmillapp):not(.no-default-style),input[type="date"]:not(.windmillapp):not(.no-default-style),input[type="datetime-local"]:not(.windmillapp):not(.no-default-style),input[type="month"]:not(.windmillapp):not(.no-default-style),input[type="search"]:not(.windmillapp):not(.no-default-style),input[type="tel"]:not(.windmillapp):not(.no-default-style),input[type="time"]:not(.windmillapp):not(.no-default-style),input[type="week"]:not(.windmillapp):not(.no-default-style),textarea:not(.windmillapp):not(.no-default-style):not(.monaco-mouse-cursor-text),select:not(.windmillapp):not(.no-default-style)':
|
|
{
|
|
display: 'block',
|
|
fontSize: theme('fontSize.xs'),
|
|
width: '100%',
|
|
padding: `${theme('spacing.1')} ${theme('spacing.2')}`,
|
|
backgroundColor: 'rgb(var(--color-surface-input))' + ' !important',
|
|
border: '1px solid rgb(var(--color-border-light))',
|
|
borderRadius: theme('borderRadius.md'),
|
|
'&:hover': {
|
|
borderColor: 'rgb(var(--color-border-selected) / 0.5)'
|
|
},
|
|
'&:focus': {
|
|
borderColor: 'rgb(var(--color-border-selected))',
|
|
outline: 'none',
|
|
boxShadow: 'none'
|
|
},
|
|
'&:disabled,[disabled]': {
|
|
backgroundColor: 'rgba(var(--color-surface-disabled) / 0.2)' + ' !important'
|
|
}
|
|
},
|
|
|
|
'button:disabled,button[disabled=true],a:disabled,a[disabled=true]': {
|
|
pointerEvents: 'none',
|
|
cursor: 'default',
|
|
opacity: '0.90'
|
|
},
|
|
'pre code.hljs': {
|
|
padding: '0px !important',
|
|
fontFamily: theme('fontFamily.mono'),
|
|
fontSize: theme('fontSize.xs') + ' !important',
|
|
lineHeight: theme('lineHeight.4') + ' !important'
|
|
},
|
|
'.h1-textarea': {
|
|
fontSize: '24px !important',
|
|
fontWeight: `${theme('fontWeight.extrabold')} !important`,
|
|
lineHeight: '1.05 !important',
|
|
color: theme('!colors.gray.800'),
|
|
[`@media (min-width: ${theme('screens.lg')})`]: {
|
|
fontSize: '26px !important'
|
|
},
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '29px !important'
|
|
},
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '34px !important'
|
|
}
|
|
},
|
|
'.h3-textarea': {
|
|
fontSize: '18px !important',
|
|
fontWeight: `${theme('fontWeight.bold')} !important`,
|
|
lineHeight: '1.2 !important',
|
|
color: theme('!colors.gray.600'),
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '20px !important'
|
|
},
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '22px !important'
|
|
}
|
|
},
|
|
'.p-textarea': {
|
|
fontSize: '16px !important',
|
|
fontWeight: `${theme('fontWeight.normal')} !important`,
|
|
lineHeight: '1.5 !important',
|
|
color: theme('!colors.gray.600'),
|
|
[`@media (min-width: ${theme('screens.fhd')})`]: {
|
|
fontSize: '18px !important'
|
|
},
|
|
|
|
[`@media (min-width: ${theme('screens.qhd')})`]: {
|
|
fontSize: '20px !important'
|
|
}
|
|
},
|
|
input: {
|
|
backgroundColor: 'rgb(var(--color-surface-secondary) / 30%) !important'
|
|
},
|
|
textarea: {
|
|
backgroundColor: 'rgb(var(--color-surface-secondary) / 30%) !important'
|
|
}
|
|
})
|
|
addComponents({
|
|
'.table-custom': {
|
|
'& th': {
|
|
paddingTop: theme('spacing.2'),
|
|
paddingRight: theme('spacing.1'),
|
|
paddingLeft: theme('spacing.1'),
|
|
paddingBottom: theme('spacing.2'),
|
|
fontSize: theme('fontSize.2xs'),
|
|
textAlign: 'left',
|
|
fontWeight: theme('fontWeight.normal'),
|
|
color: 'rgb(var(--color-text-secondary))',
|
|
textTransform: 'none'
|
|
},
|
|
'.dark & th': {
|
|
color: 'rgb(var(--color-text-secondary))'
|
|
},
|
|
'& td': {
|
|
paddingLeft: theme('spacing.1'),
|
|
paddingRight: theme('spacing.1'),
|
|
paddingTop: theme('spacing.2'),
|
|
paddingBottom: theme('spacing.2'),
|
|
fontSize: theme('fontSize.xs'),
|
|
color: 'rgb(var(--color-text-primary))'
|
|
},
|
|
'.dark & td ': {
|
|
color: 'rgb(var(--color-text-primary))'
|
|
},
|
|
'& tbody > :not([hidden]) ~ :not([hidden])': {
|
|
borderTop: `1px solid rgb(var(--color-border-light))`
|
|
},
|
|
'.dark & tbody > :not([hidden]) ~ :not([hidden])': {
|
|
borderTop: `1px solid rgb(var(--color-border-light))`
|
|
},
|
|
'& tbody > tr:hover': {
|
|
backgroundColor: 'rgb(var(--color-surface-hover))'
|
|
},
|
|
'.dark & tbody > tr:hover': {
|
|
backgroundColor: 'rgb(var(--color-surface-hover))'
|
|
}
|
|
},
|
|
'.commit-hash': {
|
|
fontSize: theme('fontSize.2xs'),
|
|
color: theme('colors.gray.500'),
|
|
backgroundColor: theme('colors.gray.200'),
|
|
fontFamily: theme('fontFamily.mono')
|
|
},
|
|
'.input-error': {
|
|
borderColor: `${theme('colors.red.500')} !important`
|
|
},
|
|
'.box': {
|
|
borderWidth: '1px',
|
|
borderRadius: theme('borderRadius.sm'),
|
|
boxShadow: theme('boxShadow.sm'),
|
|
padding: theme('spacing.4')
|
|
},
|
|
'.animate-skeleton': {
|
|
animation: theme('animation.pulse'),
|
|
backgroundColor: theme('colors.blue.100'),
|
|
borderRadius: theme('borderRadius.DEFAULT')
|
|
},
|
|
'.text-black-gradient': {
|
|
color: 'transparent',
|
|
backgroundClip: 'text',
|
|
backgroundImage: `linear-gradient(to right, ${theme('colors.black')}, ${theme(
|
|
'colors.gray.600'
|
|
)})`
|
|
},
|
|
'.splitpanes__pane': {
|
|
backgroundColor: `rgb(${tokens.light['surface-primary']})` + ' !important',
|
|
overflow: 'auto !important'
|
|
},
|
|
'.dark .splitpanes__pane': {
|
|
backgroundColor: `rgb(${tokens.dark['surface-primary']})` + ' !important',
|
|
overflow: 'auto !important'
|
|
},
|
|
'.splitpanes__splitter': {
|
|
backgroundColor: `rgb(${tokens.light['border-light']})` + ' !important',
|
|
margin: '0 !important',
|
|
border: 'none !important',
|
|
'&::after': {
|
|
backgroundColor: `rgb(${tokens.light['border-light']})` + ' !important',
|
|
margin: '0 !important',
|
|
transform: 'none !important',
|
|
transition: 'opacity 200ms !important',
|
|
opacity: '0',
|
|
'--splitter-hover-size': '5px',
|
|
'--splitter-hover-adjustment': '-2px'
|
|
},
|
|
'&:hover::after': {
|
|
opacity: '1',
|
|
zIndex: '1001 !important'
|
|
}
|
|
},
|
|
'.dark .splitpanes__splitter': {
|
|
backgroundColor: `rgb(${tokens.dark['border-light']})` + ' !important',
|
|
'&::after': {
|
|
backgroundColor: `rgb(${tokens.dark['border-light']})` + ' !important'
|
|
}
|
|
},
|
|
'.splitpanes--vertical>.splitpanes__splitter': {
|
|
width: '1px !important',
|
|
'&::before': {
|
|
left: '1px !important',
|
|
width: '0px !important',
|
|
marginLeft: '0 !important'
|
|
},
|
|
'&::after': {
|
|
top: '0 !important',
|
|
height: '100% !important',
|
|
left: 'var(--splitter-hover-adjustment) !important',
|
|
width: 'var(--splitter-hover-size) !important'
|
|
}
|
|
},
|
|
'.splitpanes--horizontal>.splitpanes__splitter': {
|
|
height: '1px !important',
|
|
'&::before': {
|
|
top: '1px !important',
|
|
height: '0px !important',
|
|
marginTop: '0 !important'
|
|
},
|
|
'&::after': {
|
|
top: 'var(--splitter-hover-adjustment) !important',
|
|
height: 'var(--splitter-hover-size) !important',
|
|
left: '0 !important',
|
|
width: '100% !important'
|
|
}
|
|
},
|
|
// Windmill Tab classes
|
|
|
|
'.wm-tab-active': {
|
|
borderColor: `rgb(${tokens.dark['border-light']})`,
|
|
color: `rgb(${tokens.light['text-primary']})`
|
|
},
|
|
|
|
'.dark .wm-tab-active': {
|
|
borderColor: `rgb(${tokens.dark['border-light']})`,
|
|
color: `rgb(${tokens.dark['text-primary']})`
|
|
}
|
|
})
|
|
|
|
addUtilities({
|
|
'.separator': {
|
|
backgroundColor: `${`rgb(${tokens.dark['border-light']})`} !important`
|
|
},
|
|
'.dark .separator': {
|
|
backgroundColor: `${`rgb(${tokens.dark['border-light']})`} !important`
|
|
},
|
|
'.center-center': {
|
|
display: 'flex',
|
|
justifyContent: 'center',
|
|
alignItems: 'center'
|
|
},
|
|
'.inner-border': {
|
|
boxShadow: `inset 0 0 0 1px ${`rgb(${tokens.dark['border-light']})`}`
|
|
},
|
|
'.dark .inner-border': {
|
|
boxShadow: `inset 0 0 0 1px ${`rgb(${tokens.dark['border-light']})`}`
|
|
},
|
|
'.z5000': {
|
|
zIndex: '5000 !important'
|
|
},
|
|
'.ellipsize': {
|
|
overflow: 'hidden',
|
|
whiteSpace: 'nowrap',
|
|
textOverflow: 'ellipsis'
|
|
},
|
|
/** Set the '-webkit-line-clamp' property to the desired number of lines.
|
|
*
|
|
* Eg.: `class="ellipsize-multi-line [-webkit-line-clamp:3]"`
|
|
*/
|
|
'.ellipsize-multi-line': {
|
|
display: '-webkit-box',
|
|
'-webkit-box-orient': 'vertical',
|
|
overflow: 'hidden'
|
|
},
|
|
'.disabled': {
|
|
pointerEvents: 'none',
|
|
cursor: 'default',
|
|
filter: 'grayscale(1)'
|
|
},
|
|
'.scrollbar-hidden': {
|
|
'-ms-overflow-style': 'none',
|
|
'scrollbar-width': 'none',
|
|
'&::-webkit-scrollbar': {
|
|
display: 'none',
|
|
width: '0px'
|
|
}
|
|
}
|
|
})
|
|
})
|
|
],
|
|
darkMode: 'class'
|
|
}
|
|
|
|
module.exports = config
|
|
|
|
/**
|
|
* @template T
|
|
* @param {T} obj
|
|
* @returns {T}
|
|
*/
|
|
function makeRgb(obj) {
|
|
const result = {}
|
|
for (const [key, value] of Object.entries(obj)) {
|
|
if (typeof value === 'object' && value !== null) {
|
|
result[key] = makeRgb(value)
|
|
} else if (typeof value === 'string' && value.startsWith('#')) {
|
|
result[key] = hexToRgb(value)
|
|
} else {
|
|
result[key] = value
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
|
|
function hexToRgb(hex) {
|
|
// Remove '#' symbol from the beginning of the hex value
|
|
hex = hex.replace('#', '')
|
|
|
|
// Convert the hex value to decimal
|
|
const r = parseInt(hex.substring(0, 2), 16)
|
|
const g = parseInt(hex.substring(2, 4), 16)
|
|
const b = parseInt(hex.substring(4, 6), 16)
|
|
|
|
// Check if hex has alpha channel (8 characters)
|
|
if (hex.length === 8) {
|
|
const a = parseInt(hex.substring(6, 8), 16) / 255
|
|
// Return RGB with alpha as decimal value for CSS
|
|
return `${r} ${g} ${b} / ${a.toFixed(3)}`
|
|
}
|
|
|
|
// Return the RGB string format without alpha
|
|
return `${r} ${g} ${b}`
|
|
}
|