mirror of https://github.com/buster-so/buster.git
Update theme style injector
This commit is contained in:
parent
f20cf2812b
commit
6beb708138
|
@ -1,6 +1,6 @@
|
||||||
import { cn } from '@/lib/classMerge';
|
import { cn } from '@/lib/classMerge';
|
||||||
|
|
||||||
import ChartStackedBar from '../icons/NucleoIconOutlined/chart-stacked-bar';
|
import ChartStackedBar from '../icons/NucleoIconFilled/chart-line-2';
|
||||||
|
|
||||||
export type SkeletonElement =
|
export type SkeletonElement =
|
||||||
| 'toolbar'
|
| 'toolbar'
|
||||||
|
@ -112,8 +112,8 @@ export function ReportEditorSkeleton({
|
||||||
{/* Chart placeholder */}
|
{/* Chart placeholder */}
|
||||||
{elements.includes('chart') && (
|
{elements.includes('chart') && (
|
||||||
<div className="bg-muted flex h-48 w-full items-center justify-center rounded-lg">
|
<div className="bg-muted flex h-48 w-full items-center justify-center rounded-lg">
|
||||||
<div className="bg-muted-foreground/5 flex h-16 w-16 items-center justify-center rounded-lg">
|
<div className="bg-muted-foreground/3 mx-5 flex h-40 w-full items-center justify-center rounded-lg">
|
||||||
<div className="text-muted-foreground/40 flex h-16 w-16 items-center justify-center text-4xl">
|
<div className="text-muted-foreground/15 flex h-full w-full items-center justify-center text-[40px]">
|
||||||
<ChartStackedBar />
|
<ChartStackedBar />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
import { useMounted } from '@/hooks/useMount';
|
import { useMounted } from '@/hooks/useMount';
|
||||||
import { useThemesConfig } from './useThemesConfig';
|
import { useThemesConfig } from './useThemesConfig';
|
||||||
|
import { DEFAULT_COLOR_THEME, FONT_BASE_THEME } from './themes';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
export const ThemesStyle = React.memo(() => {
|
export const ThemesStyle = React.memo(() => {
|
||||||
const { activeTheme, BASE_THEME } = useThemesConfig();
|
const { activeTheme, FONT_BASE_THEME } = useThemesConfig();
|
||||||
const mounted = useMounted();
|
const mounted = useMounted();
|
||||||
|
|
||||||
if (!activeTheme || !mounted) {
|
if (!activeTheme || !mounted) {
|
||||||
|
@ -22,10 +23,6 @@ export const ThemesStyle = React.memo(() => {
|
||||||
${Object.entries(activeTheme.light)
|
${Object.entries(activeTheme.light)
|
||||||
.map(([key, value]) => `${key}: hsl(${value});`)
|
.map(([key, value]) => `${key}: hsl(${value});`)
|
||||||
.join('\n')}
|
.join('\n')}
|
||||||
|
|
||||||
${Object.entries(BASE_THEME)
|
|
||||||
.map(([key, value]) => `${key}: ${value};`)
|
|
||||||
.join('\n')}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark .themes-wrapper,
|
.dark .themes-wrapper,
|
||||||
|
|
|
@ -3,21 +3,21 @@
|
||||||
import { cn } from '@/lib/utils';
|
import { cn } from '@/lib/utils';
|
||||||
|
|
||||||
import { ThemesStyle } from './ThemeStyles';
|
import { ThemesStyle } from './ThemeStyles';
|
||||||
|
import { FONT_BASE_THEME, DEFAULT_COLOR_THEME } from './themes';
|
||||||
|
|
||||||
interface ThemeWrapperProps extends React.ComponentProps<'div'> {
|
interface ThemeWrapperProps extends React.ComponentProps<'div'> {
|
||||||
defaultTheme?: string;
|
defaultTheme?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DEFAULT_THEME_STYLE = {
|
||||||
|
...DEFAULT_COLOR_THEME,
|
||||||
|
...FONT_BASE_THEME
|
||||||
|
} as React.CSSProperties;
|
||||||
|
|
||||||
export function ThemeWrapper({ children, className, defaultTheme }: ThemeWrapperProps) {
|
export function ThemeWrapper({ children, className, defaultTheme }: ThemeWrapperProps) {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div
|
<div style={DEFAULT_THEME_STYLE} className={cn('themes-wrapper w-full', className)}>
|
||||||
className={cn(
|
|
||||||
// `theme-${defaultTheme || config.theme}`,
|
|
||||||
'themes-wrapper',
|
|
||||||
'w-full',
|
|
||||||
className
|
|
||||||
)}>
|
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
export const BASE_THEME = {
|
export const FONT_BASE_THEME = {
|
||||||
'--spacing': '0.25rem',
|
'--spacing': '0.25rem',
|
||||||
'--breakpoint-xl': '80rem',
|
'--breakpoint-xl': '80rem',
|
||||||
'--breakpoint-2xl': '96rem',
|
'--breakpoint-2xl': '96rem',
|
||||||
|
@ -39,6 +39,57 @@ export const BASE_THEME = {
|
||||||
'--leading-loose': '2'
|
'--leading-loose': '2'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const DEFAULT_COLOR_THEME = {
|
||||||
|
id: 'default-shadcn',
|
||||||
|
dark: {
|
||||||
|
accent: '240 3.7% 15.9%',
|
||||||
|
'accent-foreground': '0 0% 98%',
|
||||||
|
background: '240 10% 3.9%',
|
||||||
|
border: '240 3.7% 15.9%',
|
||||||
|
brand: '213.3 93.9% 67.8%',
|
||||||
|
card: '240 10% 3.9%',
|
||||||
|
'card-foreground': '0 0% 98%',
|
||||||
|
destructive: '0 62.8% 30.6%',
|
||||||
|
'destructive-foreground': '0 0% 98%',
|
||||||
|
foreground: '0 0% 98%',
|
||||||
|
highlight: '48 96% 53%',
|
||||||
|
input: '240 3.7% 15.9%',
|
||||||
|
muted: '240 3.7% 15.9%',
|
||||||
|
'muted-foreground': '240 5% 64.9%',
|
||||||
|
popover: '240 10% 3.9%',
|
||||||
|
'popover-foreground': '0 0% 98%',
|
||||||
|
primary: '0 0% 98%',
|
||||||
|
'primary-foreground': '240 5.9% 10%',
|
||||||
|
ring: '240 4.9% 83.9%',
|
||||||
|
secondary: '240 3.7% 15.9%',
|
||||||
|
'secondary-foreground': '0 0% 98%'
|
||||||
|
},
|
||||||
|
light: {
|
||||||
|
accent: '240 4.8% 95.9%',
|
||||||
|
'accent-foreground': '240 5.9% 10%',
|
||||||
|
background: '0 0% 100%',
|
||||||
|
border: '240 5.9% 90%',
|
||||||
|
brand: '217.2 91.2% 59.8%',
|
||||||
|
card: '0 0% 100%',
|
||||||
|
'card-foreground': '240 10% 3.9%',
|
||||||
|
destructive: '0 84.2% 60.2%',
|
||||||
|
'destructive-foreground': '0 0% 98%',
|
||||||
|
foreground: '240 10% 3.9%',
|
||||||
|
highlight: '47.9 95.8% 53.1%',
|
||||||
|
input: '240 5.9% 90%',
|
||||||
|
muted: '240 4.8% 95.9%',
|
||||||
|
'muted-foreground': '240 3.8% 46.1%',
|
||||||
|
popover: '0 0% 100%',
|
||||||
|
'popover-foreground': '240 10% 3.9%',
|
||||||
|
primary: '240 5.9% 10%',
|
||||||
|
'primary-foreground': '0 0% 98%',
|
||||||
|
ring: '240 10% 3.9%',
|
||||||
|
secondary: '240 4.8% 95.9%',
|
||||||
|
'secondary-foreground': '240 5.9% 10%'
|
||||||
|
},
|
||||||
|
name: 'Default'
|
||||||
|
} as const;
|
||||||
|
|
||||||
const _THEMES = {
|
const _THEMES = {
|
||||||
ayu: {
|
ayu: {
|
||||||
id: 'ayu',
|
id: 'ayu',
|
||||||
|
@ -190,56 +241,7 @@ const _THEMES = {
|
||||||
},
|
},
|
||||||
name: 'Default Palette'
|
name: 'Default Palette'
|
||||||
},
|
},
|
||||||
'default-shadcn': {
|
'default-shadcn': DEFAULT_COLOR_THEME,
|
||||||
id: 'default-shadcn',
|
|
||||||
dark: {
|
|
||||||
accent: '240 3.7% 15.9%',
|
|
||||||
'accent-foreground': '0 0% 98%',
|
|
||||||
background: '240 10% 3.9%',
|
|
||||||
border: '240 3.7% 15.9%',
|
|
||||||
brand: '213.3 93.9% 67.8%',
|
|
||||||
card: '240 10% 3.9%',
|
|
||||||
'card-foreground': '0 0% 98%',
|
|
||||||
destructive: '0 62.8% 30.6%',
|
|
||||||
'destructive-foreground': '0 0% 98%',
|
|
||||||
foreground: '0 0% 98%',
|
|
||||||
highlight: '48 96% 53%',
|
|
||||||
input: '240 3.7% 15.9%',
|
|
||||||
muted: '240 3.7% 15.9%',
|
|
||||||
'muted-foreground': '240 5% 64.9%',
|
|
||||||
popover: '240 10% 3.9%',
|
|
||||||
'popover-foreground': '0 0% 98%',
|
|
||||||
primary: '0 0% 98%',
|
|
||||||
'primary-foreground': '240 5.9% 10%',
|
|
||||||
ring: '240 4.9% 83.9%',
|
|
||||||
secondary: '240 3.7% 15.9%',
|
|
||||||
'secondary-foreground': '0 0% 98%'
|
|
||||||
},
|
|
||||||
light: {
|
|
||||||
accent: '240 4.8% 95.9%',
|
|
||||||
'accent-foreground': '240 5.9% 10%',
|
|
||||||
background: '0 0% 100%',
|
|
||||||
border: '240 5.9% 90%',
|
|
||||||
brand: '217.2 91.2% 59.8%',
|
|
||||||
card: '0 0% 100%',
|
|
||||||
'card-foreground': '240 10% 3.9%',
|
|
||||||
destructive: '0 84.2% 60.2%',
|
|
||||||
'destructive-foreground': '0 0% 98%',
|
|
||||||
foreground: '240 10% 3.9%',
|
|
||||||
highlight: '47.9 95.8% 53.1%',
|
|
||||||
input: '240 5.9% 90%',
|
|
||||||
muted: '240 4.8% 95.9%',
|
|
||||||
'muted-foreground': '240 3.8% 46.1%',
|
|
||||||
popover: '0 0% 100%',
|
|
||||||
'popover-foreground': '240 10% 3.9%',
|
|
||||||
primary: '240 5.9% 10%',
|
|
||||||
'primary-foreground': '0 0% 98%',
|
|
||||||
ring: '240 10% 3.9%',
|
|
||||||
secondary: '240 4.8% 95.9%',
|
|
||||||
'secondary-foreground': '240 5.9% 10%'
|
|
||||||
},
|
|
||||||
name: 'Default'
|
|
||||||
},
|
|
||||||
dune: {
|
dune: {
|
||||||
id: 'dune',
|
id: 'dune',
|
||||||
dark: {
|
dark: {
|
||||||
|
@ -594,7 +596,7 @@ export function themeColorsToCssVariables(colors: Record<string, string>): Recor
|
||||||
// `${cssVars["--primary"]} / ${100 - key * 20}%`
|
// `${cssVars["--primary"]} / ${100 - key * 20}%`
|
||||||
// }
|
// }
|
||||||
|
|
||||||
return { ...cssVars, ...BASE_THEME };
|
return { ...cssVars, ...FONT_BASE_THEME };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function themeColorNameToCssVariable(name: string) {
|
export function themeColorNameToCssVariable(name: string) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { create } from 'zustand';
|
import { create } from 'zustand';
|
||||||
import { THEMES, BASE_THEME, type Theme } from './themes';
|
import { THEMES, FONT_BASE_THEME, type Theme } from './themes';
|
||||||
|
|
||||||
const useThemesConfigStore = create<{
|
const useThemesConfigStore = create<{
|
||||||
activeTheme: Theme;
|
activeTheme: Theme;
|
||||||
|
@ -13,5 +13,5 @@ export function useThemesConfig() {
|
||||||
const activeTheme = useThemesConfigStore((state) => state.activeTheme);
|
const activeTheme = useThemesConfigStore((state) => state.activeTheme);
|
||||||
const setActiveTheme = useThemesConfigStore((state) => state.setActiveTheme);
|
const setActiveTheme = useThemesConfigStore((state) => state.setActiveTheme);
|
||||||
|
|
||||||
return { activeTheme, setActiveTheme, allThemes: THEMES, BASE_THEME };
|
return { activeTheme, setActiveTheme, allThemes: THEMES, FONT_BASE_THEME };
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue