Zum Hauptinhalt springen

API-Referenz

Diese Seite bietet eine detaillierte API-Referenz für alle Komponenten der Smolitux UI Bibliothek.

Core-Komponenten

Button

import { Button } from '@smolitux/core';

<Button
variant="primary"
size="md"
disabled={false}
onClick={() => console.log('Button geklickt')}
>
Klick mich
</Button>

Props

PropTypStandardBeschreibung
variant'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'danger''primary'Die Variante des Buttons
size'xs' | 'sm' | 'md' | 'lg' | 'xl''md'Die Größe des Buttons
disabledbooleanfalseDeaktiviert den Button
fullWidthbooleanfalseButton nimmt die volle Breite ein
leftIconReactNode-Icon links vom Text
rightIconReactNode-Icon rechts vom Text
isLoadingbooleanfalseZeigt einen Ladezustand an
loadingTextstring-Text während des Ladezustands
onClick(event: React.MouseEvent<HTMLButtonElement>) => void-Klick-Handler

Input

import { Input } from '@smolitux/core';
import { useState } from 'react';

// In einer Komponente:
const [email, setEmail] = useState('');

<Input
label="E-Mail"
type="email"
placeholder="name@beispiel.de"
value={email}
onChange={(e) => setEmail(e.target.value)}
error="Ungültige E-Mail-Adresse"
/>

Props

PropTypStandardBeschreibung
labelstring-Label für das Eingabefeld
type'text' | 'password' | 'email' | 'number' | 'tel' | 'url' | 'search''text'Typ des Eingabefelds
placeholderstring-Platzhaltertext
valuestring-Wert des Eingabefelds
defaultValuestring-Standardwert des Eingabefelds
onChange(event: React.ChangeEvent<HTMLInputElement>) => void-Änderungs-Handler
onBlur(event: React.FocusEvent<HTMLInputElement>) => void-Blur-Handler
onFocus(event: React.FocusEvent<HTMLInputElement>) => void-Focus-Handler
errorstring-Fehlermeldung
disabledbooleanfalseDeaktiviert das Eingabefeld
readOnlybooleanfalseSchreibgeschützt
requiredbooleanfalsePflichtfeld
size'sm' | 'md' | 'lg''md'Größe des Eingabefelds
leftElementReactNode-Element links im Eingabefeld
rightElementReactNode-Element rechts im Eingabefeld

Select

import { Select } from '@smolitux/core';
import { useState } from 'react';

// In einer Komponente:
const [selectedCountry, setSelectedCountry] = useState('de');

<Select
label="Land"
options={[
{ value: 'de', label: 'Deutschland' },
{ value: 'at', label: 'Österreich' },
{ value: 'ch', label: 'Schweiz' },
]}
value={selectedCountry}
onChange={(value) => setSelectedCountry(value)}
/>

Props

PropTypStandardBeschreibung
labelstring-Label für das Auswahlfeld
optionsArray<{ value: string; label: string; disabled?: boolean }>[]Optionen für das Auswahlfeld
valuestring-Ausgewählter Wert
defaultValuestring-Standardwert
onChange(value: string) => void-Änderungs-Handler
placeholderstring-Platzhaltertext
disabledbooleanfalseDeaktiviert das Auswahlfeld
errorstring-Fehlermeldung
requiredbooleanfalsePflichtfeld
size'sm' | 'md' | 'lg''md'Größe des Auswahlfelds
isSearchablebooleanfalseErmöglicht die Suche
isMultibooleanfalseErmöglicht Mehrfachauswahl

Layout-Komponenten

Container

import { Container } from '@smolitux/layout';

<Container maxWidth="lg" disableGutters={false}>
<h1>Meine Seite</h1>
<p>Inhalt, der auf verschiedenen Bildschirmgrößen konsistent angezeigt wird</p>
</Container>

Props

PropTypStandardBeschreibung
maxWidth'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'none''lg'Maximale Breite des Containers
disableGuttersbooleanfalseHorizontales Padding deaktivieren
fullHeightbooleanfalseContainer auf Bildschirmhöhe setzen
centerContentbooleanfalseContent innerhalb des Containers zentrieren

Grid

import { Grid } from '@smolitux/layout';

<Grid container spacing={4}>
<Grid item xs={12} md={6}>
<Card>Inhalt 1</Card>
</Grid>
<Grid item xs={12} md={6}>
<Card>Inhalt 2</Card>
</Grid>
</Grid>

Props

PropTypStandardBeschreibung
containerbooleanfalseContainer-Modus aktivieren (für Grid-Container)
itembooleanfalseItem-Modus aktivieren (für Grid-Items)
spacing0 | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 120Abstand zwischen Grid-Items
columnSpacingGrid['spacing']-Horizontaler Abstand zwischen Grid-Items
rowSpacingGrid['spacing']-Vertikaler Abstand zwischen Grid-Items
justifyContent'flex-start' | 'center' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly'-Ausrichtung der Items entlang der Hauptachse
alignItems'flex-start' | 'center' | 'flex-end' | 'stretch' | 'baseline'-Ausrichtung der Items entlang der Kreuzachse
direction'row' | 'row-reverse' | 'column' | 'column-reverse'-Flex-Direction der Items
wrap'nowrap' | 'wrap' | 'wrap-reverse''wrap'Flex-Wrap-Verhalten
xsnumber | 'auto' | boolean-Anzahl der Spalten für xs-Bildschirme (0px+)
smnumber | 'auto' | boolean-Anzahl der Spalten für sm-Bildschirme (640px+)
mdnumber | 'auto' | boolean-Anzahl der Spalten für md-Bildschirme (768px+)
lgnumber | 'auto' | boolean-Anzahl der Spalten für lg-Bildschirme (1024px+)
xlnumber | 'auto' | boolean-Anzahl der Spalten für xl-Bildschirme (1280px+)
xxlnumber | 'auto' | boolean-Anzahl der Spalten für 2xl-Bildschirme (1536px+)

Chart-Komponenten

LineChart

import { LineChart } from '@smolitux/charts';

<LineChart
data={{
id: 'views',
name: 'Page Views',
data: [
{ x: 'Jan', y: 100 },
{ x: 'Feb', y: 150 },
{ x: 'Mar', y: 200 },
{ x: 'Apr', y: 120 },
{ x: 'May', y: 180 },
]
}}
height={300}
showGrid
showPoints
/>

Props

PropTypStandardBeschreibung
dataLineChartSeries | LineChartSeries[]-Einzelne Datenserie oder Array von Serien
heightnumber300Höhe des Charts
widthnumber | string'100%'Breite des Charts
padding{ top?: number; right?: number; bottom?: number; left?: number }{ top: 30, right: 30, bottom: 40, left: 50 }Padding innerhalb des Charts
axisLabels{ x?: string; y?: string }-Achsentitel
units{ x?: string; y?: string }-Einheiten für Achsenbeschriftungen
showGridbooleantrueGrid-Linien anzeigen
showPointsbooleantrueDatenpunkte anzeigen
showTooltipsbooleantrueTooltips anzeigen
showLegendbooleantrueLegende anzeigen
legendPosition'top' | 'right' | 'bottom' | 'left''top'Position der Legende
animatedbooleantrueAnimation aktivieren
startYAxisAtZerobooleanfalseY-Achse bei Null beginnen
colorsstring[]-Angepasste Farben für mehrere Serien
formatYLabel(value: number) => string(value) => value.toString()Angepasste Formatierung für Y-Achsenbeschriftungen
formatXLabel(value: string | number) => string(value) => value.toString()Angepasste Formatierung für X-Achsenbeschriftungen
aspectRationumber16 / 9Für responsive SVG (viewBox)

LineChartSeries Typ

interface LineChartSeries {
id: string;
name: string;
color?: string;
lineType?: 'solid' | 'dashed' | 'dotted';
lineWidth?: number;
data: LineChartDataPoint[];
}

interface LineChartDataPoint {
x: string | number;
y: number;
category?: string;
metadata?: Record<string, any>;
}

Theme-System

ThemeProvider

import { ThemeProvider, createTheme } from '@smolitux/theme';

// Benutzerdefiniertes Theme erstellen
const customTheme = createTheme({
colors: {
primary: '#3498db',
secondary: '#2ecc71',
},
fonts: {
body: '"Open Sans", sans-serif',
},
});

// Theme anwenden
<ThemeProvider theme={customTheme}>
<App />
</ThemeProvider>

Props

PropTypStandardBeschreibung
themeThemedefaultThemeDas zu verwendende Theme
childrenReactNode-Die Komponenten, auf die das Theme angewendet werden soll

useTheme Hook

import { useTheme } from '@smolitux/theme';

function MyComponent() {
const { theme, themeMode, setThemeMode } = useTheme();

return (
<div>
<p>Aktuelle Primärfarbe: {theme.colors.primary}</p>
<p>Aktueller Modus: {themeMode}</p>
<button onClick={() => setThemeMode(themeMode === 'light' ? 'dark' : 'light')}>
Modus wechseln
</button>
</div>
);
}

Rückgabewerte

WertTypBeschreibung
themeThemeDas aktuelle Theme-Objekt
themeMode'light' | 'dark'Der aktuelle Theme-Modus
setThemeMode(mode: 'light' | 'dark') => voidFunktion zum Ändern des Theme-Modus
toggleThemeMode() => voidFunktion zum Umschalten des Theme-Modus