import { invoke } from '@tauri-apps/api/core'; import { open } from '@tauri-apps/plugin-dialog'; import React from 'react'; import { useLocalStorage } from 'react-use'; import { useThemes } from '../../hooks/useThemes'; import { capitalize } from '../../lib/capitalize'; import { catppuccinMacchiato } from '../../lib/theme/themes/catppuccin'; import { githubLight } from '../../lib/theme/themes/github'; import { monokaiProDefault } from '../../lib/theme/themes/monokai-pro'; import { rosePineDefault } from '../../lib/theme/themes/rose-pine'; import { yaakDark } from '../../lib/theme/themes/yaak'; import { getThemeCSS } from '../../lib/theme/window'; import { Banner } from '../core/Banner'; import { Button } from '../core/Button'; import { Editor } from '../core/Editor'; import type { IconProps } from '../core/Icon'; import { Icon } from '../core/Icon'; import { IconButton } from '../core/IconButton'; import { InlineCode } from '../core/InlineCode'; import { Input } from '../core/Input'; import { Separator } from '../core/Separator'; import { HStack, VStack } from '../core/Stacks'; const buttonColors = [ 'primary', 'secondary', 'info', 'success', 'warning', 'danger', 'default', ] as const; const icons: IconProps['icon'][] = [ 'info', 'box', 'update', 'alert', 'arrowBigRightDash', 'download', 'copy', 'magicWand', 'settings', 'trash', 'sparkles', 'pencil', 'paste', 'search', 'sendHorizontal', ]; export function SettingsDesign() { const themes = useThemes(); const [exportDir, setExportDir] = useLocalStorage('theme_export_dir', null); const saveThemes = async () => { const dir = await open({ directory: true }); if (!dir) return; const allThemesCSS = themes.themes.map(getThemeCSS).join('\n\n'); const coreThemeCSS = [ yaakDark, catppuccinMacchiato, rosePineDefault, monokaiProDefault, githubLight, ] .map(getThemeCSS) .join('\n\n'); await invoke('cmd_write_file_dev', { pathname: dir + '/themes-all.css', contents: coreThemeCSS, }); await invoke('cmd_write_file_dev', { pathname: dir + '/themes-slim.css', contents: allThemesCSS, }); }; return (
{exportDir} } />
{buttonColors.map((c, i) => ( ))}
{buttonColors.map((c, i) => ( ))}
{icons.map((v, i) => ( ))}
Primary banner Secondary banner Danger banner Warning banner Success banner
); }