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 `
` oder OsForm? | | 16 | FormItem | ⬜ Nicht genutzt | Nicht in Webapp verwendet | -| 17 | Input | ⬜ Tier 2 | 23 Dateien → OsInput (gekoppelt mit Form) | -| 18 | InputError | ⬜ Nicht genutzt | Intern von Input genutzt | -| 19 | InputLabel | ⬜ Nicht genutzt | Intern von Input genutzt | +| 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 | ⬜ Tier 4 | 3 Dateien → OsSelect | @@ -367,7 +369,7 @@ Phase 4: Tier 2+ ██████░░░░ 50% (OsModal✅, ds-form ### Basis-Komponenten — UI-Library (ausstehend) - Modal → OsModal ✅ -- Input → OsInput +- Input → OcelotInput (Webapp-Komponente) ✅ — langfristig → OsInput in packages/ui - Select → OsSelect - Avatar → OsAvatar (falls benötigt) @@ -409,6 +411,7 @@ Phase 4: Tier 2+ ██████░░░░ 50% (OsModal✅, ds-form | 2026-02-11→18 | Claude | **Sessions 12-26** | OsButton M4c abgeschlossen, OsIcon, OsSpinner, OsCard implementiert + Webapp-Migration, BaseButton/BaseCard/BaseIcon/LoadingSpinner gelöscht | | 2026-02-19 | Claude | **Tier A Migration** | 10 ds-* Vue-Wrapper → Plain HTML + CSS, _ds-compat.scss, ~450 Nutzungen in ~90 Dateien | | 2026-02-19 | Claude | **Katalog konsolidiert** | Styleguide- und Webapp-Tabellen aktualisiert, veraltete Status korrigiert | +| 2026-03-23 | Claude | **ds-input → OcelotInput** | 23 Dateien migriert, Webapp-Komponente mit lokalen Imports (tree-shakeable), FormItem/Label/Error vereint | --- @@ -445,13 +448,13 @@ Phase 4: Tier 2+ ██████░░░░ 50% (OsModal✅, ds-form ### Phase 4: Tier 2-4 — UI-Library 19. [x] OsModal (h() Render, Focus-Trap, Scroll-Lock, A11y; ConfirmModal + ReportModal nutzen OsModal; DeleteUserModal/DisableModal/ReleaseModal gelöscht) ✅ 20. [x] ds-form → formValidation Mixin (async-validator), 18 Dateien migriert, vuelidate entfernt ✅ -21. [ ] OsInput (23 Dateien) +21. [x] ds-input → OcelotInput (23 Dateien, Webapp-Komponente mit lokalen Imports, FormItem/Label/Error vereint, formValidation-kompatibel) ✅ 22. [ ] OsMenu / OsMenuItem (17 Dateien) 23. [ ] OsSelect (3 Dateien), OsTable (7 Dateien) --- -**✅ Phase 0-3 abgeschlossen. Phase 4: Tier 1 + Tier A ✅, Tier B ✅ (Chip→OsBadge, Tag→OsBadge, Grid→HTML, Number→OsNumber, Radio→HTML, Table→HTML), Tier 2: OsModal ✅, ds-form entkoppelt ✅, Rest ausstehend (OsInput, OsMenu, OsSelect).** +**✅ Phase 0-3 abgeschlossen. Phase 4: Tier 1 + Tier A ✅, Tier B ✅ (Chip→OsBadge, Tag→OsBadge, Grid→HTML, Number→OsNumber, Radio→HTML, Table→HTML), Tier 2: OsModal ✅, ds-form entkoppelt ✅, ds-input → OcelotInput ✅, Rest ausstehend (OsMenu, OsSelect).** --- diff --git a/packages/ui/PROJEKT.md b/packages/ui/PROJEKT.md index 2986b2e1f..67a65fbd3 100644 --- a/packages/ui/PROJEKT.md +++ b/packages/ui/PROJEKT.md @@ -81,10 +81,10 @@ Phase 0: ██████████ 100% (6/6 Aufgaben) ✅ Phase 1: ██████████ 100% (6/6 Aufgaben) ✅ Phase 2: ██████████ 100% (26/26 Aufgaben) ✅ Phase 3: ██████████ 100% (24/24 Aufgaben) ✅ - Webapp-Integration komplett -Phase 4: ███████░░░ 70% (19/27 Aufgaben) - Tier 1 ✅, Tier A ✅, Infra ✅, OsBadge ✅, ds-grid ✅, ds-table→HTML ✅, OsNumber ✅, OsModal ✅, ds-radio→HTML ✅ | Tier B ✅, Tier 2-3 ausstehend +Phase 4: ████████░░ 74% (20/27 Aufgaben) - Tier 1 ✅, Tier A ✅, Infra ✅, OsBadge ✅, ds-grid ✅, ds-table→HTML ✅, OsNumber ✅, OsModal ✅, ds-radio→HTML ✅ | Tier B ✅, OcelotInput ✅, Tier 2-3 Rest ausstehend Phase 5: ░░░░░░░░░░ 0% (0/7 Aufgaben) ─────────────────────────────────────── -Gesamt: ████████░░ 84% (81/96 Aufgaben) +Gesamt: ████████░░ 85% (82/96 Aufgaben) ``` ### Katalogisierung (Details in KATALOG.md) @@ -289,7 +289,7 @@ ds-chip + ds-tag → OsBadge (UI-Library): ✅ - [x] 0 Tier-A `ds-*` Komponenten-Tags verbleibend **Verbleibende ds-* Komponenten (6 Typen):** -- Tier C (→ UI-Library): ds-input (23), ds-modal (7→✅ OsModal), ds-menu/ds-menu-item (17), ds-select (3) +- Tier C (→ UI-Library): ds-modal (7→✅ OsModal), ds-input (23→✅ OcelotInput), ds-menu/ds-menu-item (17), ds-select (3) - ✅ ds-form (18 Dateien) → formValidation Mixin (async-validator), vuelidate entfernt **Zuvor abgeschlossen (Session 26 - CodeRabbit Review Fixes):** @@ -415,9 +415,9 @@ ds-chip + ds-tag → OsBadge (UI-Library): ✅ - [x] OsNumber Komponente + ds-number/CountTo → OsNumber Webapp-Migration ✅ - [ ] Tier B (Rest): ds-radio → Plain HTML - [x] OsModal Komponente + DsModal/ConfirmModal/ReportModal → OsModal Webapp-Integration ✅ -- [ ] Weitere Tier 2 Komponenten (OsDropdown, OsAvatar, OsInput) +- [ ] Weitere Tier 2 Komponenten (OsDropdown, OsAvatar) - [x] ds-form → formValidation Mixin (async-validator), 18 Dateien migriert, vuelidate entfernt ✅ -- [ ] ds-input → OsInput (23 Dateien, ds-form Kopplung aufgelöst) +- [x] ds-input → OcelotInput (23 Dateien, Webapp-Komponente mit lokalen Imports, formValidation-kompatibel) ✅ - [ ] ds-menu / ds-menu-item → OsMenu / OsMenuItem - [ ] ds-select → OsSelect - [ ] Browser-Fehler untersuchen: `TypeError: Cannot read properties of undefined (reading 'heartO')` (ocelotIcons undefined im Browser trotz korrekter Webpack-Aliase) @@ -694,7 +694,7 @@ Jeder migrierte Button muss manuell geprüft werden: Normal, Hover, Focus, Activ - [x] OsModal (Basis: DsModal → h() Render-Function, Vue 2/3 Compat, Focus-Trap, Scroll-Lock, A11y) ✅ - [ ] OsDropdown (Basis: Webapp Dropdown) - [ ] OsAvatar (vereint DsAvatar + ProfileAvatar) -- [ ] OsInput (Basis: DsInput, 23 Dateien — ds-form Kopplung aufgelöst via formValidation Mixin) +- [x] ds-input → OcelotInput (23 Dateien, Webapp-Komponente mit lokalen Imports, formValidation-kompatibel) ✅ **Tier 3: Navigation (UI-Library)** - [ ] OsMenu (Basis: DsMenu, 11 Dateien) @@ -1852,6 +1852,7 @@ Bei der Migration werden: | 2026-03-14 | **ds-form entkoppelt** | Neues `formValidation` Mixin (async-validator): provide/subscribe Pattern, formData/formSchema/formErrors, handleInput/handleInputValid Callbacks; vuelidate komplett entfernt | | 2026-03-14 | **18 Formulare migriert** | CommentForm, ContributionForm, EnterNonce, GroupForm, Password/Change, PasswordReset (2), Registration (5), Signup, MySomethingList, donations, admin/users, settings (3) | | 2026-03-20 | **formValidation Fix** | `handleInput()` vor `$validateForm()` aufrufen (Reihenfolge-Bug: handleInput überschrieb handleInputValid bei synchronem async-validator Callback) | +| 2026-03-23 | **ds-input → OcelotInput** | Neue Webapp-Komponente `OcelotInput.vue`: vereint DsInput + FormItem + InputLabel + InputError in einer Datei. 23 Vue-Dateien migriert mit lokalen Imports (tree-shakeable). formValidation Mixin voll kompatibel. dot-prop Abhängigkeit durch inline `getNestedValue()` ersetzt. 28 Test-Suites, 210 Tests ✅, 7 Snapshots aktualisiert. | --- @@ -1872,8 +1873,9 @@ Bei der Migration werden: | ✅ UI-Library | OsButton, OsIcon, OsSpinner, OsCard, OsBadge, OsNumber, OsModal (7) | | ✅ → Plain HTML | Section, Placeholder, List, ListItem, Container, Heading, Text, Space, Flex, FlexItem, Grid, GridItem, Table, Radio (14) — Tier A/B | | ✅ → UI-Library | Chip, Tag → OsBadge (2), Number → OsNumber (1) — Tier B | -| ✅ ds-form entkoppelt | Form-Validierung → formValidation Mixin (async-validator), vuelidate entfernt, ds-input/ds-select bleiben als UI-Komponenten | -| ⬜ → UI-Library | Input, Menu, MenuItem, Select (4) — Tier 2-3 | +| ✅ ds-form entkoppelt | Form-Validierung → formValidation Mixin (async-validator), vuelidate entfernt | +| ✅ ds-input → OcelotInput | Webapp-Komponente (23 Dateien), lokale Imports, FormItem/InputLabel/InputError vereint | +| ⬜ → UI-Library | Menu, MenuItem, Select (3) — Tier 2-3 | | ⬜ Nicht genutzt | Code, CopyField, FormItem, InputError, InputLabel, Page, PageTitle, Logo, Avatar, TableCol, TableHeadCol (11) | --- diff --git a/webapp/components/ContributionForm/ContributionForm.vue b/webapp/components/ContributionForm/ContributionForm.vue index 228377938..5466e3a7d 100644 --- a/webapp/components/ContributionForm/ContributionForm.vue +++ b/webapp/components/ContributionForm/ContributionForm.vue @@ -26,7 +26,7 @@
-
-
- {{ $t('settings.deleteUserAccount.pleaseConfirm', { confirm: currentUser.name }) }} - +

{{ $t('settings.deleteUserAccount.accountDescription') }}

@@ -64,10 +64,11 @@ import { iconRegistry } from '~/utils/iconRegistry' import { mapActions, mapGetters } from 'vuex' import gql from 'graphql-tag' import { currentUserCountQuery } from '~/graphql/User' +import OcelotInput from '~/components/OcelotInput/OcelotInput.vue' export default { name: 'DeleteData', - components: { OsButton, OsCard, OsIcon }, + components: { OsButton, OsCard, OsIcon, OcelotInput }, data() { return { deleteContributions: false, diff --git a/webapp/components/Editor/Editor.vue b/webapp/components/Editor/Editor.vue index 17003161c..2887b90a8 100644 --- a/webapp/components/Editor/Editor.vue +++ b/webapp/components/Editor/Editor.vue @@ -12,7 +12,7 @@ :select-item="selectItem" />
- null }, // If 'null', than the Mention extention is not assigned. diff --git a/webapp/components/EnterNonce/EnterNonce.vue b/webapp/components/EnterNonce/EnterNonce.vue index 690e137d6..4450cc68b 100644 --- a/webapp/components/EnterNonce/EnterNonce.vue +++ b/webapp/components/EnterNonce/EnterNonce.vue @@ -1,6 +1,6 @@