# Komponenten-Katalog > Tracking der Katalogisierung aller bestehenden Komponenten. > Diese Datei ermöglicht das Unterbrechen und Fortsetzen der Analyse. --- ## Fortschritt ### Übersicht ``` Phase 0: Analyse ██████████ 100% (8/8 Schritte) ✅ Phase 3: OsButton ██████████ 100% (133/133 Buttons) ✅ Phase 4: Tier 1 ██████████ 100% (OsButton, OsIcon, OsSpinner, OsCard) ✅ Phase 4: Tier A → HTML ██████████ 100% (10 ds-* Wrapper → Plain HTML) ✅ Phase 4: Tier B ██████████ 100% (ds-chip→OsBadge✅, ds-tag→OsBadge✅, ds-grid✅, ds-number→OsNumber✅, ds-radio→HTML✅) Phase 4: Tier B ██████████ 100% (Chip→OsBadge, Tag→OsBadge, Grid→HTML, Number→OsNumber, Radio→HTML, Table→HTML) ✅ Phase 4: Tier 2+ ██████████ 100% (OsModal✅, ds-form✅, OcelotInput✅, OcelotSelect✅, OsMenu/OsMenuItem✅) | 0 ds-* Tags verbleibend ✅ ``` ### Statistiken | Metrik | Wert | |--------|------| | Webapp Komponenten | 139 | | Styleguide Komponenten | 38 (23 in Webapp genutzt) | | **Gesamt** | **177** | | ✅ UI-Library | OsButton, OsIcon, OsSpinner, OsCard, OsBadge, OsNumber (6) | | ✅ → Plain HTML | Section, Placeholder, List, ListItem, Container, Heading, Text, Space, Flex, FlexItem, Grid, GridItem, Table (13) | | ✅ → OsBadge | Chip (20 Nutzungen → OsBadge), Tag (3 → OsBadge shape="square") | | ✅ → OsNumber | Number (5 Nutzungen → OsNumber, CountTo.vue gelöscht, vue-count-to entfernt) | | ✅ → Plain HTML | Radio (1 Datei → native `` in ReportModal) | | ✅ → OsModal | Modal (7 Nutzungen → OsModal, Focus-Trap, Scroll-Lock, A11y) | | ✅ ds-input → OcelotInput | Input (23 Dateien → OcelotInput Webapp-Komponente, lokale Imports, formValidation-kompatibel) | | ✅ ds-form entkoppelt | Form-Validierung → formValidation Mixin (async-validator), vuelidate entfernt | | ✅ ds-select → OcelotSelect | Select (3 Dateien → OcelotSelect Webapp-Komponente, lokale Imports, click-outside inline) | | ✅ → OsMenu/OsMenuItem | Menu, MenuItem (17 Nutzungen → packages/ui, dropdown Prop, eigene CSS) | | ⬜ Nicht in Webapp | Code, CopyField, FormItem, InputError, InputLabel, Page, PageTitle, Logo, Avatar, TableCol, TableHeadCol (11) | | ❌ Nicht geplant | OsLocaleSwitch — bricht Props-Only-Philosophie oder ist nur OsMenu-Wrapper (siehe Entscheidung unten) | | ✅ Maintenance entkoppelt | Eigenständiges Nuxt 4-Projekt unter `maintenance/` — nutzt OsButton, OsIcon, OsCard aus packages/ui | ### Architektur-Entscheidungen **OsLocaleSwitch: Nicht in packages/ui** (Session 34, 2026-03-27) Evaluiert und abgelehnt. Eine LocaleSwitch-Komponente in der UI-Library würde entweder: 1. Die Props-Only-Philosophie brechen (i18n-Logik, Sprachnamen, Cookie-Handling eingebaut) 2. Oder nur ein triviales OsMenu-Wrapper sein (kein Mehrwert) Stattdessen: Jede App baut ihre eigene LocaleSwitch mit UI-Library-Komponenten + app-spezifischer Logik. **Maintenance-App: Entkopplung umgesetzt ✅** (Session 35, 2026-03-28) Die Maintenance-App ist jetzt ein eigenständiges Nuxt 4-Projekt unter `maintenance/`: - Eigene LocaleSwitch: OsButton (ghost/circle) + OsIcon (language) + floating-vue VDropdown - @nuxtjs/i18n v10 mit 11 Sprachen, eigene Locale-Dateien - Abhängigkeiten: @ocelot-social/ui, @nuxtjs/i18n, floating-vue, Tailwind CSS v4 - Kein Vuex, kein Apollo, kein v-tooltip — **vollständig von Webapp entkoppelt** - Docker + nginx für statisches Hosting - **Validiert packages/ui als echten Shared Layer** (erster externer Consumer) ### OsButton Migration (Phase 3) ✅ **133 Buttons migriert in 79 Dateien ✅** — BaseButton.vue gelöscht, base-components.js Plugin entfernt. **Erkenntnisse aus der Migration:** - `type="submit"` muss explizit gesetzt werden (OsButton Default: `type="button"`) - `formErrors` ist ein Objekt → `!!formErrors` für Boolean-Cast bei `:disabled` - CSS `.base-button` Selektoren → `> button` oder `button` - Filter-Buttons nutzen `:appearance="condition ? 'filled' : 'outline'"` Pattern - Circle-Buttons mit Icon: `` --- ## Styleguide Komponenten (38) > Quelle: `../../styleguide/src/system/components/` > Live: http://styleguide.ocelot.social/ ### Data Display | # | Komponente | Status | Notizen | |---|------------|--------|---------| | 1 | Avatar | ⬜ Nicht genutzt | Webapp nutzt eigenes ProfileAvatar | | 2 | Card | ✅ UI-Library | → OsCard (BaseCard gelöscht) | | 3 | Chip | ✅ UI-Library | → OsBadge (20 Nutzungen in 5 Dateien) | | 4 | Code | ⬜ Nicht genutzt | Nicht in Webapp verwendet | | 5 | Icon | ✅ UI-Library | → OsIcon (BaseIcon gelöscht, 82 Ocelot-Icons) | | 6 | Number | ✅ UI-Library | → OsNumber (5 Dateien, CountTo.vue gelöscht, vue-count-to entfernt) | | 7 | Placeholder | ✅ → HTML | Tier A: `
` | | 8 | Spinner | ✅ UI-Library | → OsSpinner (LoadingSpinner gelöscht) | | 9 | Table | ✅ → HTML | 7 Dateien → Plain HTML `` + CSS-Klassen (kein OsTable nötig) | | 10 | TableCol | ✅ → HTML | Ersetzt durch native `
` | | 11 | TableHeadCol | ✅ → HTML | Ersetzt durch native `` | | 12 | Tag | ✅ UI-Library | → OsBadge shape="square" (3 Nutzungen in 3 Dateien) | ### Data Input | # | Komponente | Status | Notizen | |---|------------|--------|---------| | 13 | Button | ✅ UI-Library | → OsButton (133 Buttons in 79 Dateien, BaseButton gelöscht) | | 14 | CopyField | ⬜ Nicht genutzt | Nicht in Webapp verwendet | | 15 | Form | ⬜ Offen | 18 Dateien — HTML `
` oder OsForm? | | 16 | FormItem | ⬜ Nicht genutzt | Nicht in Webapp verwendet | | 17 | Input | ✅ → OcelotInput | 23 Dateien → OcelotInput (Webapp-Komponente, FormItem/Label/Error vereint) | | 18 | InputError | ✅ → OcelotInput | In OcelotInput integriert | | 19 | InputLabel | ✅ → OcelotInput | In OcelotInput integriert | | 20 | Radio | ✅ → HTML | 1 Datei → native `` + `
` (ReportModal) | | 21 | Select | ✅ → OcelotSelect | 3 Dateien → OcelotSelect (Webapp-Komponente, click-outside inline) | ### Layout | # | Komponente | Status | Notizen | |---|------------|--------|---------| | 22 | Container | ✅ → HTML | Tier A: `
` | | 23 | Flex | ✅ → HTML | Tier A: Plain HTML + CSS @media Queries | | 24 | FlexItem | ✅ → HTML | Tier A: Plain HTML + CSS @media Queries | | 25 | Grid | ✅ → HTML | 2 Dateien → CSS Grid (class="ds-grid") | | 26 | GridItem | ✅ → HTML | 8 Dateien → CSS Grid | | 27 | Modal | ✅ Tier 2 | → OsModal (h() Render, Focus-Trap, Scroll-Lock, A11y; ConfirmModal + ReportModal nutzen OsModal) | | 28 | Page | ⬜ Nicht genutzt | Nicht direkt in Webapp verwendet | | 29 | PageTitle | ⬜ Nicht genutzt | Nicht direkt in Webapp verwendet | | 30 | Section | ✅ → HTML | Tier A: `
` | | 31 | Space | ✅ → HTML | Tier A: `
` / `
` | ### Navigation | # | Komponente | Status | Notizen | |---|------------|--------|---------| | 32 | List | ✅ → HTML | Tier A: `