# 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: Migration ██████████ 100% (132/132 Buttons) ✅ ─────────────────────────────────────────── Phase 3 ABGESCHLOSSEN: M4a ✅, M4b ✅, M4c ✅ — 0 verbleibend ``` ### Statistiken | Metrik | Wert | |--------|------| | Webapp Komponenten | 139 | | Styleguide Komponenten | 38 | | **Gesamt** | **177** | | Detailiert analysiert | 3 Familien (Button, Modal, Menu) | | Duplikate gefunden | 5 direkte + 3 Familien | | Zur Migration priorisiert | 15 Kern-Komponenten | ### OsButton Migration (Phase 3) ✅ | Status | Anzahl | Details | |--------|--------|---------| | ✅ Migriert | 132 | 78 Dateien, alle `` ersetzt | | ⬜ Verbleibend | 0 | Nur BaseButton.vue Definition + Test/Snapshot-Dateien | | **Gesamt** | **132** | **100% erledigt** | **Alle 132 Buttons migriert in 78 Dateien ✅** Migration vollständig abgeschlossen. 0 `` Tags verbleiben in Vue-Templates. **Erkenntnisse aus der Migration:** - `type="submit"` muss explizit gesetzt werden (OsButton Default: `type="button"`) - DsForm `errors` ist ein Objekt → `!!errors` für Boolean-Cast bei `:disabled` - CSS `.base-button` Selektoren → `> button` oder `button` - Position/Dimensions brauchen `!important` für Tailwind-Override - Filter-Buttons nutzen `:appearance="condition ? 'filled' : 'outline'"` Pattern - Circle-Buttons mit Icon: `` **Verbleibende Cleanup-Aufgaben:** - [ ] Snapshot-Dateien aktualisieren (enthalten noch `base-button` Referenzen) - [ ] Test-Dateien aktualisieren (Selektoren `.base-button` → `button` oder `os-button-stub`) - [ ] BaseButton.vue Komponente ggf. entfernen (wenn nicht mehr referenziert) - [ ] CSS-Selektor `.base-button` in ImageUploader.vue entfernen --- ## Styleguide Komponenten (38) > Quelle: `../../styleguide/src/system/components/` > Live: http://styleguide.ocelot.social/ ### Data Display | # | Komponente | Status | Webapp-Duplikat | Varianten | Priorität | Notizen | |---|------------|--------|-----------------|-----------|-----------|---------| | 1 | Avatar | ⬜ Ausstehend | | | | | | 2 | Card | ⬜ Ausstehend | BaseCard? | | | | | 3 | Chip | ⬜ Ausstehend | | | | | | 4 | Code | ⬜ Ausstehend | | | | | | 5 | Icon | ⬜ Ausstehend | BaseIcon? | | | | | 6 | Number | ⬜ Ausstehend | | | | | | 7 | Placeholder | ⬜ Ausstehend | | | | | | 8 | Spinner | ⬜ Ausstehend | LoadingSpinner? | | | | | 9 | Table | ⬜ Ausstehend | | | | | | 10 | TableCol | ⬜ Ausstehend | | | | | | 11 | TableHeadCol | ⬜ Ausstehend | | | | | | 12 | Tag | ⬜ Ausstehend | | | | | ### Data Input | # | Komponente | Status | Webapp-Duplikat | Varianten | Priorität | Notizen | |---|------------|--------|-----------------|-----------|-----------|---------| | 13 | Button | ⏳ Migration | BaseButton, CustomButton, ActionButton, ... | | | → OsButton (41/90 migriert) | | 14 | CopyField | ⬜ Ausstehend | | | | | | 15 | Form | ⬜ Ausstehend | | | | | | 16 | FormItem | ⬜ Ausstehend | | | | | | 17 | Input | ⬜ Ausstehend | SearchableInput, LinkInput | | | | | 18 | InputError | ⬜ Ausstehend | | | | | | 19 | InputLabel | ⬜ Ausstehend | | | | | | 20 | Radio | ⬜ Ausstehend | | | | | | 21 | Select | ⬜ Ausstehend | Dropdown, LocationSelect | | | | ### Layout | # | Komponente | Status | Webapp-Duplikat | Varianten | Priorität | Notizen | |---|------------|--------|-----------------|-----------|-----------|---------| | 22 | Container | ⬜ Ausstehend | | | | | | 23 | Flex | ⬜ Ausstehend | | | | | | 24 | FlexItem | ⬜ Ausstehend | | | | | | 25 | Grid | ⬜ Ausstehend | MasonryGrid? | | | | | 26 | GridItem | ⬜ Ausstehend | MasonryGridItem? | | | | | 27 | Modal | ⬜ Ausstehend | Modal, ConfirmModal, ... | | | | | 28 | Page | ⬜ Ausstehend | InternalPage? | | | | | 29 | PageTitle | ⬜ Ausstehend | | | | | | 30 | Section | ⬜ Ausstehend | | | | | | 31 | Space | ⬜ Ausstehend | | | | | ### Navigation | # | Komponente | Status | Webapp-Duplikat | Varianten | Priorität | Notizen | |---|------------|--------|-----------------|-----------|-----------|---------| | 32 | List | ⬜ Ausstehend | | | | | | 33 | ListItem | ⬜ Ausstehend | | | | | | 34 | Logo | ⬜ Ausstehend | Logo | | | DUPLIKAT | | 35 | Menu | ⬜ Ausstehend | HeaderMenu, ContentMenu, ... | | | | | 36 | MenuItem | ⬜ Ausstehend | | | | | ### Typography | # | Komponente | Status | Webapp-Duplikat | Varianten | Priorität | Notizen | |---|------------|--------|-----------------|-----------|-----------|---------| | 37 | Heading | ⬜ Ausstehend | SearchHeading? | | | | | 38 | Text | ⬜ Ausstehend | | | | | --- ## Webapp Komponenten (139) > Quelle: `../../webapp/components/` ### Status-Legende - ⬜ Ausstehend - ⏳ In Arbeit - ✅ Analysiert - 🔗 Duplikat (siehe Notizen) - ⛔ Nicht migrieren (veraltet/ungenutzt) - 🔄 Konsolidieren (mit anderen zusammenführen) ### A-B | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 1 | ActionButton | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | | 2 | ActionRadiusSelect | ⬜ Ausstehend | Input | | | | 3 | AddChatRoomByUserSearch | ⬜ Ausstehend | Feature | | Chat-spezifisch | | 4 | AddGroupMember | ⬜ Ausstehend | Feature | | Group-spezifisch | | 5 | AvatarMenu | ⬜ Ausstehend | Navigation | Avatar + Menu | | | 6 | AvatarUploader | ⬜ Ausstehend | Input | | | | 7 | BadgeSelection | ⬜ Ausstehend | Input | | | | 8 | Badges | ⬜ Ausstehend | Display | | | | 9 | BadgesSection | ⬜ Ausstehend | Display | | | | 10 | BaseButton | ⏳ Migration | Button | Button | 🔄 → OsButton (41/90 migriert) | | 11 | BaseCard | ⬜ Ausstehend | Layout | Card | 🔗 DUPLIKAT | | 12 | BaseIcon | ⬜ Ausstehend | Display | Icon | 🔗 DUPLIKAT | ### C | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 13 | CategoriesFilter | ⬜ Ausstehend | Filter | | | | 14 | CategoriesMenu | ⬜ Ausstehend | Navigation | Menu | | | 15 | CategoriesSelect | ⏳ Teilweise | Input | Select | Buttons → OsButton (icon) | | 16 | ChangePassword | ⬜ Ausstehend | Feature | | Auth-spezifisch | | 17 | Change | ⬜ Ausstehend | Feature | | | | 18 | Chat | ⬜ Ausstehend | Feature | | Chat-spezifisch | | 19 | ChatNotificationMenu | ⬜ Ausstehend | Feature | | Chat-spezifisch | | 20 | CommentCard | ⏳ Teilweise | Display | Card | 1/2 Buttons → OsButton | | 21 | CommentForm | ⬜ Ausstehend | Input | Form | | | 22 | CommentList | ⬜ Ausstehend | Display | List | | | 23 | ComponentSlider | ⬜ Ausstehend | Layout | | | | 24 | ConfirmModal | ⬜ Ausstehend | Feedback | Modal | 🔄 Modal-Familie | | 25 | ContentMenu | ⬜ Ausstehend | Navigation | Menu | | | 26 | ContentViewer | ⬜ Ausstehend | Display | | | | 27 | ContextMenu | ⬜ Ausstehend | Navigation | Menu | | | 28 | ContributionForm | ⏳ Teilweise | Feature | Form | Cancel → OsButton | | 29 | CounterIcon | ⬜ Ausstehend | Display | Icon | | | 30 | CountTo | ⬜ Ausstehend | Display | Number | Animation | | 31 | CreateInvitation | ⬜ Ausstehend | Feature | | | | 32 | CtaJoinLeaveGroup | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | | 33 | CtaUnblockAuthor | ✅ Migriert | Button | Button | Button → OsButton (icon) | | 34 | CustomButton | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | ### D-E | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 35 | DateTimeRange | ⬜ Ausstehend | Input | | | | 36 | DeleteData | ⬜ Ausstehend | Feature | | | | 37 | DeleteUserModal | ⏳ Teilweise | Feedback | Modal | 🔄 Modal-Familie, Buttons → OsButton | | 38 | DisableModal | ⏳ Teilweise | Feedback | Modal | 🔄 Modal-Familie, Buttons → OsButton | | 39 | DonationInfo | ✅ Migriert | Display | | Button → OsButton | | 40 | Dropdown | ⬜ Ausstehend | Input | Select | | | 41 | DropdownFilter | ⬜ Ausstehend | Filter | Select | | | 42 | Editor | ⬜ Ausstehend | Input | | Rich-Text | | 43 | EmailDisplayAndVerify | ⬜ Ausstehend | Feature | | | | 44 | EmbedComponent | ⏳ Teilweise | Display | | 2/3 Buttons → OsButton | | 45 | EmotionButton | ⬜ Ausstehend | Button | Button | | | 46 | Emotions | ⬜ Ausstehend | Feature | | | | 47 | Empty | ⬜ Ausstehend | Feedback | Placeholder | | | 48 | EnterNonce | ⏳ Teilweise | Feature | | Auth, Submit → OsButton | ### F-G | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 49 | EventsByFilter | ⬜ Ausstehend | Filter | | | | 50 | FiledReportsTable | ⬜ Ausstehend | Display | Table | | | 51 | FilterMenu | ⬜ Ausstehend | Navigation | Menu | | | 52 | FilterMenuComponent | ⬜ Ausstehend | Navigation | Menu | | | 53 | FilterMenuSection | ⬜ Ausstehend | Navigation | Menu | | | 54 | FollowButton | ⬜ Ausstehend | Button | Button | | | 55 | FollowingFilter | ⬜ Ausstehend | Filter | | | | 56 | FollowList | ⬜ Ausstehend | Display | List | | | 57 | GroupButton | ⬜ Ausstehend | Button | Button | | | 58 | GroupContentMenu | ⬜ Ausstehend | Navigation | Menu | | | 59 | GroupForm | ⏳ Teilweise | Input | Form | 1/2 Buttons → OsButton | | 60 | GroupLink | ⬜ Ausstehend | Navigation | | | | 61 | GroupList | ⬜ Ausstehend | Display | List | | | 62 | GroupMember | ✅ Migriert | Display | | Button → OsButton | | 63 | GroupTeaser | ⬜ Ausstehend | Display | Card | | ### H-L | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 64 | Hashtag | ⬜ Ausstehend | Display | Tag/Chip | | | 65 | HashtagsFilter | ⬜ Ausstehend | Filter | | | | 66 | HeaderButton | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | | 67 | HeaderMenu | ⬜ Ausstehend | Navigation | Menu | | | 68 | ImageUploader | ⏳ Teilweise | Input | | Crop-Buttons → OsButton | | 69 | index | ⬜ Ausstehend | ? | | Prüfen | | 70 | InternalPage | ⬜ Ausstehend | Layout | Page | | | 71 | Invitation | ⬜ Ausstehend | Feature | | | | 72 | InvitationList | ⬜ Ausstehend | Display | List | | | 73 | InviteButton | ⬜ Ausstehend | Button | Button | | | 74 | JoinLeaveButton | ⬜ Ausstehend | Button | Button | | | 75 | LabeledButton | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | | 76 | LinkInput | ⬜ Ausstehend | Input | Input | | | 77 | LoadingSpinner | ⬜ Ausstehend | Feedback | Spinner | 🔗 DUPLIKAT | | 78 | LocaleSwitch | ⬜ Ausstehend | Navigation | | | | 79 | LocationInfo | ⬜ Ausstehend | Display | | | | 80 | LocationSelect | ⏳ Teilweise | Input | Select | Close-Button → OsButton (icon) | | 81 | LocationTeaser | ⬜ Ausstehend | Display | Card | | | 82 | LoginButton | ⬜ Ausstehend | Button | Button | | | 83 | LoginForm | ⬜ Ausstehend | Feature | Form | Auth | | 84 | Logo | ⬜ Ausstehend | Display | Logo | 🔗 DUPLIKAT | ### M-O | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 85 | MapButton | ⬜ Ausstehend | Button | Button | | | 86 | MapStylesButtons | ✅ Migriert | Button | Button | Button → OsButton | | 87 | MasonryGrid | ⬜ Ausstehend | Layout | Grid | | | 88 | MasonryGridItem | ⬜ Ausstehend | Layout | GridItem | | | 89 | MenuBar | ⬜ Ausstehend | Navigation | Menu | | | 90 | MenuBarButton | ⬜ Ausstehend | Button | Button | 🔄 Button-Familie | | 91 | MenuLegend | ⬜ Ausstehend | Navigation | | | | 92 | Modal | ⬜ Ausstehend | Feedback | Modal | 🔗 DUPLIKAT | | 93 | MySomethingList | ⏳ Teilweise | Display | List | Cancel → OsButton | | 94 | NotificationMenu | ⏳ Teilweise | Navigation | Menu | 2/3 Buttons → OsButton | | 95 | NotificationsTable | ⬜ Ausstehend | Display | Table | | | 96 | ObserveButton | ⬜ Ausstehend | Button | Button | | | 97 | OrderByFilter | ⬜ Ausstehend | Filter | | | ### P-R | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 98 | PageFooter | ⬜ Ausstehend | Layout | | | | 99 | PageParamsLink | ⬜ Ausstehend | Navigation | | | | 100 | PaginationButtons | ✅ Migriert | Navigation | | 2 Buttons → OsButton (icon, circle) | | 101 | PostTeaser | ⬜ Ausstehend | Display | Card | | | 102 | PostTypeFilter | ⬜ Ausstehend | Filter | | | | 103 | ProfileAvatar | ⬜ Ausstehend | Display | Avatar | | | 104 | ProfileList | ⬜ Ausstehend | Display | List | | | 105 | ProgressBar | ⬜ Ausstehend | Feedback | | | | 106 | RegistrationSlideCreate | ⬜ Ausstehend | Feature | | Auth | | 107 | RegistrationSlideEmail | ⬜ Ausstehend | Feature | | Auth | | 108 | RegistrationSlideInvite | ⬜ Ausstehend | Feature | | Auth | | 109 | RegistrationSlideNonce | ⬜ Ausstehend | Feature | | Auth | | 110 | RegistrationSlideNoPublic | ⬜ Ausstehend | Feature | | Auth | | 111 | RegistrationSlider | ⬜ Ausstehend | Feature | | Auth | | 112 | ReleaseModal | ⏳ Teilweise | Feedback | Modal | 🔄 Modal-Familie, Cancel → OsButton | | 113 | ReportList | ⬜ Ausstehend | Display | List | | | 114 | ReportModal | ⬜ Ausstehend | Feedback | Modal | 🔄 Modal-Familie | | 115 | ReportRow | ⏳ Teilweise | Display | | More Details → OsButton | | 116 | ReportsTable | ⬜ Ausstehend | Display | Table | | | 117 | Request | ⬜ Ausstehend | Feature | | | | 118 | ResponsiveImage | ⬜ Ausstehend | Display | | | ### S | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 119 | SearchableInput | ⬜ Ausstehend | Input | Input | | | 120 | SearchField | ⬜ Ausstehend | Input | Input | | | 121 | SearchGroup | ⬜ Ausstehend | Feature | | Search | | 122 | SearchHeading | ⬜ Ausstehend | Display | Heading | | | 123 | SearchPost | ⬜ Ausstehend | Feature | | Search | | 124 | SearchResults | ⬜ Ausstehend | Feature | | Search | | 125 | SelectUserSearch | ⬜ Ausstehend | Input | Select | | | 126 | ShoutButton | ⬜ Ausstehend | Button | Button | | | 127 | ShowPassword | ⬜ Ausstehend | Input | | | | 128 | Signup | ⬜ Ausstehend | Feature | | Auth | | 129 | SocialMedia | ⬜ Ausstehend | Display | | | | 130 | SocialMediaListItem | ⬜ Ausstehend | Display | ListItem | | | 131 | Strength | ⬜ Ausstehend | Feedback | | Password | | 132 | SuggestionList | ⬜ Ausstehend | Display | List | | ### T-Z | # | Komponente | Status | Kategorie | Styleguide-Pendant | Notizen | |---|------------|--------|-----------|-------------------|---------| | 133 | TabNavigation | ⬜ Ausstehend | Navigation | | | | 134 | UserTeaser | ⬜ Ausstehend | Display | Card | | | 135 | UserTeaserHelper | ⬜ Ausstehend | Display | | | | 136 | UserTeaserNonAnonymous | ⬜ Ausstehend | Display | | | | 137 | UserTeaserPopover | ✅ Migriert | Display | | Button → OsButton | --- ## Identifizierte Duplikate & Konsolidierung ### Direkte Duplikate (Webapp ↔ Styleguide) | Webapp | Styleguide | Aktion | |--------|------------|--------| | Logo | Logo | Konsolidieren zu OsLogo | | Modal | Modal | Konsolidieren zu OsModal | | BaseCard | Card | Konsolidieren zu OsCard | | BaseIcon | Icon | Konsolidieren zu OsIcon | | LoadingSpinner | Spinner | Konsolidieren zu OsSpinner | ### Button-Familie (zur Konsolidierung) | Komponente | Beschreibung | Ziel | |------------|--------------|------| | Button (Styleguide) | Basis-Button | OsButton | | BaseButton | Basis-Button | → OsButton | | CustomButton | Angepasster Button | → OsButton variant | | ActionButton | Aktions-Button | → OsButton variant | | HeaderButton | Header-Button | → OsButton variant | | LabeledButton | Button mit Label | → OsButton + Label | | MenuBarButton | Menü-Button | → OsButton variant | | FollowButton | Follow-Aktion | Feature-spezifisch | | GroupButton | Gruppen-Aktion | Feature-spezifisch | | InviteButton | Einladen | Feature-spezifisch | | LoginButton | Login | Feature-spezifisch | | ShoutButton | Shout-Aktion | Feature-spezifisch | | ObserveButton | Beobachten | Feature-spezifisch | | EmotionButton | Emotion | Feature-spezifisch | | JoinLeaveButton | Beitreten/Verlassen | Feature-spezifisch | | MapButton | Karten-Button | Feature-spezifisch | | MapStylesButtons | Kartenstile | ✅ → OsButton | | CtaJoinLeaveGroup | CTA | Feature-spezifisch | | CtaUnblockAuthor | CTA | Feature-spezifisch | ### Modal-Familie (zur Konsolidierung) | Komponente | Beschreibung | Ziel | |------------|--------------|------| | Modal (Styleguide) | Basis-Modal | OsModal | | Modal (Webapp) | Basis-Modal | → OsModal | | ConfirmModal | Bestätigungs-Dialog | → OsModal type="confirm" | | DeleteUserModal | Löschen-Dialog | → OsModal type="confirm" | | DisableModal | Deaktivieren-Dialog | → OsModal type="confirm" | | ReleaseModal | Release-Dialog | Feature-spezifisch | | ReportModal | Report-Dialog | Feature-spezifisch | ### Menu-Familie (zur Konsolidierung) | Komponente | Beschreibung | Ziel | |------------|--------------|------| | Menu (Styleguide) | Basis-Menu | OsMenu | | MenuItem (Styleguide) | Menu-Item | OsMenuItem | | HeaderMenu | Header-Navigation | → OsMenu | | ContentMenu | Kontext-Menu | → OsMenu variant | | ContextMenu | Kontext-Menu | → OsMenu variant | | FilterMenu | Filter-Menu | → OsMenu variant | | NotificationMenu | Benachrichtigungen | Feature-spezifisch | | CategoriesMenu | Kategorien | Feature-spezifisch | | AvatarMenu | User-Menu | Feature-spezifisch | --- ## Kategorisierung ### Basis-Komponenten (hohe Priorität) Diese sollten zuerst migriert werden: - Button → OsButton - Card → OsCard - Icon → OsIcon - Modal → OsModal - Input → OsInput - Select → OsSelect - Avatar → OsAvatar - Spinner → OsSpinner ### Layout-Komponenten - Container, Flex, Grid, Page, Section, Space ### Typography - Heading, Text ### Feature-Komponenten (niedrigere Priorität) - Chat, Group, Registration, Search, etc. --- ## Analyse-Protokoll | Datum | Bearbeiter | Aktion | Details | |-------|------------|--------|---------| | 2026-02-04 | Claude | Katalog erstellt | 177 Komponenten erfasst | | 2026-02-04 | Claude | Duplikate identifiziert | Button, Modal, Menu Familien | | 2026-02-04 | Claude | Button-Analyse | Props-Vergleich, Konsolidierungsvorschlag, Token-Extraktion | | 2026-02-04 | Claude | Modal-Analyse | Architektur erkannt: DsModal = Basis, Feature-Modals nutzen DsModal | | 2026-02-04 | Claude | Menu-Analyse | DsMenu, Dropdown, Feature-Menus - 3 separate Patterns identifiziert | | 2026-02-04 | Claude | Priorisierung | 15 Komponenten in 4 Tiers priorisiert | | 2026-02-04 | Claude | Konsolidierungsplan | 3 Phasen definiert, Token-Liste erstellt | | 2026-02-04 | Claude | **Phase 0 abgeschlossen** | Bereit für Phase 2 (Projekt-Setup) | | 2026-02-08 | Claude | OsButton entwickelt | CVA-Varianten, Vue 2/3 kompatibel via vue-demi | | 2026-02-08 | Claude | Webapp-Integration | Jest Mock, Docker Build, CI-Kompatibilität | | 2026-02-08 | Claude | **16 Buttons migriert** | Alle ohne icon/circle/loading Props, validiert | | 2026-02-08 | Claude | OsButton erweitert | attrs/listeners Forwarding für Vue 2 ($listeners) | | 2026-02-09 | Claude | Scope erweitert | ~90 Buttons identifiziert (16 migriert, 14 ohne Props, ~60 mit Props) | | 2026-02-09 | Claude | **Milestone 4a: 8 Buttons** | DisableModal, DeleteUserModal, ReleaseModal, ContributionForm, EnterNonce, MySomethingList, ImageUploader (2x) | | 2026-02-09 | Claude | **Milestone 4a abgeschlossen** | 6 weitere: donations, profile (2x), badges, notifications/index, ReportRow | | 2026-02-11 | Claude | **M4b: icon + circle** | icon-Slot implementiert, circle-Prop mit CVA | | 2026-02-11 | Claude | **9 icon-Buttons migriert (M4c)** | DisableModal, DeleteUserModal, CtaUnblockAuthor, LocationSelect, CategoriesSelect, my-email-address, profile Chat, PaginationButtons (2x circle) | --- ## Nächste Schritte ### Phase 0: Analyse ✅ 1. [x] Webapp-Komponenten auflisten 2. [x] Styleguide-Komponenten auflisten 3. [x] Offensichtliche Duplikate identifizieren 4. [x] Button-Familie im Detail analysieren 5. [x] Modal-Familie im Detail analysieren 6. [x] Menu-Familie im Detail analysieren 7. [x] Priorisierung festlegen 8. [x] Konsolidierungsplan finalisieren ### Phase 3: OsButton Migration (in Arbeit) 9. [x] OsButton entwickeln (CVA, vue-demi) 10. [x] Webapp-Integration (Jest, Docker, CI) 11. [x] 16 Buttons migrieren (validiert ✅) **Milestone 4a: 14 Buttons ohne neue Props** ✅ 12. [x] Modal Cancel-Buttons (3) 13. [x] Form Cancel/Submit-Buttons (3) 14. [x] ImageUploader Crop-Buttons (2) 15. [x] Page Buttons (6) **Milestone 4b: Props für ~49 Buttons hinzufügen** 16. [x] icon-Slot zu OsButton hinzufügen ✅ 17. [x] circle-Variant zu OsButton hinzufügen ✅ 18. [ ] loading-Prop zu OsButton hinzufügen **Milestone 4c: ~49 Buttons mit neuen Props migrieren** 19. [ ] Button-Komponenten (~15) 20. [ ] Navigation (~8) 21. [ ] Editor (~15) 22. [ ] Filter/Chat (~10) 23. [ ] Forms/Modals (~5) 24. [ ] Features/Pages (~12) --- **✅ Phase 0 abgeschlossen!** Phase 3 zu 27% erledigt (24/90 Buttons migriert). Milestone 4a: 8/14 Buttons. --- ## Detailanalyse: Button-Familie ### Styleguide Button (DsButton) **Pfad:** `styleguide/src/system/components/navigation/Button/Button.vue` **Props:** | Prop | Typ | Default | Beschreibung | |------|-----|---------|--------------| | path | String\|Object | null | URL oder Vue Router Pfad | | size | String | null | `small` \| `base` \| `large` | | linkTag | String | auto | `router-link` \| `a` \| `button` | | name | String | null | Accessibility name | | primary | Boolean | false | Primärer Stil (grün) | | secondary | Boolean | false | Sekundärer Stil (blau) | | danger | Boolean | false | Danger Stil (rot) | | hover | Boolean | false | Hover-State erzwingen | | ghost | Boolean | false | Transparenter Hintergrund | | icon | String | null | Icon-Name | | right | Boolean | false | Icon rechts positionieren | | fullwidth | Boolean | false | Volle Breite | | loading | Boolean | false | Ladezustand | **Besonderheiten:** - Automatische Link-Erkennung (router-link/a/button) - Icon-Only Modus wenn kein Slot-Content - Spinner bei loading - CSS-Klassen: `ds-button`, `ds-button-primary`, etc. --- ### Webapp BaseButton **Pfad:** `webapp/components/_new/generic/BaseButton/BaseButton.vue` **Props:** | Prop | Typ | Default | Beschreibung | |------|-----|---------|--------------| | bullet | Boolean | false | Kleiner runder Punkt (18px) | | circle | Boolean | false | Runder Button | | danger | Boolean | false | Danger-Farbschema | | filled | Boolean | false | Gefüllter Hintergrund | | ghost | Boolean | false | Ohne Border | | icon | String | - | Icon-Name | | loading | Boolean | false | Ladezustand | | size | String | 'regular' | `tiny` \| `small` \| `regular` \| `large` | | padding | Boolean | false | Extra Padding | | type | String | 'button' | `button` \| `submit` | | disabled | Boolean | false | Deaktiviert | **Besonderheiten:** - Kein automatischer Link-Support (nur `