Core System

Das Core-Modul bildet das Fundament von Art.Works! Studio. Es stellt Theme, UI-Komponenten, Settings und Logging bereit.

Theme & Design System

Alle Farben sind zentral definiert in theme/colors.ts:

// Verwendung in Komponenten
import { colors } from '@/theme/colors';

<Box bg={colors.bg.card} color={colors.text.primary}>
  Content
</Box>

Wichtig: Niemals direkte Chakra-Farben wie gray.800 verwenden!

Farbpalette

Token Verwendung
colors.bg.primary Haupthintergrund
colors.bg.card Karten, Panels
colors.bg.hover Hover-States
colors.text.primary Haupttext
colors.text.secondary Sekundärtext
colors.accent.primary Akzentfarbe

Generic Components

Wiederverwendbare UI-Komponenten:

Component Zweck
GenericButtonBar Toolbar mit Search, Filter, Actions
GenericTabs Tab-Navigation
GenericGridItem Grid-Darstellung
GenericListItem Listen-Darstellung
FilterPanel Filter nach Labels/Tags

GenericButtonBar

<GenericButtonBar
  searchTerm={search}
  onSearchChange={setSearch}
  filterOptions={filters}
  createMenuItems={[
    { label: 'Neues Artwork', onClick: createArtwork },
    { label: 'Import', onClick: importItem }
  ]}
/>

Settings

Einstellungen werden in settings.json im Workspace gespeichert:

{
  "theme": "dark",
  "language": "de",
  "editor": {
    "fontSize": 14,
    "tabSize": 2
  },
  "grid": {
    "columns": 3,
    "rows": 2
  }
}

Zugriff auf Settings

const { settings, updateSetting } = useSettings();

// Lesen
const fontSize = settings.editor.fontSize;

// Schreiben
updateSetting('editor.fontSize', 16);

Logging

Zentrales Logging über LogService:

import { logger } from '@/services/log.service';

logger.info('Artwork geladen', { id: 'item-001' });
logger.warn('Veraltetes Format');
logger.error('Fehler beim Speichern', error);

Logs werden gespeichert in:

  • macOS: ~/Library/Application Support/Art.Works! Studio/logs/
  • Windows: %APPDATA%/Art.Works! Studio/logs/

IPC Communication

Main ↔ Renderer Kommunikation via IPC:

// Renderer (React)
const item = await window.api.catalog.getItem('item-001');

// Main Process
ipcMain.handle('catalog:get-item', async (event, itemId) => {
  return catalogService.getItem(itemId);
});