import{_ as i}from"./plugin-vue_export-helper-DlAUqK2U.js";import{c as t,a as e,o as a}from"./app-h9l50wZ_.js";const n={};function l(r,s){return a(),t("div",null,s[0]||(s[0]=[e(`

OsButton Status

Status-Tracking der OsButton-Komponente


Übersicht

AspektStatus
ImplementierungBasis implementiert
CVA-IntegrationVollständig
Tests9 Tests vorhanden
StorybookAusstehend
A11yTeilweise

Implementierte Features

Props

PropTypDefaultStatusNotizen
variant'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'info' | 'ghost' | 'outline''primary'Implementiert8 Varianten via CVA
size'xs' | 'sm' | 'md' | 'lg' | 'xl''md'Implementiert5 Größen via CVA
fullWidthbooleanfalseImplementiert
type'button' | 'submit' | 'reset''button'Implementiert
disabledbooleanfalseImplementiert
classstring''ImplementiertVia cn() gemerged

Slots

SlotStatusNotizen
defaultImplementiertButton-Content

Events

EventStatusNotizen
Native EventsImplementiertclick, focus, etc. werden durchgereicht

Fehlende Features (aus KATALOG.md)

Hohe Priorität

FeatureBeschreibungAufwand
iconIcon-Name/Komponente einbindenMittel - erfordert OsIcon
iconPosition'left' | 'right'Klein - nach Icon-Support
loadingLadezustand mit SpinnerMittel - erfordert OsSpinner

Mittlere Priorität

FeatureBeschreibungAufwand
toVue Router Link-SupportMittel - erfordert router-link/NuxtLink
hrefExterner Link-SupportKlein - <a> statt <button>
circleRunder ButtonKlein - CVA-Variant hinzufügen

Niedrige Priorität

FeatureBeschreibungAufwand
filled vs ghostExplizite UnterscheidungDiskussion nötig - aktuell via variant

Nicht geplant

FeatureBegründung
bulletZu spezifisch, kann mit circle + custom size erreicht werden
hover propCSS :hover reicht
padding propSollte über size geregelt werden

Vergleich: Aktuell vs. Zielzustand

KATALOG.md Vorschlag (OsButtonProps)

interface OsButtonProps {
  // Variante
  variant?: 'default' | 'primary' | 'secondary' | 'danger'
  filled?: boolean
  ghost?: boolean

  // Größe & Form
  size?: 'tiny' | 'small' | 'base' | 'large'
  circle?: boolean
  fullWidth?: boolean

  // Icon
  icon?: string
  iconPosition?: 'left' | 'right'

  // Zustände
  loading?: boolean
  disabled?: boolean

  // Link-Support
  to?: string | RouteLocationRaw
  href?: string

  // Button-Typ
  type?: 'button' | 'submit'
}

Aktuelle Implementierung

interface OsButtonProps {
  variant?: 'primary' | 'secondary' | 'danger' | 'warning' | 'success' | 'info' | 'ghost' | 'outline'
  size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'
  fullWidth?: boolean
  type?: 'button' \\| 'submit' \\| 'reset'
  disabled?: boolean
  class?: string
}

Unterschiede

AspektKATALOG.mdImplementiertKommentar
Varianten4 + filled/ghost Modifikatoren8 eigenständigeBesser: Mehr Varianten ohne Modifikatoren
Sizestiny, small, base, largexs, sm, md, lg, xlBesser: 5 statt 4, Standard-Naming
Icon-Supporticon, iconPosition-Fehlt: erfordert OsIcon
Loadingloading-Fehlt: erfordert OsSpinner
Link-Supportto, href-Fehlt: Router-Integration
Circlecircle-Fehlt: einfach hinzuzufügen

Test-Coverage

Datei: OsButton.spec.ts

TestBeschreibung
renders slot contentSlot-Inhalt wird gerendert
applies default variant classesPrimary-Variante als Default
applies size variant classesSize-Classes korrekt
applies variant classesVarianten-Classes korrekt
applies fullWidth classw-full wird gesetzt
merges custom classesCustom Classes werden via cn() gemerged
sets disabled attributedisabled-Attribut wird gesetzt
sets button typetype-Attribut wird gesetzt
emits click eventClick-Event wird emittiert

Fehlende Tests


Architektur

Datei-Struktur

src/components/OsButton/
├── OsButton.vue          # Hauptkomponente
├── OsButton.spec.ts      # Tests
├── button.variants.ts    # CVA-Varianten-Definition
├── index.ts              # Exports
└── STATUS.md             # Diese Datei

CVA-Pattern

Die Komponente nutzt das CVA-Pattern (Class Variance Authority):

  1. button.variants.ts - Definiert alle Varianten als Type-Safe Funktion
  2. OsButton.vue - Nutzt buttonVariants() + cn() für finale Klassen
  3. Export - Varianten-Funktion + Typen werden exportiert für Composability

CSS-Variablen

Die Komponente nutzt CSS Custom Properties für Theming:

--color-primary
--color-primary-contrast
--color-primary-hover
--color-secondary (etc.)
--color-danger (etc.)
--color-warning (etc.)
--color-success (etc.)
--color-info (etc.)

Nächste Schritte

Phase 1: Icon-Support (erfordert OsIcon)

  1. OsIcon-Komponente erstellen
  2. icon Prop hinzufügen (string für Icon-Name oder Komponente)
  3. iconPosition Prop hinzufügen ('left' | 'right')
  4. Layout für Icon + Text anpassen

Phase 2: Loading-State (erfordert OsSpinner)

  1. OsSpinner-Komponente erstellen
  2. loading Prop hinzufügen
  3. Bei loading: Spinner anzeigen, Button disabled
  1. to Prop für Vue Router Links
  2. href Prop für externe Links
  3. Dynamisches Element: <button> | <router-link> | <a>

Phase 4: Circle-Variant

  1. circle Prop hinzufügen
  2. CVA-Variant für runden Button

Abhängigkeiten

OsButton
├── Benötigt: cn() utility  Vorhanden
├── Benötigt: CVA           Vorhanden
├── Für Icon: OsIcon        Ausstehend (Tier 1)
├── Für Loading: OsSpinner  Ausstehend (Tier 1)
└── Für Link: Vue Router    Optional (nur für SPA-Links)

Changelog

DatumÄnderung
2026-02-07Status-Datei erstellt
2026-02-07CVA-Integration abgeschlossen
2026-02-078 Varianten, 5 Sizes implementiert
2026-02-079 Tests vorhanden
`,63)]))}const p=i(n,[["render",l],["__file","STATUS.html.vue"]]),o=JSON.parse('{"path":"/packages/ui/src/components/OsButton/STATUS.html","title":"OsButton Status","lang":"en-US","frontmatter":{},"headers":[{"level":2,"title":"Übersicht","slug":"ubersicht","link":"#ubersicht","children":[]},{"level":2,"title":"Implementierte Features","slug":"implementierte-features","link":"#implementierte-features","children":[{"level":3,"title":"Props","slug":"props","link":"#props","children":[]},{"level":3,"title":"Slots","slug":"slots","link":"#slots","children":[]},{"level":3,"title":"Events","slug":"events","link":"#events","children":[]}]},{"level":2,"title":"Fehlende Features (aus KATALOG.md)","slug":"fehlende-features-aus-katalog-md","link":"#fehlende-features-aus-katalog-md","children":[{"level":3,"title":"Hohe Priorität","slug":"hohe-prioritat","link":"#hohe-prioritat","children":[]},{"level":3,"title":"Mittlere Priorität","slug":"mittlere-prioritat","link":"#mittlere-prioritat","children":[]},{"level":3,"title":"Niedrige Priorität","slug":"niedrige-prioritat","link":"#niedrige-prioritat","children":[]},{"level":3,"title":"Nicht geplant","slug":"nicht-geplant","link":"#nicht-geplant","children":[]}]},{"level":2,"title":"Vergleich: Aktuell vs. Zielzustand","slug":"vergleich-aktuell-vs-zielzustand","link":"#vergleich-aktuell-vs-zielzustand","children":[{"level":3,"title":"KATALOG.md Vorschlag (OsButtonProps)","slug":"katalog-md-vorschlag-osbuttonprops","link":"#katalog-md-vorschlag-osbuttonprops","children":[]},{"level":3,"title":"Aktuelle Implementierung","slug":"aktuelle-implementierung","link":"#aktuelle-implementierung","children":[]},{"level":3,"title":"Unterschiede","slug":"unterschiede","link":"#unterschiede","children":[]}]},{"level":2,"title":"Test-Coverage","slug":"test-coverage","link":"#test-coverage","children":[{"level":3,"title":"Fehlende Tests","slug":"fehlende-tests","link":"#fehlende-tests","children":[]}]},{"level":2,"title":"Architektur","slug":"architektur","link":"#architektur","children":[{"level":3,"title":"Datei-Struktur","slug":"datei-struktur","link":"#datei-struktur","children":[]},{"level":3,"title":"CVA-Pattern","slug":"cva-pattern","link":"#cva-pattern","children":[]},{"level":3,"title":"CSS-Variablen","slug":"css-variablen","link":"#css-variablen","children":[]}]},{"level":2,"title":"Nächste Schritte","slug":"nachste-schritte","link":"#nachste-schritte","children":[{"level":3,"title":"Phase 1: Icon-Support (erfordert OsIcon)","slug":"phase-1-icon-support-erfordert-osicon","link":"#phase-1-icon-support-erfordert-osicon","children":[]},{"level":3,"title":"Phase 2: Loading-State (erfordert OsSpinner)","slug":"phase-2-loading-state-erfordert-osspinner","link":"#phase-2-loading-state-erfordert-osspinner","children":[]},{"level":3,"title":"Phase 3: Link-Support","slug":"phase-3-link-support","link":"#phase-3-link-support","children":[]},{"level":3,"title":"Phase 4: Circle-Variant","slug":"phase-4-circle-variant","link":"#phase-4-circle-variant","children":[]}]},{"level":2,"title":"Abhängigkeiten","slug":"abhangigkeiten","link":"#abhangigkeiten","children":[]},{"level":2,"title":"Changelog","slug":"changelog","link":"#changelog","children":[]}],"git":{"createdTime":1775351521000,"updatedTime":1775351521000,"contributors":[{"name":"dependabot[bot]","email":"49699333+dependabot[bot]@users.noreply.github.com","commits":1}]},"readingTime":{"minutes":2.25,"words":676},"filePathRelative":"packages/ui/src/components/OsButton/STATUS.md","localizedDate":"April 5, 2026","excerpt":"\\n
\\n

Status-Tracking der OsButton-Komponente

\\n
\\n
\\n

Übersicht

\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n
AspektStatus
ImplementierungBasis implementiert
CVA-IntegrationVollständig
Tests9 Tests vorhanden
StorybookAusstehend
A11yTeilweise
"}');export{p as comp,o as data};