From 7eb1bbdb3fc3d67882862719ccc73c54c3d3f391 Mon Sep 17 00:00:00 2001
From: Ulf Gebhardt
Date: Mon, 23 Mar 2026 15:12:57 +0100
Subject: [PATCH] refactor(webapp): migrate ds-input to OcelotInput (#9428)
---
packages/ui/KATALOG.md | 21 +-
packages/ui/PROJEKT.md | 18 +-
.../ContributionForm/ContributionForm.vue | 8 +-
webapp/components/DeleteData/DeleteData.vue | 5 +-
webapp/components/Editor/Editor.vue | 4 +-
webapp/components/EnterNonce/EnterNonce.vue | 5 +-
webapp/components/Group/GroupForm.vue | 10 +-
webapp/components/LoginForm/LoginForm.vue | 6 +-
webapp/components/Modal/ReportModal.vue | 4 +-
webapp/components/OcelotInput/OcelotInput.vue | 210 ++++++++++++++++++
webapp/components/Password/Change.vue | 8 +-
.../PasswordReset/ChangePassword.vue | 6 +-
webapp/components/PasswordReset/Request.vue | 4 +-
.../Registration/RegistrationSlideCreate.vue | 12 +-
.../Registration/RegistrationSlideEmail.vue | 12 +-
.../Registration/RegistrationSlideInvite.vue | 4 +-
.../Registration/RegistrationSlideNonce.vue | 4 +-
webapp/components/Registration/Signup.vue | 4 +-
.../features/Invitations/CreateInvitation.vue | 5 +-
.../CreateInvitation.spec.js.snap | 16 +-
.../__snapshots__/InvitationList.spec.js.snap | 16 +-
.../features/ProfileList/ProfileList.vue | 4 +-
webapp/pages/admin/donations.vue | 7 +-
.../users/__snapshots__/index.spec.js.snap | 16 +-
webapp/pages/admin/users/index.vue | 4 +-
.../_id/__snapshots__/invites.spec.js.snap | 8 +-
webapp/pages/settings/index.vue | 8 +-
.../settings/my-email-address/enter-nonce.vue | 7 +-
.../pages/settings/my-email-address/index.vue | 10 +-
webapp/pages/settings/my-social-media.vue | 4 +-
webapp/test/testSetup.js | 1 -
31 files changed, 374 insertions(+), 77 deletions(-)
create mode 100644 webapp/components/OcelotInput/OcelotInput.vue
diff --git a/packages/ui/KATALOG.md b/packages/ui/KATALOG.md
index 2ad2472c5..7162dadda 100644
--- a/packages/ui/KATALOG.md
+++ b/packages/ui/KATALOG.md
@@ -15,7 +15,7 @@ Phase 4: Tier 1 ██████████ 100% (OsButton, OsIcon, Os
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+ ██████░░░░ 50% (OsModal✅, ds-form entkoppelt✅) | Rest ausstehend (OsInput, OsMenu, OsSelect, OsDropdown, OsAvatar)
+Phase 4: Tier 2+ ████████░░ 60% (OsModal✅, ds-form entkoppelt✅, ds-input→OcelotInput✅) | Rest ausstehend (OsMenu, OsSelect, OsDropdown, OsAvatar)
```
### Statistiken
@@ -29,8 +29,10 @@ Phase 4: Tier 2+ ██████░░░░ 50% (OsModal✅, ds-form
| ✅ → 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) |
-| ⬜ → UI-Library | Modal, Input, Menu, MenuItem, Select (5) — Tier 2-3 |
-| ✅ ds-form entkoppelt | Form-Validierung → formValidation Mixin (async-validator), ds-input/ds-select bleiben als UI-Komponenten |
+| ✅ → 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 |
+| ⬜ → UI-Library | Menu, MenuItem, Select (3) — Tier 2-3 |
| ⬜ Nicht in Webapp | Code, CopyField, FormItem, InputError, InputLabel, Page, PageTitle, Logo, Avatar, TableCol, TableHeadCol (11) |
### OsButton Migration (Phase 3) ✅
@@ -74,9 +76,9 @@ Phase 4: Tier 2+ ██████░░░░ 50% (OsModal✅, ds-form
| 14 | CopyField | ⬜ Nicht genutzt | Nicht in Webapp verwendet |
| 15 | Form | ⬜ Offen | 18 Dateien — HTML `
-
-
+
-
+
@@ -54,6 +55,7 @@ exports[`Users given badges are disabled renders 1`] = `
+
+
+
@@ -71,8 +75,8 @@ exports[`Users given badges are disabled renders 1`] = `
style="display: none;"
>
+
-
@@ -479,9 +483,10 @@ exports[`Users given badges are enabled renders 1`] = `
style="display: none;"
>
+
-
+
@@ -503,6 +508,7 @@ exports[`Users given badges are enabled renders 1`] = `
+
+
+
@@ -520,8 +528,8 @@ exports[`Users given badges are enabled renders 1`] = `
style="display: none;"
>
+
-
diff --git a/webapp/pages/admin/users/index.vue b/webapp/pages/admin/users/index.vue
index 19266c034..3c90d3889 100644
--- a/webapp/pages/admin/users/index.vue
+++ b/webapp/pages/admin/users/index.vue
@@ -5,7 +5,7 @@