From 25a8300cb3f9cd6a64572250c7bf82597fcf1607 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 29 Jan 2026 15:05:59 +0100 Subject: [PATCH 001/234] design-system-twig composer --- composer.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/composer.json b/composer.json index 97beea181..05bd875b2 100644 --- a/composer.json +++ b/composer.json @@ -3,6 +3,12 @@ "license": "(GPL-2.0-only or proprietary)", "type": "project", "description": "Ibexa Admin Ui", + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/ibexa/design-system-twig" + } + ], "replace": { "ezsystems/ezplatform-admin-ui": "*" }, @@ -27,6 +33,8 @@ "ibexa/content-forms": "~6.0.x-dev", "ibexa/core": "~6.0.x-dev", "ibexa/design-engine": "~6.0.x-dev", + "ibexa/design-system-twig": "~6.0.x-dev", + "ibexa/polyfill-php82": "^1.0", "ibexa/rest": "~6.0.x-dev", "ibexa/search": "~6.0.x-dev", "ibexa/twig-components": "~6.0.x-dev", From aef12b78dd97eafe9c537f5b38c46869581004e8 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 3 Feb 2026 15:18:41 +0100 Subject: [PATCH 002/234] draft list delete button --- src/bundle/Resources/encore/ibexa.css.config.js | 1 + .../admin/content/draft/draft_list.html.twig | 17 ++++++----------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/bundle/Resources/encore/ibexa.css.config.js b/src/bundle/Resources/encore/ibexa.css.config.js index 62dfba962..283f45eb1 100644 --- a/src/bundle/Resources/encore/ibexa.css.config.js +++ b/src/bundle/Resources/encore/ibexa.css.config.js @@ -5,6 +5,7 @@ module.exports = (Encore) => { path.resolve(__dirname, '../public/scss/ibexa-bootstrap.scss'), path.resolve(__dirname, '../public/scss/ibexa.scss'), path.resolve(__dirname, '../public/scss/ui/ibexa-modules.scss'), + path.resolve('./vendor/ibexa/admin-ui-assets/src/bundle/Resources/public/vendors/ids-assets/dist/css/styles.css'), path.resolve('./vendor/ibexa/admin-ui-assets/src/bundle/Resources/public/vendors/flatpickr/dist/flatpickr.min.css'), path.resolve( './vendor/ibexa/admin-ui-assets/src/bundle/Resources/public/vendors/flatpickr/dist/plugins/confirmDate/confirmDate.css', diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index 6346f6866..9cdb2eb56 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -149,21 +149,16 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, From 8b3a60f3381094759f22b3657de92c65e3176534 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 3 Feb 2026 18:11:30 +0100 Subject: [PATCH 003/234] Replace buttons with design system button component in search view Migrate filter buttons and edit translation buttons to use the design system twig:ibexa:button component for consistent styling. Co-Authored-By: Claude Opus 4.5 --- .../public/js/scripts/admin.search.filters.js | 1 + .../ui/edit_translation_button.html.twig | 50 +++++++++++-------- .../themes/admin/ui/search/filters.html.twig | 8 +-- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.search.filters.js b/src/bundle/Resources/public/js/scripts/admin.search.filters.js index 7f6b1dcc1..03915147b 100644 --- a/src/bundle/Resources/public/js/scripts/admin.search.filters.js +++ b/src/bundle/Resources/public/js/scripts/admin.search.filters.js @@ -108,6 +108,7 @@ const methodName = isEnabled ? 'removeAttribute' : 'setAttribute'; applyBtn[methodName]('disabled', !isEnabled); + applyBtn.classList.toggle('ids-btn--disabled', !isEnabled); }; const toggleDatesSelectVisibility = (event, select, dateRange) => { const datesRangeNode = doc.querySelector(event.target.dataset.targetSelector); diff --git a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig index 116fe247b..132823c47 100644 --- a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig @@ -4,30 +4,26 @@ {% if translations|length == 1 %} {% set language = translations|first %} - + /> {% else %} {% set top_offset = top_offset is defined ? top_offset : 72 %}
- + /> {% embed '@ibexadesign/ui/component/edit_content_translation_select.html.twig' with { title: 'edit_translation.languages.select_language_title'|trans|desc('Select translation'), @@ -42,13 +38,15 @@
{% for language in translations %}
- +
{% endfor %}
@@ -57,12 +55,20 @@ {% block footer_items %} {% trans_default_domain 'ibexa_admin_ui' %} - - + {% endblock %} {% endembed %}
diff --git a/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig index 60bd8e9b0..9d90332f3 100644 --- a/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig @@ -14,12 +14,12 @@

{{ 'search.filters.title'|trans|desc('Filters') }}

- - +
From cd7f5f29c57a8676cdfa401980a1904028b0e212 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 4 Feb 2026 10:37:18 +0100 Subject: [PATCH 004/234] Add button migration orchestration system Automated migration tool for migrating legacy UI components to design system. Features: - Chunk-based processing with OpenCode CLI integration - Automatic branch creation for isolated migrations - Retry logic with automatic rollback on failure - Frontend validation (yarn test) integration - Progress tracking, logging, and error reporting - Component-agnostic architecture (supports buttons, badges, etc.) Components: - migrate-buttons.sh: Bash orchestrator (789 LOC) - MIGRATION_RULES.md: Button migration guide with variant mappings - BUTTON_MIGRATION_PLAN.txt: Chunk definitions and file inventory - .claude/: Skills and settings for AI-assisted migrations - .button-migration/: Working directory for logs and state Usage: ./migrate-buttons.sh --chunk CHUNK_03 ./migrate-buttons.sh --start-from 5 ./migrate-buttons.sh --dry-run See: MIGRATION_RULES.md, BUTTON_MIGRATION_PLAN.txt --- .ai-instructions.md | 169 ++++ .ai-rules | 61 ++ .aider.conf.yml | 20 + .button-migration/failed-chunks.txt | 0 .../prompt-CHUNK_01-attempt1.txt | 73 ++ .../prompt-CHUNK_02-attempt1.txt | 77 ++ .button-migration/prompts/migrate-chunk.txt | 53 ++ .claude/settings.local.json | 26 + .claude/skills/validate-frontend-changes.md | 115 +++ .cursorrules | 24 + .gitignore | 1 + .opencode/opencode.json | 22 + .opencode/permissions.json | 24 + BUTTON_MIGRATION_PLAN.txt | 16 + CLAUDE.md | 161 ++++ MIGRATION_RULES.md | 810 ++++++++++++++++++ migrate-buttons.sh | 788 +++++++++++++++++ ...n.contenttype.relation.default.location.js | 2 + .../account/forgot_password/index.html.twig | 2 +- .../index_with_login.html.twig | 2 +- .../admin/account/login/index.html.twig | 11 +- .../admin/account/register/index.html.twig | 2 +- .../account/reset_password/index.html.twig | 2 +- .../admin/content/content_preview.html.twig | 8 + .../content/widget/content_create.html.twig | 7 +- .../content/widget/content_edit.html.twig | 16 +- 26 files changed, 2477 insertions(+), 15 deletions(-) create mode 100644 .ai-instructions.md create mode 100644 .ai-rules create mode 100644 .aider.conf.yml create mode 100644 .button-migration/failed-chunks.txt create mode 100644 .button-migration/prompt-CHUNK_01-attempt1.txt create mode 100644 .button-migration/prompt-CHUNK_02-attempt1.txt create mode 100644 .button-migration/prompts/migrate-chunk.txt create mode 100644 .claude/settings.local.json create mode 100644 .claude/skills/validate-frontend-changes.md create mode 100644 .cursorrules create mode 100644 .opencode/opencode.json create mode 100644 .opencode/permissions.json create mode 100644 BUTTON_MIGRATION_PLAN.txt create mode 100644 CLAUDE.md create mode 100644 MIGRATION_RULES.md create mode 100755 migrate-buttons.sh diff --git a/.ai-instructions.md b/.ai-instructions.md new file mode 100644 index 000000000..12f9ca659 --- /dev/null +++ b/.ai-instructions.md @@ -0,0 +1,169 @@ +# AI Assistant Instructions + +This file provides instructions for AI coding assistants (Claude, Cursor, GitHub Copilot, Aider, etc.) working in this repository. + +## 🚨 CRITICAL: Git Workflow Policy + +### LOCAL CHANGES ONLY - NO REMOTE OPERATIONS + +All changes made by AI assistants MUST remain local until the user explicitly decides to push them. + +#### ❌ PROHIBITED ACTIONS (NEVER DO): + +```bash +# NEVER run these commands: +git push +git push origin +git push --force +git push --set-upstream origin +gh pr create +gh pr create --title "..." --body "..." +hub pull-request +git merge origin/ +git rebase origin/ +``` + +**Why?** The user needs full control over what gets pushed to the remote repository and when PRs are created. + +#### ✅ ALLOWED ACTIONS (Local Only): + +```bash +# These are OK: +git status +git diff +git diff HEAD +git log +git log --oneline +git add +git commit -m "message" +git checkout -b +git branch +git show +``` + +**Why?** Local changes can be reviewed and modified before being shared. + +#### 👤 USER MANUAL WORKFLOW: + +1. **AI makes local changes** → edits files, creates commits locally +2. **AI shows status** → runs `git status` or `git diff` to show changes +3. **USER reviews** → examines changes, runs tests, verifies everything +4. **USER pushes** → runs `git push origin ` when satisfied +5. **USER creates PR** → uses GitHub UI or `gh pr create` manually +6. **USER requests review** → assigns reviewers, manages PR lifecycle +7. **USER merges** → merges PR after approval + +### Example: Correct AI Workflow + +```bash +# ✅ CORRECT - AI Assistant does this: + +# 1. Make changes to files (AI edits templates, JS, PHP, etc.) + +# 2. Show what changed +git status +git diff + +# 3. Create local branch if needed +git checkout -b feature/migrate-buttons-to-component + +# 4. Stage and commit locally +git add src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +git commit -m "Migrate delete button in draft list to twig:ibexa:button component" + +# 5. Show final status +git status + +# 6. Tell user: "I've made local changes. Review with 'git diff' and push when ready." +``` + +```bash +# ❌ INCORRECT - AI Assistant should NEVER do this: + +git add . +git commit -m "Migrate buttons" +git push origin feature/migrate-buttons # ❌ WRONG - Don't push! +gh pr create --title "Migrate buttons" # ❌ WRONG - Don't create PR! +``` + +--- + +## Package Information + +**Package:** `ibexa/admin-ui` +**Description:** Core Back Office interface bundle for Ibexa DXP (Digital Experience Platform) + +### Key Files: +- `CLAUDE.md` - Package overview, commands, architecture +- `MIGRATION_RULES.md` - Button migration patterns and workflow +- `.cursorrules` - Cursor AI specific rules +- `.aider.conf.yml` - Aider configuration +- `.ai-rules` - General AI assistant rules + +### Quick Commands: + +```bash +# PHP +composer fix-cs # Auto-fix PHP code style +composer check-cs # Check code style +composer test # Run all tests +composer phpstan # Static analysis + +# JavaScript/TypeScript +yarn test # Run all checks +yarn fix # Auto-fix frontend issues + +# Frontend Assets (run from project root, not package root) +yarn ibexa:dev # Development build +yarn ibexa:build # Production build +``` + +### Code Style Requirements: +- PHP: `declare(strict_types=1)` required in all files +- PHPStan level 8 with baseline +- Frontend: Prettier + ESLint via `@ibexa/eslint-config` + +--- + +## Button Migration Project + +When working on button migrations from legacy markup to `twig:ibexa:button` component: + +1. **Read** `MIGRATION_RULES.md` for complete patterns +2. **Make** local changes following the patterns +3. **Commit** locally with descriptive messages +4. **Show** status and diffs to user +5. **Let user** push and create PRs manually + +### Key Migration Rules: +- `ibexa-btn--ghost` → `type="tertiary"` +- `ibexa-btn--primary` → `type="primary"` +- `ibexa-btn--secondary` → `type="secondary"` +- `ibexa-btn--small` → `size="small"` +- `disabled` → `:disabled="true"` +- `type="submit"` → `html_type="submit"` + +See `MIGRATION_RULES.md` for complete details. + +--- + +## Summary + +**DO:** +- ✅ Make local file changes +- ✅ Create local commits and branches +- ✅ Run tests locally +- ✅ Show `git status` and `git diff` +- ✅ Follow code style requirements +- ✅ Reference documentation files + +**DON'T:** +- ❌ Push to remote (`git push`) +- ❌ Create pull requests (`gh pr create`) +- ❌ Force push (`git push --force`) +- ❌ Automatically merge or rebase with remote + +**ALWAYS:** +- Let the user review changes before they go remote +- Let the user push and create PRs manually +- Show clear status of what was changed locally diff --git a/.ai-rules b/.ai-rules new file mode 100644 index 000000000..7c00256dc --- /dev/null +++ b/.ai-rules @@ -0,0 +1,61 @@ +# AI Assistant Rules for ibexa/admin-ui +# This file is read by various AI coding assistants (Cursor, Copilot, etc.) + +## ⚠️ CRITICAL: Git Workflow Policy - LOCAL CHANGES ONLY + +All changes MUST remain local. DO NOT push or create PRs automatically. + +### Prohibited Actions (NEVER DO): +1. ❌ `git push` or `git push origin ` - Never push to remote +2. ❌ `gh pr create` or any PR creation commands - Never create pull requests +3. ❌ `git push --force` - Never force push +4. ❌ Automatic merging or rebasing with remote branches +5. ❌ Any command that modifies remote repository state + +### Allowed Actions (Local Only): +1. ✅ Making local file changes +2. ✅ Running `git status`, `git diff`, `git log` +3. ✅ Creating local commits: `git add` + `git commit` +4. ✅ Creating local branches: `git checkout -b ` +5. ✅ Running tests locally +6. ✅ Showing diffs and status to the user + +### User Manual Control: +The user will manually: +- Review all changes with `git status` / `git diff` +- Push to remote when ready: `git push origin ` +- Create PRs via GitHub UI or `gh` CLI +- Request code review and merge + +### References: +- See `CLAUDE.md` for package overview and git workflow policy +- See `MIGRATION_RULES.md` Section 4 for detailed button migration workflow + +## Package: ibexa/admin-ui +Core Back Office interface bundle for Ibexa DXP (Digital Experience Platform). + +## Key Commands: +```bash +# PHP +composer fix-cs # Auto-fix PHP code style +composer test # Run all tests + +# JavaScript/TypeScript +yarn test # Run all checks +yarn fix # Auto-fix frontend issues + +# Frontend Assets (from project root) +yarn ibexa:dev # Development build +yarn ibexa:build # Production build +``` + +## Testing: +```bash +./vendor/bin/phpunit -c phpunit.xml tests/lib/ +./vendor/bin/phpunit -c phpunit.integration.xml tests/integration/ +``` + +## Code Style: +- PHP: `declare(strict_types=1)` required +- PHPStan level 8 +- Frontend: Prettier + ESLint via `@ibexa/eslint-config` diff --git a/.aider.conf.yml b/.aider.conf.yml new file mode 100644 index 000000000..ff5089903 --- /dev/null +++ b/.aider.conf.yml @@ -0,0 +1,20 @@ +# Aider Configuration for ibexa/admin-ui + +# Git workflow settings - LOCAL CHANGES ONLY +auto-commits: true # Allow local commits +auto-push: false # NEVER auto-push to remote +dirty-commits: true # Allow committing with dirty working directory +commit: true # Allow creating commits +no-auto-commits: false # We want commits, just not pushes + +# CRITICAL: These settings prevent automatic remote operations +# - Aider can create local commits +# - Aider CANNOT push to remote +# - User must manually push and create PRs + +# Additional context +read: + - CLAUDE.md + - MIGRATION_RULES.md + +# See CLAUDE.md and MIGRATION_RULES.md for complete git workflow policy diff --git a/.button-migration/failed-chunks.txt b/.button-migration/failed-chunks.txt new file mode 100644 index 000000000..e69de29bb diff --git a/.button-migration/prompt-CHUNK_01-attempt1.txt b/.button-migration/prompt-CHUNK_01-attempt1.txt new file mode 100644 index 000000000..2bf1507ac --- /dev/null +++ b/.button-migration/prompt-CHUNK_01-attempt1.txt @@ -0,0 +1,73 @@ +ROLE: +You are a Senior Ibexa DXP Frontend Developer specializing in design system migrations and frontend component refactoring. + +CONTEXT: +- Chunk: CHUNK_01 +- Category: account +- Twig Files to Migrate (7): + 1. account/login/index.html.twig + 2. account/register/index.html.twig + 3. account/reset_password/index.html.twig + 4. account/forgot_password/index_with_login.html.twig + 5. account/error/credentials_expired.html.twig + 6. account/profile/view.html.twig + 7. account/forgot_password/index.html.twig + +- Related JavaScript Files (0): + (None detected - pure template migration) + +- Migration Rules: MIGRATION_RULES.md +- Validation Skill: .claude/skills/validate-frontend-changes.md + + +⚠️ SPECIAL HANDLING REQUIRED: +This chunk contains UNMAPPED button variants: +These variants are NOT yet supported by twig:ibexa:button component. + +For buttons with unmapped variants, ADD TODO COMMENT: +{# TODO: Migrate to twig:ibexa:button component + Reason: Uses unmapped variant '' not in design system + See: MIGRATION_RULES.md Section 1 - Additional Legacy Variants (Not Yet Mapped) +#} + +Keep these buttons as legacy +``` + +**NEW (Component):** +```twig + + {{ 'button.text'|trans }} + +``` + +### Variant Mapping + +| Legacy Class | Component Type | Notes | +|--------------|----------------|-------| +| `ibexa-btn--ghost` | `tertiary` | Ghost style (transparent background) | +| `ibexa-btn--primary` | `primary` | Primary action button | +| `ibexa-btn--secondary` | `secondary` | Secondary action button | +| `ibexa-btn--tertiary` | `tertiary-alt` | Tertiary action button | + +**Additional Legacy Variants (Not Yet Mapped):** + +These legacy variants do NOT have direct component equivalents. Keep them as legacy buttons with TODO comments until the design system component is extended: + +- `ibexa-btn--ghost-info` - Ghost button with info color +- `ibexa-btn--dark` - Dark background button +- `ibexa-btn--filled-info` - Filled info button +- `ibexa-btn--info` - Info styled button +- `ibexa-btn--neon-info` - Neon info button +- `ibexa-btn--selector` - Selector button variant +- `ibexa-btn--dark-selector` - Dark selector button +- `ibexa-btn--secondary-light` - Light secondary button +- `ibexa-btn--secondary-dark` - Dark secondary button + +**Usage:** If you encounter buttons with these classes, leave them as-is and add a TODO comment. + +**Finding All Button Variants in Codebase:** + +To discover all button class patterns currently used: +```bash +git grep -h "ibexa-btn--" | grep -oE "ibexa-btn--[a-z-]+" | sort -u +``` + +This helps identify which buttons can be migrated vs. which need special handling. + +### Icon Mapping + +**OLD:** +```twig + + + +``` + +**NEW:** +```twig +icon="edit" +icon_size="small-medium" +``` + +### Icon-Only Buttons + +Buttons with only an icon (no text) are automatically detected by the component. + +**OLD:** +```twig + +``` + +**NEW:** +```twig + +``` + +**Note:** Remove the `ibexa-btn--no-text` class - the component automatically detects icon-only buttons when no text content is provided. + +### Button Size Mapping + +The design system button component supports two size variants: + +| Legacy Class | Component Prop | Notes | +|--------------|----------------|-------| +| `ibexa-btn--small` | `size="small"` | Small button (32px height) | +| (default) | `size="medium"` or omit | Default/medium size (46px height) | + +**Important Notes:** +- The component's default size is `medium` (can be omitted) +- Legacy code without `ibexa-btn--small` should NOT specify a size prop +- The component does NOT support a `large` size variant + +**Component Size Variants (from design-system-twig):** +```twig +size: { + medium: 'ids-btn--medium', + small: 'ids-btn--small', +} +``` + +### HTML Type Attribute + +| Legacy Attribute | Component Prop | Notes | +|------------------|----------------|-------| +| `type="button"` | (default, omit) | Default button type | +| `type="submit"` | `html_type="submit"` | Form submit button | +| `type="reset"` | `html_type="reset"` | Form reset button | + +--- + +## Component Props Reference + +### Available Props (from design-system-twig) + +```twig + + Button Label + +``` + +### Prop Details + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `type` | string | - | Button variant: `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` | +| `size` | string | `medium` | Button size: `small` or `medium` | +| `icon` | string | - | Icon name (renders using `twig:ibexa:icon`) | +| `icon_size` | string | - | Icon size passed to icon component | +| `html_type` | string | `button` | HTML button type attribute | +| `disabled` | boolean | `false` | Disabled state (use `:disabled` for boolean) | +| `class` | string | - | Additional CSS classes (appended to component classes) | +| `attributes` | object | - | All other attributes passed through to ` +``` + +**Button with Text and Icon:** +```twig +Delete +``` + +Renders as: +```html + +``` + +**Key Points:** +- Icons wrapped in `
` +- Text wrapped in `
` +- Both IDS classes (`ids-btn--*`) and legacy BC classes (`ibexa-btn--*`) are rendered + +--- + +## 4. WORKFLOW: Migration Process + +### Step 1: Analyze New Cases + +When encountering a button pattern not covered in this document: + +#### 1.1. Locate the Button Component + +The button component is located at: +``` +vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig +``` + +#### 1.2. Understand the Component Structure + +Read the component template to understand: + +**Available Variants:** +```twig +variants: { + type: { + primary: 'ids-btn--primary', + secondary: 'ids-btn--secondary', + tertiary: 'ids-btn--tertiary', + 'secondary-alt': 'ids-btn--secondary-alt', + 'tertiary-alt': 'ids-btn--tertiary-alt', + }, + size: { + medium: 'ids-btn--medium', + small: 'ids-btn--small', + }, +} +``` + +**How Props Work:** +- `type` - Button variant (maps to CSS classes) +- `size` - Button size (maps to CSS classes) +- `icon` - Icon name (renders `twig:ibexa:icon` component) +- `icon_size` - Size prop passed to icon component +- `html_type` - HTML button type attribute (`button`, `submit`, `reset`) +- `disabled` - Boolean flag for disabled state +- `attributes` - All other HTML attributes passed through + +**Component Logic:** +- Icon-only detection: `icon_only = (not has_content) and icon is not empty` +- Disabled class: Adds `ids-btn--disabled` when disabled +- Icon wrapping: `
` → `` +- Label wrapping: `
` for text content + +#### 1.3. Map Legacy to Component + +For each legacy button: + +1. **Identify the variant** - Map `ibexa-btn--{variant}` to component `type` +2. **Check size** - Look for `ibexa-btn--small` → `size="small"` +3. **Extract icon** - Pull icon name from SVG `` element +4. **Preserve data attributes** - Copy all `data-*` attributes +5. **Keep custom classes** - Remove `btn`, `ibexa-btn`, variant classes; keep the rest +6. **Check disabled state** - `disabled` attribute → `:disabled="true"` +7. **Verify HTML type** - `type="submit"` → `html_type="submit"` + +#### 1.4. Test the Migration + +1. Replace the button in the template +2. Render the page and inspect the HTML output +3. Verify all classes, attributes, and structure are correct +4. Test interactive functionality (clicks, disabled state, etc.) + +#### 1.5. Document New Patterns + +If you discover a new pattern, add it to this document: +- Add to **Variant Mapping** section if new variant +- Add to **Special Cases** if edge case +- Update **Complete Examples** with new example + +### Step 2: Adjust Design System Component (If Needed) + +In some cases, the button component from `design-system-twig` may need adjustments to support specific use cases. + +**Check Recent Commits in `design-system-twig`** + +Before making changes, review recent commits to understand component evolution: + +```bash +cd vendor/ibexa/design-system-twig +git log -5 --oneline +git show HEAD # View last commit details +``` + +**Recent Example:** +``` +commit 67ba4d958e3539228df7b3e2099dc40a6ba2d155 +Add html_type parameter to button component + +Allow setting the HTML button type attribute (button, submit, reset) +via the html_type parameter, defaulting to 'button'. +``` + +This shows how the component was extended to support `html_type` prop for submit/reset buttons. + +**When to Modify the Component:** + +If you need to: +- Add new props for BC compatibility (e.g., new variant types) +- Support additional HTML attributes or behaviors +- Handle edge cases (e.g., complex icon scenarios, custom event handlers) +- Add new size variants or icon positions + +**Process (Local Changes Only):** +1. Create a **local** branch in `design-system-twig`: + ```bash + cd vendor/ibexa/design-system-twig + git checkout -b feature/button-component-enhancement + ``` +2. Modify the button component template at: + ``` + src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig + ``` +3. Test the changes with the affected admin-ui templates +4. Ensure backward compatibility - existing usage must not break +5. Create **local** commits with clear messages +6. Update this MIGRATION_RULES.md with the new patterns + +**Important:** +- Always maintain backward compatibility. New props should be optional and not break existing usage. +- ⚠️ **Do NOT push or create PRs automatically** - the user will do this manually when ready + +### Step 3: Migration Strategy + +**Primary Goal:** Replace ALL buttons in the codebase with the component. + +**Process:** +1. Identify all buttons in a template file +2. Replace them one by one using the patterns in this document +3. Run frontend tests after each replacement or batch of replacements +4. Fix any test failures by: + - Adjusting JS selectors (see section 2: JS HANDOFF) + - Updating component props + - Adding missing data attributes + - Adjusting the component in `design-system-twig` if necessary + +**If Tests Cannot Be Fixed:** + +After reasonable effort (e.g., 30-60 minutes per button), if frontend tests still fail: + +1. **Revert the button replacement** to the legacy markup +2. **Add a TODO comment** above the button: + +```twig +{# TODO: Migrate to twig:ibexa:button component + Reason: [Describe the blocker - e.g., "JS relies on specific DOM structure not supported by component"] + See: MIGRATION_RULES.md +#} + +``` + +3. **Document the blocker** in a migration tracking issue or this file +4. **Move on** to the next button + +**Decision Timeline:** +- Spend reasonable time debugging (30-60 min per button) +- If blocked, mark with TODO and continue +- Don't let one problematic button block the entire migration + +### Step 4: Git Workflow - LOCAL CHANGES ONLY + +**⚠️ CRITICAL: DO NOT PUSH OR CREATE PRs AUTOMATICALLY** + +All changes must remain local until explicitly requested by the user. + +**What AI Assistants (Claude, OpenAI Codex, etc.) MUST NOT DO:** +- ❌ DO NOT run `git push` or `git push origin ` +- ❌ DO NOT create pull requests using `gh pr create` or similar commands +- ❌ DO NOT push commits to remote repositories +- ❌ DO NOT force push (`git push --force`) +- ❌ DO NOT automatically merge or rebase with remote branches + +**What AI Assistants CAN DO:** +- ✅ Make local file changes +- ✅ Run `git status` to show changes +- ✅ Run `git diff` to show diffs +- ✅ Create local commits with `git add` and `git commit` +- ✅ Create local branches with `git checkout -b ` +- ✅ Run tests locally +- ✅ Show commit history with `git log` + +**User Control:** +The user will manually decide when to: +1. Review all changes with `git diff` or `git status` +2. Push changes to remote: `git push origin ` +3. Create pull requests via GitHub UI or `gh` CLI +4. Request code review +5. Merge changes + +**Example Workflow:** +```bash +# AI Assistant creates local changes and commits +git add . +git commit -m "Migrate buttons in draft_list.html.twig to twig:ibexa:button component" + +# AI Assistant shows status +git status + +# USER manually pushes when ready +git push origin feature/button-migration + +# USER manually creates PR when ready +gh pr create --title "Migrate buttons to design system component" +``` + +--- + +## Migration Checklist + +- [ ] Replace ` +``` + +**NEW:** +```twig + + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} + +``` + +### Example 2: Icon-Only Edit Button + +**OLD:** +```twig + +``` + +**NEW:** +```twig + +``` + +### Example 3: Small Secondary Submit Button + +**OLD:** +```twig + +``` + +**NEW:** +```twig + + {{ 'search.apply'|trans|desc('Apply') }} + +``` + +### Example 4: Primary Submit with Custom Classes + +**OLD:** +```twig + +``` + +**NEW:** +```twig + + {{ 'edit_translation.languages.edit'|trans|desc('Edit') }} + +``` diff --git a/migrate-buttons.sh b/migrate-buttons.sh new file mode 100755 index 000000000..fdf87a641 --- /dev/null +++ b/migrate-buttons.sh @@ -0,0 +1,788 @@ +#!/bin/bash +set -euo pipefail + +#=============================================================================== +# Button Migration Orchestrator +# Automates migration of legacy buttons to twig:ibexa:button component +#=============================================================================== + +# Configuration +readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +readonly WORK_DIR="$SCRIPT_DIR/.button-migration" +readonly PLAN_FILE="$SCRIPT_DIR/BUTTON_MIGRATION_PLAN.txt" +readonly PROMPT_TEMPLATE="$WORK_DIR/prompts/migrate-chunk.txt" +readonly LOG_FILE="$WORK_DIR/migration.log" +readonly FAILED_FILE="$WORK_DIR/failed-chunks.txt" +readonly PROGRESS_FILE="$WORK_DIR/progress.txt" + +# Settings +readonly MAX_RETRIES=2 # 3 total attempts (initial + 2 retries) +readonly TEST_TIMEOUT=300 # 5 minutes +readonly OPENCODE_MODEL="anthropic/claude-sonnet-4-5-20250929" + +# Colors +readonly GREEN='\033[0;32m' +readonly RED='\033[0;31m' +readonly YELLOW='\033[1;33m' +readonly BLUE='\033[0;34m' +readonly CYAN='\033[0;36m' +readonly NC='\033[0m' # No Color + +#=============================================================================== +# LOGGING +#=============================================================================== + +log() { + local level=$1 + shift + local message="$*" + local timestamp=$(date '+%Y-%m-%d %H:%M:%S') + echo "[$timestamp] [$level] $message" >> "$LOG_FILE" + + # Also log errors to stderr + if [[ "$level" == "ERROR" ]]; then + echo "[$timestamp] [$level] $message" >&2 + fi +} + +log_and_echo() { + local level=$1 + shift + local message="$*" + log "$level" "$message" + echo -e "$message" +} + +#=============================================================================== +# VALIDATION +#=============================================================================== + +validate_environment() { + log "INFO" "Validating environment..." + + # Check OpenCode + if ! command -v opencode &> /dev/null; then + log_and_echo "ERROR" "${RED}✗ opencode not found${NC}" + echo " Install: npm install -g @opencode/cli" + exit 1 + fi + log "INFO" "✓ OpenCode found: $(which opencode)" + + # Check Yarn + if ! command -v yarn &> /dev/null; then + log_and_echo "ERROR" "${RED}✗ yarn not found${NC}" + echo " Install Node.js and Yarn first" + exit 1 + fi + log "INFO" "✓ Yarn found: $(which yarn)" + + # Check Git + if ! git rev-parse --git-dir &> /dev/null; then + log_and_echo "ERROR" "${RED}✗ Not in a git repository${NC}" + exit 1 + fi + log "INFO" "✓ Git repository detected" + + # Check for uncommitted changes + if ! git diff-index --quiet HEAD -- 2>/dev/null; then + log_and_echo "ERROR" "${RED}✗ Uncommitted changes detected${NC}" + echo " Commit or stash your changes first: git status" + exit 1 + fi + log "INFO" "✓ No uncommitted changes" + + # Check branch (not main/master) + local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") + if [[ "$branch" == "main" || "$branch" == "master" ]]; then + log_and_echo "ERROR" "${RED}✗ Cannot run on main/master branch${NC}" + echo " Create a feature branch first: git checkout -b feature/button-migration" + exit 1 + fi + log "INFO" "✓ On feature branch: $branch" + + # Check required files + if [[ ! -f "$PLAN_FILE" ]]; then + log_and_echo "ERROR" "${RED}✗ Migration plan not found: $PLAN_FILE${NC}" + exit 1 + fi + log "INFO" "✓ Migration plan found" + + if [[ ! -f "MIGRATION_RULES.md" ]]; then + log_and_echo "ERROR" "${RED}✗ MIGRATION_RULES.md not found${NC}" + exit 1 + fi + log "INFO" "✓ MIGRATION_RULES.md found" + + if [[ ! -f ".claude/skills/validate-frontend-changes.md" ]]; then + log_and_echo "ERROR" "${RED}✗ validate-frontend-changes skill not found${NC}" + exit 1 + fi + log "INFO" "✓ validate-frontend-changes skill found" + + log_and_echo "SUCCESS" "${GREEN}✓ Environment validation passed${NC}" +} + +#=============================================================================== +# JS FILE DETECTION +#=============================================================================== + +identify_related_js() { + local twig_file=$1 + local js_dir="src/bundle/Resources/public/js/scripts" + + # Extract patterns from file path + local filename=$(basename "$twig_file" .html.twig) + local category=$(dirname "$twig_file" | cut -d'/' -f1) + + # Strategy 1: Look for JS files that reference button classes + local found_js=$(find "$js_dir" -name "*.js" -type f 2>/dev/null | while read js_file; do + # Check if this JS file references ibexa-btn classes + if grep -q "ibexa-btn" "$js_file" 2>/dev/null; then + # Check if it might be related to this template + # Match by filename keywords or category + local js_basename=$(basename "$js_file" .js) + + # Direct match or keyword match + if echo "$js_basename" | grep -q "$category"; then + echo "$js_file" + elif echo "$filename" | grep -E "$(echo $js_basename | sed 's/admin\.//' | sed 's/\./-/g')" &>/dev/null; then + echo "$js_file" + fi + fi + done | sort -u) + + echo "$found_js" +} + +#=============================================================================== +# PROMPT BUILDING +#=============================================================================== + +build_opencode_prompt() { + local chunk_id=$1 + shift + local twig_files=("$@") + + # Get category from first file + local category=$(dirname "${twig_files[0]}" | cut -d'/' -f1) + + # Count files + local twig_count=${#twig_files[@]} + + # Build Twig file list with numbering + local twig_list="" + for i in "${!twig_files[@]}"; do + twig_list+=" $((i+1)). ${twig_files[$i]}"$'\n' + done + + # Identify related JS files + local js_files=() + for twig in "${twig_files[@]}"; do + local related_js=$(identify_related_js "$twig") + if [[ -n "$related_js" ]]; then + while IFS= read -r js_file; do + js_files+=("$js_file") + done <<< "$related_js" + fi + done + + # Remove duplicates (handle empty array) + local unique_js=() + if [[ ${#js_files[@]} -gt 0 ]]; then + unique_js=($(printf '%s\n' "${js_files[@]}" | sort -u)) + fi + local js_count=${#unique_js[@]} + + # Build JS file list + local js_list="" + if [[ $js_count -gt 0 ]]; then + for i in "${!unique_js[@]}"; do + local js_basename=$(basename "${unique_js[$i]}") + js_list+=" $((i+1)). $js_basename"$'\n' + done + else + js_list=" (None detected - pure template migration)"$'\n' + fi + + # Check for unmapped variants + local special_notes="" + local has_unmapped=$(grep "^${chunk_id}|" "$PLAN_FILE" | grep -c "|1|" || echo "0") + + if [[ "$has_unmapped" != "0" ]]; then + local unmapped_info=$(grep "^${chunk_id}|" "$PLAN_FILE" | grep "|1|" | head -1 | cut -d'|' -f6) + unmapped_info="${unmapped_info#UNMAPPED:}" + special_notes=" + +⚠️ SPECIAL HANDLING REQUIRED: +This chunk contains UNMAPPED button variants: $unmapped_info +These variants are NOT yet supported by twig:ibexa:button component. + +For buttons with unmapped variants, ADD TODO COMMENT: +{# TODO: Migrate to twig:ibexa:button component + Reason: Uses unmapped variant '$unmapped_info' not in design system + See: MIGRATION_RULES.md Section 1 - Additional Legacy Variants (Not Yet Mapped) +#} + +Keep these buttons as legacy + diff --git a/src/bundle/Resources/views/themes/admin/account/register/index.html.twig b/src/bundle/Resources/views/themes/admin/account/register/index.html.twig index 9d7150bbe..f2fbcb66b 100644 --- a/src/bundle/Resources/views/themes/admin/account/register/index.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/register/index.html.twig @@ -18,7 +18,7 @@ {% endif %} {% endfor %} {{ form_widget(form.children.register, { - attr: { class: 'btn ibexa-btn ibexa-btn--primary ibexa-login__btn ibexa-login__btn--register' } + attr: { class: 'ibexa-login__btn ibexa-login__btn--register' } }) }} {{ form_end(form) }} diff --git a/src/bundle/Resources/views/themes/admin/account/reset_password/index.html.twig b/src/bundle/Resources/views/themes/admin/account/reset_password/index.html.twig index b8fcf8c01..52468e0c3 100644 --- a/src/bundle/Resources/views/themes/admin/account/reset_password/index.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/reset_password/index.html.twig @@ -9,7 +9,7 @@
{{ form_widget(form_reset_user_password.new_password) }}
- {{ form_widget(form_reset_user_password.update, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary ibexa-login__btn--change-password'}}) }} + {{ form_widget(form_reset_user_password.update, {'attr': {'class': 'ibexa-login__btn--change-password'}}) }} {{ form_end(form_reset_user_password) }} {% endif %} diff --git a/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig b/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig index 68ff88a65..3d017f726 100644 --- a/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig @@ -18,6 +18,10 @@ {{ form(site_access_form) }}
+ {# TODO: Migrate to twig:ibexa:button component + Reason: Uses unmapped variant 'ibexa-btn--dark-selector' not in design system + See: MIGRATION_RULES.md Section 1 - Additional Legacy Variants (Not Yet Mapped) + #}
{{ form_end(form) }} diff --git a/src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig b/src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig index fb7269c31..bdf858f07 100644 --- a/src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig @@ -43,13 +43,21 @@ main_language_code: form.vars.main_language_code }) %} - + {{ custom_footer|raw }} - + {% endblock %} {% block after_body %} From 1641f670ad9c11b432ed5b7cee3ed948ce165f53 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 4 Feb 2026 10:43:15 +0100 Subject: [PATCH 005/234] Reorganize button migration files into migrations/ directory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Move BUTTON_MIGRATION_PLAN.txt → migrations/button/ - Move MIGRATION_RULES.md → migrations/button/ - Move prompts/ → migrations/button/prompts/ - Add .migration-state/ for runtime tracking (gitignored) - Prepare structure for multi-component migrations (badges, etc.) --- .gitignore | 5 + migrations/button/MIGRATION_PLAN.txt | 16 + migrations/button/MIGRATION_RULES.md | 810 ++++++++++++++++++++ migrations/button/prompts/migrate-chunk.txt | 53 ++ 4 files changed, 884 insertions(+) create mode 100644 migrations/button/MIGRATION_PLAN.txt create mode 100644 migrations/button/MIGRATION_RULES.md create mode 100644 migrations/button/prompts/migrate-chunk.txt diff --git a/.gitignore b/.gitignore index 91b5e504f..fee6267cf 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,8 @@ composer.lock /var tsconfig.json .button-migration/*.log + +# Migration tool runtime state +.button-migration/ +migrations/*/.migration-state/ +*.migration.log diff --git a/migrations/button/MIGRATION_PLAN.txt b/migrations/button/MIGRATION_PLAN.txt new file mode 100644 index 000000000..e51cdb2ba --- /dev/null +++ b/migrations/button/MIGRATION_PLAN.txt @@ -0,0 +1,16 @@ +# Button Migration Orchestration Plan +# Format: CHUNK_ID|FILE_PATH|BUTTON_COUNT|HAS_UNMAPPED|CATEGORY|NOTES + +# CHUNK 1: Account - Authentication (7 files, ~10 buttons) +CHUNK_01|account/login/index.html.twig|1|0|account| +CHUNK_01|account/register/index.html.twig|1|0|account| +CHUNK_01|account/reset_password/index.html.twig|1|0|account| +CHUNK_01|account/forgot_password/index_with_login.html.twig|1|0|account| +CHUNK_01|account/error/credentials_expired.html.twig|1|0|account| +CHUNK_01|account/profile/view.html.twig|2|0|account| +CHUNK_01|account/forgot_password/index.html.twig|3|0|account| + +# CHUNK 2: Content - Widgets & Preview (3 files, ~9 buttons) +CHUNK_02|content/widget/content_create.html.twig|2|0|content-widget| +CHUNK_02|content/widget/content_edit.html.twig|2|0|content-widget| +CHUNK_02|content/content_preview.html.twig|5|0|content-widget| diff --git a/migrations/button/MIGRATION_RULES.md b/migrations/button/MIGRATION_RULES.md new file mode 100644 index 000000000..6b744c725 --- /dev/null +++ b/migrations/button/MIGRATION_RULES.md @@ -0,0 +1,810 @@ +# Button Migration Rules: Legacy Twig → Twig Component + +This document outlines the migration pattern from legacy button markup to the new `twig:ibexa:button` component. + +--- + +## ⚠️ IMPORTANT: Git Workflow Policy + +**FOR AI ASSISTANTS (Claude, OpenAI Codex, etc.):** + +All changes MUST remain **local only**. Do NOT push changes or create pull requests automatically. + +- ❌ **NEVER** run `git push` +- ❌ **NEVER** run `gh pr create` or similar PR commands +- ❌ **NEVER** push to remote repositories +- ✅ **ONLY** make local changes, commits, and branches +- ✅ **ALWAYS** let the user manually push and create PRs + +See **Section 4: Step 4 - Git Workflow** for complete details. + +--- + +## Quick Reference + +**Component Location:** +``` +vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig +``` + +**Basic Migration:** +```twig + + + + +Submit +``` + +**Supported Variants:** `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` +**Supported Sizes:** `small`, `medium` (default) +**Key Props:** `type`, `size`, `icon`, `icon_size`, `html_type`, `:disabled`, `class` + +--- + +## 1. PATTERN: Transformation Rules + +### Basic Button Structure + +**OLD (Legacy):** +```twig + +``` + +**NEW (Component):** +```twig + + {{ 'button.text'|trans }} + +``` + +### Variant Mapping + +| Legacy Class | Component Type | Notes | +|--------------|----------------|-------| +| `ibexa-btn--ghost` | `tertiary` | Ghost style (transparent background) | +| `ibexa-btn--primary` | `primary` | Primary action button | +| `ibexa-btn--secondary` | `secondary` | Secondary action button | +| `ibexa-btn--tertiary` | `tertiary-alt` | Tertiary action button | + +**Additional Legacy Variants (Not Yet Mapped):** + +These legacy variants do NOT have direct component equivalents. Keep them as legacy buttons with TODO comments until the design system component is extended: + +- `ibexa-btn--ghost-info` - Ghost button with info color +- `ibexa-btn--dark` - Dark background button +- `ibexa-btn--filled-info` - Filled info button +- `ibexa-btn--info` - Info styled button +- `ibexa-btn--neon-info` - Neon info button +- `ibexa-btn--selector` - Selector button variant +- `ibexa-btn--dark-selector` - Dark selector button +- `ibexa-btn--secondary-light` - Light secondary button +- `ibexa-btn--secondary-dark` - Dark secondary button + +**Usage:** If you encounter buttons with these classes, leave them as-is and add a TODO comment. + +**Finding All Button Variants in Codebase:** + +To discover all button class patterns currently used: +```bash +git grep -h "ibexa-btn--" | grep -oE "ibexa-btn--[a-z-]+" | sort -u +``` + +This helps identify which buttons can be migrated vs. which need special handling. + +### Icon Mapping + +**OLD:** +```twig + + + +``` + +**NEW:** +```twig +icon="edit" +icon_size="small-medium" +``` + +### Icon-Only Buttons + +Buttons with only an icon (no text) are automatically detected by the component. + +**OLD:** +```twig + +``` + +**NEW:** +```twig + +``` + +**Note:** Remove the `ibexa-btn--no-text` class - the component automatically detects icon-only buttons when no text content is provided. + +### Button Size Mapping + +The design system button component supports two size variants: + +| Legacy Class | Component Prop | Notes | +|--------------|----------------|-------| +| `ibexa-btn--small` | `size="small"` | Small button (32px height) | +| (default) | `size="medium"` or omit | Default/medium size (46px height) | + +**Important Notes:** +- The component's default size is `medium` (can be omitted) +- Legacy code without `ibexa-btn--small` should NOT specify a size prop +- The component does NOT support a `large` size variant + +**Component Size Variants (from design-system-twig):** +```twig +size: { + medium: 'ids-btn--medium', + small: 'ids-btn--small', +} +``` + +### HTML Type Attribute + +| Legacy Attribute | Component Prop | Notes | +|------------------|----------------|-------| +| `type="button"` | (default, omit) | Default button type | +| `type="submit"` | `html_type="submit"` | Form submit button | +| `type="reset"` | `html_type="reset"` | Form reset button | + +--- + +## Component Props Reference + +### Available Props (from design-system-twig) + +```twig + + Button Label + +``` + +### Prop Details + +| Prop | Type | Default | Description | +|------|------|---------|-------------| +| `type` | string | - | Button variant: `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` | +| `size` | string | `medium` | Button size: `small` or `medium` | +| `icon` | string | - | Icon name (renders using `twig:ibexa:icon`) | +| `icon_size` | string | - | Icon size passed to icon component | +| `html_type` | string | `button` | HTML button type attribute | +| `disabled` | boolean | `false` | Disabled state (use `:disabled` for boolean) | +| `class` | string | - | Additional CSS classes (appended to component classes) | +| `attributes` | object | - | All other attributes passed through to ` +``` + +**Button with Text and Icon:** +```twig +Delete +``` + +Renders as: +```html + +``` + +**Key Points:** +- Icons wrapped in `
` +- Text wrapped in `
` +- Both IDS classes (`ids-btn--*`) and legacy BC classes (`ibexa-btn--*`) are rendered + +--- + +## 4. WORKFLOW: Migration Process + +### Step 1: Analyze New Cases + +When encountering a button pattern not covered in this document: + +#### 1.1. Locate the Button Component + +The button component is located at: +``` +vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig +``` + +#### 1.2. Understand the Component Structure + +Read the component template to understand: + +**Available Variants:** +```twig +variants: { + type: { + primary: 'ids-btn--primary', + secondary: 'ids-btn--secondary', + tertiary: 'ids-btn--tertiary', + 'secondary-alt': 'ids-btn--secondary-alt', + 'tertiary-alt': 'ids-btn--tertiary-alt', + }, + size: { + medium: 'ids-btn--medium', + small: 'ids-btn--small', + }, +} +``` + +**How Props Work:** +- `type` - Button variant (maps to CSS classes) +- `size` - Button size (maps to CSS classes) +- `icon` - Icon name (renders `twig:ibexa:icon` component) +- `icon_size` - Size prop passed to icon component +- `html_type` - HTML button type attribute (`button`, `submit`, `reset`) +- `disabled` - Boolean flag for disabled state +- `attributes` - All other HTML attributes passed through + +**Component Logic:** +- Icon-only detection: `icon_only = (not has_content) and icon is not empty` +- Disabled class: Adds `ids-btn--disabled` when disabled +- Icon wrapping: `
` → `` +- Label wrapping: `
` for text content + +#### 1.3. Map Legacy to Component + +For each legacy button: + +1. **Identify the variant** - Map `ibexa-btn--{variant}` to component `type` +2. **Check size** - Look for `ibexa-btn--small` → `size="small"` +3. **Extract icon** - Pull icon name from SVG `` element +4. **Preserve data attributes** - Copy all `data-*` attributes +5. **Keep custom classes** - Remove `btn`, `ibexa-btn`, variant classes; keep the rest +6. **Check disabled state** - `disabled` attribute → `:disabled="true"` +7. **Verify HTML type** - `type="submit"` → `html_type="submit"` + +#### 1.4. Test the Migration + +1. Replace the button in the template +2. Render the page and inspect the HTML output +3. Verify all classes, attributes, and structure are correct +4. Test interactive functionality (clicks, disabled state, etc.) + +#### 1.5. Document New Patterns + +If you discover a new pattern, add it to this document: +- Add to **Variant Mapping** section if new variant +- Add to **Special Cases** if edge case +- Update **Complete Examples** with new example + +### Step 2: Adjust Design System Component (If Needed) + +In some cases, the button component from `design-system-twig` may need adjustments to support specific use cases. + +**Check Recent Commits in `design-system-twig`** + +Before making changes, review recent commits to understand component evolution: + +```bash +cd vendor/ibexa/design-system-twig +git log -5 --oneline +git show HEAD # View last commit details +``` + +**Recent Example:** +``` +commit 67ba4d958e3539228df7b3e2099dc40a6ba2d155 +Add html_type parameter to button component + +Allow setting the HTML button type attribute (button, submit, reset) +via the html_type parameter, defaulting to 'button'. +``` + +This shows how the component was extended to support `html_type` prop for submit/reset buttons. + +**When to Modify the Component:** + +If you need to: +- Add new props for BC compatibility (e.g., new variant types) +- Support additional HTML attributes or behaviors +- Handle edge cases (e.g., complex icon scenarios, custom event handlers) +- Add new size variants or icon positions + +**Process (Local Changes Only):** +1. Create a **local** branch in `design-system-twig`: + ```bash + cd vendor/ibexa/design-system-twig + git checkout -b feature/button-component-enhancement + ``` +2. Modify the button component template at: + ``` + src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig + ``` +3. Test the changes with the affected admin-ui templates +4. Ensure backward compatibility - existing usage must not break +5. Create **local** commits with clear messages +6. Update this MIGRATION_RULES.md with the new patterns + +**Important:** +- Always maintain backward compatibility. New props should be optional and not break existing usage. +- ⚠️ **Do NOT push or create PRs automatically** - the user will do this manually when ready + +### Step 3: Migration Strategy + +**Primary Goal:** Replace ALL buttons in the codebase with the component. + +**Process:** +1. Identify all buttons in a template file +2. Replace them one by one using the patterns in this document +3. Run frontend tests after each replacement or batch of replacements +4. Fix any test failures by: + - Adjusting JS selectors (see section 2: JS HANDOFF) + - Updating component props + - Adding missing data attributes + - Adjusting the component in `design-system-twig` if necessary + +**If Tests Cannot Be Fixed:** + +After reasonable effort (e.g., 30-60 minutes per button), if frontend tests still fail: + +1. **Revert the button replacement** to the legacy markup +2. **Add a TODO comment** above the button: + +```twig +{# TODO: Migrate to twig:ibexa:button component + Reason: [Describe the blocker - e.g., "JS relies on specific DOM structure not supported by component"] + See: MIGRATION_RULES.md +#} + +``` + +3. **Document the blocker** in a migration tracking issue or this file +4. **Move on** to the next button + +**Decision Timeline:** +- Spend reasonable time debugging (30-60 min per button) +- If blocked, mark with TODO and continue +- Don't let one problematic button block the entire migration + +### Step 4: Git Workflow - LOCAL CHANGES ONLY + +**⚠️ CRITICAL: DO NOT PUSH OR CREATE PRs AUTOMATICALLY** + +All changes must remain local until explicitly requested by the user. + +**What AI Assistants (Claude, OpenAI Codex, etc.) MUST NOT DO:** +- ❌ DO NOT run `git push` or `git push origin ` +- ❌ DO NOT create pull requests using `gh pr create` or similar commands +- ❌ DO NOT push commits to remote repositories +- ❌ DO NOT force push (`git push --force`) +- ❌ DO NOT automatically merge or rebase with remote branches + +**What AI Assistants CAN DO:** +- ✅ Make local file changes +- ✅ Run `git status` to show changes +- ✅ Run `git diff` to show diffs +- ✅ Create local commits with `git add` and `git commit` +- ✅ Create local branches with `git checkout -b ` +- ✅ Run tests locally +- ✅ Show commit history with `git log` + +**User Control:** +The user will manually decide when to: +1. Review all changes with `git diff` or `git status` +2. Push changes to remote: `git push origin ` +3. Create pull requests via GitHub UI or `gh` CLI +4. Request code review +5. Merge changes + +**Example Workflow:** +```bash +# AI Assistant creates local changes and commits +git add . +git commit -m "Migrate buttons in draft_list.html.twig to twig:ibexa:button component" + +# AI Assistant shows status +git status + +# USER manually pushes when ready +git push origin feature/button-migration + +# USER manually creates PR when ready +gh pr create --title "Migrate buttons to design system component" +``` + +--- + +## Migration Checklist + +- [ ] Replace ` +``` + +**NEW:** +```twig + + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} + +``` + +### Example 2: Icon-Only Edit Button + +**OLD:** +```twig + +``` + +**NEW:** +```twig + +``` + +### Example 3: Small Secondary Submit Button + +**OLD:** +```twig + +``` + +**NEW:** +```twig + + {{ 'search.apply'|trans|desc('Apply') }} + +``` + +### Example 4: Primary Submit with Custom Classes + +**OLD:** +```twig + +``` + +**NEW:** +```twig + + {{ 'edit_translation.languages.edit'|trans|desc('Edit') }} + +``` diff --git a/migrations/button/prompts/migrate-chunk.txt b/migrations/button/prompts/migrate-chunk.txt new file mode 100644 index 000000000..94651d96e --- /dev/null +++ b/migrations/button/prompts/migrate-chunk.txt @@ -0,0 +1,53 @@ +ROLE: +You are a Senior Ibexa DXP Frontend Developer specializing in design system migrations and frontend component refactoring. + +CONTEXT: +- Chunk: {{CHUNK_ID}} +- Category: {{CATEGORY}} +- Twig Files to Migrate ({{FILE_COUNT}}): +{{TWIG_FILE_LIST}} +- Related JavaScript Files ({{JS_COUNT}}): +{{JS_FILE_LIST}} +- Migration Rules: MIGRATION_RULES.md +- Validation Skill: .claude/skills/validate-frontend-changes.md +{{SPECIAL_NOTES}} + +TASK: +1. Read MIGRATION_RULES.md for complete button migration patterns and examples. +2. For each Twig file in the list above: + a. Identify all legacy -``` - -**NEW (Component):** -```twig - - {{ 'button.text'|trans }} - -``` - -### Variant Mapping - -| Legacy Class | Component Type | Notes | -|--------------|----------------|-------| -| `ibexa-btn--ghost` | `tertiary` | Ghost style (transparent background) | -| `ibexa-btn--primary` | `primary` | Primary action button | -| `ibexa-btn--secondary` | `secondary` | Secondary action button | -| `ibexa-btn--tertiary` | `tertiary-alt` | Tertiary action button | - -**Additional Legacy Variants (Not Yet Mapped):** - -These legacy variants do NOT have direct component equivalents. Keep them as legacy buttons with TODO comments until the design system component is extended: - -- `ibexa-btn--ghost-info` - Ghost button with info color -- `ibexa-btn--dark` - Dark background button -- `ibexa-btn--filled-info` - Filled info button -- `ibexa-btn--info` - Info styled button -- `ibexa-btn--neon-info` - Neon info button -- `ibexa-btn--selector` - Selector button variant -- `ibexa-btn--dark-selector` - Dark selector button -- `ibexa-btn--secondary-light` - Light secondary button -- `ibexa-btn--secondary-dark` - Dark secondary button - -**Usage:** If you encounter buttons with these classes, leave them as-is and add a TODO comment. - -**Finding All Button Variants in Codebase:** - -To discover all button class patterns currently used: -```bash -git grep -h "ibexa-btn--" | grep -oE "ibexa-btn--[a-z-]+" | sort -u -``` - -This helps identify which buttons can be migrated vs. which need special handling. - -### Icon Mapping - -**OLD:** -```twig - - - -``` - -**NEW:** -```twig -icon="edit" -icon_size="small-medium" -``` - -### Icon-Only Buttons - -Buttons with only an icon (no text) are automatically detected by the component. - -**OLD:** -```twig - -``` - -**NEW:** -```twig - -``` - -**Note:** Remove the `ibexa-btn--no-text` class - the component automatically detects icon-only buttons when no text content is provided. - -### Button Size Mapping - -The design system button component supports two size variants: - -| Legacy Class | Component Prop | Notes | -|--------------|----------------|-------| -| `ibexa-btn--small` | `size="small"` | Small button (32px height) | -| (default) | `size="medium"` or omit | Default/medium size (46px height) | - -**Important Notes:** -- The component's default size is `medium` (can be omitted) -- Legacy code without `ibexa-btn--small` should NOT specify a size prop -- The component does NOT support a `large` size variant - -**Component Size Variants (from design-system-twig):** -```twig -size: { - medium: 'ids-btn--medium', - small: 'ids-btn--small', -} -``` - -### HTML Type Attribute - -| Legacy Attribute | Component Prop | Notes | -|------------------|----------------|-------| -| `type="button"` | (default, omit) | Default button type | -| `type="submit"` | `html_type="submit"` | Form submit button | -| `type="reset"` | `html_type="reset"` | Form reset button | - ---- - -## Component Props Reference - -### Available Props (from design-system-twig) - -```twig - - Button Label - -``` - -### Prop Details - -| Prop | Type | Default | Description | -|------|------|---------|-------------| -| `type` | string | - | Button variant: `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` | -| `size` | string | `medium` | Button size: `small` or `medium` | -| `icon` | string | - | Icon name (renders using `twig:ibexa:icon`) | -| `icon_size` | string | - | Icon size passed to icon component | -| `html_type` | string | `button` | HTML button type attribute | -| `disabled` | boolean | `false` | Disabled state (use `:disabled` for boolean) | -| `class` | string | - | Additional CSS classes (appended to component classes) | -| `attributes` | object | - | All other attributes passed through to ` -``` - -**Button with Text and Icon:** -```twig -Delete -``` - -Renders as: -```html - -``` - -**Key Points:** -- Icons wrapped in `
` -- Text wrapped in `
` -- Both IDS classes (`ids-btn--*`) and legacy BC classes (`ibexa-btn--*`) are rendered - ---- - -## 4. WORKFLOW: Migration Process - -### Step 1: Analyze New Cases - -When encountering a button pattern not covered in this document: - -#### 1.1. Locate the Button Component - -The button component is located at: -``` -vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig -``` - -#### 1.2. Understand the Component Structure - -Read the component template to understand: - -**Available Variants:** -```twig -variants: { - type: { - primary: 'ids-btn--primary', - secondary: 'ids-btn--secondary', - tertiary: 'ids-btn--tertiary', - 'secondary-alt': 'ids-btn--secondary-alt', - 'tertiary-alt': 'ids-btn--tertiary-alt', - }, - size: { - medium: 'ids-btn--medium', - small: 'ids-btn--small', - }, -} -``` - -**How Props Work:** -- `type` - Button variant (maps to CSS classes) -- `size` - Button size (maps to CSS classes) -- `icon` - Icon name (renders `twig:ibexa:icon` component) -- `icon_size` - Size prop passed to icon component -- `html_type` - HTML button type attribute (`button`, `submit`, `reset`) -- `disabled` - Boolean flag for disabled state -- `attributes` - All other HTML attributes passed through - -**Component Logic:** -- Icon-only detection: `icon_only = (not has_content) and icon is not empty` -- Disabled class: Adds `ids-btn--disabled` when disabled -- Icon wrapping: `
` → `` -- Label wrapping: `
` for text content - -#### 1.3. Map Legacy to Component - -For each legacy button: - -1. **Identify the variant** - Map `ibexa-btn--{variant}` to component `type` -2. **Check size** - Look for `ibexa-btn--small` → `size="small"` -3. **Extract icon** - Pull icon name from SVG `` element -4. **Preserve data attributes** - Copy all `data-*` attributes -5. **Keep custom classes** - Remove `btn`, `ibexa-btn`, variant classes; keep the rest -6. **Check disabled state** - `disabled` attribute → `:disabled="true"` -7. **Verify HTML type** - `type="submit"` → `html_type="submit"` - -#### 1.4. Test the Migration - -1. Replace the button in the template -2. Render the page and inspect the HTML output -3. Verify all classes, attributes, and structure are correct -4. Test interactive functionality (clicks, disabled state, etc.) - -#### 1.5. Document New Patterns - -If you discover a new pattern, add it to this document: -- Add to **Variant Mapping** section if new variant -- Add to **Special Cases** if edge case -- Update **Complete Examples** with new example - -### Step 2: Adjust Design System Component (If Needed) - -In some cases, the button component from `design-system-twig` may need adjustments to support specific use cases. - -**Check Recent Commits in `design-system-twig`** - -Before making changes, review recent commits to understand component evolution: - -```bash -cd vendor/ibexa/design-system-twig -git log -5 --oneline -git show HEAD # View last commit details -``` - -**Recent Example:** -``` -commit 67ba4d958e3539228df7b3e2099dc40a6ba2d155 -Add html_type parameter to button component - -Allow setting the HTML button type attribute (button, submit, reset) -via the html_type parameter, defaulting to 'button'. -``` - -This shows how the component was extended to support `html_type` prop for submit/reset buttons. - -**When to Modify the Component:** - -If you need to: -- Add new props for BC compatibility (e.g., new variant types) -- Support additional HTML attributes or behaviors -- Handle edge cases (e.g., complex icon scenarios, custom event handlers) -- Add new size variants or icon positions - -**Process (Local Changes Only):** -1. Create a **local** branch in `design-system-twig`: - ```bash - cd vendor/ibexa/design-system-twig - git checkout -b feature/button-component-enhancement - ``` -2. Modify the button component template at: - ``` - src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig - ``` -3. Test the changes with the affected admin-ui templates -4. Ensure backward compatibility - existing usage must not break -5. Create **local** commits with clear messages -6. Update this MIGRATION_RULES.md with the new patterns - -**Important:** -- Always maintain backward compatibility. New props should be optional and not break existing usage. -- ⚠️ **Do NOT push or create PRs automatically** - the user will do this manually when ready - -### Step 3: Migration Strategy - -**Primary Goal:** Replace ALL buttons in the codebase with the component. - -**Process:** -1. Identify all buttons in a template file -2. Replace them one by one using the patterns in this document -3. Run frontend tests after each replacement or batch of replacements -4. Fix any test failures by: - - Adjusting JS selectors (see section 2: JS HANDOFF) - - Updating component props - - Adding missing data attributes - - Adjusting the component in `design-system-twig` if necessary - -**If Tests Cannot Be Fixed:** - -After reasonable effort (e.g., 30-60 minutes per button), if frontend tests still fail: - -1. **Revert the button replacement** to the legacy markup -2. **Add a TODO comment** above the button: - -```twig -{# TODO: Migrate to twig:ibexa:button component - Reason: [Describe the blocker - e.g., "JS relies on specific DOM structure not supported by component"] - See: MIGRATION_RULES.md -#} - -``` - -3. **Document the blocker** in a migration tracking issue or this file -4. **Move on** to the next button - -**Decision Timeline:** -- Spend reasonable time debugging (30-60 min per button) -- If blocked, mark with TODO and continue -- Don't let one problematic button block the entire migration - -### Step 4: Git Workflow - LOCAL CHANGES ONLY - -**⚠️ CRITICAL: DO NOT PUSH OR CREATE PRs AUTOMATICALLY** - -All changes must remain local until explicitly requested by the user. - -**What AI Assistants (Claude, OpenAI Codex, etc.) MUST NOT DO:** -- ❌ DO NOT run `git push` or `git push origin ` -- ❌ DO NOT create pull requests using `gh pr create` or similar commands -- ❌ DO NOT push commits to remote repositories -- ❌ DO NOT force push (`git push --force`) -- ❌ DO NOT automatically merge or rebase with remote branches - -**What AI Assistants CAN DO:** -- ✅ Make local file changes -- ✅ Run `git status` to show changes -- ✅ Run `git diff` to show diffs -- ✅ Create local commits with `git add` and `git commit` -- ✅ Create local branches with `git checkout -b ` -- ✅ Run tests locally -- ✅ Show commit history with `git log` - -**User Control:** -The user will manually decide when to: -1. Review all changes with `git diff` or `git status` -2. Push changes to remote: `git push origin ` -3. Create pull requests via GitHub UI or `gh` CLI -4. Request code review -5. Merge changes - -**Example Workflow:** -```bash -# AI Assistant creates local changes and commits -git add . -git commit -m "Migrate buttons in draft_list.html.twig to twig:ibexa:button component" - -# AI Assistant shows status -git status - -# USER manually pushes when ready -git push origin feature/button-migration - -# USER manually creates PR when ready -gh pr create --title "Migrate buttons to design system component" -``` - ---- - -## Migration Checklist - -- [ ] Replace ` -``` - -**NEW:** -```twig - - {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} - -``` - -### Example 2: Icon-Only Edit Button - -**OLD:** -```twig - -``` - -**NEW:** -```twig - -``` - -### Example 3: Small Secondary Submit Button - -**OLD:** -```twig - -``` - -**NEW:** -```twig - - {{ 'search.apply'|trans|desc('Apply') }} - -``` - -### Example 4: Primary Submit with Custom Classes - -**OLD:** -```twig - -``` - -**NEW:** -```twig - - {{ 'edit_translation.languages.edit'|trans|desc('Edit') }} - -``` diff --git a/migrate-buttons.sh b/migrate-buttons.sh deleted file mode 100755 index fdf87a641..000000000 --- a/migrate-buttons.sh +++ /dev/null @@ -1,788 +0,0 @@ -#!/bin/bash -set -euo pipefail - -#=============================================================================== -# Button Migration Orchestrator -# Automates migration of legacy buttons to twig:ibexa:button component -#=============================================================================== - -# Configuration -readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -readonly WORK_DIR="$SCRIPT_DIR/.button-migration" -readonly PLAN_FILE="$SCRIPT_DIR/BUTTON_MIGRATION_PLAN.txt" -readonly PROMPT_TEMPLATE="$WORK_DIR/prompts/migrate-chunk.txt" -readonly LOG_FILE="$WORK_DIR/migration.log" -readonly FAILED_FILE="$WORK_DIR/failed-chunks.txt" -readonly PROGRESS_FILE="$WORK_DIR/progress.txt" - -# Settings -readonly MAX_RETRIES=2 # 3 total attempts (initial + 2 retries) -readonly TEST_TIMEOUT=300 # 5 minutes -readonly OPENCODE_MODEL="anthropic/claude-sonnet-4-5-20250929" - -# Colors -readonly GREEN='\033[0;32m' -readonly RED='\033[0;31m' -readonly YELLOW='\033[1;33m' -readonly BLUE='\033[0;34m' -readonly CYAN='\033[0;36m' -readonly NC='\033[0m' # No Color - -#=============================================================================== -# LOGGING -#=============================================================================== - -log() { - local level=$1 - shift - local message="$*" - local timestamp=$(date '+%Y-%m-%d %H:%M:%S') - echo "[$timestamp] [$level] $message" >> "$LOG_FILE" - - # Also log errors to stderr - if [[ "$level" == "ERROR" ]]; then - echo "[$timestamp] [$level] $message" >&2 - fi -} - -log_and_echo() { - local level=$1 - shift - local message="$*" - log "$level" "$message" - echo -e "$message" -} - -#=============================================================================== -# VALIDATION -#=============================================================================== - -validate_environment() { - log "INFO" "Validating environment..." - - # Check OpenCode - if ! command -v opencode &> /dev/null; then - log_and_echo "ERROR" "${RED}✗ opencode not found${NC}" - echo " Install: npm install -g @opencode/cli" - exit 1 - fi - log "INFO" "✓ OpenCode found: $(which opencode)" - - # Check Yarn - if ! command -v yarn &> /dev/null; then - log_and_echo "ERROR" "${RED}✗ yarn not found${NC}" - echo " Install Node.js and Yarn first" - exit 1 - fi - log "INFO" "✓ Yarn found: $(which yarn)" - - # Check Git - if ! git rev-parse --git-dir &> /dev/null; then - log_and_echo "ERROR" "${RED}✗ Not in a git repository${NC}" - exit 1 - fi - log "INFO" "✓ Git repository detected" - - # Check for uncommitted changes - if ! git diff-index --quiet HEAD -- 2>/dev/null; then - log_and_echo "ERROR" "${RED}✗ Uncommitted changes detected${NC}" - echo " Commit or stash your changes first: git status" - exit 1 - fi - log "INFO" "✓ No uncommitted changes" - - # Check branch (not main/master) - local branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") - if [[ "$branch" == "main" || "$branch" == "master" ]]; then - log_and_echo "ERROR" "${RED}✗ Cannot run on main/master branch${NC}" - echo " Create a feature branch first: git checkout -b feature/button-migration" - exit 1 - fi - log "INFO" "✓ On feature branch: $branch" - - # Check required files - if [[ ! -f "$PLAN_FILE" ]]; then - log_and_echo "ERROR" "${RED}✗ Migration plan not found: $PLAN_FILE${NC}" - exit 1 - fi - log "INFO" "✓ Migration plan found" - - if [[ ! -f "MIGRATION_RULES.md" ]]; then - log_and_echo "ERROR" "${RED}✗ MIGRATION_RULES.md not found${NC}" - exit 1 - fi - log "INFO" "✓ MIGRATION_RULES.md found" - - if [[ ! -f ".claude/skills/validate-frontend-changes.md" ]]; then - log_and_echo "ERROR" "${RED}✗ validate-frontend-changes skill not found${NC}" - exit 1 - fi - log "INFO" "✓ validate-frontend-changes skill found" - - log_and_echo "SUCCESS" "${GREEN}✓ Environment validation passed${NC}" -} - -#=============================================================================== -# JS FILE DETECTION -#=============================================================================== - -identify_related_js() { - local twig_file=$1 - local js_dir="src/bundle/Resources/public/js/scripts" - - # Extract patterns from file path - local filename=$(basename "$twig_file" .html.twig) - local category=$(dirname "$twig_file" | cut -d'/' -f1) - - # Strategy 1: Look for JS files that reference button classes - local found_js=$(find "$js_dir" -name "*.js" -type f 2>/dev/null | while read js_file; do - # Check if this JS file references ibexa-btn classes - if grep -q "ibexa-btn" "$js_file" 2>/dev/null; then - # Check if it might be related to this template - # Match by filename keywords or category - local js_basename=$(basename "$js_file" .js) - - # Direct match or keyword match - if echo "$js_basename" | grep -q "$category"; then - echo "$js_file" - elif echo "$filename" | grep -E "$(echo $js_basename | sed 's/admin\.//' | sed 's/\./-/g')" &>/dev/null; then - echo "$js_file" - fi - fi - done | sort -u) - - echo "$found_js" -} - -#=============================================================================== -# PROMPT BUILDING -#=============================================================================== - -build_opencode_prompt() { - local chunk_id=$1 - shift - local twig_files=("$@") - - # Get category from first file - local category=$(dirname "${twig_files[0]}" | cut -d'/' -f1) - - # Count files - local twig_count=${#twig_files[@]} - - # Build Twig file list with numbering - local twig_list="" - for i in "${!twig_files[@]}"; do - twig_list+=" $((i+1)). ${twig_files[$i]}"$'\n' - done - - # Identify related JS files - local js_files=() - for twig in "${twig_files[@]}"; do - local related_js=$(identify_related_js "$twig") - if [[ -n "$related_js" ]]; then - while IFS= read -r js_file; do - js_files+=("$js_file") - done <<< "$related_js" - fi - done - - # Remove duplicates (handle empty array) - local unique_js=() - if [[ ${#js_files[@]} -gt 0 ]]; then - unique_js=($(printf '%s\n' "${js_files[@]}" | sort -u)) - fi - local js_count=${#unique_js[@]} - - # Build JS file list - local js_list="" - if [[ $js_count -gt 0 ]]; then - for i in "${!unique_js[@]}"; do - local js_basename=$(basename "${unique_js[$i]}") - js_list+=" $((i+1)). $js_basename"$'\n' - done - else - js_list=" (None detected - pure template migration)"$'\n' - fi - - # Check for unmapped variants - local special_notes="" - local has_unmapped=$(grep "^${chunk_id}|" "$PLAN_FILE" | grep -c "|1|" || echo "0") - - if [[ "$has_unmapped" != "0" ]]; then - local unmapped_info=$(grep "^${chunk_id}|" "$PLAN_FILE" | grep "|1|" | head -1 | cut -d'|' -f6) - unmapped_info="${unmapped_info#UNMAPPED:}" - special_notes=" - -⚠️ SPECIAL HANDLING REQUIRED: -This chunk contains UNMAPPED button variants: $unmapped_info -These variants are NOT yet supported by twig:ibexa:button component. - -For buttons with unmapped variants, ADD TODO COMMENT: -{# TODO: Migrate to twig:ibexa:button component - Reason: Uses unmapped variant '$unmapped_info' not in design system - See: MIGRATION_RULES.md Section 1 - Additional Legacy Variants (Not Yet Mapped) -#} - -Keep these buttons as legacy
From 2d5cdac4667863208145bc73a37d07ec56058c16 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 14:09:28 +0100 Subject: [PATCH 009/234] fix: Migrate account/forgot_password/confirmation_page.html.twig to design-system-twig - Replace 2 button-styled links with - Back button: tertiary with back icon - Sign in button: primary type - Preserve custom classes and translations Refs: BUTTON_MIGRATION_PLAN.md --- .../confirmation_page.html.twig | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig b/src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig index 169dc49ec..16cc95223 100644 --- a/src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig @@ -1,12 +1,16 @@ {% extends '@ibexadesign/account/base.html.twig' %} {%- block content -%} - + {% embed '@ibexadesign/ui/component/alert/alert.html.twig' with { type: 'success', @@ -23,8 +27,12 @@ |desc('

If you don’t receive the email, double check that you entered the correct email address and check your spam folder.

') }}

{%- endblock content -%} From 1752bcb8233f8cb69dccf55a30b48031ed1ee25c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 14:09:47 +0100 Subject: [PATCH 010/234] fix: Migrate ui/component/details/details.html.twig to design-system-twig - Replace 1 show more/less toggle button with - Map ghost style to tertiary type with small size - Add arrow-caret-down icon - Preserve custom classes and complex nested label structure Refs: BUTTON_MIGRATION_PLAN.md --- .../ui/component/details/details.html.twig | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig index 4a5f8add8..a7dbdd674 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig @@ -59,11 +59,13 @@
{% if item.is_ellipsized|default(false) %}
- +
{% endif %}
From feee089b75fe9add4410747557a0e581ea2d2680 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 14:10:03 +0100 Subject: [PATCH 011/234] fix: Migrate ui/field_type/edit/binary_base.html.twig to design-system-twig - Replace 1 upload file button with - Map to secondary button type - Preserve conditional disabled state - Preserve custom data-source classes and nested label Refs: BUTTON_MIGRATION_PLAN.md --- .../admin/ui/field_type/edit/binary_base.html.twig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig index 64e4c3880..640e2349f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig @@ -45,13 +45,14 @@
{{ 'fieldtype.binary_base.drag_drop'|trans|desc('Drag and drop file') }}
{{ 'fieldtype.binary_base.drag_drop.or'|trans|desc('or') }}
- +
{% if max_file_size is defined and max_file_size > 0 %}
{{ 'fieldtype.binary_base.max_file_size'|trans({'%size%': max_file_size|default(0)|ibexa_file_size(2)})|desc('Max file size: %size%') }}
From f58e272e043af1c9e4a87091377c380fa5ec8734 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 14:10:20 +0100 Subject: [PATCH 012/234] fix: Correct Twig syntax error in binary_base.html.twig - Remove double curly braces from :disabled attribute - Twig component attributes with colon prefix should not have {{ }} Refs: BUTTON_MIGRATION_PLAN.md --- .../views/themes/admin/ui/field_type/edit/binary_base.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig index 640e2349f..860f97f62 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig @@ -49,7 +49,7 @@ type="secondary" html_type="button" class="ibexa-data-source__btn-add" - :disabled="{{ attr.readonly|default(false) }}" + :disabled="attr.readonly|default(false)" > {{ 'fieldtype.binary_base.upload_file'|trans|desc('Upload file') }}
From df7ebcb628ffc9d23566e17516c1ddff74a8dabe Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 15:35:03 +0100 Subject: [PATCH 013/234] Migrate buttons in content/modal/version_conflict.html.twig - Replace legacy button-styled link with - Replace legacy button with - Migrate continue link (primary type) - Migrate cancel button (secondary type, modal dismiss) - Preserve modal dismiss functionality via attr parameter --- .../content/modal/version_conflict.html.twig | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig index f0a59ab1f..baa68b55a 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig @@ -27,11 +27,20 @@

{% endblock %} {% block footer_content %} - + {{ 'version.conflict.form.continue'|trans|desc('Continue') }} - - +
{% endblock %} {% endembed %} From 535d5d136afc137072d30db1933d359ffb22816f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 15:35:34 +0100 Subject: [PATCH 014/234] Migrate button in ui/field_type/preview/content_fields.html.twig - Replace legacy ghost button link with - Migrate download button for binary file field (ghost type, download icon) - Preserve download attribute and ml-4 spacing class --- .../ui/field_type/preview/content_fields.html.twig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig index f8e49d76e..f32d31b6a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig @@ -228,11 +228,14 @@ {{ field.value.fileName }} {{ field.value.fileSize|ibexa_file_size( 1 ) }} - - - - - +
{% endif %} {% endblock %} From b1cab6ea73f6fd4230853510a876ea4f8671c4c3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 16 Feb 2026 17:23:54 +0100 Subject: [PATCH 015/234] Migrate buttons in section/list.html.twig - Replace legacy button-styled links with - Replace legacy button with - Migrate create section link (primary type, create icon) - Migrate assign content link (ghost type, assign-section icon, UDW config) - Migrate edit section link (ghost type, edit icon) - Migrate delete button (ghost type, trash icon, modal trigger) - Preserve all data attributes and modal functionality --- .../views/themes/admin/section/list.html.twig | 84 ++++++++++--------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/section/list.html.twig b/src/bundle/Resources/views/themes/admin/section/list.html.twig index dc1e47ad2..663083a94 100644 --- a/src/bundle/Resources/views/themes/admin/section/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/list.html.twig @@ -26,17 +26,15 @@ {% set menu_items %} {% if can_add %}
  • - - - - - - {{ 'section.new'|trans|desc('Create') }} - - + {{ 'section.new'|trans|desc('Create') }} +
  • {% endif %} {% endset %} @@ -91,29 +89,32 @@ {% set col_raw %} {% if assignable[section.id] %} - - - - - + variant="button" + type="ghost" + icon="assign-section" + icon_size="small" + attr="{{ + { + title: 'section.assign_content'|trans|desc('Assign content'), + 'data-section-id': section.id, + 'data-form-action': path('ibexa.section.assign_content', {'sectionId': section.id}), + 'data-udw-config': ibexa_udw_config('multiple', {'type': 'section_assign'}), + class: 'ibexa-btn--open-udw' + } + }}" + /> {% endif %} {% if can_edit %} - - - - - + variant="button" + type="ghost" + icon="edit" + icon_size="small" + attr="{{ { title: 'section.edit'|trans|desc('Edit') } }}" + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -144,21 +145,22 @@ {% block actions %} {% if can_edit %} {% set modal_data_target = 'delete-sections-modal' %} - + {{ 'section.delete'|trans|desc('Delete') }} +
    {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'section.modal.message'|trans|desc('Do you want to delete the Section(s)?'), From 712b5e5b73d957e6ae5f34d7fb5ac418c8802ae3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 07:44:28 +0100 Subject: [PATCH 016/234] fix: Correct attr prop usage in version_conflict.html.twig Replace attr prop with direct data-bs-dismiss attribute. The Symfony UX Twig Component system automatically collects unrecognized attributes - no need for attr prop wrapper. --- .../views/themes/admin/content/modal/version_conflict.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig index baa68b55a..a4ee0cb61 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig @@ -38,7 +38,7 @@ {{ 'version.conflict.form.cancel'|trans|desc('Cancel') }} From fba33e70feb30a1533e15e4f316d6298fd1af1ef Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 07:44:42 +0100 Subject: [PATCH 017/234] fix: Correct attr prop usage in content_fields.html.twig Replace attr prop with direct class and download attributes. Pass attributes directly as component props instead of using non-existent attr wrapper. --- .../admin/ui/field_type/preview/content_fields.html.twig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig index f32d31b6a..0d8dc4549 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig @@ -234,7 +234,8 @@ type="ghost" icon="download" icon_size="small" - attr="{{ { download: true, class: 'ml-4' } }}" + class="ml-4" + download />
    {% endif %} From c5e4a2817bcafa0dce6253d07b74b041fe41ff66 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 07:45:11 +0100 Subject: [PATCH 018/234] fix: Correct attr prop usage in section/list.html.twig Replace attr prop with direct attribute passing in 3 locations: - Assign content button: Pass data attributes individually - Edit button: Pass title attribute directly - Delete button: Use :data-bs-target for dynamic value All attributes now passed directly as component props instead of using non-existent attr wrapper. --- .../views/themes/admin/section/list.html.twig | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/section/list.html.twig b/src/bundle/Resources/views/themes/admin/section/list.html.twig index 663083a94..d3aa47603 100644 --- a/src/bundle/Resources/views/themes/admin/section/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/list.html.twig @@ -95,15 +95,11 @@ type="ghost" icon="assign-section" icon_size="small" - attr="{{ - { - title: 'section.assign_content'|trans|desc('Assign content'), - 'data-section-id': section.id, - 'data-form-action': path('ibexa.section.assign_content', {'sectionId': section.id}), - 'data-udw-config': ibexa_udw_config('multiple', {'type': 'section_assign'}), - class: 'ibexa-btn--open-udw' - } - }}" + title="{{ 'section.assign_content'|trans|desc('Assign content') }}" + :data-section-id="section.id" + data-form-action="{{ path('ibexa.section.assign_content', {'sectionId': section.id}) }}" + data-udw-config="{{ ibexa_udw_config('multiple', {'type': 'section_assign'}) }}" + class="ibexa-btn--open-udw" /> {% endif %} {% if can_edit %} @@ -113,7 +109,7 @@ type="ghost" icon="edit" icon_size="small" - attr="{{ { title: 'section.edit'|trans|desc('Edit') } }}" + title="{{ 'section.edit'|trans|desc('Edit') }}" /> {% endif %} {% endset %} @@ -152,12 +148,8 @@ icon="trash" icon_size="small" :disabled="true" - attr="{{ - { - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target - } - }}" + data-bs-toggle="modal" + :data-bs-target="'#' ~ modal_data_target" > {{ 'section.delete'|trans|desc('Delete') }} From d07d092cef5ab6e4d1894867adcc020146084dca Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 07:46:55 +0100 Subject: [PATCH 019/234] docs: Update migration plan with attr prop fix and testing strategy - Add critical warning about attr prop usage at top - Document correct attribute passing syntax - Add comprehensive testing strategy section - Explain why Behat tests are unreliable - Update progress tracking (8/100 files completed) - Document all fixes applied - Add common issues and troubleshooting --- BUTTON_MIGRATION_PLAN.md | 731 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 731 insertions(+) create mode 100644 BUTTON_MIGRATION_PLAN.md diff --git a/BUTTON_MIGRATION_PLAN.md b/BUTTON_MIGRATION_PLAN.md new file mode 100644 index 000000000..7bff29fe0 --- /dev/null +++ b/BUTTON_MIGRATION_PLAN.md @@ -0,0 +1,731 @@ +# 📋 BUTTON MIGRATION PLAN: Legacy → design-system-twig Components + +**Package**: `ibexa/admin-ui` +**Date Created**: February 16, 2026 +**Status**: Ready for Review + +--- + +## ⚠️ CRITICAL: Attribute Passing Syntax + +**DO NOT use `attr` prop** - it doesn't exist in Symfony UX Twig Components! + +### ❌ WRONG (Runtime Error) +```twig + +``` + +### ✅ CORRECT +```twig + + + + + +``` + +**Why?** Symfony UX Twig Component system automatically collects unrecognized attributes into the `attributes` object. Pass them directly as component props. + +--- + +## Table of Contents + +1. [Overview](#overview) +2. [Migration Statistics](#migration-statistics) +3. [Icon Name Mapping](#icon-name-mapping) +4. [Migration Patterns](#migration-patterns) +5. [Type Mapping Reference](#type-mapping-reference) +6. [Migration Order by Priority](#migration-order-by-priority) +7. [Per-File Migration Checklist](#per-file-migration-checklist) +8. [Special Cases & Warnings](#special-cases--warnings) +9. [Style Guide Compliance](#style-guide-compliance) +10. [Example Commit History](#example-commit-history) +11. [Validation Commands](#validation-commands) +12. [Testing Strategy](#testing-strategy) +13. [Progress Tracking](#progress-tracking) + +--- + +## Overview + +### Goals + +1. **Replace legacy button patterns** with `` and `` +2. **Maintain 100% visual and functional parity** +3. **Document unmapped patterns** with comments for future work +4. **Create clean commit history** for easy review/rollback +5. **Follow Ibexa Twig style guide** throughout + +### Approach + +- **One file at a time** with individual commits +- **Manual functional testing** per file +- **Git workflow**: LOCAL CHANGES ONLY (no automatic pushes) +- **Comment unmapped variants** rather than forcing incorrect mappings + +--- + +## Migration Statistics + +### Files Overview + +- **Total Files with Buttons**: 100 +- **Total Button Instances**: ~200 + - 134 ` + +✅ AFTER: + + {{ 'button.save'|trans|desc('Save') }} + +``` + +### Pattern 2: Icon-Only Button (Ghost/No-Text) + +```twig +❌ BEFORE: + + +✅ AFTER: + +``` + +**Note**: `ibexa-btn--ghost` usually maps to `type="tertiary"` in design-system-twig. + +### Pattern 3: Link Styled as Button + +```twig +❌ BEFORE: + + + + + {{ 'profile.view.edit'|trans|desc('Edit') }} + + +✅ AFTER: + + {{ 'profile.view.edit'|trans|desc('Edit') }} + +``` + +### Pattern 4: Button with Data Attributes + +```twig +❌ BEFORE: + + +✅ AFTER: + + {{ 'button.edit'|trans|desc('Edit') }} + +``` + +### Pattern 5: Disabled Button + +```twig +❌ BEFORE: + + +✅ AFTER: + + {{ 'button.save'|trans|desc('Save') }} + +``` + +### Pattern 6: Button with Additional Classes + +```twig +❌ BEFORE: + + +✅ AFTER: + + {{ 'button.action'|trans|desc('Action') }} + +``` + +### Pattern 7: Button with Title/Aria Attributes + +```twig +❌ BEFORE: + + +✅ AFTER: + +``` + +### Pattern 8: Conditional Disabled State + +```twig +❌ BEFORE: + + +✅ AFTER: + + {{ 'button.save'|trans|desc('Save') }} + +``` + +### Pattern 9: Unmapped Variant (KEEP AS LEGACY + COMMENT) + +```twig +{# TODO: Migrate to design-system-twig when 'dark-selector' variant is available #} +{# Legacy button pattern - design-system-twig does not support ibexa-btn--dark-selector variant #} + +``` + +--- + +## Type Mapping Reference + +### Button Type Mapping + +| Legacy Class | design-system-twig | Notes | +|---|---|---| +| `ibexa-btn--primary` | `type="primary"` | ✅ Direct mapping | +| `ibexa-btn--secondary` | `type="secondary"` | ✅ Direct mapping | +| `ibexa-btn--tertiary` | `type="tertiary"` | ✅ Direct mapping | +| `ibexa-btn--ghost` | `type="tertiary"` or `type="tertiary-alt"` | ⚠️ Context dependent | +| `ibexa-btn--info` | `type="primary"` | ⚠️ May need new variant | +| `ibexa-btn--dark` | **UNMAPPED** | ❌ Keep legacy + comment | +| `ibexa-btn--dark-selector` | **UNMAPPED** | ❌ Keep legacy + comment | +| `ibexa-btn--secondary-light` | **UNMAPPED** | ❌ Keep legacy + comment | +| `ibexa-btn--selected` | `:attributes` | ⚠️ State class, pass via attributes | +| `ibexa-btn--prevented` | `:disabled="true"` | ⚠️ Use disabled prop | + +### Size Mapping + +| Legacy Class | design-system-twig | Notes | +|---|---|---| +| `ibexa-btn--small` | `size="small"` | ✅ Direct mapping | +| (no class) | `size="medium"` (default) | ✅ Default size | + +### Icon Size Mapping + +| Legacy Class | design-system-twig | Typical Button Size | +|---|---|---| +| `ibexa-icon--tiny-small` | `icon_size="tiny-small"` | Usually with `size="small"` | +| `ibexa-icon--small` | `icon_size="small"` | Default button size | +| `ibexa-icon--small-medium` | `icon_size="small-medium"` | Default button size | +| `ibexa-icon--medium` | `icon_size="medium"` | Default button size | + +--- + +## Migration Order by Priority + +### Phase 1: Simple Files (26 files) - HIGH PRIORITY ⭐ + +**Start here** - Low risk, straightforward conversions + +#### 1.1 Simple Link-as-Button (11 files) + +1. `src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig` +2. `src/bundle/Resources/views/themes/admin/account/profile/view.html.twig` +3. `src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig` +4. `src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig` +5. `src/bundle/Resources/views/themes/admin/ui/component/table/table_header.html.twig` +6. `src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig` +7. `src/bundle/Resources/views/themes/admin/user/role/view.html.twig` +8. `src/bundle/Resources/views/themes/admin/section/list.html.twig` +9. `src/bundle/Resources/views/themes/admin/language/list.html.twig` +10. `src/bundle/Resources/views/themes/admin/policy/list.html.twig` +11. `src/bundle/Resources/views/themes/admin/object_state/group/list.html.twig` + +#### 1.2 Simple Button-Only (15 files) + +12. `src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig` +13. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig` +14. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig` +15. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig` +16. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig` +17. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig` +18. `src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig` +19. `src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig` +20. `src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig` +21. `src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig` +22. `src/bundle/Resources/views/themes/admin/ui/component/summary_tile/summary_tile.html.twig` +23. `src/bundle/Resources/views/themes/admin/account/bookmarks/toggle_switch.html.twig` +24. `src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig` +25. `src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig` +26. `src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig` + +### Phase 2: Form-Related (8 files) - MEDIUM PRIORITY ⚠️ + +**Include form theme files** - Requires careful testing + +27. `src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig` ⚠️ **CRITICAL: Form theme file** +28. `src/bundle/Resources/views/themes/admin/account/forgot_password/index.html.twig` +29. `src/bundle/Resources/views/themes/admin/ui/global_search.html.twig` +30. `src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig` +31. `src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig` +32. `src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig` (partially migrated) +33. `src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig` (partially migrated) +34. `src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig` (partially migrated) + +### Phase 3: Modal Dialogs (40 files) - MEDIUM-HIGH PRIORITY + +**Confirmation Modals** - Start with these (consistent pattern) + +35-49. Various confirmation modal files (`delete_confirmation.html.twig`, etc.) + +**Content Management Modals** - Then these (more complex) + +50-74. Various content/language/section/user modals + +### Phase 4: Complex Dynamic (24 files) - LOWER PRIORITY + +**High JS interaction, complex state management** + +75-98. Dynamic interaction files + +### Phase 5: Split Button (1 file) - KEEP AS-IS 📌 + +99. `src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig` ⚠️ **Keep legacy per requirement** + +--- + +## Per-File Migration Checklist + +### Before Migration + +- [ ] Read entire file to understand context +- [ ] Identify all button/link instances (count them) +- [ ] Note any special classes or data attributes +- [ ] Check for dynamic icon names (variables) +- [ ] Identify button type (primary/secondary/tertiary/ghost) +- [ ] Note size modifiers (small/default) +- [ ] Check for unmapped variants +- [ ] Review surrounding code for dependencies + +### During Migration + +- [ ] Replace ` - + - - - - {{ 'content.field_type.ibexa_image.preview'|trans|desc('Preview') }} - + {{ 'content.field_type.ibexa_image.preview'|trans|desc('Preview') }} + {% if version_info is defined %} {% set content_id = version_info.contentInfo.id %} From 51cd5a8ac70937fb95e3066ccd1d3a24b1eaef7b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 08:58:30 +0100 Subject: [PATCH 025/234] fix: Migrate buttons in ibexa_media.html.twig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace legacy buttons with design-system-twig components: - Delete button: ghost→tertiary, preserve JS class selector - Download/Preview link: button-styled link with open-new-window icon - Use :disabled for conditional readonly state Icon mappings: trash✓, open-newtab→open-new-window --- .../Resources/encore/ibexa.css.config.js | 1 + .../ui/field_type/edit/ibexa_media.html.twig | 36 ++++++++++--------- .../src/modules/sub-items/sub.items.module.js | 11 +++++- src/lib/Behat/Page/ContentViewPage.php | 3 ++ src/lib/Behat/Page/DashboardPage.php | 4 +++ 5 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/bundle/Resources/encore/ibexa.css.config.js b/src/bundle/Resources/encore/ibexa.css.config.js index 283f45eb1..7fd3ddf71 100644 --- a/src/bundle/Resources/encore/ibexa.css.config.js +++ b/src/bundle/Resources/encore/ibexa.css.config.js @@ -19,6 +19,7 @@ module.exports = (Encore) => { ]) .addEntry('ibexa-admin-ui-security-base-css', [ path.resolve(__dirname, '../public/scss/ibexa-bootstrap.scss'), + path.resolve('./vendor/ibexa/admin-ui-assets/src/bundle/Resources/public/vendors/ids-assets/dist/css/styles.css'), path.resolve(__dirname, '../public/scss/ibexa.scss'), ]); }; diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig index 75e4a3e36..c007b8f70 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig @@ -17,27 +17,29 @@
    - - + - - - - {{ 'content.field_type.ibexa_media.download'|trans|desc('Download') }} - + {{ 'content.field_type.ibexa_media.download'|trans|desc('Download') }} +
    diff --git a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js index 93c55544f..05b88bf83 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js +++ b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js @@ -9,6 +9,7 @@ import ViewSwitcherComponent from './components/view-switcher/view.switcher.comp import SubItemsListComponent from './components/sub-items-list/sub.items.list.component.js'; import Popup from '../common/popup/popup.component'; import ActionButton from './components/action-btn/action.btn.js'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; import Pagination from '../common/pagination/pagination.js'; import NoItemsComponent from './components/no-items/no.items.component.js'; import Icon from '../common/icon/icon.js'; @@ -1239,7 +1240,15 @@ export default class SubItemsModule extends Component { const label = Translator.trans(/* @Desc("Move") */ 'move_btn.label', {}, 'ibexa_sub_items'); return this.renderActionBtnWrapper( - , + , '', { key: 'bulk-move-btn' }, ); diff --git a/src/lib/Behat/Page/ContentViewPage.php b/src/lib/Behat/Page/ContentViewPage.php index 67e50a00a..b692cc597 100644 --- a/src/lib/Behat/Page/ContentViewPage.php +++ b/src/lib/Behat/Page/ContentViewPage.php @@ -181,6 +181,9 @@ public function setExpectedLocationPath(string $locationPath): void public function verifyIsLoaded(): void { + // Check HTTP status first to catch 500 errors + $this->verifyHttpStatus(); + $this->getHTMLPage()->find($this->getLocator('mainContainer'))->assert()->isVisible(); $this->contentActionsMenu->verifyIsLoaded(); diff --git a/src/lib/Behat/Page/DashboardPage.php b/src/lib/Behat/Page/DashboardPage.php index 52b127c8c..d0966f9d0 100644 --- a/src/lib/Behat/Page/DashboardPage.php +++ b/src/lib/Behat/Page/DashboardPage.php @@ -85,6 +85,10 @@ public function isDraftOnList(string $draftName): bool public function verifyIsLoaded(): void { + // Check HTTP status BEFORE looking for CSS selectors + // This catches 500/404 errors and provides actual error details + $this->verifyHttpStatus(); + $this ->getHTMLPage() ->find($this->getLocator('pageTitle')) From c0b31a4ad612a015230957b82bce93db622f83a4 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:01:06 +0100 Subject: [PATCH 026/234] fix: Migrate buttons in relation_base.html.twig MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 4 legacy buttons with design-system-twig components: - Remove item button (icon-only, in template variable) - Select item button (secondary, UDW integration) - Delete selected button (tertiary with trash icon) - Main CTA button (secondary, bottom of component) Use :hidden binding for conditional visibility instead of {% if %} blocks. Preserve JS class selectors for functionality. Icon mappings: trash✓ --- .../field_type/edit/relation_base.html.twig | 65 ++++++++++--------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig index 97a9bb793..8a8dc6ff8 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig @@ -8,16 +8,15 @@ {% set helper = helper|default('') %} {% set readonly = attr.readonly|default(false) %} {% set remove_item_btn %} - + class="ibexa-relations__table-action--remove-item" + /> {% endset %} {% set col_raw_checkbox_template %} {{ 'ibexa_object_relation_list.cta.select'|trans|desc('Select Item') }} - - + {{ 'ibexa_object_relation_list.delete_selected_relations'|trans|desc('Delete') }} + {% endif %} {% endblock %} {% endembed %} @@ -302,17 +304,18 @@ 'allowed_content_types': allowed_content_types } %} {% set udw_config = ibexa_udw_config(limit == 1 ? 'single' : 'multiple', udw_config_parameters) %} - +

    {{ helper }}

    {% set attr = attr|merge({'hidden': 'hidden'}) %} From 8b1e5d6f4bac8bd2f883882ff72edaba3aa3f18c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:01:31 +0100 Subject: [PATCH 027/234] fix: Migrate buttons in versions tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace delete versions button in table_header_tools macro. Icon-only tertiary button with modal trigger for bulk deletion. Icon mappings: trash✓ --- .../admin/content/tab/versions/tab.html.twig | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index 9e1299e36..527dd40f4 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -96,19 +96,19 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + /> {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.versions.modal.message'|trans|desc('Do you want to delete the version(s)?'), From 2da98aad6cd9800fe165cc300ad33006ff20e63e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:01:55 +0100 Subject: [PATCH 028/234] fix: Migrate buttons in translations tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 2 buttons in table_header_tools macro: - Add translation button (tertiary with add icon) - Delete translations button (tertiary with trash icon) Both buttons trigger modals for bulk operations. Preserve CSS classes for JavaScript functionality. Icon mappings: create→add, trash✓ --- .../content/tab/translations/tab.html.twig | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index eb4281b52..f9e39f452 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -117,36 +117,33 @@ {% macro table_header_tools(form_translation_remove, can_translate) %} {% if can_translate %} - + {{ 'tab.translations.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-translations-modal' %} - + {{ 'tab.translations.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.translations.modal.message'|trans|desc('Do you want to delete the translation?'), From d5a8f23a6b61fa1915e1a96943ae26eaa5badb71 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:02:22 +0100 Subject: [PATCH 029/234] fix: Migrate buttons in locations tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 2 buttons in table_header_tools macro: - Add location button (tertiary with add icon, UDW integration) - Delete locations button (tertiary with trash icon) Both use conditional disabled state with :disabled binding. Preserve CSS classes for UDW and modal functionality. Icon mappings: create→add, trash✓ --- .../admin/content/tab/locations/tab.html.twig | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index 0fa5775ee..9f6667b38 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -148,35 +148,32 @@ } %} {% macro table_header_tools(form_add, form_remove, can_add) %} - + {{ 'tab.locations.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-content-types-modal' %} - + {{ 'tab.locations.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.locations.modal.message'|trans|desc('Do you want to delete the Location? All its sub-items will be sent to Trash.'), From 675299ca5c61a3246592376a2427b10a303a0969 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:03:10 +0100 Subject: [PATCH 030/234] fix: Migrate buttons in input_text component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace 2 of 3 buttons with design-system-twig components: - Clear button (tertiary, icon-only with discard icon) - Search button (tertiary, icon-only with search icon) Keep password toggle button as legacy HTML due to complex dual-icon swap behavior required by JavaScript, but update icon paths to use new icon names (visibility/visibility-hidden). This component is CRITICAL - used in login, search fields, and password inputs across entire admin interface. Preserve all JS class selectors for functionality: - .ibexa-input-text-wrapper__action-btn--clear - .ibexa-input-text-wrapper__action-btn--password-toggler - .ibexa-input-text-wrapper__action-btn--search Icon mappings: discard✓, search✓, view→visibility, view-hide→visibility-hidden --- .../admin/ui/component/input_text.html.twig | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig index fbfd2ebaf..d1e8bcb56 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig @@ -32,17 +32,17 @@ {% block content %}{% endblock %}
    {% block actions %} - + :disabled="is_disabled" + :data-send-form-after-clearing="should_clear_button_send_form ? true : null" + /> {% if is_password_input %} {% elseif has_search %} - + :disabled="is_disabled" + /> {% elseif extra_btn.label is not empty %} - + +
    From 4710fadc89f8b6bf7fffb5a398fd4ae8ef43f849 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:04:01 +0100 Subject: [PATCH 032/234] fix: Migrate buttons in add translation modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Cancel button in modal footer with design-system-twig component. Also update arrow icon from 'back' to 'arrow-left' for consistency. Icon mappings: back→arrow-left --- .../admin/content/modal/add_translation.html.twig | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig index ddad1813a..8715052cc 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig @@ -29,7 +29,7 @@ }) }}
    - +
    {{ form_row(form.language, { @@ -47,9 +47,13 @@ {% if form.add is defined %} {{ form_widget(form.add, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary ibexa-btn--create-translation'}}) }} {% endif %} - + {% endif %} {% endblock %} {% block content_after %} From 9dd8b0116d15c116c0d5c4350965120b45297e42 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 09:04:20 +0100 Subject: [PATCH 033/234] fix: Migrate buttons in draft conflict modal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Add draft button in table_header_tools macro. Conditionally displayed tertiary button for creating new drafts. Icon mappings: create→add --- .../content/modal/draft_conflict.html.twig | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index 6a3dcd7d3..e0af79383 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,16 +43,15 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - + {{ 'draft.conflict.add_new'|trans|desc('Add') }} + {% endif %} {% endmacro %} From db186a9964a421647e119b13ed2fad3cf755a4fe Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 10:57:15 +0100 Subject: [PATCH 034/234] revert: Restore legacy button structure in input_text component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Partially revert commit 308286b72. Reason: A new input component is being developed that will replace this component. Reverting button migrations to avoid unnecessary work that will be superseded. Changes reverted: - Clear button: restored legacy {% if is_password_input %} {% elseif has_search %} - + {{ is_disabled ? 'disabled' }} + > + + + + {% elseif extra_btn.label is not empty %} - + {% endblock %} {% endembed %} From 636edefa21d08473b689ef84cd40cf195a845a74 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:22:12 +0100 Subject: [PATCH 038/234] fix: Migrate buttons in delete_confirmation modal Replace 2 modal buttons with design-system-twig components. Uses block-based button rendering for customization. Icon mappings: none (text-only buttons) --- .../admin/ui/modal/delete_confirmation.html.twig | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig index 1bf953f74..6d78185d7 100644 --- a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig @@ -1,23 +1,24 @@ {% set confirm_button_rendered %} {%- block confirm_button -%} - + {% endblock %} {% endset %} {% set cancel_button_rendered %} {%- block cancel_button -%} - + {% endblock %} {% endset %} From ee175b10c8b6754dc9f194154ab3768709765d46 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:22:47 +0100 Subject: [PATCH 039/234] fix: Migrate Cancel button in location_trash modal Replace Cancel button with design-system-twig component. Keep Trash button as form widget (requires form handling). Icon mappings: none (text-only button) --- .../themes/admin/content/modal/location_trash.html.twig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig index bcdbf0cb2..1cb866705 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig @@ -45,9 +45,13 @@ {{ form_widget(form.trash, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary disabled ibexa-btn--confirm-send-to-trash', 'disabled': true}}) }} - + {% endblock %} {% block content_after %} {{ form_end(form) }} From 2d46681cc810d20d06deeeabfe364c3ccf0fef69 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:24:59 +0100 Subject: [PATCH 040/234] fix: Migrate buttons in hide_confirmation modal - Migrated Confirm button (primary) - Migrated Cancel button (tertiary, was ghost) No icon mappings needed (text-only buttons) --- .../content/modal/hide_confirmation.html.twig | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig index 4e95b0ff5..2884fcdba 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig @@ -16,8 +16,19 @@
    From 3f095bf6de9ea6a58381ef1580308c47bfbb0c7c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:25:21 +0100 Subject: [PATCH 041/234] fix: Migrate buttons in ibexa_binaryfile field type editor - Migrated Download link (tertiary, was ghost) - Migrated Delete button (tertiary, was ghost) No icon mappings needed (download, trash unchanged) --- .../edit/ibexa_binaryfile.html.twig | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig index e2343e25c..7b58a5717 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig @@ -18,27 +18,30 @@
    - - - - - {{ 'ibexa_binaryfile.action.download'|trans|desc('Download') }} - - + {{ 'ibexa_binaryfile.action.remove'|trans|desc('Delete') }} +
    From 3de1f17eed306bddb9bab9a2fd8c376dcf841022 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:25:39 +0100 Subject: [PATCH 042/234] fix: Migrate buttons in ibexa_gmap_location field type editor - Migrated Locate me button (tertiary, was ghost, icon-only) - Migrated Search by address button (tertiary, was ghost, icon-only) No icon mappings needed (localize, search unchanged) --- .../edit/ibexa_gmap_location.html.twig | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig index 65eef13b4..29eae4e4a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig @@ -9,21 +9,22 @@
    {{ form_widget(form.address, {'attr': {'class': 'ibexa-data-source__input', 'placeholder': 'ibexa_gmap_location.input.placeholder'|trans|desc('Search address'), readonly: readonly }}) }}
    - +
    - +
    From feb0c6d98b74c4ae85a45be456824b754f682564 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:26:03 +0100 Subject: [PATCH 043/234] fix: Migrate Edit button in object_state/view - Migrated Edit link (primary) in context menu No icons (text-only button) --- .../views/themes/admin/object_state/view.html.twig | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/view.html.twig b/src/bundle/Resources/views/themes/admin/object_state/view.html.twig index ceb0b9aca..261c71f7e 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/view.html.twig @@ -25,14 +25,13 @@ {% set menu_items %} {% if can_administrate %}
  • - - - {{ 'object_state_group.name.action.edit'|trans|desc('Edit') }} - - + {{ 'object_state_group.name.action.edit'|trans|desc('Edit') }} +
  • {% endif %} {% endset %} From 87780936a5c5ea38890ae4effcf931a1ebdc001e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:26:30 +0100 Subject: [PATCH 044/234] fix: Migrate buttons in object_state/list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Migrated Add link (tertiary, was tertiary) - Migrated Delete button (tertiary, was ghost) - Migrated Edit row action link (tertiary, was ghost, icon-only) Icon mappings: create → add --- .../themes/admin/object_state/list.html.twig | 48 +++++++++---------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/list.html.twig b/src/bundle/Resources/views/themes/admin/object_state/list.html.twig index b8eba400c..4513d79ec 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/list.html.twig @@ -39,15 +39,14 @@ {% set col_raw %} {% if can_administrate %} - - - - - + variant="button" + type="tertiary" + icon="edit" + icon_size="small-medium" + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -75,34 +74,31 @@ {% embed '@ibexadesign/ui/component/table/table_header.html.twig' %} {% block actions %} {% if can_administrate %} - - - - - - {{ 'object_state.new'|trans|desc('Add') }} - - + {{ 'object_state.new'|trans|desc('Add') }} + {% set modal_data_target = 'delete-object-state-modal' %} - + {{ 'object_state.delete.bulk_delete.submit'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'object_state.modal.message'|trans|desc('Do you want to delete the Object state(s)?'), From 4656e1b7894de4244607aef4bea66ef815cee929 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:26:59 +0100 Subject: [PATCH 045/234] fix: Migrate buttons in ibexa_author field type editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Migrated Add author button (secondary) - Migrated Bulk remove button (tertiary, was ghost) - Migrated Individual remove button (tertiary, was ghost, icon-only) Icon mappings: create → add --- .../ui/field_type/edit/ibexa_author.html.twig | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig index e7c79d734..f82119d7f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig @@ -12,28 +12,30 @@ {% set readonly = attr.readonly|default(false) %}
    - - + {{ 'ibexa_author.action.delete'|trans|desc('Delete') }} +
    @@ -59,16 +61,15 @@ {{- form_row(form.name, { label_wrapper_attr: { 'hidden': 'hidden' }, attr: { readonly: readonly }}) -}} {{- form_row(form.email, { label_wrapper_attr: { 'hidden': 'hidden' }, attr: {'class': 'ibexa-input--text', readonly: readonly }}) -}}
    - + />
    {%- endblock %} From 2db8d3757434892d680abbb6de6196aca0d85de0 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Feb 2026 12:27:27 +0100 Subject: [PATCH 046/234] fix: Migrate buttons in ibexa_image_asset field type editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Migrated Select from library button (secondary) - Migrated Delete button (tertiary, was ghost) - Migrated Preview link (tertiary, was ghost) Icon mappings: open-newtab → open-new-window --- .../edit/ibexa_image_asset.html.twig | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig index 6efd4cf59..96a8d9f4a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig @@ -79,13 +79,14 @@ {% endblock %} {% block ibexa_image_asset_source_buttons %} - + {% endblock %} {% block ibexa_image_asset_preview %} @@ -114,27 +115,30 @@
    - - + - - - - {{ 'content.field_type.ibexa_image.preview'|trans|desc('Preview') }} - + {{ 'content.field_type.ibexa_image.preview'|trans|desc('Preview') }} + {% if version_info is defined %} {% set content_id = version_info.contentInfo.id %} From 03d206385aed3314f68b831a4a737caa73f5344b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:16 +0100 Subject: [PATCH 047/234] docs: Update MIGRATION_RULES.md with tertiary-alt mapping corrections --- migrations/button/MIGRATION_RULES.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/migrations/button/MIGRATION_RULES.md b/migrations/button/MIGRATION_RULES.md index 4ac11cc80..5ee49abd0 100644 --- a/migrations/button/MIGRATION_RULES.md +++ b/migrations/button/MIGRATION_RULES.md @@ -78,7 +78,7 @@ vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/desig | Legacy Class | Component Type | Notes | |--------------|----------------|-------| -| `ibexa-btn--ghost` | `tertiary` | Ghost style (transparent background) | +| `ibexa-btn--ghost` | `tertiary-alt` | Ghost style (transparent background) | | `ibexa-btn--primary` | `primary` | Primary action button | | `ibexa-btn--secondary` | `secondary` | Secondary action button | | `ibexa-btn--tertiary` | `tertiary-alt` | Tertiary action button | @@ -139,7 +139,7 @@ Buttons with only an icon (no text) are automatically detected by the component. **NEW:** ```twig @@ -312,7 +312,7 @@ When migrating Symfony form widgets that render buttons, ensure form attributes **NEW:** ```twig ``` @@ -389,9 +389,9 @@ The component internally renders: |----------------|-------------|-------------------| | `primary` | `ids-btn--primary` | `btn ibexa-btn ibexa-btn--primary` | | `secondary` | `ids-btn--secondary` | `btn ibexa-btn ibexa-btn--secondary` | -| `tertiary` | `ids-btn--tertiary` | `btn ibexa-btn ibexa-btn--ghost` | +| `tertiary` | `ids-btn--tertiary` | `btn ibexa-btn ibexa-btn--tertiary` | | `secondary-alt` | `ids-btn--secondary-alt` | `btn ibexa-btn ibexa-btn--secondary` | -| `tertiary-alt` | `ids-btn--tertiary-alt` | `btn ibexa-btn ibexa-btn--tertiary` | +| `tertiary-alt` | `ids-btn--tertiary-alt` | `btn ibexa-btn ibexa-btn--ghost` | **Size Classes:** @@ -400,9 +400,9 @@ The component internally renders: | `small` | `ids-btn--small` | `ibexa-btn--small` | | `medium` | `ids-btn--medium` | *(default, no class)* | -**Example for `type="tertiary"` + `size="small"`:** +**Example for `type="tertiary-alt"` + `size="small"`:** ```html -

    {{ 'ibexa.notifications.search_form.title'|trans()|desc('Filters') }}

    - + - + {{ 'notification.delete'|trans|desc('Delete') }} +
    {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, From ab0dab83b40ac0cca911f99e5619ee097b032697 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:37 +0100 Subject: [PATCH 055/234] fix: Migrate buttons in account/notifications/list_item --- .../admin/account/notifications/list_item.html.twig | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_item.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_item.html.twig index cfcde6bd3..0e80fdbee 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_item.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_item.html.twig @@ -82,11 +82,13 @@ {% embed '@ibexadesign/ui/component/table/table_body_cell.html.twig' with { class: '' } %} {% block content %}
    - + {{ include('@ibexadesign/ui/component/multilevel_popup_menu/multilevel_popup_menu.html.twig', { groups: [ { From aa9dda6d0b50e9d829c1a23bac21493965ff6942 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:40 +0100 Subject: [PATCH 056/234] fix: Migrate buttons in account/notifications/list_item_all --- .../notifications/list_item_all.html.twig | 73 +++++++------------ 1 file changed, 28 insertions(+), 45 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_item_all.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_item_all.html.twig index 2f3d3a0f1..e501be6d1 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_item_all.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_item_all.html.twig @@ -1,5 +1,3 @@ -{% import "@ibexadesign/ui/component/macros.html.twig" as html %} - {% trans_default_domain 'ibexa_notifications' %} {% set is_read = notification.isPending == 0 %} @@ -50,30 +48,19 @@ {% set is_disabled = btn_disabled|default(false) %} {% set defaultTooltip = 'notification.go_to_content'|trans({}, 'ibexa_notifications')|desc('Go to content') %} - + {% endblock %} {% endset %} -{% set icon_mail_open %} - - - -{% endset %} - -{% set icon_mail %} - - - -{% endset %} {% embed '@ibexadesign/ui/component/table/table_body_row.html.twig' with { class: wrapper_class_list ~ (wrapper_additional_classes is defined ? ' ' ~ wrapper_additional_classes), @@ -127,28 +114,24 @@ {% endembed %} {% embed '@ibexadesign/ui/component/table/table_body_cell.html.twig' %} {% block content %} - - + + {% endblock %} {% endembed %} {% endblock %} From be65fd86ef470ded91313f0c254d8ba2729f1dc3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:43 +0100 Subject: [PATCH 057/234] fix: Migrate buttons in account/notifications/side_panel --- .../admin/account/notifications/side_panel.html.twig | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig index cbffad368..cefaa7e89 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig @@ -37,10 +37,15 @@ {% block footer %} {% endblock %} {% endembed %} From 022fa0646fc31900bf797dee3898a498762c0362 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:46 +0100 Subject: [PATCH 058/234] fix: Migrate buttons in account/profile/view --- .../Resources/views/themes/admin/account/profile/view.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/account/profile/view.html.twig b/src/bundle/Resources/views/themes/admin/account/profile/view.html.twig index bbb20a884..b82f540e3 100644 --- a/src/bundle/Resources/views/themes/admin/account/profile/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/profile/view.html.twig @@ -40,7 +40,7 @@ Date: Wed, 25 Feb 2026 13:35:48 +0100 Subject: [PATCH 059/234] fix: Migrate buttons in account/settings/list --- .../admin/account/settings/list.html.twig | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/settings/list.html.twig b/src/bundle/Resources/views/themes/admin/account/settings/list.html.twig index 5541a70cf..6b236bb73 100644 --- a/src/bundle/Resources/views/themes/admin/account/settings/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/settings/list.html.twig @@ -31,17 +31,16 @@ {% for settings_group in grouped_settings %} {% if settings_group.settings is not empty %} {% set headline_items %} - - - - - - {{ 'list.action.edit'|trans|desc('Edit') }} - - + {{ 'list.action.edit'|trans|desc('Edit') }} + {% endset %} {% set items = [] %} @@ -74,18 +73,17 @@ } only %} {% endif %} {% set headline_items %} - - - - - - {{ 'my_account_settings.password.action.edit'|trans|desc('Change password') }} - - + {{ 'my_account_settings.password.action.edit'|trans|desc('Change password') }} + {% endset %} {% set item = [{ From 150ed6dc2b22571cabba91f02d57b69a65270f77 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:51 +0100 Subject: [PATCH 060/234] fix: Migrate buttons in content/draft/draft_list --- .../views/themes/admin/content/draft/draft_list.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index 9cdb2eb56..dbe993a8a 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -150,7 +150,7 @@ {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} Date: Wed, 25 Feb 2026 13:35:54 +0100 Subject: [PATCH 061/234] fix: Migrate buttons in content/modal/draft_conflict --- .../views/themes/admin/content/modal/draft_conflict.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index e0af79383..1d028edd1 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -45,7 +45,7 @@ {% if show_add_button %} Date: Wed, 25 Feb 2026 13:35:57 +0100 Subject: [PATCH 062/234] fix: Migrate buttons in content/modal/hide_confirmation --- .../themes/admin/content/modal/hide_confirmation.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig index 2884fcdba..60e26523e 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig @@ -23,7 +23,7 @@ {{ 'content.hide.modal.confirm'|trans()|desc('Confirm') }} From b0ce7c74bae243c68372abf18342f89e4948f4fa Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:35:59 +0100 Subject: [PATCH 063/234] fix: Migrate buttons in content/tab/locations --- .../views/themes/admin/content/tab/locations/tab.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index 9f6667b38..4a8d534f9 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -149,7 +149,7 @@ {% macro table_header_tools(form_add, form_remove, can_add) %} Date: Wed, 25 Feb 2026 13:36:02 +0100 Subject: [PATCH 064/234] fix: Migrate buttons in content/tab/translations --- .../views/themes/admin/content/tab/translations/tab.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index f9e39f452..c3bbf1c06 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -119,7 +119,7 @@ {% if can_translate %} Date: Wed, 25 Feb 2026 13:36:05 +0100 Subject: [PATCH 065/234] fix: Migrate buttons in content/tab/urls --- .../themes/admin/content/tab/urls.html.twig | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index 13263aac6..b922289e9 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -63,21 +63,19 @@ {% set modal_data_target = 'delete-custom-url-modal' %} - + {{ 'tab.urls.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.urls.modal.message'|trans|desc('Delete the selected custom URL aliases permanently?'), From 71e2b554fd51e83777678c10feaf74913b673020 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:07 +0100 Subject: [PATCH 066/234] fix: Migrate buttons in content/tab/versions --- .../views/themes/admin/content/tab/versions/tab.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index 527dd40f4..9c6435753 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -99,7 +99,7 @@ Date: Wed, 25 Feb 2026 13:36:10 +0100 Subject: [PATCH 067/234] fix: Migrate buttons in content_type/content_type_group/list --- .../content_type_group/list.html.twig | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig index 38242319a..5134deb51 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig @@ -101,18 +101,14 @@ {% set col_raw %} {% if can_update %} - {% set edit_url = path('ibexa.content_type_group.update', { - contentTypeGroupId: content_type_group.id - }) %} - - - - - + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -143,21 +139,19 @@ {% block actions %} {% if can_delete %} {% set modal_data_target = 'delete-content-type-groups-modal' %} - + {{ 'content_type_group.view.list.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'content_type_group.modal.message'|trans|desc('Do you want to delete the content type group?'), From b046e234df1df7e9312a25ead330b14949f6616a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:13 +0100 Subject: [PATCH 068/234] fix: Migrate buttons in content_type/field_definitions --- .../views/themes/admin/content_type/field_definitions.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig index 918ca6ede..f2911070f 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig @@ -48,7 +48,7 @@ { 'icon_name': 'discard', 'icon_size': 'tiny-small', - 'button_class': 'ibexa-btn--ghost ibexa-collapse__extra-action-button--remove-field-definitions-group', + 'button_class': 'ibexa-collapse__extra-action-button--remove-field-definitions-group', } ], 'data_attr': { From 8cea0574399ead666e21d3b7b075746e9fca8531 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:15 +0100 Subject: [PATCH 069/234] fix: Migrate buttons in content_type/list --- .../themes/admin/content_type/list.html.twig | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/list.html.twig b/src/bundle/Resources/views/themes/admin/content_type/list.html.twig index b785ad181..f05811ebe 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/list.html.twig @@ -1,6 +1,5 @@ {% trans_default_domain 'ibexa_content_type' %} -{% import "@ibexadesign/content_type/macros.html.twig" as macros %} {% from '@ibexadesign/ui/component/macros.html.twig' import results_headline %} {% form_theme form_content_types_delete '@ibexadesign/ui/form_fields.html.twig' %} @@ -61,10 +60,27 @@ {% set col_raw %} {% if can_create %} - {{ macros.content_type_copy(content_type, content_type_group, 'btn ibexa-btn ibexa-btn--ghost ibexa-btn--no-text ibexa-btn--copy-content-type') }} + {% endif %} {% if can_update %} - {{ macros.content_type_edit(content_type, content_type_group, 'btn ibexa-btn ibexa-btn--ghost ibexa-btn--no-text') }} + {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -96,21 +112,19 @@ {% block actions %} {% if can_delete %} {% set modal_data_target = 'delete-content-types-modal' %} - + {{ 'content_type.view.list.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'content_type.modal.message'|trans|desc('Do you want to delete the content type?'), From a74af805e3dbb661099cb47c2e5fb88db768b49c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:18 +0100 Subject: [PATCH 070/234] fix: Migrate buttons in language/list --- .../admin/language/tab/languages.html.twig | 36 +++++++++---------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig b/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig index ab47eae92..98fff634d 100644 --- a/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/tab/languages.html.twig @@ -56,15 +56,14 @@ {% set col_raw %} {% if can_administrate %} - - - - - + variant="button" + type="tertiary-alt" + icon="edit" + icon_size="small" + title="{{ 'language.edit'|trans|desc('Edit') }}" + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -96,21 +95,18 @@ {% block actions %} {% if can_administrate %} {% set modal_data_target = 'delete-languages-modal' %} - + {{ 'language.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { id: modal_data_target, message: 'language.modal.message'|trans|desc('Delete the languages?'), From 12d7a4c7467d9b2392eb2424373247c8d1e9bd5d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:22 +0100 Subject: [PATCH 071/234] fix: Migrate buttons in link_manager/list --- .../views/themes/admin/link_manager/list.html.twig | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/link_manager/list.html.twig b/src/bundle/Resources/views/themes/admin/link_manager/list.html.twig index c631835c9..ef7ab8cbd 100644 --- a/src/bundle/Resources/views/themes/admin/link_manager/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/link_manager/list.html.twig @@ -45,15 +45,14 @@ {% set col_raw %} {% if can_edit %} - - - - - + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ From a047dacf2574daf49c831db92d5ac53193f482d9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:24 +0100 Subject: [PATCH 072/234] fix: Migrate buttons in link_manager/view --- .../themes/admin/link_manager/view.html.twig | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig b/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig index 8ddf15a8c..4c92c70a7 100644 --- a/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig @@ -37,13 +37,15 @@ {{ 'url.label.address'|trans|desc('Address') }} {{ url.url }} - - - - - + @@ -100,16 +102,16 @@ {% set col_raw %} {% if can_edit %} - + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ From 32757d9b6d78e3c3132012cd6d2249fed6343b5a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:27 +0100 Subject: [PATCH 073/234] fix: Migrate buttons in object_state/list --- .../views/themes/admin/object_state/list.html.twig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/list.html.twig b/src/bundle/Resources/views/themes/admin/object_state/list.html.twig index 4513d79ec..a9da680f4 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/list.html.twig @@ -43,7 +43,7 @@ title="{{ 'object_state.view.list.action.edit'|trans|desc('Edit') }}" href="{{ path('ibexa.object_state.state.update', {'objectStateId': object_state.id}) }}" variant="button" - type="tertiary" + type="tertiary-alt" icon="edit" icon_size="small-medium" /> @@ -77,7 +77,7 @@ Date: Wed, 25 Feb 2026 13:36:29 +0100 Subject: [PATCH 074/234] fix: Migrate buttons in object_state/object_state_group/list --- .../object_state_group/list.html.twig | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig index d79beaae9..59a4ea4c3 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig @@ -83,15 +83,14 @@ {% set col_raw %} {% if can_administrate %} - - - - - + variant="button" + type="tertiary-alt" + icon="edit" + icon_size="small" + title="{{ 'object_state_group.view.list.action.edit'|trans|desc('Edit') }}" + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -120,21 +119,19 @@ {% block actions %} {% if can_administrate %} {% set modal_data_target = 'delete-object-state-groups-modal' %} - + {{ 'object_state_group.delete.bulk_delete.submit'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'object_state_group.modal.message'|trans|desc('Do you want to delete the Object state group(s)?'), From 9db3283287873281e963a2b27621a05291e67b4d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:31 +0100 Subject: [PATCH 075/234] fix: Migrate buttons in section/list --- .../Resources/views/themes/admin/section/list.html.twig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/section/list.html.twig b/src/bundle/Resources/views/themes/admin/section/list.html.twig index 4ce5e9678..444402e55 100644 --- a/src/bundle/Resources/views/themes/admin/section/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/list.html.twig @@ -92,7 +92,7 @@ Date: Wed, 25 Feb 2026 13:36:34 +0100 Subject: [PATCH 076/234] fix: Migrate buttons in section/view --- .../views/themes/admin/section/view.html.twig | 43 +++++++++---------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/section/view.html.twig b/src/bundle/Resources/views/themes/admin/section/view.html.twig index 409e11d8f..96763b785 100644 --- a/src/bundle/Resources/views/themes/admin/section/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/view.html.twig @@ -41,31 +41,30 @@ ] %} {% set information_headline_items %} {% if can_edit %} - {% set modalDataAttributes = deletable ? 'data-bs-toggle=modal data-bs-target=#delete-section-modal' : '' %} - - - - - - {{ 'section.edit'|trans|desc('Edit') }} - - - + {{ 'section.action.delete'|trans|desc('Delete') }} + {% if deletable %} {% include '@ibexadesign/section/modal/delete_confirmation.html.twig' with {'form': form_section_delete} %} {% endif %} From feb1ea9186236b614a05b5651dc35cd4e36d1247 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:37 +0100 Subject: [PATCH 077/234] fix: Migrate buttons in trash/list --- .../views/themes/admin/trash/list.html.twig | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/trash/list.html.twig b/src/bundle/Resources/views/themes/admin/trash/list.html.twig index 2aa53dbe2..e6bb39812 100644 --- a/src/bundle/Resources/views/themes/admin/trash/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/trash/list.html.twig @@ -44,11 +44,13 @@ placeholder="{{ 'search.creator_input.placeholder' | trans | desc('Type creator\'s name') }}" {{ creator_exists ? 'disabled' : '' }} > - +
      @@ -303,21 +305,19 @@ {% endif %} {% if can_delete %} {% set modal_data_target = 'delete-trash-items-modal' %} - + {{ 'trash.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'trash.modal.message'|trans|desc('Delete the selected items permanently?'), From c02861b971a78d88be641c65ff806edfcd707bc5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:39 +0100 Subject: [PATCH 078/234] fix: Migrate buttons in url_wildcard/list --- .../themes/admin/url_wildcard/list.html.twig | 51 +++++++------------ 1 file changed, 19 insertions(+), 32 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig index 46587e948..9d285fe49 100644 --- a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig @@ -62,26 +62,15 @@ ]) %} {% set col_raw %} - {% if can_manage %} - - - - - - {% else %} - - - - - - {% endif %} + {% endset %} {% set body_row_cols = body_row_cols|merge([{ has_action_btns: true, @@ -125,22 +114,20 @@ {{ 'url_wildcard.list.action.create'|trans|desc('Add') }} - + {{ 'url_wildcard.list.action.delete'|trans|desc('Delete') }} + {% endblock %} {% endembed %} {% endblock %} From 12e032b6cb1bc06b47f2316565639232f36161ea Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:42 +0100 Subject: [PATCH 079/234] fix: Migrate buttons in user/invitation/modal_entry --- .../admin/user/invitation/modal_entry.html.twig | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/invitation/modal_entry.html.twig b/src/bundle/Resources/views/themes/admin/user/invitation/modal_entry.html.twig index 3ed4f371e..46d0cbec7 100644 --- a/src/bundle/Resources/views/themes/admin/user/invitation/modal_entry.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/invitation/modal_entry.html.twig @@ -2,15 +2,14 @@
      {% block entry_form_fields %}{% endblock %} - + />
      From 50b4913cdb3f6698c20bc6e042e141656f62e742 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:44 +0100 Subject: [PATCH 080/234] fix: Migrate buttons in user/policy/list --- .../themes/admin/user/policy/list.html.twig | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig index ef84ce84a..3403b4dbf 100644 --- a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig @@ -53,15 +53,15 @@ {% set col_raw %} {% if can_update %} - - - - - + variant="button" + type="tertiary-alt" + icon="edit" + icon_size="small" + title="{{ 'policy.view.list.panel.policies.action.edit'|trans|desc('Edit') }}" + :disabled="not is_editable[policy.id]" + /> {% endif %} {% endset %} {% set body_row_cols = body_row_cols|merge([{ @@ -102,21 +102,19 @@ {% set modal_data_target = 'delete-policies-modal' %} - + {{ 'policy.view.list.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'policy.modal.message'|trans|desc('Do you want to delete the Policy?'), From 5b95d1f135b109482ae8ce98562189529a6bae6a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:47 +0100 Subject: [PATCH 081/234] fix: Migrate buttons in user/role/list --- .../themes/admin/user/role/list.html.twig | 67 +++++++++---------- 1 file changed, 31 insertions(+), 36 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig index 8935a9ff2..480244abf 100644 --- a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig @@ -69,37 +69,34 @@ {% set col_action_btns %} {% if can_assign %} - - - - - + variant="button" + type="tertiary-alt" + icon="assign-user" + icon_size="small" + title="{{ 'role.view.list.action.assign_to_users_or_groups'|trans|desc('Assign to Users/Groups') }}" + /> {% endif %} {% if can_create %} - - - - - + variant="button" + type="tertiary-alt" + icon="copy" + icon_size="small" + title="{{ 'role.view.list.action.copy'|trans|desc('Copy') }}" + /> {% endif %} {% if can_update %} - - - - - + variant="button" + type="tertiary-alt" + icon="edit" + icon_size="small" + title="{{ 'role.view.list.action.edit'|trans|desc('Edit') }}" + /> {% endif %} {% endset %} @@ -126,21 +123,19 @@ {% block actions %} {% if can_delete %} {% set modal_data_target = 'delete-sections-modal' %} - + {{ 'role.view.list.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'role.modal.message'|trans|desc('Do you want to delete the Role(s)?'), From c2d27c942f58040eba706f4503bdf90b4b834897 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:50 +0100 Subject: [PATCH 082/234] fix: Migrate buttons in user/role_assignment/list --- .../admin/user/role_assignment/list.html.twig | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig b/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig index 284d25d04..a0e927102 100644 --- a/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig @@ -85,21 +85,19 @@ {% set modal_data_target = 'delete-role-assignments-modal' %} - + {{ 'role_assignment.view.list.action.delete'|trans|desc('Unassign') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'role_assignments.modal.message'|trans|desc('Do you want to unassign the Users/Groups?'), From 9561099f2983ff3db9505cf3a0e1d09ce4b73faa Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:55 +0100 Subject: [PATCH 083/234] fix: Migrate buttons in ui/component/adaptive_filters --- .../adaptive_filters.html.twig | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig index 183a3e171..d758f2a47 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig @@ -117,17 +117,15 @@ {% endblock %} {% block action_clear %} - + {{ 'actions.clear_btn'|trans|desc('Clear filters') }} + {% endblock %} {% endblock %}
      From 0625d9578b055bc47c14f2660a48823c6abfef74 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:36:58 +0100 Subject: [PATCH 084/234] fix: Migrate buttons in ui/component/collapse --- .../themes/admin/ui/component/collapse.html.twig | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig index e5b879e00..5122c0ae4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig @@ -27,11 +27,13 @@ {% if extra_actions is defined %} {% for action in extra_actions %} - + {% endfor %} {% endif %} From c5a62551c41e7d5a52c18bb1724f8378905fad79 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:01 +0100 Subject: [PATCH 085/234] fix: Migrate buttons in ui/component/collapse_all_btn --- .../collapse_all_btn/collapse_all_btn.html.twig | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig index 9e3126228..0720bab7a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig @@ -1,7 +1,13 @@ {% trans_default_domain 'ibexa_collapse' %}
      - +
      From 6c5c19f2c41b48f4ca64c947e31ce6cf9f1c3b2d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:05 +0100 Subject: [PATCH 086/234] fix: Migrate buttons in ui/component/details --- .../views/themes/admin/ui/component/details/details.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig index a7dbdd674..6d6018038 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig @@ -60,7 +60,7 @@ {% if item.is_ellipsized|default(false) %}
      Date: Wed, 25 Feb 2026 13:37:09 +0100 Subject: [PATCH 087/234] fix: Migrate buttons in ui/component/embedded_item_actions --- .../embedded_item_actions.html.twig | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/embedded_item_actions/embedded_item_actions.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/embedded_item_actions/embedded_item_actions.html.twig index c82b3e106..592f3b818 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/embedded_item_actions/embedded_item_actions.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/embedded_item_actions/embedded_item_actions.html.twig @@ -6,15 +6,15 @@ {% endblock %} {% block embedded_item_menu_trigger %} - + /> {% endblock %} {% block embedded_item_menu %} From 583166044978441fa9e02bbdf2002f3cf2209dcb Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:12 +0100 Subject: [PATCH 088/234] fix: Migrate buttons in ui/component/extra_actions --- .../component/extra_actions/extra_actions.html.twig | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig index 66d0055b3..8364cdfa9 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig @@ -11,11 +11,13 @@

      {{ title|default('') }}

      - +
      {% block content %}{% endblock %} From 0987d3ed00d928197cb48d72ed383455799a5e94 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:14 +0100 Subject: [PATCH 089/234] fix: Migrate buttons in ui/component/input_text --- .../admin/ui/component/input_text.html.twig | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig index 03f0a782f..a64151810 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig @@ -32,23 +32,23 @@ {% block content %}{% endblock %}
      {% block actions %} - + /> {% if is_password_input %} - + {% elseif has_search %} + {% endblock %} {% endembed %} From 08f39211bd03532d9cc0390c62d52f6900069240 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:20 +0100 Subject: [PATCH 091/234] fix: Migrate buttons in ui/component/modal --- .../admin/ui/component/modal/modal.html.twig | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/modal/modal.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/modal/modal.html.twig index baabd0e5f..1ed836aad 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/modal/modal.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/modal/modal.html.twig @@ -50,24 +50,20 @@ {% set close_btn_title = 'close_btn.title'|trans({}, 'ibexa_modal')|desc('Close') %} {% set close_btn_aria_label = 'close_btn.aria_label'|trans({}, 'ibexa_modal')|desc('Close') %} -{% set attr_close_btn = attr_close_btn|default({})|merge({ - class: ('close ibexa-btn ibexa-btn--ghost ' ~ attr_close_btn.class|default(''))|trim, - type: attr_close_btn.type|default('button'), - title: attr_close_btn.title|default(close_btn_title), - 'data-bs-dismiss': attr_close_btn['data-bs-dismiss']|default('modal'), - 'data-tooltip-container-selector': '.modal-dialog', - 'aria-label': attr_close_btn['aria-label']|default(close_btn_aria_label), -}) %} +{% set attr_close_btn = attr_close_btn|default({}) %} {% set close_btn %} - + {% endset %}
      From 52189b7e7e244149165a5829111201b384fd25b8 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:23 +0100 Subject: [PATCH 092/234] fix: Migrate buttons in ui/component/taggify --- .../ui/component/taggify/taggify_tag.html.twig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig index 2d4d6448d..2a3bebd69 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig @@ -1,8 +1,11 @@
      {{ name }} - +
      From b43805d592d33eb78d84c2d343cee090338abbb3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:37:29 +0100 Subject: [PATCH 093/234] fix: Migrate buttons in ui/edit_translation_button --- .../views/themes/admin/ui/edit_translation_button.html.twig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig index 132823c47..877a92fd3 100644 --- a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig @@ -5,7 +5,7 @@ {% if translations|length == 1 %} {% set language = translations|first %} Date: Wed, 25 Feb 2026 13:37:32 +0100 Subject: [PATCH 094/234] fix: Migrate buttons in ui/field_type/edit/ibexa_author --- .../themes/admin/ui/field_type/edit/ibexa_author.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig index f82119d7f..096bba110 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig @@ -26,7 +26,7 @@ Date: Wed, 25 Feb 2026 13:37:36 +0100 Subject: [PATCH 095/234] fix: Migrate buttons in ui/field_type/edit/ibexa_binaryfile --- .../admin/ui/field_type/edit/ibexa_binaryfile.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig index 7b58a5717..7e9e3f096 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_binaryfile.html.twig @@ -21,7 +21,7 @@ Date: Wed, 25 Feb 2026 13:37:40 +0100 Subject: [PATCH 096/234] fix: Migrate buttons in ui/field_type/edit/ibexa_gmap_location --- .../admin/ui/field_type/edit/ibexa_gmap_location.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig index 29eae4e4a..767f89121 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig @@ -11,7 +11,7 @@
      Date: Wed, 25 Feb 2026 13:37:42 +0100 Subject: [PATCH 097/234] fix: Migrate buttons in ui/field_type/edit/ibexa_image --- .../themes/admin/ui/field_type/edit/ibexa_image.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig index e67d55465..f2e357d58 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig @@ -25,7 +25,7 @@
      Date: Wed, 25 Feb 2026 13:37:45 +0100 Subject: [PATCH 098/234] fix: Migrate buttons in ui/field_type/edit/ibexa_image_asset --- .../admin/ui/field_type/edit/ibexa_image_asset.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig index 96a8d9f4a..bc0a0aef8 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image_asset.html.twig @@ -117,7 +117,7 @@
      Date: Wed, 25 Feb 2026 13:37:48 +0100 Subject: [PATCH 099/234] fix: Migrate buttons in ui/field_type/edit/ibexa_media --- .../themes/admin/ui/field_type/edit/ibexa_media.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig index c007b8f70..4ce2b52b0 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig @@ -19,7 +19,7 @@
      Date: Wed, 25 Feb 2026 13:37:54 +0100 Subject: [PATCH 100/234] fix: Migrate buttons in ui/field_type/edit/relation_base --- .../themes/admin/ui/field_type/edit/relation_base.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig index 8a8dc6ff8..66d6f67c4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig @@ -10,7 +10,7 @@ {% set remove_item_btn %} Date: Wed, 25 Feb 2026 13:37:56 +0100 Subject: [PATCH 101/234] fix: Migrate buttons in ui/field_type/preview/content_fields --- .../themes/admin/ui/field_type/preview/content_fields.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig index 9823e92fa..e2d0a0f15 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig @@ -231,7 +231,7 @@ Date: Wed, 25 Feb 2026 13:38:00 +0100 Subject: [PATCH 102/234] fix: Migrate buttons in ui/form_fields --- .../themes/admin/ui/form_fields.html.twig | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig index 91a7092d1..0018ca3f8 100644 --- a/src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig @@ -551,25 +551,33 @@ {{- form_label(form) -}}
      - - + + + {{ 'distraction_free_mode.disable.label'|trans|desc('Exit distraction free mode') }} +
      From e2386ea660378e1cf99823084e612b54e92de339 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:38:03 +0100 Subject: [PATCH 103/234] fix: Migrate buttons in ui/global_search --- .../views/themes/admin/ui/global_search.html.twig | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/global_search.html.twig b/src/bundle/Resources/views/themes/admin/ui/global_search.html.twig index e3a54c32c..ee165c23f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/global_search.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/global_search.html.twig @@ -31,13 +31,14 @@ {{ 'autocomplete.results_count'|trans|desc('Results') }}:
      - +
      {{ 'autocomplete.no_results'|trans|desc('No suggestions available.') }} From 345ebbafd26d9ab47167f9728161ade638957631 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:55:56 +0100 Subject: [PATCH 104/234] fix: Rename ibexa-btn--cancel to ids-button--cancel --- .../themes/admin/content/modal/hide_confirmation.html.twig | 2 +- .../themes/admin/ui/on_the_fly/create_on_the_fly.html.twig | 2 +- .../views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig | 2 +- .../modules/universal-discovery/content.create.tab.module.js | 2 +- .../src/modules/universal-discovery/content.edit.tab.module.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig index 60e26523e..c2d9815cd 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig @@ -24,7 +24,7 @@ {{ 'content.hide.modal.cancel'|trans()|desc('Cancel') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig index e9a3f3953..18f548eaf 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig @@ -16,7 +16,7 @@
    • -
    • diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig index af4888207..900569cc2 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig @@ -16,7 +16,7 @@
    • -
    • diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js index 19931a8e2..e3817fdc8 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js @@ -61,7 +61,7 @@ const ContentCreateTabModule = () => { const locationId = iframeRef.current.contentWindow.document.querySelector('meta[name="LocationID"]'); const iframeBody = iframeRef.current.contentWindow.document.body; const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ibexa-btn--confirm'); - const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ibexa-btn--cancel'); + const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--cancel'); const iframeCloseBtn = iframeBody.querySelector('.ibexa-anchor-navigation-menu__close'); if (locationId) { diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js index 62a776777..16d937036 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js @@ -68,7 +68,7 @@ const ContentEditTabModule = () => { const locationId = iframeRef.current.contentWindow.document.querySelector('meta[name="LocationID"]'); const iframeBody = iframeRef.current.contentWindow.document.body; const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ibexa-btn--confirm'); - const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ibexa-btn--cancel'); + const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--cancel'); const iframeCloseBtn = iframeBody.querySelector('.ibexa-anchor-navigation-menu__close'); if (locationId) { From c1a4b7320dd81e173510e27a008898ae243543c5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:56:27 +0100 Subject: [PATCH 105/234] fix: Rename ibexa-btn--confirm to ids-button--confirm --- .../Resources/public/js/scripts/sidebar/btn/content.hide.js | 2 +- .../themes/admin/content/modal/hide_confirmation.html.twig | 2 +- .../themes/admin/ui/on_the_fly/create_on_the_fly.html.twig | 2 +- .../views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig | 2 +- .../modules/universal-discovery/content.create.tab.module.js | 2 +- .../src/modules/universal-discovery/content.edit.tab.module.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js index d04f59264..8c307fe32 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js @@ -9,7 +9,7 @@ } if (modal) { - modal.querySelector('.ibexa-btn--confirm').addEventListener('click', () => { + modal.querySelector('.ids-button--confirm').addEventListener('click', () => { visiblity.value = 0; form.submit(); }); diff --git a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig index c2d9815cd..60471574a 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig @@ -18,7 +18,7 @@
      From c08ad8dbb563db287f4b5b30556fc45babb2f2c4 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 13:56:53 +0100 Subject: [PATCH 109/234] fix: Rename ibexa-btn--apply and ibexa-btn--clear to ids-button--* --- .../public/js/scripts/admin.notifications.filters.js | 4 ++-- .../Resources/public/js/scripts/admin.search.filters.js | 4 ++-- .../themes/admin/account/notifications/filters.html.twig | 4 ++-- .../Resources/views/themes/admin/ui/search/filters.html.twig | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js b/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js index 33fb21d9d..82c1da028 100644 --- a/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js +++ b/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js @@ -1,8 +1,8 @@ (function (global, doc) { const searchForm = doc.querySelector('.ibexa-list-search-form'); const filtersContainerNode = doc.querySelector('.ibexa-list-filters'); - const applyFiltersBtn = filtersContainerNode.querySelector('.ibexa-btn--apply'); - const clearFiltersBtn = filtersContainerNode.querySelector('.ibexa-btn--clear'); + const applyFiltersBtn = filtersContainerNode.querySelector('.ids-button--apply'); + const clearFiltersBtn = filtersContainerNode.querySelector('.ids-button--clear'); const statusFilterNode = filtersContainerNode.querySelector('.ibexa-list-filters__item--statuses'); const typeFilterNode = filtersContainerNode.querySelector('.ibexa-list-filters__item--type'); const datetimeFilterNodes = filtersContainerNode.querySelectorAll('.ibexa-list-filters__item--date-time .ibexa-picker'); diff --git a/src/bundle/Resources/public/js/scripts/admin.search.filters.js b/src/bundle/Resources/public/js/scripts/admin.search.filters.js index 512f44fe5..1ea7526ec 100644 --- a/src/bundle/Resources/public/js/scripts/admin.search.filters.js +++ b/src/bundle/Resources/public/js/scripts/admin.search.filters.js @@ -7,8 +7,8 @@ const token = doc.querySelector('meta[name="CSRF-Token"]').content; const siteaccess = doc.querySelector('meta[name="SiteAccess"]').content; const filters = doc.querySelector('.ibexa-filters'); - const clearBtn = filters.querySelector('.ibexa-btn--clear'); - const applyBtn = filters.querySelector('.ibexa-btn--apply'); + const clearBtn = filters.querySelector('.ids-button--clear'); + const applyBtn = filters.querySelector('.ids-button--apply'); const contentTypeSelect = doc.querySelector('.ibexa-filters__item--content-type .ibexa-filters__select'); const sectionSelect = doc.querySelector('.ibexa-filters__item--section .ibexa-filters__select'); const lastModifiedSelectNode = doc.querySelector('.ibexa-filters__item--modified .ibexa-filters__select'); diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig index 334970394..d33491954 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig @@ -23,14 +23,14 @@ html_type="button" type="tertiary-alt" size="small" - class="ibexa-btn--clear" + class="ids-button--clear" :disabled="not is_any_filter_set" > {{ 'ibexa.notifications.search_form.clear'|trans|desc('Clear') }}
      From dc9f1870130ca2b57ee396aff4831489ddf067b1 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:01:08 +0100 Subject: [PATCH 118/234] fix: Rename ibexa-btn--search-by-address to ids-button--search-by-address --- .../public/js/scripts/fieldType/ibexa_gmap_location.js | 2 +- .../public/scss/fieldType/edit/_ibexa_gmap_location.scss | 2 +- .../admin/ui/field_type/edit/ibexa_gmap_location.html.twig | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js index 00825473c..4e4d6e158 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js @@ -454,7 +454,7 @@ const latitudeInput = field.querySelector(SELECTOR_LAT_INPUT); const areCoordsSet = !!longitudeInput.value.length && !!latitudeInput.value.length; const locateMeBtn = field.querySelector('.ibexa-data-source__locate-me .btn'); - const searchBtn = field.querySelector('.ibexa-btn--search-by-address'); + const searchBtn = field.querySelector('.ids-button--search-by-address'); const mapContainer = field.querySelector('.ibexa-data-source__map'); let mapConfig = { zoom: areCoordsSet ? 15 : 1, diff --git a/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss b/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss index 020c0347d..ebc00b245 100644 --- a/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss +++ b/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss @@ -97,7 +97,7 @@ } } - .ibexa-btn--search-by-address { + .ids-button--search-by-address { position: absolute; top: 0; left: 0; diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig index d369c1912..bf5a4ab83 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig @@ -23,7 +23,7 @@ type="tertiary-alt" icon="search" icon_size="small-medium" - class="ibexa-btn--search-by-address" + class="ids-button--search-by-address" />
      From edc41b1f9f1fb806bb0512c1ee1f633d5a6176b9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:01:13 +0100 Subject: [PATCH 119/234] fix: Rename ibexa-btn--add-author, bulk-remove-author, remove-author to ids-button--* --- .../public/js/scripts/fieldType/ibexa_author.js | 12 ++++++------ .../admin/ui/field_type/edit/ibexa_author.html.twig | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js index 117997bd4..5fd43d225 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa) { - const SELECTOR_REMOVE_AUTHOR = '.ibexa-btn--remove-author'; + const SELECTOR_REMOVE_AUTHOR = '.ids-button--remove-author'; const SELECTOR_AUTHOR = '.ibexa-data-source__author'; const SELECTOR_FIELD = '.ibexa-field-edit--ibexa_author'; const SELECTOR_LABEL = '.ibexa-data-source__label'; @@ -106,7 +106,7 @@ const container = event.target.closest(SELECTOR_FIELD); const checkboxes = container.querySelectorAll('.ibexa-input--checkbox'); const isAnyCheckboxSelected = [...checkboxes].some((checkbox) => checkbox.checked); - const bulkDeleteButton = container.querySelector('.ibexa-btn--bulk-remove-author'); + const bulkDeleteButton = container.querySelector('.ids-button--bulk-remove-author'); bulkDeleteButton.toggleAttribute('disabled', !isAnyCheckboxSelected); } @@ -114,7 +114,7 @@ removeSelectedItems(event) { const container = event.target.closest(SELECTOR_FIELD); const selectedCheckboxes = container.querySelectorAll('.ibexa-input--checkbox:checked'); - const bulkDeleteButton = container.querySelector('.ibexa-btn--bulk-remove-author'); + const bulkDeleteButton = container.querySelector('.ids-button--bulk-remove-author'); selectedCheckboxes.forEach((checkbox) => checkbox.closest(SELECTOR_AUTHOR).remove()); @@ -123,7 +123,7 @@ const authorsRowsExist = !!container.querySelector(SELECTOR_AUTHOR); if (!authorsRowsExist) { - container.querySelector('.ibexa-btn--add-author').click(); + container.querySelector('.ids-button--add-author').click(); } this.updateDisabledState(container); @@ -252,13 +252,13 @@ }, { isValueValidator: false, - selector: '.ibexa-btn--bulk-remove-author', + selector: '.ids-button--bulk-remove-author', eventName: 'click', callback: 'removeSelectedItems', }, { isValueValidator: false, - selector: '.ibexa-btn--add-author', + selector: '.ids-button--add-author', eventName: 'click', callback: 'addItem', }, diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig index 096bba110..1f6e049e0 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig @@ -18,7 +18,7 @@ size="small" icon="add" icon_size="small-medium" - class="ibexa-btn--add-author" + class="ids-button--add-author" title="{{ 'ibexa_author.action.add'|trans|desc('Add') }}" :disabled="readonly|default(false)" > @@ -30,7 +30,7 @@ size="small" icon="trash" icon_size="small-medium" - class="ibexa-btn--bulk-remove-author" + class="ids-button--bulk-remove-author" title="{{ 'ibexa_author.action.delete'|trans|desc('Delete') }}" disabled > @@ -66,7 +66,7 @@ type="tertiary-alt" icon="trash" icon_size="small-medium" - class="ibexa-btn--remove-author" + class="ids-button--remove-author" title="{{ 'ibexa_author.action.delete'|trans|desc('Delete') }}" disabled /> From f5817f23c1c6f46c790943e4eb78df1320c32d0b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:01:38 +0100 Subject: [PATCH 120/234] fix: Rename ibexa-btn--translations-list-toggler, select-language, active to ids-button--* --- .../public/js/scripts/button.translation.edit.js | 10 +++++----- .../themes/admin/ui/edit_translation_button.html.twig | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/button.translation.edit.js b/src/bundle/Resources/public/js/scripts/button.translation.edit.js index c6de4dfd0..dc28193ea 100644 --- a/src/bundle/Resources/public/js/scripts/button.translation.edit.js +++ b/src/bundle/Resources/public/js/scripts/button.translation.edit.js @@ -2,11 +2,11 @@ class EditTranslation { constructor(config) { this.container = config.container; - this.toggler = config.container.querySelector('.ibexa-btn--translations-list-toggler'); + this.toggler = config.container.querySelector('.ids-button--translations-list-toggler'); this.extraActionsContainer = config.container.querySelector('.ibexa-extra-actions'); this.closeBtn = config.container.querySelector('.ibexa-extra-actions__close-btn'); this.confirmBtn = config.container.querySelector('.ibexa-extra-actions__confirm-btn'); - this.languagesBtns = config.container.querySelectorAll('.ibexa-btn--select-language'); + this.languagesBtns = config.container.querySelectorAll('.ids-button--select-language'); this.backdrop = config.backdrop; this.tableNode = null; @@ -64,8 +64,8 @@ this.confirmBtn.dataset.languageCode = languageCode; this.confirmBtn.disabled = false; - this.languagesBtns.forEach((btn) => btn.classList.remove('ibexa-btn--active')); - event.currentTarget.classList.add('ibexa-btn--active'); + this.languagesBtns.forEach((btn) => btn.classList.remove('ids-button--active')); + event.currentTarget.classList.add('ids-button--active'); } resetLanguageSelector() { @@ -73,7 +73,7 @@ this.confirmBtn.dataset.languageCode = null; this.confirmBtn.disabled = true; - this.languagesBtns.forEach((btn) => btn.classList.remove('ibexa-btn--active')); + this.languagesBtns.forEach((btn) => btn.classList.remove('ids-button--active')); } init() { diff --git a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig index fedbe167d..1455ae16b 100644 --- a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig @@ -21,7 +21,7 @@ type="tertiary-alt" icon="edit" icon_size="small-medium" - class="mx-2 ibexa-btn--translations-list-toggler" + class="mx-2 ids-button--translations-list-toggler" title="{{ title }}" /> @@ -40,7 +40,7 @@
      Date: Wed, 25 Feb 2026 14:01:41 +0100 Subject: [PATCH 121/234] fix: Rename ibexa-btn--close-config-panel to ids-button--close-config-panel --- .../themes/admin/ui/component/side_panel/side_panel.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig index 7949de67e..33485acc4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig @@ -23,7 +23,7 @@ {% block header %} + {{ 'language.delete_language'|trans|desc('Delete') }} + {% include '@ibexadesign/language/modal/delete_confirmation.html.twig' with {'deleteForm': deleteForm} %} {{ form_end(deleteForm) }} From fb38b2870a0404052394038ecc115121fc194bf1 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:03:18 +0100 Subject: [PATCH 125/234] fix: Migrate buttons in object_state/object_state_group/view.html.twig --- .../object_state/object_state_group/view.html.twig | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/view.html.twig b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/view.html.twig index c30400a40..d64bc0cfc 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/view.html.twig @@ -24,14 +24,13 @@ {% set menu_items %} {% if can_administrate %}
    • - - - {{ 'object_state_group.name.action.edit'|trans|desc('Edit') }} - - + {{ 'object_state_group.name.action.edit'|trans|desc('Edit') }} +
    • {% endif %} {% endset %} From 2559ed21fa5cd85242621891ee1604288f71a062 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:03:28 +0100 Subject: [PATCH 126/234] fix: Migrate buttons in ui/dashboard/dashboard.html.twig --- .../admin/ui/dashboard/dashboard.html.twig | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig index 20d2742b5..997b640d6 100644 --- a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig @@ -12,16 +12,17 @@ {% block context_menu %}
      - + {{ 'dashboard.create'|trans|desc('Create content') }} +
      {% endblock %} From dead1d17d5f08433612f27631d343692b333631e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:03:43 +0100 Subject: [PATCH 127/234] fix: Migrate buttons in ui/on_the_fly/create_on_the_fly.html.twig and edit_on_the_fly.html.twig --- .../admin/ui/on_the_fly/create_on_the_fly.html.twig | 12 ++++++------ .../admin/ui/on_the_fly/edit_on_the_fly.html.twig | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig index 1dfd88d3f..411f3a87b 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig @@ -11,14 +11,14 @@ {% set context_actions %} {% set menu_items %}
    • - + + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }} +
    • - + + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }} +
    • {% endset %} diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig index cdb3f3a8f..8874857fe 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig @@ -11,14 +11,14 @@ {% set context_actions %} {% set menu_items %}
    • - + + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }} +
    • - + + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }} +
    • {% endset %} From b8535d6ca468f92150f333f46f637d042c08c129 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 14:04:13 +0100 Subject: [PATCH 128/234] fix: Migrate cancel buttons in modal templates (B7-B12) --- .../views/themes/admin/content/modal/user_delete.html.twig | 4 ++-- .../admin/content/tab/url/modal_add_custom_url.html.twig | 4 ++-- .../themes/admin/language/modal/delete_confirmation.html.twig | 4 ++-- .../themes/admin/section/modal/delete_confirmation.html.twig | 4 ++-- .../admin/trash/modal/empty_trash_confirmation.html.twig | 4 ++-- .../views/themes/admin/url_wildcard/modal_create.html.twig | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig index 95839d80d..b5ad4e401 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig @@ -12,9 +12,9 @@ {% block footer_content %} {{ form_start(form, {'action': path('ibexa.user.delete')}) }} {{ form_widget(form.delete, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'}}) }} - + {{ form_end(form) }} {% endblock %} {% endembed %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig index 6ed981fb6..3106048e3 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig @@ -61,9 +61,9 @@ {% endblock %} {% block footer_content %} {{ form_widget(form.add, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': 'disabled'}}) }} - + {% endblock %} {% block content_after %} {{ form_end(form) }} diff --git a/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig index 8cb206e3a..8ff05b73f 100644 --- a/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig @@ -10,8 +10,8 @@ {% endblock %} {% block footer_content %} {{ form_widget(deleteForm.delete, { 'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'} }) }} - + {% endblock %} {% endembed %} diff --git a/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig index 217f636d5..5051cd466 100644 --- a/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig @@ -16,9 +16,9 @@ 'attr': {'class': 'd-inline-block'} }) }} {{ form_widget(form.delete, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': not deletable}}) }} - + {{ form_end(form) }} {% endblock %} {% endembed %} diff --git a/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig index 4c5966f9d..45ed1b481 100644 --- a/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig @@ -17,9 +17,9 @@ 'action': path('ibexa.trash.empty') }) }} {{ form_widget(form.empty, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'}}) }} - + {{ form_widget(form.empty_trash, {'label_attr': {'class': 'checkbox-inline'}, 'attr': {'hidden': true}}) }} {{ form_end(form) }} {% endblock %} diff --git a/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig b/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig index 976529251..e86b7114b 100644 --- a/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig +++ b/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig @@ -45,9 +45,9 @@ {% endblock %} {% block footer_content %} {{ form_widget(form.create, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': 'disabled'}}) }} - + {% endblock %} {% block content_after %} {{ form_end(form) }} From c119883d57d9f524787afb7e54f04cdacb90283b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:00:04 +0100 Subject: [PATCH 129/234] fix: Migrate buttons in limitation/udw_limitation_value.html.twig --- .../limitation/udw_limitation_value.html.twig | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig b/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig index 79d0021a7..eb28bb453 100755 --- a/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig +++ b/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig @@ -3,10 +3,11 @@ {{ form_errors(form.limitationValues) }} {{ form_widget(form.limitationValues) }} - + })|e('html_attr') }}" + > + {{ 'role.policy.limitation.location.udw_button'|trans({}, 'ibexa_content_forms_role')|desc('Select Locations') }} +
        {% for limitationValue in form.limitationValues.vars.data %} From 823ba2fe8016aa288d808c4e85734f615b71bc5f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:00:34 +0100 Subject: [PATCH 130/234] fix: Migrate buttons in content_type/relation_form_fields.html.twig and relation_list_form_fields.html.twig --- ...min.contenttype.relation.default.location.js | 6 +++--- .../content_type/relation_form_fields.html.twig | 17 +++++++++-------- .../relation_list_form_fields.html.twig | 17 +++++++++-------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js b/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js index f3cb8b7bd..515189738 100644 --- a/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js +++ b/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js @@ -53,7 +53,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ }; const resetStartingLocation = ({ currentTarget }) => { const container = currentTarget.closest('.ibexa-default-location'); - const udwBtn = container.querySelector('.ibexa-btn--udw-relation-default-location'); + const udwBtn = container.querySelector('.ids-button--udw-relation-default-location'); const pathSelector = container.querySelector('.ibexa-default-location__path-selector'); const { relationRootInputSelector } = udwBtn.dataset; @@ -62,7 +62,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ pathSelector.classList.remove('ibexa-default-location__path-selector--filled'); }; const attachEvents = (container) => { - const udwBtn = container.querySelector('.ibexa-btn--udw-relation-default-location'); + const udwBtn = container.querySelector('.ids-button--udw-relation-default-location'); const deleteBtn = container.querySelector(SELECTOR_RESET_STARTING_LOCATION_BTN); const choices = container.querySelectorAll('input[type="radio"]'); @@ -71,7 +71,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ choices.forEach((choice) => choice.addEventListener('change', toggleDisabledState.bind(null, container), false)); }; const toggleDisabledState = (container) => { - const locationBtn = container.querySelector('.ibexa-btn--udw-relation-default-location'); + const locationBtn = container.querySelector('.ids-button--udw-relation-default-location'); const deleteBtn = container.querySelector(SELECTOR_RESET_STARTING_LOCATION_BTN); const isDisabled = !container.querySelector('input[value="1"]').checked; diff --git a/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig b/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig index 5bc71cc1e..03469af62 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig @@ -10,22 +10,23 @@ {% if is_path_selected %}ibexa-default-location__path-selector--filled{% endif %} " > - +
        - +
        - +
        {% include '@ibexadesign/ui/page_title.html.twig' with { From 339762de295a678bb9d0f65351c260078025bf32 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:00:58 +0100 Subject: [PATCH 132/234] fix: Migrate buttons in account/notifications/filters.html.twig --- .../admin/account/notifications/filters.html.twig | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig index d33491954..103f70b3d 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig @@ -28,13 +28,15 @@ > {{ 'ibexa.notifications.search_form.clear'|trans|desc('Clear') }} - +
      From 790f955852174d0ad9e56e8efe6ab73dc7ac56bf Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:01:04 +0100 Subject: [PATCH 133/234] fix: Migrate buttons in account/notifications/side_panel.html.twig --- .../admin/account/notifications/side_panel.html.twig | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig index cefaa7e89..388d5e6f3 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/side_panel.html.twig @@ -14,9 +14,14 @@ {{ 'ibexa_notifications'|trans|desc('Notifications')}} ({{max_visible_notifications_count}}) - +
      {% endblock %} From f5eb910c1fed1f9be1f1998af7acd0e1bb57ec07 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:01:25 +0100 Subject: [PATCH 134/234] fix: Migrate buttons in content/tab/urls.html.twig --- .../themes/admin/content/tab/urls.html.twig | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index 2e3c04cc0..e00e68bbc 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -49,18 +49,18 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %} - + {{ 'tab.urls.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-custom-url-modal' %} Date: Wed, 25 Feb 2026 18:01:34 +0100 Subject: [PATCH 135/234] fix: Migrate buttons in url_wildcard/list.html.twig --- .../themes/admin/url_wildcard/list.html.twig | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig index 9d285fe49..b3bcd0939 100644 --- a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig @@ -99,21 +99,19 @@ {% block header %} {% embed '@ibexadesign/ui/component/table/table_header.html.twig' %} {% block actions %} - + {{ 'url_wildcard.list.action.create'|trans|desc('Add') }} + Date: Wed, 25 Feb 2026 18:01:44 +0100 Subject: [PATCH 136/234] fix: Migrate buttons in user/policy/list.html.twig --- .../themes/admin/user/policy/list.html.twig | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig index 3403b4dbf..1e39421e5 100644 --- a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig @@ -90,17 +90,16 @@ {% embed '@ibexadesign/ui/component/table/table_header.html.twig' %} {% block actions %} {% if can_update %} - - - - - - {{ 'policy.view.list.action.add'|trans|desc('Add') }} - - + {{ 'policy.view.list.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-policies-modal' %} Date: Wed, 25 Feb 2026 18:01:52 +0100 Subject: [PATCH 137/234] fix: Migrate buttons in user/role_assignment/list.html.twig --- .../admin/user/role_assignment/list.html.twig | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig b/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig index a0e927102..f6c2d344e 100644 --- a/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/role_assignment/list.html.twig @@ -74,16 +74,16 @@ {% block actions %} {% if can_assign %} - - - - - - {{ 'role_assignment.view.list.action.add'|trans|desc('Assign to Users/Groups') }} - - + variant="button" + type="tertiary" + size="small" + icon="assign-user" + icon_size="small-medium" + > + {{ 'role_assignment.view.list.action.add'|trans|desc('Assign to Users/Groups') }} + {% set modal_data_target = 'delete-role-assignments-modal' %} Date: Wed, 25 Feb 2026 18:02:39 +0100 Subject: [PATCH 138/234] fix: Migrate buttons in user/invitation/modal.html.twig --- .../admin/user/invitation/modal.html.twig | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig index 6caaa12d7..3dbfa0425 100644 --- a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig @@ -74,14 +74,14 @@
      {% endblock %} {% block actions %} - + {{ 'modal.entry_issues.alert.go_to_next'|trans|desc('Go to next issue') }} +
      {% endblock %} {% endembed %} {% embed '@ibexadesign/ui/component/input_text.html.twig' with { has_search: true, search_button_type: 'button' } %} @@ -110,17 +110,16 @@ 'No entries match search.' ) }}
      - + {{ 'modal.add_next'|trans|desc('Add next') }} +
      @@ -135,13 +134,14 @@
      {{ 'modal.or'|trans|desc('or') }}
      - + {% endblock %} {% block footer_content %} - + {{ form_widget(form.send, { attr: { hidden: true, class: 'btn ibexa-btn ibexa-btn--primary ibexa-user-invitation-modal__real-submit-btn', }, }) }} - + {% endblock %} {% block content_after %} {{ form_end(form) }} From a5c59dc6fa837d90cfe8a38a601da388f6011fc7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:02:46 +0100 Subject: [PATCH 139/234] fix: Migrate buttons in ui/component/alert/alert.html.twig --- .../themes/admin/ui/component/alert/alert.html.twig | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/alert/alert.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/alert/alert.html.twig index dc4d2a4ad..9aaeb2f54 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/alert/alert.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/alert/alert.html.twig @@ -57,11 +57,14 @@ {% endblock %} {% block close_btn %} {% if show_close_btn|default(false) %} - + {% endif %} {% endblock %}
      From 6bd33aa608334ada2b793a04313d7cfc559cf416 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:02:58 +0100 Subject: [PATCH 140/234] fix: Migrate buttons in ui/component/side_panel/side_panel.html.twig --- .../component/side_panel/side_panel.html.twig | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig index 33485acc4..9cf64a8b2 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig @@ -21,26 +21,26 @@ {% block panel %}
      {% block header %} - +

      {{ title }}

      {% endblock %} {% block content %}{% endblock %}
      {% block footer %} - + {% endblock %}
      From 373fbea6c98505a398fab6b9c8ecdb16365e1ee6 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:03:26 +0100 Subject: [PATCH 141/234] fix: Migrate buttons in ui/component/collapse.html.twig --- .../admin/ui/component/collapse.html.twig | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig index 5122c0ae4..879525810 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse.html.twig @@ -9,21 +9,24 @@
      {% block header_content %} {% if is_draggable|default(false) %} - + {% endif %} - + {% if extra_actions is defined %} {% for action in extra_actions %} @@ -37,16 +40,17 @@ {% endfor %} {% endif %} - + {% endblock %}
      {% endblock %} From b0c448e7f7f825ef4a3155765e6c13c7ea3da923 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:03:47 +0100 Subject: [PATCH 142/234] fix: Migrate buttons in ui/layout.html.twig and ui/layout_error.html.twig --- .../views/themes/admin/ui/layout.html.twig | 4 ++-- .../views/themes/admin/ui/layout_error.html.twig | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/layout.html.twig b/src/bundle/Resources/views/themes/admin/ui/layout.html.twig index d26406330..00ca9ace0 100644 --- a/src/bundle/Resources/views/themes/admin/ui/layout.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/layout.html.twig @@ -221,14 +221,14 @@ {% if not is_back_to_top_disabled|default(false) %} {% block back_to_top %}
      - +
      {% endblock %} {% endif %} diff --git a/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig b/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig index 29a3ba77c..4b74c77dd 100644 --- a/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig @@ -67,14 +67,14 @@ {% if not is_back_to_top_disabled|default(false) %} {% block back_to_top %}
      - + + + {{ 'back.to.top'|trans|desc('Go to top') }} + + + + +
      {% endblock %} {% endif %} From 8e12dc585f411009eb8ed18b1e762590c76f9c0f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:04:26 +0100 Subject: [PATCH 143/234] fix: Migrate buttons in language/list.html.twig --- .../views/themes/admin/language/list.html.twig | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/language/list.html.twig b/src/bundle/Resources/views/themes/admin/language/list.html.twig index 571c2d852..e962e2ce7 100644 --- a/src/bundle/Resources/views/themes/admin/language/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/list.html.twig @@ -23,14 +23,13 @@ {% set menu_items %} {% if can_administrate %}
    • - - - {{ 'language.new'|trans|desc('Add language') }} - - + {{ 'language.new'|trans|desc('Add language') }} +
    • {% endif %} {% endset %} From 79d16a2d1ae688bdbbba2131441bb7db848aa5c1 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:04:34 +0100 Subject: [PATCH 144/234] fix: Migrate buttons in user/role/list.html.twig --- .../views/themes/admin/user/role/list.html.twig | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig index 480244abf..7b6ad2d52 100644 --- a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig @@ -25,17 +25,15 @@ {% set menu_items %} {% if can_create %}
    • - - - - - - {{ 'role.view.list.action.add'|trans|desc('Create') }} - - + {{ 'role.view.list.action.add'|trans|desc('Create') }} +
    • {% endif %} {% endset %} From eea912d76a9de956746ab04eba8807aedbfe78cd Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:04:42 +0100 Subject: [PATCH 145/234] fix: Migrate buttons in content_type/content_type_group/list.html.twig --- .../content_type_group/list.html.twig | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig index 5134deb51..42f2e2bdc 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig @@ -25,17 +25,15 @@ {% set menu_items %} {% if can_create %}
    • - - - - - - {{ 'content_type_group.view.list.action.add'|trans|desc('Create') }} - - + {{ 'content_type_group.view.list.action.add'|trans|desc('Create') }} +
    • {% endif %} {% endset %} From a9987d603af4fb2bdccad58c00084eac8b407817 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:04:49 +0100 Subject: [PATCH 146/234] fix: Migrate buttons in object_state/object_state_group/list.html.twig --- .../object_state_group/list.html.twig | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig index 59a4ea4c3..a5035cb50 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig @@ -27,17 +27,15 @@ {% set menu_items %} {% if can_administrate %}
    • - - - - - - {{ 'object_state_group.new'|trans|desc('Create') }} - - + {{ 'object_state_group.new'|trans|desc('Create') }} +
    • {% endif %} {% endset %} From 5cd6189e62647c4cb46e1fc11d83148219f3b296 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:05:05 +0100 Subject: [PATCH 147/234] fix: Migrate buttons in content_type/field_definitions.html.twig --- .../admin/content_type/field_definitions.html.twig | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig index f2911070f..1bea59574 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig @@ -73,16 +73,16 @@ {% endfor %}
      - + {{ include('@ibexadesign/ui/component/popup_menu/popup_menu.html.twig', { 'items': grouped_field_defintions|keys|map(group => { From 8abb05dee4a9e83285a6cda25194ab5d32fc82fa Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:05:14 +0100 Subject: [PATCH 148/234] fix: Migrate buttons in content_type/field_types.html.twig --- .../admin/content_type/field_types.html.twig | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_types.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_types.html.twig index 8f3a3c9df..337189a8c 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_types.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_types.html.twig @@ -205,19 +205,21 @@
      - - + {{ 'field_definition.ibexa_selection.remove_selected_options'|trans({}, 'ibexa_content_type')|desc('Remove selected options') }} +
      {% do form.options.setRendered %} From edde483e27be2e16253b813cb5aab9901fc32afe Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 25 Feb 2026 18:05:42 +0100 Subject: [PATCH 149/234] fix: Migrate submit button in ui/component/adaptive_filters/adaptive_filters.html.twig --- .../adaptive_filters/adaptive_filters.html.twig | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig index d758f2a47..13b1fe620 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig @@ -109,12 +109,13 @@
      {% block actions %} {% block action_submit %} - + {% endblock %} {% block action_clear %} Date: Wed, 25 Feb 2026 23:31:56 +0100 Subject: [PATCH 150/234] fix: Rename ibexa-btn--extra-actions to ids-button--extra-actions in extra.actions.js --- src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js b/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js index 4f73bdc05..6e889375b 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js @@ -7,7 +7,7 @@ import { getInstance } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scri const closeBtns = doc.querySelectorAll( '.ibexa-extra-actions .ids-button--close, .ibexa-extra-actions .ibexa-extra-actions__btn--cancel', ); - const btns = [...doc.querySelectorAll('.ibexa-btn--extra-actions')]; + const btns = [...doc.querySelectorAll('.ids-button--extra-actions')]; const menu = doc.querySelector('.ibexa-context-menu'); const backdrop = new ibexa.core.Backdrop(); const formsInitialData = new Map(); From cdf176ee32e5f1892711cbf43313fd6589d8246d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Feb 2026 06:23:51 +0100 Subject: [PATCH 151/234] fix: Rename ibexa-btn--create-translation to ids-button--create-translation in admin.location.add.translation.js --- .../public/js/scripts/admin.location.add.translation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js b/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js index f63ae54c3..d611753a3 100644 --- a/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js +++ b/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js @@ -9,7 +9,7 @@ if (!modal) { return; } - const buttonCreate = modal.querySelector('.ibexa-btn--create-translation'); + const buttonCreate = modal.querySelector('.ids-button--create-translation'); if (!buttonCreate) { return; } From 700bd44c75dd2c68b6d7f71d62bef533cb0dcfd0 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Feb 2026 11:22:26 +0100 Subject: [PATCH 152/234] [TMP] dependencies.json --- dependencies.json | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 dependencies.json diff --git a/dependencies.json b/dependencies.json new file mode 100644 index 000000000..9923a337f --- /dev/null +++ b/dependencies.json @@ -0,0 +1,11 @@ +{ + "recipesEndpoint": "", + "packages": [ + { + "requirement": "dev-IBX-11332-link-c as 5.0.x-dev", + "repositoryUrl": "https://github.com/ibexa/design-system-twig", + "package": "ibexa/design-system-twig", + "shouldBeAddedAsVCS": false + } + ] +} \ No newline at end of file From 208b0a00d0fc93547fc09d9cb1e5f406f10390b6 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 2 Mar 2026 10:43:59 +0100 Subject: [PATCH 153/234] chore: remove AI tooling files (do not push) --- .ai-instructions.md | 169 ---- .ai-rules | 61 -- .aider.conf.yml | 20 - .claude/settings.local.json | 26 - .claude/skills/validate-frontend-changes.md | 115 --- .cursorrules | 24 - .opencode/opencode.json | 22 - .opencode/permissions.json | 24 - BUTTON_MIGRATION_PLAN.md | 897 -------------------- CLAUDE.md | 161 ---- migrations/button/MIGRATION_PLAN.txt | 16 - migrations/button/MIGRATION_RULES.md | 829 ------------------ migrations/button/prompts/migrate-chunk.txt | 53 -- scripts/README.md | 260 ------ scripts/config/components.config.ts | 91 -- scripts/config/opencode.config.ts | 8 - scripts/lib/branch-manager.ts | 93 -- scripts/lib/git.ts | 111 --- scripts/lib/logger.ts | 100 --- scripts/lib/opencode.ts | 68 -- scripts/lib/parser.ts | 49 -- scripts/lib/prompt-builder.ts | 43 - scripts/lib/validation.ts | 67 -- scripts/migrate-component.ts | 358 -------- scripts/package.json | 24 - scripts/types.ts | 92 -- 26 files changed, 3781 deletions(-) delete mode 100644 .ai-instructions.md delete mode 100644 .ai-rules delete mode 100644 .aider.conf.yml delete mode 100644 .claude/settings.local.json delete mode 100644 .claude/skills/validate-frontend-changes.md delete mode 100644 .cursorrules delete mode 100644 .opencode/opencode.json delete mode 100644 .opencode/permissions.json delete mode 100644 BUTTON_MIGRATION_PLAN.md delete mode 100644 CLAUDE.md delete mode 100644 migrations/button/MIGRATION_PLAN.txt delete mode 100644 migrations/button/MIGRATION_RULES.md delete mode 100644 migrations/button/prompts/migrate-chunk.txt delete mode 100644 scripts/README.md delete mode 100644 scripts/config/components.config.ts delete mode 100644 scripts/config/opencode.config.ts delete mode 100644 scripts/lib/branch-manager.ts delete mode 100644 scripts/lib/git.ts delete mode 100644 scripts/lib/logger.ts delete mode 100644 scripts/lib/opencode.ts delete mode 100644 scripts/lib/parser.ts delete mode 100644 scripts/lib/prompt-builder.ts delete mode 100644 scripts/lib/validation.ts delete mode 100644 scripts/migrate-component.ts delete mode 100644 scripts/package.json delete mode 100644 scripts/types.ts diff --git a/.ai-instructions.md b/.ai-instructions.md deleted file mode 100644 index 12f9ca659..000000000 --- a/.ai-instructions.md +++ /dev/null @@ -1,169 +0,0 @@ -# AI Assistant Instructions - -This file provides instructions for AI coding assistants (Claude, Cursor, GitHub Copilot, Aider, etc.) working in this repository. - -## 🚨 CRITICAL: Git Workflow Policy - -### LOCAL CHANGES ONLY - NO REMOTE OPERATIONS - -All changes made by AI assistants MUST remain local until the user explicitly decides to push them. - -#### ❌ PROHIBITED ACTIONS (NEVER DO): - -```bash -# NEVER run these commands: -git push -git push origin -git push --force -git push --set-upstream origin -gh pr create -gh pr create --title "..." --body "..." -hub pull-request -git merge origin/ -git rebase origin/ -``` - -**Why?** The user needs full control over what gets pushed to the remote repository and when PRs are created. - -#### ✅ ALLOWED ACTIONS (Local Only): - -```bash -# These are OK: -git status -git diff -git diff HEAD -git log -git log --oneline -git add -git commit -m "message" -git checkout -b -git branch -git show -``` - -**Why?** Local changes can be reviewed and modified before being shared. - -#### 👤 USER MANUAL WORKFLOW: - -1. **AI makes local changes** → edits files, creates commits locally -2. **AI shows status** → runs `git status` or `git diff` to show changes -3. **USER reviews** → examines changes, runs tests, verifies everything -4. **USER pushes** → runs `git push origin ` when satisfied -5. **USER creates PR** → uses GitHub UI or `gh pr create` manually -6. **USER requests review** → assigns reviewers, manages PR lifecycle -7. **USER merges** → merges PR after approval - -### Example: Correct AI Workflow - -```bash -# ✅ CORRECT - AI Assistant does this: - -# 1. Make changes to files (AI edits templates, JS, PHP, etc.) - -# 2. Show what changed -git status -git diff - -# 3. Create local branch if needed -git checkout -b feature/migrate-buttons-to-component - -# 4. Stage and commit locally -git add src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig -git commit -m "Migrate delete button in draft list to twig:ibexa:button component" - -# 5. Show final status -git status - -# 6. Tell user: "I've made local changes. Review with 'git diff' and push when ready." -``` - -```bash -# ❌ INCORRECT - AI Assistant should NEVER do this: - -git add . -git commit -m "Migrate buttons" -git push origin feature/migrate-buttons # ❌ WRONG - Don't push! -gh pr create --title "Migrate buttons" # ❌ WRONG - Don't create PR! -``` - ---- - -## Package Information - -**Package:** `ibexa/admin-ui` -**Description:** Core Back Office interface bundle for Ibexa DXP (Digital Experience Platform) - -### Key Files: -- `CLAUDE.md` - Package overview, commands, architecture -- `MIGRATION_RULES.md` - Button migration patterns and workflow -- `.cursorrules` - Cursor AI specific rules -- `.aider.conf.yml` - Aider configuration -- `.ai-rules` - General AI assistant rules - -### Quick Commands: - -```bash -# PHP -composer fix-cs # Auto-fix PHP code style -composer check-cs # Check code style -composer test # Run all tests -composer phpstan # Static analysis - -# JavaScript/TypeScript -yarn test # Run all checks -yarn fix # Auto-fix frontend issues - -# Frontend Assets (run from project root, not package root) -yarn ibexa:dev # Development build -yarn ibexa:build # Production build -``` - -### Code Style Requirements: -- PHP: `declare(strict_types=1)` required in all files -- PHPStan level 8 with baseline -- Frontend: Prettier + ESLint via `@ibexa/eslint-config` - ---- - -## Button Migration Project - -When working on button migrations from legacy markup to `twig:ibexa:button` component: - -1. **Read** `MIGRATION_RULES.md` for complete patterns -2. **Make** local changes following the patterns -3. **Commit** locally with descriptive messages -4. **Show** status and diffs to user -5. **Let user** push and create PRs manually - -### Key Migration Rules: -- `ibexa-btn--ghost` → `type="tertiary"` -- `ibexa-btn--primary` → `type="primary"` -- `ibexa-btn--secondary` → `type="secondary"` -- `ibexa-btn--small` → `size="small"` -- `disabled` → `:disabled="true"` -- `type="submit"` → `html_type="submit"` - -See `MIGRATION_RULES.md` for complete details. - ---- - -## Summary - -**DO:** -- ✅ Make local file changes -- ✅ Create local commits and branches -- ✅ Run tests locally -- ✅ Show `git status` and `git diff` -- ✅ Follow code style requirements -- ✅ Reference documentation files - -**DON'T:** -- ❌ Push to remote (`git push`) -- ❌ Create pull requests (`gh pr create`) -- ❌ Force push (`git push --force`) -- ❌ Automatically merge or rebase with remote - -**ALWAYS:** -- Let the user review changes before they go remote -- Let the user push and create PRs manually -- Show clear status of what was changed locally diff --git a/.ai-rules b/.ai-rules deleted file mode 100644 index 7c00256dc..000000000 --- a/.ai-rules +++ /dev/null @@ -1,61 +0,0 @@ -# AI Assistant Rules for ibexa/admin-ui -# This file is read by various AI coding assistants (Cursor, Copilot, etc.) - -## ⚠️ CRITICAL: Git Workflow Policy - LOCAL CHANGES ONLY - -All changes MUST remain local. DO NOT push or create PRs automatically. - -### Prohibited Actions (NEVER DO): -1. ❌ `git push` or `git push origin ` - Never push to remote -2. ❌ `gh pr create` or any PR creation commands - Never create pull requests -3. ❌ `git push --force` - Never force push -4. ❌ Automatic merging or rebasing with remote branches -5. ❌ Any command that modifies remote repository state - -### Allowed Actions (Local Only): -1. ✅ Making local file changes -2. ✅ Running `git status`, `git diff`, `git log` -3. ✅ Creating local commits: `git add` + `git commit` -4. ✅ Creating local branches: `git checkout -b ` -5. ✅ Running tests locally -6. ✅ Showing diffs and status to the user - -### User Manual Control: -The user will manually: -- Review all changes with `git status` / `git diff` -- Push to remote when ready: `git push origin ` -- Create PRs via GitHub UI or `gh` CLI -- Request code review and merge - -### References: -- See `CLAUDE.md` for package overview and git workflow policy -- See `MIGRATION_RULES.md` Section 4 for detailed button migration workflow - -## Package: ibexa/admin-ui -Core Back Office interface bundle for Ibexa DXP (Digital Experience Platform). - -## Key Commands: -```bash -# PHP -composer fix-cs # Auto-fix PHP code style -composer test # Run all tests - -# JavaScript/TypeScript -yarn test # Run all checks -yarn fix # Auto-fix frontend issues - -# Frontend Assets (from project root) -yarn ibexa:dev # Development build -yarn ibexa:build # Production build -``` - -## Testing: -```bash -./vendor/bin/phpunit -c phpunit.xml tests/lib/ -./vendor/bin/phpunit -c phpunit.integration.xml tests/integration/ -``` - -## Code Style: -- PHP: `declare(strict_types=1)` required -- PHPStan level 8 -- Frontend: Prettier + ESLint via `@ibexa/eslint-config` diff --git a/.aider.conf.yml b/.aider.conf.yml deleted file mode 100644 index ff5089903..000000000 --- a/.aider.conf.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Aider Configuration for ibexa/admin-ui - -# Git workflow settings - LOCAL CHANGES ONLY -auto-commits: true # Allow local commits -auto-push: false # NEVER auto-push to remote -dirty-commits: true # Allow committing with dirty working directory -commit: true # Allow creating commits -no-auto-commits: false # We want commits, just not pushes - -# CRITICAL: These settings prevent automatic remote operations -# - Aider can create local commits -# - Aider CANNOT push to remote -# - User must manually push and create PRs - -# Additional context -read: - - CLAUDE.md - - MIGRATION_RULES.md - -# See CLAUDE.md and MIGRATION_RULES.md for complete git workflow policy diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index 2116330ca..000000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(git -C /Users/jakubbrzegowski/Sites/commerce-5-0-dev_15/vendor/ibexa/design-system-twig status)", - "Bash(git -C /Users/jakubbrzegowski/Sites/commerce-5-0-dev_15/vendor/ibexa/design-system-twig add src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig)", - "Bash(git -C /Users/jakubbrzegowski/Sites/commerce-5-0-dev_15/vendor/ibexa/design-system-twig commit -m \"$\\(cat <<''EOF''\nAdd html_type parameter to button component\n\nAllow setting the HTML button type attribute \\(button, submit, reset\\)\nvia the html_type parameter, defaulting to ''button''.\n\nCo-Authored-By: Claude Opus 4.5 \nEOF\n\\)\")", - "Bash(git add:*)", - "Bash(git commit:*)", - "Bash(php /Users/jakubbrzegowski/Sites/commerce-5-0-dev_15/bin/console cache:clear:*)", - "Bash(git status)", - "Bash(git diff)", - "Bash(git add *)", - "Bash(git commit *)", - "Bash(ls -R *)", - "Bash(grep *)", - "Bash(cat *)", - "Bash(php * bin/console lint:twig *)", - "Bash(php * bin/console cache:clear *)" - ], - "deny": [ - "Bash(git push *)", - "Bash(gh pr *)", - "Bash(git remote *)" - ] - } -} diff --git a/.claude/skills/validate-frontend-changes.md b/.claude/skills/validate-frontend-changes.md deleted file mode 100644 index 8aa3d9dc8..000000000 --- a/.claude/skills/validate-frontend-changes.md +++ /dev/null @@ -1,115 +0,0 @@ -# Validate Frontend Changes - Ibexa Admin UI - -## Description -This skill validates Twig template and JavaScript changes in Ibexa packages, specifically after design system component migrations. It runs frontend tests, builds assets, and provides a testing checklist. - -## When to Use -- After migrating HTML buttons to design system button components in Twig -- After modifying JavaScript or TypeScript files -- Before committing frontend changes -- When troubleshooting build or runtime issues with UI components - -## Prerequisites -- Node.js and Yarn installed -- Assets may have been modified but not yet validated -- Working directory should be the project root or admin-ui package - -## Validation Steps - -### 1. Frontend Code Quality Check -**Location:** Run from the affected Ibexa package (e.g., `vendor/ibexa/admin-ui`) - -```bash -cd vendor/ibexa/[package-name] -yarn test # Runs Prettier, TypeScript, ESLint -``` - -**What this validates:** -- JavaScript/TypeScript syntax and type safety -- Code formatting consistency -- ESLint rules compliance -- No TypeScript compilation errors - -**Expected result:** All tests pass with no errors - -### 2. Asset Build Process -**Location:** Run from project root - -```bash -cd /path/to/project-root -yarn ibexa:dev # Development build (faster) -# OR -yarn ibexa:build # Production build (minified) -``` - -**What this validates:** -- Webpack Encore compiles successfully -- No missing dependencies -- JavaScript bundles build correctly -- SCSS compiles with new component styles -- Entry points resolve properly - -**Expected result:** Build completes without errors, assets generated in `public/assets/ibexa/build/` - -### 3. Cache Clear -```bash -php bin/console cache:clear -``` - -**Purpose:** Ensures Symfony uses fresh asset manifests and templates - -## Common Issues and Solutions - -### Build Failures - -**Issue:** `yarn ibexa:dev` fails with module not found -**Solution:** -- Verify design system packages are installed - -**Issue:** TypeScript compilation errors -**Solution:** -- Run `yarn ts-test` in the package to see specific errors -- Check type definitions for design system components -- Verify `tsconfig.json` paths are correct - -## Package-Specific Notes - -### admin-ui Package -- Entry points: `src/bundle/Resources/encore/ibexa.js.config.js` and `ibexa.css.config.js` - -## Quick Validation Script - -```bash -#!/bin/bash -# Run from project root - -PACKAGE_PATH="vendor/ibexa/admin-ui" # Change as needed -PROJECT_ROOT="/path/to/project" # Change to actual path - -echo "=== Step 1: Frontend Code Quality ===" -cd "$PROJECT_ROOT/$PACKAGE_PATH" -yarn test || { echo "Frontend tests failed"; exit 1; } - -echo "=== Step 2: Build Assets ===" -cd "$PROJECT_ROOT" -yarn ibexa:dev || { echo "Build failed"; exit 1; } - -echo "=== Step 3: Clear Cache ===" -php bin/console cache:clear - -echo "✅ Automated validation complete!" -echo "👉 Now test manually in browser" -``` - -## Success Criteria -- ✅ `yarn test` passes in the package -- ✅ `yarn ibexa:dev` builds without errors -- ✅ No console errors in browser -- ✅ All button functionality works as before -- ✅ Visual appearance matches design system -- ✅ Cross-browser compatibility (if tested) - -## Next Steps After Validation -1. Commit changes with descriptive message -2. DO NOT PUSH changes to the repository -3. DO NOT CREATE PULL REQUEST diff --git a/.cursorrules b/.cursorrules deleted file mode 100644 index 314efeb8d..000000000 --- a/.cursorrules +++ /dev/null @@ -1,24 +0,0 @@ -# Cursor AI Rules for ibexa/admin-ui - -## Git Workflow - LOCAL CHANGES ONLY - -**CRITICAL: All changes MUST remain local. DO NOT push or create PRs automatically.** - -### NEVER DO: -- ❌ `git push` or `git push origin ` -- ❌ `gh pr create` or any PR creation commands -- ❌ `git push --force` -- ❌ Automatic merging or rebasing with remote branches - -### ALLOWED: -- ✅ Local file changes -- ✅ `git status`, `git diff`, `git log` -- ✅ `git add` and `git commit` (local commits only) -- ✅ `git checkout -b ` (local branches only) -- ✅ Running tests locally -- ✅ Showing diffs and status - -### User Control: -The user will manually push and create PRs when ready. - -See CLAUDE.md and MIGRATION_RULES.md for complete documentation. diff --git a/.opencode/opencode.json b/.opencode/opencode.json deleted file mode 100644 index 55ab03024..000000000 --- a/.opencode/opencode.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "$schema": "https://opencode.ai/config.json", - "permission": { - "bash": { - "*": "ask", - "git push *": "deny", - "gh pr *": "deny", - "git remote *": "deny", - "git status": "allow", - "git diff": "allow", - "git add *": "allow", - "git commit *": "allow", - "ls *": "allow", - "grep *": "allow", - "cat *": "allow", - "php * bin/console lint:twig *": "allow", - "php * bin/console cache:clear *": "allow", - "npm run *": "allow", - "yarn run *": "allow" - } - } -} diff --git a/.opencode/permissions.json b/.opencode/permissions.json deleted file mode 100644 index 3da5fcaf9..000000000 --- a/.opencode/permissions.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(git status)", - "Bash(git diff)", - "Bash(git add *)", - "Bash(git commit -m *)", - "Bash(ls -R *)", - "Bash(grep -r *)", - "Bash(cat *)", - "Bash(php * bin/console lint:twig *)", - "Bash(php * bin/console cache:clear *)", - "Bash(npm run *)", - "Bash(yarn run *)" - ], - "deny": [ - "Bash(git push *)", - "Bash(gh pr *)", - "Bash(git remote *)", - "Bash(curl *)", - "Bash(wget *)" - ] - } -} \ No newline at end of file diff --git a/BUTTON_MIGRATION_PLAN.md b/BUTTON_MIGRATION_PLAN.md deleted file mode 100644 index 94e478888..000000000 --- a/BUTTON_MIGRATION_PLAN.md +++ /dev/null @@ -1,897 +0,0 @@ -# 📋 BUTTON MIGRATION PLAN: Legacy → design-system-twig Components - -**Package**: `ibexa/admin-ui` -**Date Created**: February 16, 2026 -**Status**: Ready for Review - ---- - -## ⚠️ CRITICAL ISSUES - READ FIRST - -### Issue 1: No `attr` Prop - Pass Attributes Directly - -**DO NOT use `attr` prop** - it doesn't exist in Symfony UX Twig Components! - -#### ❌ WRONG (Runtime Error) -```twig - -``` - -#### ✅ CORRECT -```twig - - - - - -``` - -**Why?** Symfony UX Twig Component system automatically collects unrecognized attributes into the `attributes` object. Pass them directly as component props. - ---- - -### Issue 2: No "ghost" Type - Use "tertiary" Instead - -**DO NOT use `type="ghost"`** - it's not supported in design-system-twig! - -#### ❌ WRONG (Runtime Error) -```twig - - -``` - -**Error:** `The option "type" with value "ghost" is invalid. Accepted values are: "primary", "secondary", "tertiary", "secondary-alt", "tertiary-alt".` - -#### ✅ CORRECT -```twig - - -``` - -**Mapping:** Legacy `ibexa-btn--ghost` → `type="tertiary"` in design-system-twig - ---- - -### Issue 3: Icon Names Have Changed - -**CRITICAL:** Most legacy icon names have changed in design-system-twig! - -#### ❌ WRONG (Icon Won't Display) -```twig - - - -``` - -#### ✅ CORRECT -```twig - - - -``` - -**Impact:** 75% of legacy icon names have changed. Using wrong names causes icons to not display. - -#### Top 15 Critical Icon Name Changes (by usage frequency) - -| Legacy Name | New Name | Files Affected | Priority | -|-------------|----------|----------------|----------| -| `create` | `add` | 15 files | 🔴 CRITICAL | -| `system-information` | `info-circle` | 7 files | 🔴 HIGH | -| `open-newtab` | `open-new-window` | 6 files | 🔴 HIGH | -| `notice` | `alert-error` | 6 files | 🔴 HIGH | -| `options` | `more` | 5 files | 🔴 HIGH | -| `back` | `arrow-left` | 5 files | ⚠️ MEDIUM | -| `caret-down` | `arrow-caret-down` | 4 files | ⚠️ MEDIUM | -| `warning-triangle` | `alert-warning` | 3 files | ⚠️ MEDIUM | -| `warning` | `alert-warning` | 3 files | ⚠️ MEDIUM | -| `checkmark` | `form-check` | 3 files | ⚠️ MEDIUM | -| `date` | `calendar` | 2 files | ⚠️ LOW | -| `mail-open` | `message-email-read` | 2 files | ⚠️ LOW | -| `view` | `visibility` | 1 file | ⚠️ LOW | -| `assign-section` | `assign` | 1 file | ⚠️ LOW | -| `author` | `user-editor` | 1 file | ⚠️ LOW | - -#### Quick Reference - Common Icon Mappings - -**Direct Matches (No Change):** -``` -trash, edit, discard, search, copy, assign-user, download, -file, lock, bell, filters, drag, arrow-caret-right -``` - -**Must Change:** -``` -create → add -back → arrow-left -checkmark → form-check -bookmark → bookmark-outline -bookmark-active → bookmark-filled -system-information → info-circle -notice → alert-error -options → more -view → visibility -warning → alert-warning -warning-triangle → alert-warning -hide → visibility-hidden -menu → menu-hamburger -date → calendar -mail → message-email -mail-open → message-email-read -assign-section → assign -author → user-editor -restore → archived-restore -focus → focus-centered or focus-target -``` - -#### How to Verify Icon Names - -Search the design system sprite file: -```bash -grep 'id="your-icon-name"' public/bundles/ibexaadminuiassets/vendors/ids-assets/dist/img/all-icons.svg -``` - ---- - -## Table of Contents - -1. [Overview](#overview) -2. [Migration Statistics](#migration-statistics) -3. [Icon Name Mapping](#icon-name-mapping) -4. [Migration Patterns](#migration-patterns) -5. [Type Mapping Reference](#type-mapping-reference) -6. [Migration Order by Priority](#migration-order-by-priority) -7. [Per-File Migration Checklist](#per-file-migration-checklist) -8. [Special Cases & Warnings](#special-cases--warnings) -9. [Style Guide Compliance](#style-guide-compliance) -10. [Example Commit History](#example-commit-history) -11. [Validation Commands](#validation-commands) -12. [Testing Strategy](#testing-strategy) -13. [Progress Tracking](#progress-tracking) - ---- - -## Overview - -### Goals - -1. **Replace legacy button patterns** with `` and `` -2. **Maintain 100% visual and functional parity** -3. **Document unmapped patterns** with comments for future work -4. **Create clean commit history** for easy review/rollback -5. **Follow Ibexa Twig style guide** throughout - -### Approach - -- **One file at a time** with individual commits -- **Manual functional testing** per file -- **Git workflow**: LOCAL CHANGES ONLY (no automatic pushes) -- **Comment unmapped variants** rather than forcing incorrect mappings - ---- - -## Migration Statistics - -### Files Overview - -- **Total Files with Buttons**: 100 -- **Total Button Instances**: ~200 - - 134 ` - -✅ AFTER: - - {{ 'button.save'|trans|desc('Save') }} - -``` - -**Note:** Icon name changed from legacy `checkmark` to `form-check` in design-system-twig. - -### Pattern 2: Icon-Only Button (Ghost/No-Text) - -```twig -❌ BEFORE: - - -✅ AFTER: - -``` - -**Note**: `ibexa-btn--ghost` usually maps to `type="tertiary"` in design-system-twig. - -### Pattern 3: Link Styled as Button - -```twig -❌ BEFORE: - - - - - {{ 'profile.view.edit'|trans|desc('Edit') }} - - -✅ AFTER: - - {{ 'profile.view.edit'|trans|desc('Edit') }} - -``` - -### Pattern 4: Button with Data Attributes - -```twig -❌ BEFORE: - - -✅ AFTER: - - {{ 'button.edit'|trans|desc('Edit') }} - -``` - -### Pattern 5: Disabled Button - -```twig -❌ BEFORE: - - -✅ AFTER: - - {{ 'button.save'|trans|desc('Save') }} - -``` - -### Pattern 6: Button with Additional Classes - -```twig -❌ BEFORE: - - -✅ AFTER: - - {{ 'button.action'|trans|desc('Action') }} - -``` - -### Pattern 7: Button with Title/Aria Attributes - -```twig -❌ BEFORE: - - -✅ AFTER: - -``` - -### Pattern 8: Conditional Disabled State - -```twig -❌ BEFORE: - - -✅ AFTER: - - {{ 'button.save'|trans|desc('Save') }} - -``` - -### Pattern 9: Unmapped Variant (KEEP AS LEGACY + COMMENT) - -```twig -{# TODO: Migrate to design-system-twig when 'dark-selector' variant is available #} -{# Legacy button pattern - design-system-twig does not support ibexa-btn--dark-selector variant #} - -``` - ---- - -## Type Mapping Reference - -### Button Type Mapping - -**⚠️ CRITICAL:** design-system-twig **ONLY** accepts these values: -- `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` - -Any other value will cause runtime error! - -| Legacy Class | design-system-twig | Notes | -|---|---|---| -| `ibexa-btn--primary` | `type="primary"` | ✅ Direct mapping | -| `ibexa-btn--secondary` | `type="secondary"` | ✅ Direct mapping | -| `ibexa-btn--tertiary` | `type="tertiary"` | ✅ Direct mapping | -| `ibexa-btn--ghost` | **`type="tertiary"`** | ✅ **VERIFIED: Use tertiary, NOT "ghost"!** | -| `ibexa-btn--info` | `type="primary"` | ⚠️ May need new variant | -| `ibexa-btn--dark` | **UNMAPPED** | ❌ Keep legacy + comment | -| `ibexa-btn--dark-selector` | **UNMAPPED** | ❌ Keep legacy + comment | -| `ibexa-btn--secondary-light` | **UNMAPPED** | ❌ Keep legacy + comment | -| `ibexa-btn--selected` | `:attributes` | ⚠️ State class, pass via attributes | -| `ibexa-btn--prevented` | `:disabled="true"` | ⚠️ Use disabled prop | - -### Size Mapping - -| Legacy Class | design-system-twig | Notes | -|---|---|---| -| `ibexa-btn--small` | `size="small"` | ✅ Direct mapping | -| (no class) | `size="medium"` (default) | ✅ Default size | - -### Icon Size Mapping - -| Legacy Class | design-system-twig | Typical Button Size | -|---|---|---| -| `ibexa-icon--tiny-small` | `icon_size="tiny-small"` | Usually with `size="small"` | -| `ibexa-icon--small` | `icon_size="small"` | Default button size | -| `ibexa-icon--small-medium` | `icon_size="small-medium"` | Default button size | -| `ibexa-icon--medium` | `icon_size="medium"` | Default button size | - ---- - -## Migration Order by Priority - -### Phase 1: Simple Files (26 files) - HIGH PRIORITY ⭐ - -**Start here** - Low risk, straightforward conversions - -#### 1.1 Simple Link-as-Button (11 files) - -1. `src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig` -2. `src/bundle/Resources/views/themes/admin/account/profile/view.html.twig` -3. `src/bundle/Resources/views/themes/admin/account/forgot_password/confirmation_page.html.twig` -4. `src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig` -5. `src/bundle/Resources/views/themes/admin/ui/component/table/table_header.html.twig` -6. `src/bundle/Resources/views/themes/admin/ui/field_type/preview/content_fields.html.twig` -7. `src/bundle/Resources/views/themes/admin/user/role/view.html.twig` -8. `src/bundle/Resources/views/themes/admin/section/list.html.twig` -9. `src/bundle/Resources/views/themes/admin/language/list.html.twig` -10. `src/bundle/Resources/views/themes/admin/policy/list.html.twig` -11. `src/bundle/Resources/views/themes/admin/object_state/group/list.html.twig` - -#### 1.2 Simple Button-Only (15 files) - -12. `src/bundle/Resources/views/themes/admin/ui/component/details/details.html.twig` -13. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base.html.twig` -14. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig` -15. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig` -16. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_media.html.twig` -17. `src/bundle/Resources/views/themes/admin/ui/field_type/edit/relation_base.html.twig` -18. `src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig` -19. `src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig` -20. `src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig` -21. `src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig` -22. `src/bundle/Resources/views/themes/admin/ui/component/summary_tile/summary_tile.html.twig` -23. `src/bundle/Resources/views/themes/admin/account/bookmarks/toggle_switch.html.twig` -24. `src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig` -25. `src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig` -26. `src/bundle/Resources/views/themes/admin/content/modal/hide_confirmation.html.twig` - -### Phase 2: Form-Related (8 files) - MEDIUM PRIORITY ⚠️ - -**Include form theme files** - Requires careful testing - -27. `src/bundle/Resources/views/themes/admin/ui/form_fields.html.twig` ⚠️ **CRITICAL: Form theme file** -28. `src/bundle/Resources/views/themes/admin/account/forgot_password/index.html.twig` -29. `src/bundle/Resources/views/themes/admin/ui/global_search.html.twig` -30. `src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig` -31. `src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig` -32. `src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig` (partially migrated) -33. `src/bundle/Resources/views/themes/admin/content/widget/content_edit.html.twig` (partially migrated) -34. `src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig` (partially migrated) - -### Phase 3: Modal Dialogs (40 files) - MEDIUM-HIGH PRIORITY - -**Confirmation Modals** - Start with these (consistent pattern) - -35-49. Various confirmation modal files (`delete_confirmation.html.twig`, etc.) - -**Content Management Modals** - Then these (more complex) - -50-74. Various content/language/section/user modals - -### Phase 4: Complex Dynamic (24 files) - LOWER PRIORITY - -**High JS interaction, complex state management** - -75-98. Dynamic interaction files - -### Phase 5: Split Button (1 file) - KEEP AS-IS 📌 - -99. `src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig` ⚠️ **Keep legacy per requirement** - ---- - -## Per-File Migration Checklist - -### Before Migration - -- [ ] Read entire file to understand context -- [ ] Identify all button/link instances (count them) -- [ ] Note any special classes or data attributes -- [ ] Check for dynamic icon names (variables) -- [ ] Identify button type (primary/secondary/tertiary/ghost) -- [ ] Note size modifiers (small/default) -- [ ] Check for unmapped variants -- [ ] Review surrounding code for dependencies - -### During Migration - -- [ ] Replace ` - - -Submit -``` - -**Supported Variants:** `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` -**Supported Sizes:** `small`, `medium` (default) -**Key Props:** `type`, `size`, `icon`, `icon_size`, `html_type`, `:disabled`, `class` - ---- - -## 1. PATTERN: Transformation Rules - -### Basic Button Structure - -**OLD (Legacy):** -```twig - -``` - -**NEW (Component):** -```twig - - {{ 'button.text'|trans }} - -``` - -### Variant Mapping - -| Legacy Class | Component Type | Notes | -|--------------|----------------|-------| -| `ibexa-btn--ghost` | `tertiary-alt` | Ghost style (transparent background) | -| `ibexa-btn--primary` | `primary` | Primary action button | -| `ibexa-btn--secondary` | `secondary` | Secondary action button | -| `ibexa-btn--tertiary` | `tertiary-alt` | Tertiary action button | - -**Additional Legacy Variants (Not Yet Mapped):** - -These legacy variants do NOT have direct component equivalents. Keep them as legacy buttons with TODO comments until the design system component is extended: - -- `ibexa-btn--ghost-info` - Ghost button with info color -- `ibexa-btn--dark` - Dark background button -- `ibexa-btn--filled-info` - Filled info button -- `ibexa-btn--info` - Info styled button -- `ibexa-btn--neon-info` - Neon info button -- `ibexa-btn--selector` - Selector button variant -- `ibexa-btn--dark-selector` - Dark selector button -- `ibexa-btn--secondary-light` - Light secondary button -- `ibexa-btn--secondary-dark` - Dark secondary button - -**Usage:** If you encounter buttons with these classes, leave them as-is and add a TODO comment. - -**Finding All Button Variants in Codebase:** - -To discover all button class patterns currently used: -```bash -git grep -h "ibexa-btn--" | grep -oE "ibexa-btn--[a-z-]+" | sort -u -``` - -This helps identify which buttons can be migrated vs. which need special handling. - -### Icon Mapping - -**OLD:** -```twig - - - -``` - -**NEW:** -```twig -icon="edit" -icon_size="small-medium" -``` - -### Icon-Only Buttons - -Buttons with only an icon (no text) are automatically detected by the component. - -**OLD:** -```twig - -``` - -**NEW:** -```twig - -``` - -**Note:** Remove the `ibexa-btn--no-text` class - the component automatically detects icon-only buttons when no text content is provided. - -### Button Size Mapping - -The design system button component supports two size variants: - -| Legacy Class | Component Prop | Notes | -|--------------|----------------|-------| -| `ibexa-btn--small` | `size="small"` | Small button (32px height) | -| (default) | `size="medium"` or omit | Default/medium size (46px height) | - -**Important Notes:** -- The component's default size is `medium` (can be omitted) -- Legacy code without `ibexa-btn--small` should NOT specify a size prop -- The component does NOT support a `large` size variant - -**Component Size Variants (from design-system-twig):** -```twig -size: { - medium: 'ids-btn--medium', - small: 'ids-btn--small', -} -``` - -### HTML Type Attribute - -| Legacy Attribute | Component Prop | Notes | -|------------------|----------------|-------| -| `type="button"` | (default, omit) | Default button type | -| `type="submit"` | `html_type="submit"` | Form submit button | -| `type="reset"` | `html_type="reset"` | Form reset button | - ---- - -## Component Props Reference - -### Available Props (from design-system-twig) - -```twig - - Button Label - -``` - -### Prop Details - -| Prop | Type | Default | Description | -|------|------|---------|-------------| -| `type` | string | - | Button variant: `primary`, `secondary`, `tertiary`, `secondary-alt`, `tertiary-alt` | -| `size` | string | `medium` | Button size: `small` or `medium` | -| `icon` | string | - | Icon name (renders using `twig:ibexa:icon`) | -| `icon_size` | string | - | Icon size passed to icon component | -| `html_type` | string | `button` | HTML button type attribute | -| `disabled` | boolean | `false` | Disabled state (use `:disabled` for boolean) | -| `class` | string | - | Additional CSS classes (appended to component classes) | -| `attributes` | object | - | All other attributes passed through to ` -``` - -**Button with Text and Icon:** -```twig -Delete -``` - -Renders as: -```html - -``` - -**Key Points:** -- Icons wrapped in `
      ` -- Text wrapped in `
      ` -- Both IDS classes (`ids-btn--*`) and legacy BC classes (`ibexa-btn--*`) are rendered - ---- - -## 4. WORKFLOW: Migration Process - -### Step 1: Analyze New Cases - -When encountering a button pattern not covered in this document: - -#### 1.1. Locate the Button Component - -The button component is located at: -``` -vendor/ibexa/design-system-twig/src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig -``` - -#### 1.2. Understand the Component Structure - -Read the component template to understand: - -**Available Variants:** -```twig -variants: { - type: { - primary: 'ids-btn--primary', - secondary: 'ids-btn--secondary', - tertiary: 'ids-btn--tertiary', - 'secondary-alt': 'ids-btn--secondary-alt', - 'tertiary-alt': 'ids-btn--tertiary-alt', - }, - size: { - medium: 'ids-btn--medium', - small: 'ids-btn--small', - }, -} -``` - -**How Props Work:** -- `type` - Button variant (maps to CSS classes) -- `size` - Button size (maps to CSS classes) -- `icon` - Icon name (renders `twig:ibexa:icon` component) -- `icon_size` - Size prop passed to icon component -- `html_type` - HTML button type attribute (`button`, `submit`, `reset`) -- `disabled` - Boolean flag for disabled state -- `attributes` - All other HTML attributes passed through - -**Component Logic:** -- Icon-only detection: `icon_only = (not has_content) and icon is not empty` -- Disabled state: Adds `disabled` attribute (buttons) or `aria-disabled="true"` (links) when disabled -- Icon wrapping: `
      ` → `` -- Label wrapping: `
      ` for text content - -#### 1.3. Map Legacy to Component - -For each legacy button: - -1. **Identify the variant** - Map `ibexa-btn--{variant}` to component `type` -2. **Check size** - Look for `ibexa-btn--small` → `size="small"` -3. **Extract icon** - Pull icon name from SVG `` element -4. **Preserve data attributes** - Copy all `data-*` attributes -5. **Keep custom classes** - Remove `btn`, `ibexa-btn`, variant classes; keep the rest -6. **Check disabled state** - `disabled` attribute → `:disabled="true"` -7. **Verify HTML type** - `type="submit"` → `html_type="submit"` - -#### 1.4. Test the Migration - -1. Replace the button in the template -2. Render the page and inspect the HTML output -3. Verify all classes, attributes, and structure are correct -4. Test interactive functionality (clicks, disabled state, etc.) - -#### 1.5. Document New Patterns - -If you discover a new pattern, add it to this document: -- Add to **Variant Mapping** section if new variant -- Add to **Special Cases** if edge case -- Update **Complete Examples** with new example - -### Step 2: Adjust Design System Component (If Needed) - -In some cases, the button component from `design-system-twig` may need adjustments to support specific use cases. - -**Check Recent Commits in `design-system-twig`** - -Before making changes, review recent commits to understand component evolution: - -```bash -cd vendor/ibexa/design-system-twig -git log -5 --oneline -git show HEAD # View last commit details -``` - -**Recent Example:** -``` -commit 67ba4d958e3539228df7b3e2099dc40a6ba2d155 -Add html_type parameter to button component - -Allow setting the HTML button type attribute (button, submit, reset) -via the html_type parameter, defaulting to 'button'. -``` - -This shows how the component was extended to support `html_type` prop for submit/reset buttons. - -**When to Modify the Component:** - -If you need to: -- Add new props for BC compatibility (e.g., new variant types) -- Support additional HTML attributes or behaviors -- Handle edge cases (e.g., complex icon scenarios, custom event handlers) -- Add new size variants or icon positions - -**Process (Local Changes Only):** -1. Create a **local** branch in `design-system-twig`: - ```bash - cd vendor/ibexa/design-system-twig - git checkout -b feature/button-component-enhancement - ``` -2. Modify the button component template at: - ``` - src/bundle/Resources/views/themes/standard/design_system/components/button.html.twig - ``` -3. Test the changes with the affected admin-ui templates -4. Ensure backward compatibility - existing usage must not break -5. Create **local** commits with clear messages -6. Update this MIGRATION_RULES.md with the new patterns - -**Important:** -- Always maintain backward compatibility. New props should be optional and not break existing usage. -- ⚠️ **Do NOT push or create PRs automatically** - the user will do this manually when ready - -### Step 3: Migration Strategy - -**Primary Goal:** Replace ALL buttons in the codebase with the component. - -**Process:** -1. Identify all buttons in a template file -2. Replace them one by one using the patterns in this document -3. Run frontend tests after each replacement or batch of replacements -4. Fix any test failures by: - - Adjusting JS selectors (see section 2: JS HANDOFF) - - Updating component props - - Adding missing data attributes - - Adjusting the component in `design-system-twig` if necessary - -**If Tests Cannot Be Fixed:** - -After reasonable effort (e.g., 30-60 minutes per button), if frontend tests still fail: - -1. **Revert the button replacement** to the legacy markup -2. **Add a TODO comment** above the button: - -```twig -{# TODO: Migrate to twig:ibexa:button component - Reason: [Describe the blocker - e.g., "JS relies on specific DOM structure not supported by component"] - See: MIGRATION_RULES.md -#} - -``` - -3. **Document the blocker** in a migration tracking issue or this file -4. **Move on** to the next button - -**Decision Timeline:** -- Spend reasonable time debugging (30-60 min per button) -- If blocked, mark with TODO and continue -- Don't let one problematic button block the entire migration - -### Step 4: Git Workflow - LOCAL CHANGES ONLY - -**⚠️ CRITICAL: DO NOT PUSH OR CREATE PRs AUTOMATICALLY** - -All changes must remain local until explicitly requested by the user. - -**What AI Assistants (Claude, OpenAI Codex, etc.) MUST NOT DO:** -- ❌ DO NOT run `git push` or `git push origin ` -- ❌ DO NOT create pull requests using `gh pr create` or similar commands -- ❌ DO NOT push commits to remote repositories -- ❌ DO NOT force push (`git push --force`) -- ❌ DO NOT automatically merge or rebase with remote branches - -**What AI Assistants CAN DO:** -- ✅ Make local file changes -- ✅ Run `git status` to show changes -- ✅ Run `git diff` to show diffs -- ✅ Create local commits with `git add` and `git commit` -- ✅ Create local branches with `git checkout -b ` -- ✅ Run tests locally -- ✅ Show commit history with `git log` - -**User Control:** -The user will manually decide when to: -1. Review all changes with `git diff` or `git status` -2. Push changes to remote: `git push origin ` -3. Create pull requests via GitHub UI or `gh` CLI -4. Request code review -5. Merge changes - -**Example Workflow:** -```bash -# AI Assistant creates local changes and commits -git add . -git commit -m "Migrate buttons in draft_list.html.twig to twig:ibexa:button component" - -# AI Assistant shows status -git status - -# USER manually pushes when ready -git push origin feature/button-migration - -# USER manually creates PR when ready -gh pr create --title "Migrate buttons to design system component" -``` - ---- - -## Migration Checklist - -- [ ] Replace ` -``` - -**NEW:** -```twig - - {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} - -``` - -### Example 2: Icon-Only Edit Button - -**OLD:** -```twig - -``` - -**NEW:** -```twig - -``` - -### Example 3: Small Secondary Submit Button - -**OLD:** -```twig - -``` - -**NEW:** -```twig - - {{ 'search.apply'|trans|desc('Apply') }} - -``` - -### Example 4: Primary Submit with Custom Classes - -**OLD:** -```twig - -``` - -**NEW:** -```twig - - {{ 'edit_translation.languages.edit'|trans|desc('Edit') }} - -``` diff --git a/migrations/button/prompts/migrate-chunk.txt b/migrations/button/prompts/migrate-chunk.txt deleted file mode 100644 index 94651d96e..000000000 --- a/migrations/button/prompts/migrate-chunk.txt +++ /dev/null @@ -1,53 +0,0 @@ -ROLE: -You are a Senior Ibexa DXP Frontend Developer specializing in design system migrations and frontend component refactoring. - -CONTEXT: -- Chunk: {{CHUNK_ID}} -- Category: {{CATEGORY}} -- Twig Files to Migrate ({{FILE_COUNT}}): -{{TWIG_FILE_LIST}} -- Related JavaScript Files ({{JS_COUNT}}): -{{JS_FILE_LIST}} -- Migration Rules: MIGRATION_RULES.md -- Validation Skill: .claude/skills/validate-frontend-changes.md -{{SPECIAL_NOTES}} - -TASK: -1. Read MIGRATION_RULES.md for complete button migration patterns and examples. -2. For each Twig file in the list above: - a. Identify all legacy {% if is_password_input %} - @@ -56,7 +56,7 @@ - + {% elseif has_search %}
      - + + + {{ 'content_type.view.edit.add'|trans|desc('Add') }} - + {{ include('@ibexadesign/ui/component/popup_menu/popup_menu.html.twig', { 'items': grouped_field_defintions|keys|map(group => { diff --git a/src/bundle/Resources/views/themes/admin/section/view.html.twig b/src/bundle/Resources/views/themes/admin/section/view.html.twig index 96763b785..135b1ce44 100644 --- a/src/bundle/Resources/views/themes/admin/section/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/view.html.twig @@ -51,6 +51,8 @@ > {{ 'section.edit'|trans|desc('Edit') }} + {% set delete_btn_toggle = deletable ? 'modal' : '' %} + {% set delete_btn_target = deletable ? '#delete-section-modal' : '' %} {{ 'section.action.delete'|trans|desc('Delete') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig index f2e357d58..f290eae54 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_image.html.twig @@ -35,7 +35,7 @@ {{ 'content.field_type.ibexa_image.delete'|trans|desc('Delete') }} verifyHttpStatus(); - $this ->getHTMLPage() ->find($this->getLocator('pageTitle')) From d617f79c47763c054ffe0d94e1cab77e6c8a5ac4 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 2 Mar 2026 21:50:21 +0100 Subject: [PATCH 163/234] Fix UDW button selector and revert collapse component DS migration - admin.section.view.js: extend selector to match both legacy ibexa-btn--open-udw and new ids-button--open-udw classes, fixing UDW not opening on section details assign action - collapse.html.twig: revert DS button migration back to plain {% endif %} - {{ header_label|default('') }} - + {% if extra_actions is defined %} {% for action in extra_actions %} - + {% endfor %} {% endif %} - - + {% endblock %}
      {% endblock %} diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig index 0720bab7a..9e3126228 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig @@ -1,13 +1,7 @@ {% trans_default_domain 'ibexa_collapse' %}
      - +
      From eacc6b869ad4b0faf33d0b664014b326539ae9d6 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 2 Mar 2026 22:19:03 +0100 Subject: [PATCH 164/234] Fix UDW confirm and trash restore-under-new-location JS bugs - admin.limitation.pick.js: fix event.target -> event.currentTarget in handleUdwConfirm.bind() call; DS button wraps label in ids-btn__label div, so event.target was the inner div lacking data-* attributes, causing addLocationsToInput() to throw before closeUDW() ran and leaving the UDW permanently open (Roles.feature subtree limitation) - admin.trash.list.js: extend btns selector to also match legacy ibexa-btn--open-udw class; the trash restore button is rendered via form_widget()/UniversalDiscoveryWidgetType which injects ibexa-btn-- open-udw in PHP, so the migrated ids-button--open-udw selector never matched it (Trash.feature restore-under-new-location) --- src/bundle/Resources/public/js/scripts/admin.limitation.pick.js | 2 +- src/bundle/Resources/public/js/scripts/admin.trash.list.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js b/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js index 0a89be434..aaf413933 100644 --- a/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js +++ b/src/bundle/Resources/public/js/scripts/admin.limitation.pick.js @@ -176,7 +176,7 @@ udwRoot = ReactDOMClient.createRoot(udwContainer); udwRoot.render( React.createElement(ibexa.modules.UniversalDiscovery, { - onConfirm: handleUdwConfirm.bind(this, event.target), + onConfirm: handleUdwConfirm.bind(this, event.currentTarget), onCancel: closeUDW, title, multiple: true, diff --git a/src/bundle/Resources/public/js/scripts/admin.trash.list.js b/src/bundle/Resources/public/js/scripts/admin.trash.list.js index 2d68d2905..2bdeb4fd1 100644 --- a/src/bundle/Resources/public/js/scripts/admin.trash.list.js +++ b/src/bundle/Resources/public/js/scripts/admin.trash.list.js @@ -20,7 +20,7 @@ const resetCreatorBtn = doc.querySelector('.ids-button--reset-creator'); const searchCreatorInput = doc.querySelector('#trash_search_creator'); const sortableColumns = doc.querySelectorAll('.ibexa-table__sort-column'); - const btns = doc.querySelectorAll('.ids-button--open-udw'); + const btns = doc.querySelectorAll('.ids-button--open-udw, .ibexa-btn--open-udw'); const udwContainer = doc.getElementById('react-udw'); const autoSendNodes = doc.querySelectorAll('.ibexa-trash-search-form__item--auto-send'); const errorMessage = Translator.trans(/* @Desc("Cannot fetch user list") */ 'trash.user_list.error', {}, 'ibexa_trash_ui'); From 55d477e546fb3cf475c50e1b69f9e744e8d272af Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 3 Mar 2026 07:58:05 +0100 Subject: [PATCH 165/234] Fix Behat collapse expand and UDW confirm timeout - ContentTypeUpdatePage: click .ibexa-collapse__toggle-btn--title directly instead of the outer div; Bootstrap collapse requires a click on the data-bs-toggle element, not its container. Fix fieldDefinitionOpenContainer selector from the non-existent [data-collapsed="false"] attribute to .ibexa-collapse__body.show which is the actual Bootstrap expanded-state class. - UniversalDiscoveryWidget: raise confirm() wait from hardcoded 5s to LONG_TIMEOUT (20s); the onConfirmCallback in the UDW React module runs an async loadVersions() network fetch before calling closeUDW(), and 5s was insufficient in slow CI runs (Roles subtree limitation). --- src/lib/Behat/Component/UniversalDiscoveryWidget.php | 2 +- src/lib/Behat/Page/ContentTypeUpdatePage.php | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/lib/Behat/Component/UniversalDiscoveryWidget.php b/src/lib/Behat/Component/UniversalDiscoveryWidget.php index 8a133284e..877109e9c 100644 --- a/src/lib/Behat/Component/UniversalDiscoveryWidget.php +++ b/src/lib/Behat/Component/UniversalDiscoveryWidget.php @@ -54,7 +54,7 @@ public function confirm(): void { $this->getHTMLPage()->find($this->getLocator('confirmButton'))->click(); $this->getHTMLPage() - ->setTimeout(5) + ->setTimeout(self::LONG_TIMEOUT) ->waitUntilCondition(new ElementNotExistsCondition($this->getHTMLPage(), $this->getLocator('udw'))); } diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index ec5e54673..d91d19ca6 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -37,10 +37,11 @@ public function expandLastFieldDefinition(): void 'lastFieldDefinition', 'div.ibexa-collapse__body-content div.ibexa-collapse--field-definition' ); + $toggleBtnLocator = new VisibleCSSLocator('toggleBtn', '.ibexa-collapse__toggle-btn--title'); - $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator): bool { + $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator, $toggleBtnLocator): bool { $fieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); - $fieldDefinition->click(); + $fieldDefinition->find($toggleBtnLocator)->click(); $this->getHTMLPage()->setTimeout(3)->waitUntilCondition( new ElementNotExistsCondition( $fieldDefinition, @@ -74,7 +75,7 @@ public function specifyLocators(): array new VisibleCSSLocator('workspace', '.ibexa-collapse__body-content'), new VisibleCSSLocator('fieldDefinitionToggle', '.ibexa-collapse:nth-last-child(2) > div.ibexa-collapse__header > button:last-child:not([data-bs-target="#content_collapse"])'), new VisibleCSSLocator('selectLaunchEditorMode', '.form-check .ibexa-input--radio'), - new VisibleCSSLocator('fieldDefinitionOpenContainer', '[data-collapsed="false"] .ibexa-content-type-edit__field-definition-content'), + new VisibleCSSLocator('fieldDefinitionOpenContainer', '.ibexa-collapse__body.show .ibexa-content-type-edit__field-definition-content'), new VisibleCSSLocator('selectBlocksDropdown', '.ibexa-page-select-items__toggler'), new VisibleCSSLocator('fieldDefinitionSearch', '.ibexa-available-field-types__sidebar-filter'), ]); From 37daea6017bdacf69346cf6cd66170422401ce4d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 3 Mar 2026 08:51:57 +0100 Subject: [PATCH 166/234] Fix UDW confirm race: wait for confirm button to be enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit addItemToMultiSelection() clicks the checkbox then confirm() runs immediately. React batches state updates asynchronously, so the confirm button (.c-actions-menu__confirm-btn) is still disabled (isConfirmDisabled = selectedLocations.length === 0) at click time — the click is silently dropped and the UDW never closes. Wait for .c-actions-menu__confirm-btn:not([disabled]) before clicking, ensuring React has processed the ADD_SELECTED_LOCATION dispatch and re-rendered with the button enabled. Keeps the existing post-click wait (LONG_TIMEOUT) for the UDW to unmount. --- src/lib/Behat/Component/UniversalDiscoveryWidget.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/Behat/Component/UniversalDiscoveryWidget.php b/src/lib/Behat/Component/UniversalDiscoveryWidget.php index 877109e9c..ef868f73a 100644 --- a/src/lib/Behat/Component/UniversalDiscoveryWidget.php +++ b/src/lib/Behat/Component/UniversalDiscoveryWidget.php @@ -52,6 +52,10 @@ public function selectContent(string $itemPath): void public function confirm(): void { + $enabledConfirmButtonLocator = new VisibleCSSLocator('enabledConfirmButton', '.c-actions-menu__confirm-btn:not([disabled])'); + $this->getHTMLPage() + ->setTimeout(self::LONG_TIMEOUT) + ->waitUntilCondition(new ElementExistsCondition($this->getHTMLPage(), $enabledConfirmButtonLocator)); $this->getHTMLPage()->find($this->getLocator('confirmButton'))->click(); $this->getHTMLPage() ->setTimeout(self::LONG_TIMEOUT) From c1c234c56f37469e84f54c892ee48b12e4a7d5b5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 3 Mar 2026 10:00:38 +0100 Subject: [PATCH 167/234] fix: Prevent toggle-thrash in expandLastFieldDefinition by checking .ibexa-collapse__body.show The previous logic clicked the toggle button unconditionally on every retry of the outer waitUntil loop, then waited 3s for button.collapsed to disappear. If the inner wait timed out (e.g. Bootstrap collapse not yet initialised on a freshly dragged-in field), the outer loop would re-click the button, collapsing a panel that may have just opened - causing an infinite toggle loop. Fix: - Check .ibexa-collapse__body.show to detect already-expanded state; skip the click if the panel is already open (idempotent retry) - Replace ElementNotExistsCondition(button.collapsed) with ElementExistsCondition(.ibexa-collapse__body.show) - more reliable since 'show' is Bootstrap's authoritative expanded-state marker and is unambiguous regardless of how many buttons exist in the collapse header - Remove now-unused ElementNotExistsCondition import --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index d91d19ca6..cf7164205 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -10,7 +10,6 @@ use Ibexa\Behat\Browser\Element\Action\MouseOverAndClick; use Ibexa\Behat\Browser\Element\Condition\ElementExistsCondition; -use Ibexa\Behat\Browser\Element\Condition\ElementNotExistsCondition; use Ibexa\Behat\Browser\Element\Condition\ElementsCountCondition; use Ibexa\Behat\Browser\Element\Condition\ElementTransitionHasEndedCondition; use Ibexa\Behat\Browser\Element\Criterion\ElementAttributeCriterion; @@ -38,14 +37,20 @@ public function expandLastFieldDefinition(): void 'div.ibexa-collapse__body-content div.ibexa-collapse--field-definition' ); $toggleBtnLocator = new VisibleCSSLocator('toggleBtn', '.ibexa-collapse__toggle-btn--title'); + $expandedBodyLocator = new VisibleCSSLocator('expandedBody', '.ibexa-collapse__body.show'); - $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator, $toggleBtnLocator): bool { + $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator, $toggleBtnLocator, $expandedBodyLocator): bool { $fieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); - $fieldDefinition->find($toggleBtnLocator)->click(); + + $isAlreadyExpanded = $fieldDefinition->setTimeout(0)->findAll($expandedBodyLocator)->any(); + if (!$isAlreadyExpanded) { + $fieldDefinition->find($toggleBtnLocator)->click(); + } + $this->getHTMLPage()->setTimeout(3)->waitUntilCondition( - new ElementNotExistsCondition( + new ElementExistsCondition( $fieldDefinition, - new VisibleCSSLocator('isCollapsed', 'button.collapsed') + $expandedBodyLocator ) ); From d5b22ada12e0bc0c63b3abb48e95cd5aa88c1a27 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 4 Mar 2026 12:34:17 +0100 Subject: [PATCH 168/234] fix: Update schedule-hide-cancel Behat locator --- src/lib/Behat/Page/ContentViewPage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Page/ContentViewPage.php b/src/lib/Behat/Page/ContentViewPage.php index a6f58db79..a4996c01b 100644 --- a/src/lib/Behat/Page/ContentViewPage.php +++ b/src/lib/Behat/Page/ContentViewPage.php @@ -297,7 +297,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('customUrlAliasesTable', '#ibexa-tab-location-view-urls .ibexa-table'), new VisibleCSSLocator('alertTitle', '.ibexa-alert__title'), new VisibleCSSLocator('selectHideMode', '.form-check .ibexa-input--radio'), - new VisibleCSSLocator('cancelScheduleButton', '.ibexa-btn--schedule-hide-cancel'), + new VisibleCSSLocator('cancelScheduleButton', '.ids-button--schedule-hide-cancel'), ]; } From 635ad3d11db7f938a4a4a5d728a015feaee5545e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 5 Mar 2026 08:59:01 +0100 Subject: [PATCH 169/234] fix: Update Dialog confirm locator to match DS ids-btn classes --- src/lib/Behat/Component/Dialog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/Dialog.php b/src/lib/Behat/Component/Dialog.php index d889721ea..6f83e04a1 100644 --- a/src/lib/Behat/Component/Dialog.php +++ b/src/lib/Behat/Component/Dialog.php @@ -32,7 +32,7 @@ public function verifyIsLoaded(): void protected function specifyLocators(): array { return [ - new VisibleCSSLocator('confirm', '.modal.show button[type="submit"],.modal.show button[data-click], .modal.show .ibexa-btn--confirm, .modal.show .ibexa-btn--primary'), + new VisibleCSSLocator('confirm', '.modal.show button[type="submit"],.modal.show button[data-click], .modal.show .ibexa-btn--confirm, .modal.show .ibexa-btn--primary, .modal.show .ids-btn--confirm, .modal.show .ids-btn--primary'), new VisibleCSSLocator('decline', '.modal.show .ids-btn--secondary, .modal.show .ibexa-btn--secondary'), ]; } From 6b2f23637fc5e762288f5266afa72f4f02f344ab Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 6 Mar 2026 15:32:39 +0100 Subject: [PATCH 170/234] fix: Replace twig:ibexa: components inside Twig macros with plain HTML --- .../account/notifications/list_all.html.twig | 42 +++++++++-------- .../admin/content/draft/draft_list.html.twig | 19 +++++--- .../content/modal/draft_conflict.html.twig | 19 ++++---- .../admin/content/tab/locations/tab.html.twig | 40 +++++++++-------- .../content/tab/translations/tab.html.twig | 39 ++++++++-------- .../themes/admin/content/tab/urls.html.twig | 45 +++++++++++-------- .../admin/content/tab/versions/tab.html.twig | 20 +++++---- 7 files changed, 126 insertions(+), 98 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig index df2e83c50..957f0b585 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig @@ -115,30 +115,34 @@ {% set modal_data_target = 'modal-selection_remove' %}
      - - {{ 'notification.mark_as_read'|trans|desc('Mark as read') }} - - + + + +
      +
      {{ 'notification.mark_as_read'|trans|desc('Mark as read') }}
      + +
      {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index dbe993a8a..9f571448e 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -149,16 +149,23 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - - {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} - +
      + + + +
      +
      + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} +
      + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index 9fb80085e..02171a6cd 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,15 +43,16 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - - {{ 'draft.conflict.add_new'|trans|desc('Add') }} - +
      + + + +
      +
      {{ 'draft.conflict.add_new'|trans|desc('Add') }}
      + {% endif %} {% endmacro %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index 4a8d534f9..b10045e4a 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -148,32 +148,36 @@ } %} {% macro table_header_tools(form_add, form_remove, can_add) %} - - {{ 'tab.locations.action.add'|trans|desc('Add') }} - +
      + + + +
      +
      {{ 'tab.locations.action.add'|trans|desc('Add') }}
      + {% set modal_data_target = 'delete-content-types-modal' %} - - {{ 'tab.locations.action.delete'|trans|desc('Delete') }} - +
      + + + +
      +
      {{ 'tab.locations.action.delete'|trans|desc('Delete') }}
      + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.locations.modal.message'|trans|desc('Do you want to delete the Location? All its sub-items will be sent to Trash.'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index 5749f84ef..81c5691f9 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -117,33 +117,36 @@ {% macro table_header_tools(form_translation_remove, can_translate) %} {% if can_translate %} - - {{ 'tab.translations.action.add'|trans|desc('Add') }} - +
      + + + +
      +
      {{ 'tab.translations.action.add'|trans|desc('Add') }}
      + {% set modal_data_target = 'delete-translations-modal' %} - - {{ 'tab.translations.action.delete'|trans|desc('Delete') }} - +
      + + + +
      +
      {{ 'tab.translations.action.delete'|trans|desc('Delete') }}
      + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.translations.modal.message'|trans|desc('Do you want to delete the translation?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index e00e68bbc..ae0bf7c36 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -49,33 +49,40 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %} - - {{ 'tab.urls.action.add'|trans|desc('Add') }} - +
      + + + +
      +
      + {{ 'tab.urls.action.add'|trans|desc('Add') }} +
      + {% set modal_data_target = 'delete-custom-url-modal' %} - - {{ 'tab.urls.action.delete'|trans|desc('Delete') }} - +
      + + + +
      +
      + {{ 'tab.urls.action.delete'|trans|desc('Delete') }} +
      + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.urls.modal.message'|trans|desc('Delete the selected custom URL aliases permanently?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index 9c6435753..d6bfe0c40 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -96,19 +96,21 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + > +
      + + + +
      + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.versions.modal.message'|trans|desc('Do you want to delete the version(s)?'), From 9b1d9d1cddaa5a21b304b58805ccca782bd384ce Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 6 Mar 2026 21:53:43 +0100 Subject: [PATCH 171/234] Revert "fix: Replace twig:ibexa: components inside Twig macros with plain HTML" This reverts commit fd0ff2de68154ac3ee61a166b90b543dc6fc6d37. --- .../account/notifications/list_all.html.twig | 42 ++++++++--------- .../admin/content/draft/draft_list.html.twig | 19 +++----- .../content/modal/draft_conflict.html.twig | 19 ++++---- .../admin/content/tab/locations/tab.html.twig | 40 ++++++++--------- .../content/tab/translations/tab.html.twig | 39 ++++++++-------- .../themes/admin/content/tab/urls.html.twig | 45 ++++++++----------- .../admin/content/tab/versions/tab.html.twig | 20 ++++----- 7 files changed, 98 insertions(+), 126 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig index 957f0b585..df2e83c50 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig @@ -115,34 +115,30 @@ {% set modal_data_target = 'modal-selection_remove' %}
      - - + {{ 'notification.delete'|trans|desc('Delete') }} +
      {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index 9f571448e..dbe993a8a 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -149,23 +149,16 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} +
      {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index 02171a6cd..9fb80085e 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,16 +43,15 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - + {{ 'draft.conflict.add_new'|trans|desc('Add') }} + {% endif %} {% endmacro %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index b10045e4a..4a8d534f9 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -148,36 +148,32 @@ } %} {% macro table_header_tools(form_add, form_remove, can_add) %} - + {{ 'tab.locations.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-content-types-modal' %} - + {{ 'tab.locations.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.locations.modal.message'|trans|desc('Do you want to delete the Location? All its sub-items will be sent to Trash.'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index 81c5691f9..5749f84ef 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -117,36 +117,33 @@ {% macro table_header_tools(form_translation_remove, can_translate) %} {% if can_translate %} - + {{ 'tab.translations.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-translations-modal' %} - + {{ 'tab.translations.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.translations.modal.message'|trans|desc('Do you want to delete the translation?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index ae0bf7c36..e00e68bbc 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -49,40 +49,33 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %} - + {{ 'tab.urls.action.add'|trans|desc('Add') }} + {% set modal_data_target = 'delete-custom-url-modal' %} - + {{ 'tab.urls.action.delete'|trans|desc('Delete') }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.urls.modal.message'|trans|desc('Delete the selected custom URL aliases permanently?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index d6bfe0c40..9c6435753 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -96,21 +96,19 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + /> {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.versions.modal.message'|trans|desc('Do you want to delete the version(s)?'), From d3588d1e6d91f362f5ec89dccb338d43d33687eb Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 6 Mar 2026 21:58:14 +0100 Subject: [PATCH 172/234] fix: Replace twig:ibexa:button in Twig macros with component() function calls --- .../account/notifications/list_all.html.twig | 46 +++++++++---------- .../admin/content/draft/draft_list.html.twig | 19 ++++---- .../content/modal/draft_conflict.html.twig | 18 ++++---- .../admin/content/tab/locations/tab.html.twig | 44 ++++++++---------- .../content/tab/translations/tab.html.twig | 46 +++++++++---------- .../themes/admin/content/tab/urls.html.twig | 46 +++++++++---------- .../admin/content/tab/versions/tab.html.twig | 24 +++++----- 7 files changed, 112 insertions(+), 131 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig index df2e83c50..0c6f0b553 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig @@ -115,30 +115,28 @@ {% set modal_data_target = 'modal-selection_remove' %}
      - - {{ 'notification.mark_as_read'|trans|desc('Mark as read') }} - - - {{ 'notification.delete'|trans|desc('Delete') }} - + {{ component('ibexa:button', { + id: 'confirm-mark-selected-as-read', + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'mail-open', + label: 'notification.mark_as_read'|trans|desc('Mark as read'), + class: 'ibexa-notification-list__btn-mark-as-read', + disabled: true, + }) }} + {{ component('ibexa:button', { + id: 'confirm-selection_remove', + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'trash', + label: 'notification.delete'|trans|desc('Delete'), + class: 'ibexa-notification-list__btn-delete', + disabled: true, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + }) }}
      {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index dbe993a8a..08a6157f7 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -149,16 +149,15 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - - {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} - + {{ component('ibexa:button', { + type: 'tertiary-alt', + icon: 'trash', + label: 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete'), + disabled: true, + id: 'confirm-' ~ form.remove.vars.id, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + }) }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index 9fb80085e..fb54bb0e9 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,15 +43,13 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - - {{ 'draft.conflict.add_new'|trans|desc('Add') }} - + {{ component('ibexa:button', { + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'add', + label: 'draft.conflict.add_new'|trans|desc('Add'), + class: 'ids-button--add-draft', + }) }} {% endif %} {% endmacro %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index 4a8d534f9..efe276c2c 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -148,32 +148,28 @@ } %} {% macro table_header_tools(form_add, form_remove, can_add) %} - - {{ 'tab.locations.action.add'|trans|desc('Add') }} - + {{ component('ibexa:button', { + type: 'tertiary-alt', + size: 'small', + icon: 'add', + label: 'tab.locations.action.add'|trans|desc('Add'), + class: 'ibexa-btn--udw-add', + 'data-udw-config': ibexa_udw_config('add_location', {}), + disabled: not can_add, + }) }} {% set modal_data_target = 'delete-content-types-modal' %} - - {{ 'tab.locations.action.delete'|trans|desc('Delete') }} - + {{ component('ibexa:button', { + html_type: 'button', + id: 'delete-locations', + type: 'tertiary-alt', + size: 'small', + icon: 'trash', + label: 'tab.locations.action.delete'|trans|desc('Delete'), + disabled: true, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + }) }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.locations.modal.message'|trans|desc('Do you want to delete the Location? All its sub-items will be sent to Trash.'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index 5749f84ef..036956243 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -117,33 +117,29 @@ {% macro table_header_tools(form_translation_remove, can_translate) %} {% if can_translate %} - - {{ 'tab.translations.action.add'|trans|desc('Add') }} - + {{ component('ibexa:button', { + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'add', + label: 'tab.translations.action.add'|trans|desc('Add'), + class: 'ids-button--prevented ids-button--add-translation', + 'data-bs-toggle': 'modal', + 'data-bs-target': '#add-translation-modal', + }) }} {% set modal_data_target = 'delete-translations-modal' %} - - {{ 'tab.translations.action.delete'|trans|desc('Delete') }} - + {{ component('ibexa:button', { + html_type: 'button', + id: 'delete-translations', + type: 'tertiary-alt', + size: 'small', + icon: 'trash', + label: 'tab.translations.action.delete'|trans|desc('Delete'), + disabled: true, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + }) }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.translations.modal.message'|trans|desc('Do you want to delete the translation?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index e00e68bbc..077072b52 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -49,33 +49,29 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %} - - {{ 'tab.urls.action.add'|trans|desc('Add') }} - + {{ component('ibexa:button', { + html_type: 'button', + type: 'tertiary', + size: 'small', + icon: 'create', + label: 'tab.urls.action.add'|trans|desc('Add'), + class: 'ids-button--prevented', + 'data-bs-toggle': 'modal', + 'data-bs-target': '#ibexa-modal--custom-url-alias', + }) }} {% set modal_data_target = 'delete-custom-url-modal' %} - - {{ 'tab.urls.action.delete'|trans|desc('Delete') }} - + {{ component('ibexa:button', { + id: 'delete-custom-urls', + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'trash', + label: 'tab.urls.action.delete'|trans|desc('Delete'), + disabled: true, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + }) }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.urls.modal.message'|trans|desc('Delete the selected custom URL aliases permanently?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index 9c6435753..7837bba60 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -96,19 +96,17 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - + {{ component('ibexa:button', { + id: 'delete-translations-' ~ form.remove.vars.id, + html_type: 'button', + type: 'tertiary-alt', + size: 'small', + icon: 'trash', + disabled: true, + 'data-bs-toggle': 'modal', + 'data-bs-target': '#' ~ modal_data_target, + title: 'tab.versions.action.delete'|trans|desc('Delete version'), + }) }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.versions.modal.message'|trans|desc('Do you want to delete the version(s)?'), From 7e56724675dd15d0c723af1f64a08dfc1e03709e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 8 Mar 2026 15:29:49 +0100 Subject: [PATCH 173/234] fix: Replace invalid DS Button type="info" with type="secondary" in side_panel --- .../themes/admin/ui/component/side_panel/side_panel.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig index 9cf64a8b2..5d4b4c342 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig @@ -36,7 +36,7 @@ {% block footer %} {{ 'side_panel.btn.cancel_label'|trans|desc('Cancel') }} From 4ea133d9581b6451d0f6f90a0101cae0a184666f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 8 Mar 2026 17:36:07 +0100 Subject: [PATCH 174/234] fix: Update CreateNewPopup addButton selector to match ids-btn--primary Packages that have migrated their extra-actions templates to use render ids-btn--primary instead of ibexa-btn--primary. Add the ids-btn--primary variant to the addButton locator so the Behat component can find the Create button in both legacy and design-system-twig rendered popups. Affected test suites: ProductVariants, PaymentMethods, Currencies, AttributeGroups, form-builder OtherFields/TechnicalFields. --- src/lib/Behat/Component/CreateNewPopup.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/CreateNewPopup.php b/src/lib/Behat/Component/CreateNewPopup.php index eab15ffb2..04186b6e9 100644 --- a/src/lib/Behat/Component/CreateNewPopup.php +++ b/src/lib/Behat/Component/CreateNewPopup.php @@ -75,7 +75,7 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('popupHeader', '.ibexa-extra-actions__header'), - new VisibleCSSLocator('addButton', '.ibexa-extra-actions__pre-form-btns .ibexa-btn--primary, .ibexa-extra-actions--create .ibexa-btn--primary'), + new VisibleCSSLocator('addButton', '.ibexa-extra-actions__pre-form-btns .ibexa-btn--primary, .ibexa-extra-actions__pre-form-btns .ids-btn--primary, .ibexa-extra-actions--create .ibexa-btn--primary'), new VisibleCSSLocator('cancelButton', '.ibexa-extra-actions__pre-form-btns .ids-btn--secondary, .ibexa-extra-actions__pre-form-btns .ibexa-btn--secondary'), new VisibleCSSLocator('popup', '.ibexa-extra-actions:not(.ibexa-extra-actions--hidden)'), new VisibleCSSLocator('formGroup', '.form-group'), From 8efce5bbc552e98859621e6c250a4707b085edd3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 8 Mar 2026 19:08:53 +0100 Subject: [PATCH 175/234] fix: Replace 'create' icon with 'add' icon in DS buttons and links --- .../Resources/views/themes/admin/content/tab/urls.html.twig | 2 +- .../admin/content_type/content_type_group/index.html.twig | 2 +- .../themes/admin/content_type/content_type_group/list.html.twig | 2 +- .../views/themes/admin/content_type/field_definitions.html.twig | 2 +- .../themes/admin/object_state/object_state_group/list.html.twig | 2 +- .../views/themes/admin/ui/dashboard/dashboard.html.twig | 2 +- .../Resources/views/themes/admin/url_wildcard/list.html.twig | 2 +- .../views/themes/admin/user/invitation/modal.html.twig | 2 +- .../Resources/views/themes/admin/user/policy/list.html.twig | 2 +- .../Resources/views/themes/admin/user/role/list.html.twig | 2 +- src/lib/Menu/ContentRightSidebarBuilder.php | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index 077072b52..6891a3aba 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -53,7 +53,7 @@ html_type: 'button', type: 'tertiary', size: 'small', - icon: 'create', + icon: 'add', label: 'tab.urls.action.add'|trans|desc('Add'), class: 'ids-button--prevented', 'data-bs-toggle': 'modal', diff --git a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/index.html.twig b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/index.html.twig index bc87f53bc..2bf3c3cee 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/index.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/index.html.twig @@ -26,7 +26,7 @@ href="{{ path('ibexa.content_type.add', {contentTypeGroupId: content_type_group.id}) }}" variant="button" type="primary" - icon="create" + icon="add" icon_size="small-medium" > {{ 'content_type.view.list.action.add'|trans|desc('Create') }} diff --git a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig index 42f2e2bdc..be768655f 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/content_type_group/list.html.twig @@ -29,7 +29,7 @@ href="{{ path('ibexa.content_type_group.create') }}" variant="button" type="primary" - icon="create" + icon="add" icon_size="small-medium" > {{ 'content_type_group.view.list.action.add'|trans|desc('Create') }} diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig index 918ca6ede..61a261eb8 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig @@ -79,7 +79,7 @@ data-is-disabled="{{ is_field_definitions_draggable ? 'false' : 'true' }}" > - + {{ 'content_type.view.edit.add'|trans|desc('Add') }} diff --git a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig index a5035cb50..22b3720c4 100644 --- a/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/object_state/object_state_group/list.html.twig @@ -31,7 +31,7 @@ href="{{ path('ibexa.object_state.group.add') }}" variant="button" type="primary" - icon="create" + icon="add" icon_size="small-medium" > {{ 'object_state_group.new'|trans|desc('Create') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig index 997b640d6..05d78920d 100644 --- a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig @@ -15,7 +15,7 @@ diff --git a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig index 1e39421e5..cd4360ef6 100644 --- a/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/policy/list.html.twig @@ -95,7 +95,7 @@ variant="button" type="tertiary" size="small" - icon="create" + icon="add" icon_size="small-medium" > {{ 'policy.view.list.action.add'|trans|desc('Add') }} diff --git a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig index 7b6ad2d52..49abc3dd5 100644 --- a/src/bundle/Resources/views/themes/admin/user/role/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/role/list.html.twig @@ -29,7 +29,7 @@ href="{{ path('ibexa.role.create') }}" variant="button" type="primary" - icon="create" + icon="add" icon_size="small-medium" > {{ 'role.view.list.action.add'|trans|desc('Create') }} diff --git a/src/lib/Menu/ContentRightSidebarBuilder.php b/src/lib/Menu/ContentRightSidebarBuilder.php index 961af4611..0d1dd469e 100644 --- a/src/lib/Menu/ContentRightSidebarBuilder.php +++ b/src/lib/Menu/ContentRightSidebarBuilder.php @@ -160,7 +160,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE => $this->createMenuItem( self::ITEM__CREATE, [ - 'extras' => ['icon' => 'create', 'orderNumber' => 10], + 'extras' => ['icon' => 'add', 'orderNumber' => 10], 'attributes' => $canCreate ? $createAttributes : array_merge($createAttributes, ['disabled' => 'disabled']), From 5bbfed861d2457e04c0819c5456f4b0247934a2f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 8 Mar 2026 23:01:34 +0100 Subject: [PATCH 176/234] feat: Add .ids-btn--info CSS styles matching primary button appearance --- .../Resources/public/scss/_buttons.scss | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/bundle/Resources/public/scss/_buttons.scss b/src/bundle/Resources/public/scss/_buttons.scss index bc4c1739b..d1191157a 100644 --- a/src/bundle/Resources/public/scss/_buttons.scss +++ b/src/bundle/Resources/public/scss/_buttons.scss @@ -589,6 +589,27 @@ } } +.ids-btn--info { + --ids-default-text-color: #ffffff; + --ids-default-bg-color: linear-gradient(315deg, #a32768 0%, #c4234a 74%); + --ids-default-border-color: transparent; + --ids-hover-text-color: #ffffff; + --ids-hover-bg-color: linear-gradient(315deg, #c4234a 19.5%, #882157 100%); + --ids-hover-border-color: transparent; + --ids-active-text-color: #ffffff; + --ids-active-bg-color: linear-gradient(0, #a32768 100%, #a32768 100%); + --ids-active-border-color: transparent; + --ids-disabled-text-color: #a1a4a8; + --ids-disabled-bg-color: #f1f1f2; + --ids-disabled-border-color: transparent; + --ids-focus-text-color: #ffffff; + --ids-focus-bg-color: linear-gradient(315deg, #c4234a 19.5%, #882157 100%); + --ids-focus-border-color: transparent; + --ids-focus-box-shadow: 0 0 0 0.2857142857rem rgba(163, 39, 104, 0.25); + + border: 0; +} + .ids-button--content-edit { background-color: transparent; cursor: pointer; From afb1ffe6ce78223eec62eada51259ddde1acefa9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 8 Mar 2026 23:06:22 +0100 Subject: [PATCH 177/234] fix: Update Matrix addRowButton locator to match ids-button--add-matrix-entry DS class --- src/lib/Behat/Component/Fields/Matrix.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/Fields/Matrix.php b/src/lib/Behat/Component/Fields/Matrix.php index b58c88755..4a17e00f4 100644 --- a/src/lib/Behat/Component/Fields/Matrix.php +++ b/src/lib/Behat/Component/Fields/Matrix.php @@ -62,7 +62,7 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('row', '.ibexa-table__row'), - new VisibleCSSLocator('addRowButton', '.ibexa-btn--add-matrix-entry'), + new VisibleCSSLocator('addRowButton', '.ibexa-btn--add-matrix-entry, .ids-button--add-matrix-entry'), new VisibleCSSLocator('viewModeTableHeaders', 'thead th'), new VisibleCSSLocator('viewModeTableRow', 'tbody tr'), new VisibleCSSLocator('editModeTableHeaders', '.ibexa-table thead th[data-identifier]'), From a7e966b8fcfeed99ecdf2b4e340c1b422cb42b4a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 17 Mar 2026 13:45:22 +0100 Subject: [PATCH 178/234] revert: restore legacy info button in side panel --- .../Resources/public/scss/_buttons.scss | 21 ------------------- .../component/side_panel/side_panel.html.twig | 9 ++++---- 2 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/bundle/Resources/public/scss/_buttons.scss b/src/bundle/Resources/public/scss/_buttons.scss index d1191157a..bc4c1739b 100644 --- a/src/bundle/Resources/public/scss/_buttons.scss +++ b/src/bundle/Resources/public/scss/_buttons.scss @@ -589,27 +589,6 @@ } } -.ids-btn--info { - --ids-default-text-color: #ffffff; - --ids-default-bg-color: linear-gradient(315deg, #a32768 0%, #c4234a 74%); - --ids-default-border-color: transparent; - --ids-hover-text-color: #ffffff; - --ids-hover-bg-color: linear-gradient(315deg, #c4234a 19.5%, #882157 100%); - --ids-hover-border-color: transparent; - --ids-active-text-color: #ffffff; - --ids-active-bg-color: linear-gradient(0, #a32768 100%, #a32768 100%); - --ids-active-border-color: transparent; - --ids-disabled-text-color: #a1a4a8; - --ids-disabled-bg-color: #f1f1f2; - --ids-disabled-border-color: transparent; - --ids-focus-text-color: #ffffff; - --ids-focus-bg-color: linear-gradient(315deg, #c4234a 19.5%, #882157 100%); - --ids-focus-border-color: transparent; - --ids-focus-box-shadow: 0 0 0 0.2857142857rem rgba(163, 39, 104, 0.25); - - border: 0; -} - .ids-button--content-edit { background-color: transparent; cursor: pointer; diff --git a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig index 5d4b4c342..13540df30 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig @@ -34,13 +34,12 @@
      {% block footer %} - {{ 'side_panel.btn.cancel_label'|trans|desc('Cancel') }} - + {% endblock %}
      From fc0ef89ae4a51595ba488109ede72e8720a43e20 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 07:04:06 +0100 Subject: [PATCH 179/234] fix: increase SCSS specificity to fix DFM button visibility when using DS button component The DS .ids-btn base class sets display:inline-flex with specificity (0,1,0), which overrode the display:none rule on the disable button (also 0,1,0). Wrapping the visibility rules inside the parent __distraction-free-mode-btns selector raises specificity to (0,2,0)/(0,3,0), restoring correct visibility. --- .../scss/fieldType/edit/_base-field.scss | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/bundle/Resources/public/scss/fieldType/edit/_base-field.scss b/src/bundle/Resources/public/scss/fieldType/edit/_base-field.scss index ac813b4c8..da193cbf7 100644 --- a/src/bundle/Resources/public/scss/fieldType/edit/_base-field.scss +++ b/src/bundle/Resources/public/scss/fieldType/edit/_base-field.scss @@ -49,16 +49,18 @@ align-self: flex-end; align-items: center; - &--enable { - display: inline-flex; + .ibexa-icon { + margin-right: calculateRem(8px); } + } - &--disable { - display: none; + &__distraction-free-mode-btns { + .ibexa-field-edit__distraction-free-mode-control-btn--enable { + display: inline-flex; } - .ibexa-icon { - margin-right: calculateRem(8px); + .ibexa-field-edit__distraction-free-mode-control-btn--disable { + display: none; } } @@ -175,12 +177,14 @@ &__distraction-free-mode-control-btn { margin: 0; + } - &--enable { + &__distraction-free-mode-btns { + .ibexa-field-edit__distraction-free-mode-control-btn--enable { display: none; } - &--disable { + .ibexa-field-edit__distraction-free-mode-control-btn--disable { display: inline-flex; } } From dd12ec9cd7a740eeba9c5e2c64521350e5190ecc Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 08:10:28 +0100 Subject: [PATCH 180/234] fix: migrate context menu buttons to DS Button component - Replace legacy + {% if selector_btn_classes is not empty %} + + {% else %} + + {% endif %} {{ include('@ibexadesign/ui/component/multilevel_popup_menu/multilevel_popup_menu.html.twig', { is_custom_init: true, diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig index ba8d42b00..c9b03b1b1 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig @@ -15,10 +15,14 @@ {% endset %} {% set default_selector_btn_classes = options.selector_btn_classes|default('') %} + {% set default_selector_btn_type = options.selector_btn_type|default('secondary') %} + {% set default_selector_btn_size = options.selector_btn_size|default('medium') %} {{ include('@ibexadesign/ui/component/context_menu/context_menu.html.twig', { menu_items: menu_items, - selector_btn_classes: item.extras.adaptiveItemsSelectorBtnClass|default(default_selector_btn_classes) + selector_btn_classes: item.extras.adaptiveItemsSelectorBtnClass|default(default_selector_btn_classes), + selector_btn_type: default_selector_btn_type, + selector_btn_size: default_selector_btn_size, }) }} {% endblock %} @@ -124,30 +128,70 @@ {%- endif -%} {% endfor %} {% else %} - {%- set default_classes = 'btn ibexa-btn' -%} - - {% if not item.extras.noDefaultBtnStyling|default(false) %} - {% if item.extras.primary|default(false) %} - {%- set default_classes = default_classes ~ ' ' ~ options.primary_item_class|default('ibexa-btn--primary') -%} + {%- set use_legacy = item.extras.noDefaultBtnStyling|default(false) + or options.primary_item_class is defined + or options.secondary_item_class is defined -%} + + {% if not use_legacy %} + {%- set btn_type = item.extras.primary|default(false) + ? options.primary_item_type|default('primary') + : options.secondary_item_type|default('secondary') -%} + {%- set btn_size = item.extras.primary|default(false) + ? options.primary_item_size|default('medium') + : options.secondary_item_size|default('medium') -%} + + {% if element == 'a' %} + k not in ['class', 'href'])) }} + > + {% if item.extras.icon is defined %} + + {% endif %} + {% set is_btn_label = true %} + {{ block('label') }} + {% else %} - {%- set default_classes = default_classes ~ ' ' ~ options.secondary_item_class|default('ibexa-btn--secondary') -%} + k not in ['class'])) }} + > + {% set is_btn_label = true %} + {{ block('label') }} + {% endif %} - {% endif %} - {%- set attributes = attributes|merge({ - class: (attributes.class|default('') ~ ' ' ~ default_classes|default('btn btn-secondary btn-block'))|trim - }) -%} + {% else %} + {%- set default_classes = 'btn ibexa-btn' -%} - <{{element}}{{macros.attributes(attributes)}}> - {% if item.extras.icon is defined %} - - - + {% if not item.extras.noDefaultBtnStyling|default(false) %} + {% if item.extras.primary|default(false) %} + {%- set default_classes = default_classes ~ ' ' ~ options.primary_item_class|default('ibexa-btn--primary') -%} + {% else %} + {%- set default_classes = default_classes ~ ' ' ~ options.secondary_item_class|default('ibexa-btn--secondary') -%} + {% endif %} {% endif %} - {% set is_btn_label = true %} - {{ block('label') }} - + {%- set attributes = attributes|merge({ + class: (attributes.class|default('') ~ ' ' ~ default_classes|default('btn btn-secondary btn-block'))|trim + }) -%} + + <{{element}}{{macros.attributes(attributes)}}> + {% if item.extras.icon is defined %} + + + + {% endif %} + + {% set is_btn_label = true %} + {{ block('label') }} + + {% endif %} {% endif %} {% endblock %} From cd90bf8d565f6c3a6f1a64fe92a171e868110199 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 08:34:34 +0100 Subject: [PATCH 181/234] fix: use raw element with DS classes instead of twig:ibexa:button component Twig UX components do not support dynamic attribute splatting via {{ macros.attributes(...) }} inside component tags, causing a parse error. Replace / in the DS path with a raw
      {% endblock %} From 06d471258026c32b72e6aeb317fb63f08b0df6d5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 09:16:11 +0100 Subject: [PATCH 183/234] fix: use arrow-chevron-down icon in DS split button toggle caret-down is a legacy alias resolved by ibexa_icon_path() but not recognised by which constructs the path directly. The correct DS icon name is arrow-chevron-down. --- .../themes/admin/ui/component/split_btn/split_btn.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig index 30ab4c07c..207e71390 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig @@ -75,7 +75,7 @@ {% if not use_legacy %}
      From a15bbd84157801b104b3cd13177ea739cc6ba897 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 14:31:05 +0100 Subject: [PATCH 184/234] fix: increase SCSS specificity for DS split button border-radius --- src/bundle/Resources/public/scss/_split-button.scss | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bundle/Resources/public/scss/_split-button.scss b/src/bundle/Resources/public/scss/_split-button.scss index 384743897..345ec20d5 100644 --- a/src/bundle/Resources/public/scss/_split-button.scss +++ b/src/bundle/Resources/public/scss/_split-button.scss @@ -16,6 +16,11 @@ border-bottom-right-radius: 0; } + &__main-btn.ids-btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + &__split { display: none; z-index: 2; @@ -40,6 +45,11 @@ } } + &__toggle-btn.ids-btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &--primary { background-image: $ibexa-gradient-danger-primary; border-radius: $ibexa-border-radius; From 4ecd28f89e3eaf8b015fe6a7f6dec5bd7af7a570 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 14:31:47 +0100 Subject: [PATCH 185/234] fix: set DS split button height to 48px to match context menu bar --- src/bundle/Resources/public/scss/_split-button.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/bundle/Resources/public/scss/_split-button.scss b/src/bundle/Resources/public/scss/_split-button.scss index 345ec20d5..f16ca352a 100644 --- a/src/bundle/Resources/public/scss/_split-button.scss +++ b/src/bundle/Resources/public/scss/_split-button.scss @@ -19,6 +19,7 @@ &__main-btn.ids-btn { border-top-right-radius: 0; border-bottom-right-radius: 0; + height: calculateRem(48px); } &__split { @@ -48,6 +49,7 @@ &__toggle-btn.ids-btn { border-top-left-radius: 0; border-bottom-left-radius: 0; + height: calculateRem(48px); } &--primary { From 157f69ce9b3243babc3363f2125e4859724d73da Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 18 Mar 2026 14:32:15 +0100 Subject: [PATCH 186/234] fix: increase SCSS specificity for DS context menu more button height --- src/bundle/Resources/public/scss/_context-menu.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/scss/_context-menu.scss b/src/bundle/Resources/public/scss/_context-menu.scss index 812536c80..6d60cabce 100644 --- a/src/bundle/Resources/public/scss/_context-menu.scss +++ b/src/bundle/Resources/public/scss/_context-menu.scss @@ -37,7 +37,8 @@ &--more { position: relative; - .ibexa-btn--more { + .ibexa-btn--more, + .ibexa-btn--more.ids-btn { align-items: center; height: calculateRem(48px); } From 644844cd1cda37571ed89588e5bcf8c23f76c5e5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 19 Mar 2026 12:07:32 +0100 Subject: [PATCH 187/234] feat: migrate React buttons to DS Button component (batch 1) - Migrate common components: alert, dropdown, tooltip-popup - Migrate multi-file-upload: drop-area, upload-list, main module - Migrate sub-items action-btn component - Migrate UDW: actions-menu, content-create-widget, content-edit-button - Migrate UDW filters: filters.js, filters.panel.js - Migrate UDW search component All migratable buttons now use @ids-components/components/Button with proper type (Primary, Secondary, TertiaryAlt, Tertiary) and size (Medium, Small). Icon-only buttons use the icon prop, component-specific classes preserved via className prop. --- .../ui-dev/src/modules/common/alert/alert.js | 5 +-- .../src/modules/common/dropdown/dropdown.js | 28 ++++++------ .../tooltip-popup/tooltip.popup.component.js | 9 ++-- .../drop-area/drop.area.component.js | 11 ++--- .../upload-list/upload.item.component.js | 44 +++++++++---------- .../multi.file.upload.module.js | 14 +++--- .../components/action-btn/action.btn.js | 23 +++++----- .../components/actions-menu/actions.menu.js | 13 +++--- .../content.create.widget.js | 13 +++--- .../content.edit.button.js | 20 ++++----- .../components/filters/filters.js | 10 +++-- .../components/filters/filters.panel.js | 14 +++--- .../components/search/search.js | 10 +++-- 13 files changed, 108 insertions(+), 106 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/common/alert/alert.js b/src/bundle/ui-dev/src/modules/common/alert/alert.js index 9f2a80ac0..e8dfd7900 100644 --- a/src/bundle/ui-dev/src/modules/common/alert/alert.js +++ b/src/bundle/ui-dev/src/modules/common/alert/alert.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import Icon from '../icon/icon'; import { createCssClassNames } from '../helpers/css.class.names'; +import { Button, ButtonType } from '@ids-components/components/Button'; const ICON_NAME_MAP = { info: 'about', @@ -51,9 +52,7 @@ const Alert = ({
      {children}
      {showCloseBtn && ( - +
      ); diff --git a/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js b/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js index e913b9e10..89190f536 100644 --- a/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js +++ b/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js @@ -5,6 +5,7 @@ import PropTypes from 'prop-types'; import { createCssClassNames } from '../../common/helpers/css.class.names'; import Icon from '../../common/icon/icon'; import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { Button, ButtonType } from '@ids-components/components/Button'; const { document } = window; const MIN_SEARCH_ITEMS_DEFAULT = 5; @@ -134,21 +135,20 @@ const Dropdown = ({ value={filterText} />
      - - + className="ibexa-input-text-wrapper__action-btn ibexa-input-text-wrapper__action-btn--clear" + extraAria={{ tabIndex: -1 }} + /> +
      diff --git a/src/bundle/ui-dev/src/modules/common/tooltip-popup/tooltip.popup.component.js b/src/bundle/ui-dev/src/modules/common/tooltip-popup/tooltip.popup.component.js index 7ed4d9972..2319c37e1 100644 --- a/src/bundle/ui-dev/src/modules/common/tooltip-popup/tooltip.popup.component.js +++ b/src/bundle/ui-dev/src/modules/common/tooltip-popup/tooltip.popup.component.js @@ -2,6 +2,7 @@ import React, { useRef } from 'react'; import PropTypes from 'prop-types'; import { createCssClassNames } from '../helpers/css.class.names'; +import { Button, ButtonType } from '@ids-components/components/Button'; const TooltipPopupComponent = ({ title, @@ -37,14 +38,14 @@ const TooltipPopupComponent = ({
      {confirmLabel && ( - + )} {closeLabel && ( - + )}
      diff --git a/src/bundle/ui-dev/src/modules/multi-file-upload/components/drop-area/drop.area.component.js b/src/bundle/ui-dev/src/modules/multi-file-upload/components/drop-area/drop.area.component.js index 3b53170de..e08e91bf9 100644 --- a/src/bundle/ui-dev/src/modules/multi-file-upload/components/drop-area/drop.area.component.js +++ b/src/bundle/ui-dev/src/modules/multi-file-upload/components/drop-area/drop.area.component.js @@ -5,6 +5,7 @@ import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/sc import { fileSizeToString } from '../../../common/helpers/text.helper'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; import Icon from '../../../common/icon/icon'; +import { Button, ButtonType } from '@ids-components/components/Button'; export default class DropAreaComponent extends Component { constructor(props) { super(props); @@ -128,14 +129,14 @@ export default class DropAreaComponent extends Component {
      {dropActionMessage}
      {separatorMessage}
      - +
        {this.renderMaxFileMsgsToggler()} diff --git a/src/bundle/ui-dev/src/modules/multi-file-upload/components/upload-list/upload.item.component.js b/src/bundle/ui-dev/src/modules/multi-file-upload/components/upload-list/upload.item.component.js index d3528a8e6..518deb0ce 100644 --- a/src/bundle/ui-dev/src/modules/multi-file-upload/components/upload-list/upload.item.component.js +++ b/src/bundle/ui-dev/src/modules/multi-file-upload/components/upload-list/upload.item.component.js @@ -342,15 +342,15 @@ export default class UploadItemComponent extends Component { const label = Translator.trans(/* @Desc("Abort") */ 'abort.label', {}, 'ibexa_multi_file_upload'); return ( - + className="c-upload-list-item__action c-upload-list-item__action--abort" + extraAria={{ tabIndex: -1 }} + /> ); } @@ -384,16 +384,16 @@ export default class UploadItemComponent extends Component { const label = Translator.trans(/* @Desc("Edit") */ 'edit.label', {}, 'ibexa_multi_file_upload'); return ( - + className="c-upload-list-item__action c-upload-list-item__action--edit" + extraAria={{ tabIndex: -1 }} + /> ); } @@ -409,16 +409,16 @@ export default class UploadItemComponent extends Component { const label = Translator.trans(/* @Desc("Delete") */ 'delete.label', {}, 'ibexa_multi_file_upload'); return ( - + className="c-upload-list-item__action c-upload-list-item__action--delete" + extraAria={{ tabIndex: -1 }} + /> ); } diff --git a/src/bundle/ui-dev/src/modules/multi-file-upload/multi.file.upload.module.js b/src/bundle/ui-dev/src/modules/multi-file-upload/multi.file.upload.module.js index e521545ec..97932deb5 100644 --- a/src/bundle/ui-dev/src/modules/multi-file-upload/multi.file.upload.module.js +++ b/src/bundle/ui-dev/src/modules/multi-file-upload/multi.file.upload.module.js @@ -8,6 +8,7 @@ import UploadPopupComponent from './components/upload-popup/upload.popup.compone import { createFileStruct, publishFile, deleteFile, checkCanUpload } from './services/multi.file.upload.service'; import Icon from '../common/icon/icon'; import { createCssClassNames } from '../common/helpers/css.class.names'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; export const UDW_TRIGGER_ID = 'UDW'; export const SUBITEMS_TRIGGER_ID = 'SUBITEMS'; @@ -161,15 +162,12 @@ export default class MultiFileUploadModule extends Component { const { uploadDisabled } = this.state; const label = Translator.trans(/* @Desc("Upload") */ 'multi_file_upload_open_btn.label', {}, 'ibexa_multi_file_upload'); const isTriggeredBySubitems = this.props.triggerId === SUBITEMS_TRIGGER_ID; - const buttonClassName = createCssClassNames({ - 'ibexa-btn btn': true, - 'ibexa-btn--secondary ibexa-btn--small': !isTriggeredBySubitems, - 'ibexa-btn--ghost': isTriggeredBySubitems, - }); + const buttonType = isTriggeredBySubitems ? ButtonType.TertiaryAlt : ButtonType.Secondary; + const buttonSize = isTriggeredBySubitems ? ButtonSize.Medium : ButtonSize.Small; return ( - + ); } diff --git a/src/bundle/ui-dev/src/modules/sub-items/components/action-btn/action.btn.js b/src/bundle/ui-dev/src/modules/sub-items/components/action-btn/action.btn.js index 3c2867e9d..0dafbf636 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/components/action-btn/action.btn.js +++ b/src/bundle/ui-dev/src/modules/sub-items/components/action-btn/action.btn.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Icon from '../../../common/icon/icon'; -import { createCssClassNames } from '../../../common/helpers/css.class.names'; +import { Button, ButtonType } from '@ids-components/components/Button'; const ActionButton = ({ disabled, onClick, label = null, title = null, type }) => { const handleClick = () => { @@ -9,18 +8,18 @@ const ActionButton = ({ disabled, onClick, label = null, title = null, type }) = onClick(); } }; - const className = createCssClassNames({ - 'c-action-btn': true, - 'btn ibexa-btn': true, - 'ibexa-btn--ghost': true, - 'ibexa-btn--no-text': !label, - [`c-action-btn--${type}`]: !!type, - }); return ( - + ); }; diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/actions-menu/actions.menu.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/actions-menu/actions.menu.js index 3cf29232b..e78e4f820 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/actions-menu/actions.menu.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/actions-menu/actions.menu.js @@ -9,6 +9,7 @@ import { ConfirmItemsContext, } from '../../universal.discovery.module'; import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { Button, ButtonType } from '@ids-components/components/Button'; const ActionsMenu = () => { const Translator = getTranslator(); @@ -38,19 +39,19 @@ const ActionsMenu = () => { return ( <> - + - + ); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/content-create-widget/content.create.widget.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/content-create-widget/content.create.widget.js index 0d2615d30..cd4f4a13e 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/content-create-widget/content.create.widget.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/content-create-widget/content.create.widget.js @@ -3,6 +3,7 @@ import React, { useContext, useState, useEffect, useRef, useMemo } from 'react'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; import Icon from '../../../common/icon/icon'; import Dropdown from '../../../common/dropdown/dropdown'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { DropdownPortalRefContext, @@ -257,17 +258,17 @@ const ContentCreateWidget = () => {
      - - + +
      diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/content-edit-button/content.edit.button.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/content-edit-button/content.edit.button.js index cb51c73aa..67d3d969a 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/content-edit-button/content.edit.button.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/content-edit-button/content.edit.button.js @@ -1,9 +1,9 @@ import React, { useState, useEffect, useContext } from 'react'; import PropTypes from 'prop-types'; -import Icon from '../../../common/icon/icon'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; import TranslationSelector from '../translation-selector/translation.selector'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { getAdminUiConfig, getRouting } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; import { createDraft } from '../../services/universal.discovery.service'; import { @@ -25,10 +25,6 @@ const ContentEditButton = ({ version, location, isDisabled, label = null }) => { const [isTranslationSelectorVisible, setIsTranslationSelectorVisible] = useState(false); const contentTypeInfo = contentTypesMap[location.ContentInfo.Content.ContentType._href]; const isUserContentType = adminUiConfig.userContentTypes.includes(contentTypeInfo.identifier); - const btnClassName = createCssClassNames({ - 'c-content-edit-button__btn btn ibexa-btn ibexa-btn--ghost': true, - 'ibexa-btn--no-text': label !== null, - }); useEffect(() => { setIsTranslationSelectorVisible(false); @@ -112,16 +108,16 @@ const ContentEditButton = ({ version, location, isDisabled, label = null }) => { return (
      - + {renderTranslationSelector()}
      ); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.js index 7a9e2a8a1..abfc0bd91 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.js @@ -18,6 +18,7 @@ import UniversalDiscoveryModule, { DropdownPortalRefContext } from '../../univer import Dropdown from '../../../common/dropdown/dropdown'; import ContentTypeSelector from '../content-type-selector/content.type.selector'; import Icon from '../../../common/icon/icon'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; import { removeRootFromPathString, @@ -109,13 +110,14 @@ const Filters = ({ search }) => { ); return ( - + ); }; const languageLabel = Translator.trans(/* @Desc("Language") */ 'filters.language', {}, 'ibexa_universal_discovery_widget'); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js index 48392c5f6..754e68d49 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; const FiltersPanel = ({ children = null, isApplyButtonEnabled, makeSearch, clearFilters }) => { const Translator = getTranslator(); @@ -14,17 +15,18 @@ const FiltersPanel = ({ children = null, isApplyButtonEnabled, makeSearch, clear
      {filtersLabel}
      - - +
      {children} diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/search/search.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/search/search.js index 5644a80b2..ccfa8da2f 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/search/search.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/search/search.js @@ -17,6 +17,7 @@ import { ActiveTabContext, AllowedContentTypesContext, MarkedLocationIdContext, import { createCssClassNames } from '../../../common/helpers/css.class.names'; import { getAdminUiConfig, getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; import SearchNoResults from './search.no.results'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; const selectedContentTypesReducer = (state, action) => { switch (action.type) { @@ -99,13 +100,14 @@ const Search = ({ itemsPerPage = 50 }) => { <>
      {searchResultsTitle}
      - +
      {searchResultsSubtitle}
      From 59f5572448c07d7efa4083edb5d6e3ab2fdad22b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 19 Mar 2026 12:12:30 +0100 Subject: [PATCH 188/234] feat: migrate UDW React buttons to DS Button component (batch 2) Migrates Universal Discovery Widget buttons from legacy ibexa-btn to Design System Button component, covering selected items/locations panels, top menu, translation selector, and content meta preview. - Selected items/locations: ghost icon-only remove buttons, tertiary/secondary toggle/clear buttons - Top menu: ghost cancel button, dynamic primary/tertiary search button - Translation selector: secondary close button (submit stays legacy due to type=submit) - Content meta preview: ghost preview and bookmark toggle with dynamic icons All buttons preserve component-specific classes via className prop and data attributes via extraAria prop. --- .../selected.items.panel.item.js | 14 +++++------ .../selected-items/selected.items.panel.js | 24 ++++++++++--------- .../selected.locations.item.js | 19 +++++++-------- .../selected-locations/selected.locations.js | 23 +++++++++--------- .../components/top-menu/top.menu.js | 14 +++++------ .../top-menu/top.menu.search.input.js | 16 ++++++------- .../translation.selector.js | 5 ++-- .../content.meta.preview.module.js | 21 ++++++++-------- 8 files changed, 70 insertions(+), 66 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.item.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.item.js index b671a4e34..6a7b5dd23 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.item.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.item.js @@ -8,6 +8,7 @@ import { getAdminUiConfig, getTranslator } from '@ibexa-admin-ui/src/bundle/Reso import Icon from '../../../common/icon/icon'; import Thumbnail from '../../../common/thumbnail/thumbnail'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { SelectedItemsContext } from '../../universal.discovery.module'; @@ -58,15 +59,14 @@ const SelectedItemsPanelItem = ({ item, thumbnailData, name, description, extraC return ; })} - + className="c-selected-items-panel-item__remove-button" + extraAria={{ 'data-tooltip-container-selector': '.c-udw-tab' }} + />
      {extraContent}
      diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.js index 2e421f8f5..34d67d10c 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-items/selected.items.panel.js @@ -12,6 +12,7 @@ import { import Icon from '../../../common/icon/icon'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; import { AllowConfirmationContext, SelectedItemsContext } from '../../universal.discovery.module'; @@ -68,15 +69,15 @@ const SelectedItemsPanel = () => { }; const renderToggleBtn = () => { return ( - + className="c-selected-items-panel__toggle-button" + extraAria={{ 'data-tooltip-container-selector': '.c-udw-tab' }} + /> ); }; const renderActionBtns = () => { @@ -89,13 +90,14 @@ const SelectedItemsPanel = () => { return (
      - +
      ); }; diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.item.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.item.js index 918041fe0..6d82ba427 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.item.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.item.js @@ -8,6 +8,7 @@ import { import Icon from '../../../common/icon/icon'; import Thumbnail from '../../../common/thumbnail/thumbnail'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { SelectedLocationsContext, ContentTypesMapContext } from '../../universal.discovery.module'; import { getAdminUiConfig, getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; @@ -64,16 +65,14 @@ const SelectedLocationsItem = ({ location, permissions }) => { return ; })} - +
      ); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js index 1806ced44..d6a30acfb 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js @@ -64,15 +64,15 @@ const SelectedLocations = () => { }; const renderToggleButton = () => { return ( - + className="c-selected-locations__toggle-button" + extraAria={{ 'data-tooltip-container-selector': '.c-udw-tab' }} + /> ); }; const renderActionButtons = () => { @@ -85,13 +85,14 @@ const SelectedLocations = () => { return (
      - +
      ); }; diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.js index 6788c04b5..099787f06 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import TopMenuSearchInput from './top.menu.search.input'; import Icon from '../../../common/icon/icon'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { TitleContext, CancelContext } from '../../universal.discovery.module'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; @@ -52,15 +53,14 @@ const TopMenu = ({ - + className="c-top-menu__cancel-btn" + extraAria={{ 'data-tooltip-container-selector': '.c-top-menu__cancel-btn-wrapper' }} + /> ); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.search.input.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.search.input.js index cb0e94888..69c52a0ca 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.search.input.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/top-menu/top.menu.search.input.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; import Icon from '../../../common/icon/icon'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { SearchTextContext } from '../../universal.discovery.module'; @@ -16,11 +17,7 @@ const TopMenuSearchInput = ({ isSearchOpened, setIsSearchOpened }) => { 'c-top-menu-search-input': true, 'c-top-menu-search-input--search-opened': isSearchOpened, }); - const searchBtnClassName = createCssClassNames({ - 'c-top-menu-search-input__search-btn btn ibexa-btn ibexa-btn--no-text': true, - 'ibexa-btn--primary': isSearchOpened, - 'ibexa-btn--tertiary': !isSearchOpened, - }); + const updateInputValue = ({ target: { value } }) => setInputValue(value); const handleSearchBtnClick = () => { if (isSearchOpened) { @@ -66,9 +63,12 @@ const TopMenuSearchInput = ({ isSearchOpened, setIsSearchOpened }) => { onKeyPress={handleKeyPressed} value={inputValue} /> - + - + ); diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/content.meta.preview.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/content.meta.preview.module.js index 4db408575..a3e318834 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/content.meta.preview.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/content.meta.preview.module.js @@ -4,6 +4,7 @@ import Icon from '../common/icon/icon'; import Thumbnail from '../common/thumbnail/thumbnail'; import { createCssClassNames } from '../common/helpers/css.class.names'; import Spinner from '../common/spinner/spinner'; +import { Button, ButtonType } from '@ids-components/components/Button'; import { findMarkedLocation } from './helpers/locations.helper'; import { addBookmark, removeBookmark } from './services/universal.discovery.service'; import ContentEditButton from './components/content-edit-button/content.edit.button'; @@ -89,14 +90,14 @@ const ContentMetaPreview = () => { const previewButton = allowRedirects ? (
      - +
      ) : null; const hasAccess = permissions && permissions.edit.hasAccess; @@ -108,14 +109,14 @@ const ContentMetaPreview = () => {
      - +
      ); From c2c73e987763def4d65a3255969d7576b8b5a797 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 19 Mar 2026 14:11:33 +0100 Subject: [PATCH 189/234] feat: migrate missed admin-ui buttons to DS Button (batch 3) Migrates two previously missed button patterns from legacy ibexa-btn to Design System Button component. - table.view.item.component.js: Priority submit (checkmark) and cancel (discard) icon-only buttons (Primary+Small, Secondary+Small) - content-tree/header.js: Collapse toggle button with dual icons as children (Tertiary, icons rendered as children since there are 1-2 icons conditionally) Both preserve component-specific classes via className prop. --- .../content-tree/components/header/header.js | 9 +++---- .../table-view/table.view.item.component.js | 24 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/content-tree/components/header/header.js b/src/bundle/ui-dev/src/modules/content-tree/components/header/header.js index f7a88f75f..e447f0324 100644 --- a/src/bundle/ui-dev/src/modules/content-tree/components/header/header.js +++ b/src/bundle/ui-dev/src/modules/content-tree/components/header/header.js @@ -3,6 +3,7 @@ import PropTypes from 'prop-types'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; import Icon from '../../../common/icon/icon'; +import { Button, ButtonType } from '@ids-components/components/Button'; import PopupActions from '../popup-actions/popup.actions'; import { getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; @@ -17,14 +18,14 @@ const Header = ({ isCollapsed, toggleCollapseTree, actions, popupRef }) => { }); return ( - + ); }; diff --git a/src/bundle/ui-dev/src/modules/sub-items/components/table-view/table.view.item.component.js b/src/bundle/ui-dev/src/modules/sub-items/components/table-view/table.view.item.component.js index 4a8df5e3e..7b7e04ce4 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/components/table-view/table.view.item.component.js +++ b/src/bundle/ui-dev/src/modules/sub-items/components/table-view/table.view.item.component.js @@ -9,6 +9,7 @@ import { parseCheckbox } from '@ibexa-admin-ui-helpers/table.helper'; import Icon from '../../../common/icon/icon'; import UserName from '../../../common/user-name/user.name'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; export default class TableViewItemComponent extends PureComponent { constructor(props) { @@ -221,20 +222,19 @@ export default class TableViewItemComponent extends PureComponent { />
      - - + />
      ); From a27aa937e4f4955d0e41ebb7860b4fc9d9d3fabf Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 20 Mar 2026 14:49:08 +0100 Subject: [PATCH 190/234] fix: use DS classes for Twig form buttons Updates the shared admin Symfony form theme to default button and submit widgets to DS button classes, while preserving Symfony-generated attributes and behavior. Also updates the content create submit override to use DS classes so the extra actions footer stays visually consistent. --- .../themes/admin/content/widget/content_create.html.twig | 2 +- .../Resources/views/themes/admin/ui/form_fields.html.twig | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig b/src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig index 317f13dca..3eb85611e 100644 --- a/src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/widget/content_create.html.twig @@ -59,7 +59,7 @@ {{ form_widget(form.create, { attr: { disabled: true, - class: 'ibexa-btn ibexa-btn--primary ibexa-extra-actions__btn ibexa-extra-actions__btn--confirm' + class: 'ids-btn ids-btn--primary ids-btn--medium ibexa-extra-actions__btn ibexa-extra-actions__btn--confirm' } }) }} Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 191/234] fix: use DS classes in wildcard create modal button --- .../views/themes/admin/url_wildcard/modal_create.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig b/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig index e86b7114b..2a513afc5 100644 --- a/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig +++ b/src/bundle/Resources/views/themes/admin/url_wildcard/modal_create.html.twig @@ -44,7 +44,7 @@ {% endblock %} {% block footer_content %} - {{ form_widget(form.create, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': 'disabled'}}) }} + {{ form_widget(form.create, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium', 'disabled': 'disabled'}}) }} {{ 'url_wildcard.modal.create.cancel'|trans|desc('Cancel') }} From 03ff4c2fb6ab23822f76a9ff0d2f1c82866ec59f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 192/234] fix: use DS classes in empty trash confirm button --- .../themes/admin/trash/modal/empty_trash_confirmation.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig index 45ed1b481..1d39a6653 100644 --- a/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/trash/modal/empty_trash_confirmation.html.twig @@ -16,7 +16,7 @@ {{ form_start(form, { 'action': path('ibexa.trash.empty') }) }} - {{ form_widget(form.empty, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'}}) }} + {{ form_widget(form.empty, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium'}}) }} {{ 'trash.delete.button.cancel'|trans|desc('Cancel') }} From 0cb89cbcab7c9f6900ab9fb34db11e721cb7f2c9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 193/234] fix: use DS classes in language delete modal button --- .../themes/admin/language/modal/delete_confirmation.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig index 8ff05b73f..f870c270f 100644 --- a/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/modal/delete_confirmation.html.twig @@ -9,7 +9,7 @@

      {{ 'language.modal.message'|trans|desc('Delete the languages?') }}

      {% endblock %} {% block footer_content %} - {{ form_widget(deleteForm.delete, { 'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'} }) }} + {{ form_widget(deleteForm.delete, { 'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium'} }) }} {{ 'language.form.cancel'|trans|desc('Cancel') }} From 585e3d29f1773d51c59020b311f3ca3f646ecfc8 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 194/234] fix: use DS classes in user delete modal button --- .../views/themes/admin/content/modal/user_delete.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig index b5ad4e401..8b009e9c6 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig @@ -11,7 +11,7 @@ {% endblock %} {% block footer_content %} {{ form_start(form, {'action': path('ibexa.user.delete')}) }} - {{ form_widget(form.delete, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary'}}) }} + {{ form_widget(form.delete, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium'}}) }} {{ 'delete.form.cancel'|trans|desc('Cancel') }} From ea5ae72259328638703260e81c3ec335a893a721 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 195/234] fix: use DS classes in custom URL modal button --- .../themes/admin/content/tab/url/modal_add_custom_url.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig index 3106048e3..68870135d 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/url/modal_add_custom_url.html.twig @@ -60,7 +60,7 @@ {% endblock %} {% block footer_content %} - {{ form_widget(form.add, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': 'disabled'}}) }} + {{ form_widget(form.add, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium', 'disabled': 'disabled'}}) }} {{ 'tab.urls.add.cancel'|trans|desc('Cancel') }} From f210397ccac7f8591371b44bcae4f6ffb791ffdb Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 196/234] fix: use DS classes in section delete modal button --- .../themes/admin/section/modal/delete_confirmation.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig index 5051cd466..247da704b 100644 --- a/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/modal/delete_confirmation.html.twig @@ -15,7 +15,7 @@ "action": path('ibexa.section.delete', {'sectionId': section.id}), 'attr': {'class': 'd-inline-block'} }) }} - {{ form_widget(form.delete, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary', 'disabled': not deletable}}) }} + {{ form_widget(form.delete, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium', 'disabled': not deletable}}) }} {{ 'form.cancel'|trans|desc('Cancel') }} From eadfd2733263c3f175c49e4783f44dd1d86a80a9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 21 Mar 2026 19:06:28 +0100 Subject: [PATCH 197/234] fix: use DS classes in content add translation button --- .../views/themes/admin/content/modal/add_translation.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig index 8715052cc..dcf76846e 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig @@ -45,7 +45,7 @@ {{ custom_footer|raw }} {% else %} {% if form.add is defined %} - {{ form_widget(form.add, {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary ibexa-btn--create-translation'}}) }} + {{ form_widget(form.add, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium ibexa-btn--create-translation'}}) }} {% endif %} Date: Sun, 22 Mar 2026 09:55:53 +0100 Subject: [PATCH 198/234] fix: use DS classes in trash restore buttons --- src/bundle/Resources/views/themes/admin/trash/list.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/trash/list.html.twig b/src/bundle/Resources/views/themes/admin/trash/list.html.twig index 386a18c31..7d0747c9c 100644 --- a/src/bundle/Resources/views/themes/admin/trash/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/trash/list.html.twig @@ -288,7 +288,7 @@ {% set restore_under_new_parent_button_attr = form_trash_item_restore.location.select_content.vars.attr|merge({ 'attr': { 'data-udw-config': ibexa_udw_config('single_container', {}), - 'class': (form_trash_item_restore.location.select_content.vars.attr.class|default('') ~ ' btn ibexa-btn ibexa-btn--ghost ibexa-btn--small')|trim, + 'class': (form_trash_item_restore.location.select_content.vars.attr.class|default('') ~ ' ids-btn ids-btn--tertiary-alt ids-btn--small')|trim, 'disabled': true }, 'label': 'trash.button.restore_new_location'|trans({},'ibexa_trash')|desc("Restore in a new location") }) %} @@ -296,7 +296,7 @@ {{ form_widget(form_trash_item_restore.location.location) }} {% do form_trash_item_restore.location.setRendered %} {{ form_widget(form_trash_item_restore.restore, { - 'attr': {'class': 'btn ibexa-btn ibexa-btn--ghost ibexa-btn--small', 'disabled': true}, + 'attr': {'class': 'ids-btn ids-btn--tertiary-alt ids-btn--small', 'disabled': true}, 'label': 'trash.button.restore'|trans({},'ibexa_trash')|desc('Restore') }) }} {% else %} From be52875b64d94fb508e37f5480e295c59e29e575 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 22 Mar 2026 09:55:53 +0100 Subject: [PATCH 199/234] fix: use DS classes in location trash modal button --- .../views/themes/admin/content/modal/location_trash.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig index 1cb866705..0af2267ea 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig @@ -43,7 +43,7 @@ {% endblock %} {% block footer_content %} {{ form_widget(form.trash, - {'attr': {'class': 'btn ibexa-btn ibexa-btn--primary disabled ibexa-btn--confirm-send-to-trash', 'disabled': true}}) + {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium disabled ibexa-btn--confirm-send-to-trash', 'disabled': true}}) }} Date: Sun, 22 Mar 2026 09:55:53 +0100 Subject: [PATCH 200/234] fix: use DS classes in user invitation submit button --- .../views/themes/admin/user/invitation/modal.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig index 384a97e34..42553ecf1 100644 --- a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig @@ -164,7 +164,7 @@ {{ form_widget(form.send, { attr: { hidden: true, - class: 'btn ibexa-btn ibexa-btn--primary ibexa-user-invitation-modal__real-submit-btn', + class: 'ids-btn ids-btn--primary ids-btn--medium ibexa-user-invitation-modal__real-submit-btn', }, }) }} Date: Mon, 23 Mar 2026 09:36:49 +0100 Subject: [PATCH 201/234] fix: provide DS icon assets context in UDW --- .../universal.discovery.module.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/universal.discovery.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/universal.discovery.module.js index 062d87b19..afd92a084 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/universal.discovery.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/universal.discovery.module.js @@ -23,6 +23,8 @@ import { getTranslator, SYSTEM_ROOT_LOCATION_ID, } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { getIconPath } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/icon.helper'; +import { AssetsProvider } from '@ids-components/context/Assets'; import { useSelectedItemsReducer } from './hooks/useSelectedItemsReducer'; const { document } = window; @@ -540,8 +542,9 @@ const UniversalDiscoveryModule = ({ }, [currentView]); return ( -
      - + +
      + @@ -696,8 +699,9 @@ const UniversalDiscoveryModule = ({ - -
      +
      +
      + ); }; From ce5936cfbc09dd9356851dcbf18971ba6a0a88b7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:08:28 +0100 Subject: [PATCH 202/234] fix: provide DS icon assets context in sub-items --- .../src/modules/sub-items/sub.items.module.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js index 00e6155f6..ae716f7a3 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js +++ b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js @@ -3,6 +3,7 @@ import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; import { getAdminUiConfig } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { getIconPath } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/icon.helper'; import { showWarningNotification, showSuccessNotification } from '@ibexa-admin-ui-helpers/notification.helper'; import ViewColumnsTogglerComponent from './components/view-columns-toggler/view.columns.toggler'; import ViewSwitcherComponent from './components/view-switcher/view.switcher.component.js'; @@ -10,6 +11,7 @@ import SubItemsListComponent from './components/sub-items-list/sub.items.list.co import Popup from '../common/popup/popup.component'; import ActionButton from './components/action-btn/action.btn.js'; import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; +import { AssetsProvider } from '@ids-components/context/Assets'; import Pagination from '../common/pagination/pagination.js'; import NoItemsComponent from './components/no-items/no.items.component.js'; import Icon from '../common/icon/icon.js'; @@ -1535,8 +1537,9 @@ export default class SubItemsModule extends Component { ]; return ( -
      -
      + +
      +
      {listTitle} ({this.state.totalCount}) @@ -1566,12 +1569,13 @@ export default class SubItemsModule extends Component { {this.renderPaginationInfo()} {this.renderPagination()}
      - {this.renderUdw()} - {this.renderDeleteConfirmationPopup()} - {this.renderHideConfirmationPopup()} - {this.renderUnhideConfirmationPopup()} + {this.renderUdw()} + {this.renderDeleteConfirmationPopup()} + {this.renderHideConfirmationPopup()} + {this.renderUnhideConfirmationPopup()} +
      -
      +
      ); } } From 6243d816e2137942209376433533a1fd40a8fea0 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 203/234] fix: use DS classes in collapse all button --- .../ui/component/collapse_all_btn/collapse_all_btn.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig index 9e3126228..9c6d60aa0 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig @@ -1,7 +1,7 @@ {% trans_default_domain 'ibexa_collapse' %}
      -
      From dd504f64469b3e3a6b000f0a37d500940db4623a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 204/234] fix: use DS classes in adaptive filters toggler --- .../ui/component/adaptive_filters/adaptive_filters.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig index 13b1fe620..2eeff73d4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig @@ -45,7 +45,7 @@ }) %} {% set basic_attr_toggler_btn = basic_attr_toggler_btn|default({})|merge({ - class: ('btn ibexa-btn ibexa-btn--ghost ibexa-btn--small ibexa-adaptive-filters__toggler ' + class: ('ids-btn ids-btn--tertiary-alt ids-btn--small ibexa-adaptive-filters__toggler ' ~ basic_attr_toggler_btn.class|default(''))|trim, type: basic_attr_toggler_btn.type|default('button'), }) %} From 65720dd357ef2fafb030fcdbb0dc72977f056de0 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 205/234] fix: use DS classes in bookmarks bulk action button --- .../views/themes/admin/account/bookmarks/list.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig index 1fe973f13..ec25a9f45 100644 --- a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig @@ -93,7 +93,7 @@ { }, ], body_rows, - actions: form_widget(form_remove.remove, {'attr': {'class': 'btn ibexa-btn ibexa-btn--ghost ibexa-btn--small', 'disabled': true} }), + actions: form_widget(form_remove.remove, {'attr': {'class': 'ids-btn ids-btn--tertiary-alt ids-btn--small', 'disabled': true} }), empty_table_info_text: 'bookmark.list.empty'|trans|desc('You have no bookmarks yet. Your bookmarks will show up here.'), } %} {{ form_end(form_remove) }} From 498a7fdc8e06545779503e5ae5d90c1cadf9a2ee Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 206/234] fix: use DS classes in tag view select button --- .../ui/component/tag_view_select/tag_view_select.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/tag_view_select/tag_view_select.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/tag_view_select/tag_view_select.html.twig index 926e1a7db..b8d92bbba 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/tag_view_select/tag_view_select.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/tag_view_select/tag_view_select.html.twig @@ -2,7 +2,7 @@ {# TOOD: rename to btn_attr #} {% set attr = attr|default({})|merge({ - class: 'ibexa-tag-view-select__btn-select-path btn ibexa-btn ibexa-btn--small ibexa-btn--secondary ' ~ attr.class|default(''), + class: 'ibexa-tag-view-select__btn-select-path ids-btn ids-btn--secondary ids-btn--small ' ~ attr.class|default(''), }) %} {% set separator = separator|default(',') %} {% set custom_form = custom_form|default(false) %} From efc1ed1d89cd7fad6f0e87d3d424534c250cd0b3 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 207/234] fix: use DS classes in section assigned content button --- .../views/themes/admin/section/assigned_content.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig b/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig index 4f4e78fd3..7b7e6a4ad 100644 --- a/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig @@ -66,7 +66,7 @@ {{ form_widget(form_section_content_assign.locations.location) }} {{ form_widget(form_section_content_assign.locations.select_content, {'attr': { - 'class': 'btn ibexa-btn ibexa-btn--tertiary ibexa-btn--small ibexa-btn--open-udw', + 'class': 'ids-btn ids-btn--tertiary ids-btn--small ibexa-btn--open-udw', 'data-udw-config': ibexa_udw_config('multiple', {'type': 'section_assign'}) }} ) }} From a49f24fe61e027ef59555f70870693247003165f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:31:05 +0100 Subject: [PATCH 208/234] fix: use DS classes in location swap button --- .../themes/admin/content/tab/locations/panel_swap.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/panel_swap.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/panel_swap.html.twig index 0aa5fad6d..a88064818 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/panel_swap.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/panel_swap.html.twig @@ -14,7 +14,7 @@
      {{ form_widget(form.swap, {'attr': { 'disabled': not can_swap, - 'class': 'btn ibexa-btn ibexa-btn--secondary ibexa-btn--udw-swap ml-5', + 'class': 'ids-btn ids-btn--secondary ids-btn--medium ibexa-btn--udw-swap ml-5', 'data-udw-config': ibexa_udw_config('single_container', {}) }}) }} {{ form_widget(form.current_location) }} From 5f7a423dea6dccf6e828fc17162a7893f11a8b6e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:52:12 +0100 Subject: [PATCH 209/234] fix: use DS classes in context menu buttons --- .../views/themes/admin/ui/menu/context_menu.html.twig | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig index 6b63f08ea..5691b9aee 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig @@ -159,13 +159,13 @@ {% else %} - {%- set default_classes = 'btn ibexa-btn' -%} + {%- set default_classes = 'ids-btn ids-btn--medium' -%} {% if not item.extras.noDefaultBtnStyling|default(false) %} {% if item.extras.primary|default(false) %} - {%- set default_classes = default_classes ~ ' ' ~ options.primary_item_class|default('ibexa-btn--primary') -%} + {%- set default_classes = default_classes ~ ' ' ~ options.primary_item_class|default('ids-btn--primary') -%} {% else %} - {%- set default_classes = default_classes ~ ' ' ~ options.secondary_item_class|default('ibexa-btn--secondary') -%} + {%- set default_classes = default_classes ~ ' ' ~ options.secondary_item_class|default('ids-btn--secondary') -%} {% endif %} {% endif %} @@ -189,7 +189,7 @@ {% block label %} {% if is_btn_label|default(false) %} - {{ parent() }} + {{ parent() }} {% else %} {{ parent() }} {% endif %} From 3dfb97ac141099f0c09fcef2f7d0799f15e9763f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:52:12 +0100 Subject: [PATCH 210/234] fix: use DS classes in sidebar base buttons --- .../views/themes/admin/ui/menu/sidebar_base.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_base.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_base.html.twig index f38b20d71..987efc738 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_base.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_base.html.twig @@ -8,7 +8,7 @@ {% block item -%} {%- if item.displayed -%} - {%- set attributes = item.attributes|merge({'class': (item.attributes.class|default('') ~ ' ' ~ default_classes|default('btn ibexa-btn ibexa-btn--secondary btn-block'))|trim}) -%} + {%- set attributes = item.attributes|merge({'class': (item.attributes.class|default('') ~ ' ' ~ default_classes|default('ids-btn ids-btn--secondary ids-btn--medium btn-block'))|trim}) -%} {%- set attributes = attributes|merge({'id': item.name ~ '-tab'}) -%} {%- if item.uri is not empty %} @@ -48,5 +48,5 @@ {% endif %} - {{ parent() }} + {{ parent() }} {% endblock %} From 97daf252b6b00e19c29c30a3246eaae2c91c4a4b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:52:12 +0100 Subject: [PATCH 211/234] fix: use DS classes in right sidebar buttons --- .../views/themes/admin/ui/menu/sidebar_right.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_right.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_right.html.twig index 5eb7dd1cb..171427eb4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_right.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/sidebar_right.html.twig @@ -1,6 +1,6 @@ {% extends '@ibexadesign/ui/menu/sidebar_base.html.twig' %} {% block item -%} - {%- set default_classes = 'btn ibexa-btn ibexa-btn--primary' -%} + {%- set default_classes = 'ids-btn ids-btn--primary ids-btn--medium' -%} {{ parent() }} {%- endblock %} From 0d61f8522e3d3d44cbeaa8af146b3eb4c45f8858 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 23 Mar 2026 10:52:12 +0100 Subject: [PATCH 212/234] fix: use DS classes in action list buttons --- .../Resources/views/themes/admin/ui/action_list.html.twig | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig index 357494300..fc64bbcac 100644 --- a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig @@ -4,7 +4,7 @@ {% for action in item.children %} {% set action_attrs = action.attributes|default({})|merge({ - class: 'btn ibexa-btn ibexa-btn--ghost ibexa-btn--no-text ' ~ action.attributes.class|default(''), + class: 'ids-btn ids-btn--tertiary-alt ids-btn--medium ibexa-btn--no-text ' ~ action.attributes.class|default(''), }) %} {% if action.uri %} {% set action_attrs = action_attrs|merge({ href: action.uri }) %} @@ -23,7 +23,11 @@
      {% set btn_data_dropdown_trigger = 'ibexa-action-list-more__trigger-' ~ random() %} -
      diff --git a/src/bundle/Resources/views/themes/admin/ui/component/inputs/input_date_time_picker.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/inputs/input_date_time_picker.html.twig index 098b6ee5c..5eccab619 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/inputs/input_date_time_picker.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/inputs/input_date_time_picker.html.twig @@ -33,7 +33,7 @@ html_type="button" type="tertiary-alt" icon="date" - icon_size="small-medium" + icon_size="small" class="ibexa-input-text-wrapper__action-btn ibexa-input-text-wrapper__action-btn--calendar" :disabled="is_disabled" /> diff --git a/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig index 207e71390..9dfcd3b2b 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/split_btn/split_btn.html.twig @@ -76,7 +76,7 @@
      diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig index 5691b9aee..730b92f6d 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig @@ -140,6 +140,7 @@ ? options.primary_item_size|default('medium') : options.secondary_item_size|default('medium') -%} {%- set ds_classes = 'ids-btn ids-btn--' ~ btn_type ~ ' ids-btn--' ~ btn_size -%} + {%- set ds_icon_size = btn_size == 'small' ? 'tiny-small' : 'small' -%} {%- set attributes = attributes|merge({ class: (attributes.class|default('') ~ ' ' ~ ds_classes)|trim }) -%} @@ -147,7 +148,7 @@ <{{element}}{{macros.attributes(attributes)}}> {% if item.extras.icon is defined %}
      - +
      From c40d86395ff879b12108c5259e113c3bbb25a409 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 22 Apr 2026 11:01:19 +0200 Subject: [PATCH 218/234] fix context menu adapive items classes --- .../context_menu/context_menu.html.twig | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/context_menu/context_menu.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/context_menu/context_menu.html.twig index 0b9479ebb..da564ab30 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/context_menu/context_menu.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/context_menu/context_menu.html.twig @@ -13,21 +13,13 @@ ibexa-adaptive-items__item ibexa-adaptive-items__item--selector "> - {% if selector_btn_classes is not empty %} - - {% else %} - - {% endif %} + {{ include('@ibexadesign/ui/component/multilevel_popup_menu/multilevel_popup_menu.html.twig', { is_custom_init: true, From 9bf16d9175dc34fbd193794c2bb4d37a0d5754c9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 22 Apr 2026 11:16:56 +0200 Subject: [PATCH 219/234] fix UDW --- .../components/selected-locations/selected.locations.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js index d6a30acfb..96e59e51c 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/selected-locations/selected.locations.js @@ -6,6 +6,7 @@ import { } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/tooltips.helper'; import { getBootstrap, getTranslator } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scripts/helpers/context.helper'; +import { Button, ButtonType, ButtonSize } from '@ids-components/components/Button'; import Icon from '../../../common/icon/icon'; import SelectedLocationsItem from './selected.locations.item'; import { createCssClassNames } from '../../../common/helpers/css.class.names'; From 42f998f00ac0031ca79003e419b1602b5b4a2c97 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 22 Apr 2026 14:55:39 +0200 Subject: [PATCH 220/234] fix: finish segmentation DS button migration --- .../public/js/scripts/button.trigger.js | 2 +- .../Resources/public/scss/_side-panel.scss | 5 +- .../content_type/field_definitions.html.twig | 19 +++-- .../admin/ui/component/input_text.html.twig | 69 ++++++++++--------- .../component/side_panel/side_panel.html.twig | 11 +-- 5 files changed, 52 insertions(+), 54 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/button.trigger.js b/src/bundle/Resources/public/js/scripts/button.trigger.js index 37dc1132e..89ef90956 100644 --- a/src/bundle/Resources/public/js/scripts/button.trigger.js +++ b/src/bundle/Resources/public/js/scripts/button.trigger.js @@ -2,7 +2,7 @@ doc.addEventListener( 'DOMContentLoaded', () => { - const buttons = doc.querySelectorAll('.ids-button--trigger, .ibexa-btn--trigger'); + const buttons = doc.querySelectorAll('.ids-btn--trigger, .ids-button--trigger, .ibexa-btn--trigger'); const trigger = (event) => { event.preventDefault(); diff --git a/src/bundle/Resources/public/scss/_side-panel.scss b/src/bundle/Resources/public/scss/_side-panel.scss index 06d6358b5..5be29059b 100644 --- a/src/bundle/Resources/public/scss/_side-panel.scss +++ b/src/bundle/Resources/public/scss/_side-panel.scss @@ -29,16 +29,13 @@ &__footer { display: flex; align-items: center; + gap: calculateRem(16px); box-shadow: 0 0 calculateRem(16px) 0 rgba($ibexa-color-dark, 0.16); z-index: 1000; width: calculateRem(516px); position: fixed; bottom: 0; - .ibexa-btn { - margin-right: calculateRem(16px); - } - .ibexa-notifications-modal__footer { width: calculateRem(516px); } diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig index 61a261eb8..cad2e8254 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig @@ -73,16 +73,15 @@ {% endfor %}
      - + {{ component('ibexa:button', { + html_type: 'button', + type: 'secondary', + icon: 'add', + icon_size: 'small', + label: 'content_type.view.edit.add'|trans|desc('Add'), + class: 'ibexa-content-type-edit__add-field-definitions-group-btn', + 'data-is-disabled': is_field_definitions_draggable ? 'false' : 'true', + }) }} {{ include('@ibexadesign/ui/component/popup_menu/popup_menu.html.twig', { 'items': grouped_field_defintions|keys|map(group => { diff --git a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig index 3001c3371..4ecb2ed6e 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/input_text.html.twig @@ -7,14 +7,25 @@ {% set is_disabled = is_disabled|default(false) %} {% set extra_btn = extra_btn|default({})|merge({ label: extra_btn.label|default(''), - attr: extra_btn.attr|default({})|merge({ - type: extra_btn.type|default('button'), - class: (extra_btn.attr.class|default('') - ~ ' btn ibexa-btn ibexa-btn--info ibexa-input-text-wrapper__action-btn--extra-btn' - )|trim - }) + attr: extra_btn.attr|default({}) }) %} {% set should_clear_button_send_form = should_clear_button_send_form|default(false) %} +{% set clear_btn = { + html_type: 'button', + type: 'tertiary', + size: 'small', + icon: 'discard', + icon_size: 'tiny-small', + class: 'ibexa-input-text-wrapper__action-btn ibexa-input-text-wrapper__action-btn--clear', + tabindex: '-1', + disabled: is_disabled, +}|merge(should_clear_button_send_form ? {'data-send-form-after-clearing': true} : {}) %} +{% set extra_btn_component = extra_btn.attr|merge({ + html_type: extra_btn.attr.type|default(extra_btn.type|default('button')), + type: 'secondary', + class: (extra_btn.attr.class|default('') ~ ' ibexa-input-text-wrapper__action-btn--extra-btn')|trim, + label: extra_btn.label, +}) %} {% set wrapper_attr = wrapper_attr|default({})|merge({ class: (wrapper_attr.class|default('') ~ ' ibexa-input-text-wrapper' @@ -32,23 +43,15 @@ {% block content %}{% endblock %}
      {% block actions %} - + {{ component('ibexa:button', clear_btn) }} {% if is_password_input %} - + {% elseif has_search %} - + :disabled="is_disabled" + /> {% elseif extra_btn.label is not empty %} - + {{ component('ibexa:button', extra_btn_component) }} {% endif %} {% endblock %}
      diff --git a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig index 13540df30..11a491036 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/side_panel/side_panel.html.twig @@ -26,7 +26,7 @@ type="tertiary-alt" icon="caret-back" icon_size="small" - class="ids-button--close-config-panel" + class="ids-btn--close-config-panel" />

      {{ title }}

      {% endblock %} @@ -34,12 +34,13 @@
      {% block footer %} - + {% endblock %}
      From ef41de5a3675da71d8aff756517449e115d8a476 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 22 Apr 2026 21:42:17 +0200 Subject: [PATCH 221/234] fix: finish admin UI DS button migration --- .../public/js/scripts/admin.contenttype.copy.js | 2 +- .../admin.contenttype.relation.default.location.js | 6 +++--- .../js/scripts/admin.location.add.translation.js | 2 +- .../public/js/scripts/admin.location.view.js | 4 ++-- .../js/scripts/admin.notifications.filters.js | 4 ++-- .../public/js/scripts/admin.search.filters.js | 4 ++-- .../public/js/scripts/admin.section.list.js | 2 +- .../public/js/scripts/admin.section.view.js | 2 +- .../Resources/public/js/scripts/admin.trash.js | 2 +- .../public/js/scripts/admin.trash.list.js | 4 ++-- .../public/js/scripts/button.content.edit.js | 6 +++--- .../public/js/scripts/button.prevent.default.js | 2 +- .../public/js/scripts/button.translation.edit.js | 10 +++++----- .../Resources/public/js/scripts/button.trigger.js | 2 +- .../Resources/public/js/scripts/cotf/create.js | 2 +- .../public/js/scripts/fieldType/ibexa_author.js | 12 ++++++------ .../js/scripts/fieldType/ibexa_gmap_location.js | 2 +- .../public/js/scripts/sidebar/btn/content.edit.js | 2 +- .../public/js/scripts/sidebar/btn/content.hide.js | 2 +- .../js/scripts/sidebar/btn/content.reveal.js | 2 +- .../js/scripts/sidebar/btn/contenttype.edit.js | 2 +- .../public/js/scripts/sidebar/btn/location.edit.js | 4 ++-- .../public/js/scripts/sidebar/btn/user.edit.js | 2 +- .../public/js/scripts/sidebar/extra.actions.js | 4 ++-- .../public/js/scripts/sidebar/side.panel.js | 2 +- src/bundle/Resources/public/js/scripts/udw/copy.js | 2 +- .../public/js/scripts/udw/copy_subtree.js | 2 +- src/bundle/Resources/public/js/scripts/udw/move.js | 2 +- src/bundle/Resources/public/scss/_buttons.scss | 2 +- src/bundle/Resources/public/scss/_icons.scss | 2 +- .../Resources/public/scss/_trash-search-form.scss | 4 ++-- .../scss/fieldType/edit/_ibexa_gmap_location.scss | 4 ++-- .../themes/admin/account/bookmarks/list.html.twig | 2 +- .../account/error/credentials_expired.html.twig | 2 +- .../admin/account/notifications/filters.html.twig | 4 ++-- .../admin/content/modal/add_translation.html.twig | 2 +- .../admin/content/modal/draft_conflict.html.twig | 2 +- .../content/modal/hide_confirmation.html.twig | 4 ++-- .../admin/content/modal/location_trash.html.twig | 2 +- .../admin/content/tab/translations/tab.html.twig | 2 +- .../views/themes/admin/content/tab/urls.html.twig | 2 +- .../admin/content/widget/content_edit.html.twig | 2 +- .../views/themes/admin/content_type/list.html.twig | 2 +- .../content_type/relation_form_fields.html.twig | 2 +- .../relation_list_form_fields.html.twig | 2 +- .../views/themes/admin/link_manager/view.html.twig | 2 +- .../admin/section/assigned_content.html.twig | 2 +- .../views/themes/admin/section/list.html.twig | 2 +- .../views/themes/admin/trash/list.html.twig | 2 +- .../extra_actions/extra_actions.html.twig | 2 +- .../themes/admin/ui/dashboard/dashboard.html.twig | 2 +- .../admin/ui/edit_translation_button.html.twig | 8 ++++---- .../ui/field_type/edit/ibexa_author.html.twig | 6 +++--- .../field_type/edit/ibexa_gmap_location.html.twig | 4 ++-- .../themes/admin/ui/menu/context_menu.html.twig | 2 +- .../ui/modal/bulk_delete_confirmation.html.twig | 2 +- .../admin/ui/modal/delete_confirmation.html.twig | 2 +- .../ui/on_the_fly/create_on_the_fly.html.twig | 4 ++-- .../admin/ui/on_the_fly/edit_on_the_fly.html.twig | 4 ++-- .../views/themes/admin/ui/search/filters.html.twig | 4 ++-- .../sub-items-list/language.selector.compoment.js | 4 ++-- .../src/modules/sub-items/sub.items.module.js | 12 ++++++------ .../components/filters/filters.panel.js | 2 +- .../translation-selector/translation.selector.js | 10 +++++----- .../content.create.tab.module.js | 4 ++-- .../universal-discovery/content.edit.tab.module.js | 4 ++-- .../Menu/AbstractFormContextMenuBuilder.php | 2 +- src/lib/Behat/Component/CreateNewPopup.php | 4 ++-- src/lib/Behat/Component/Dialog.php | 4 ++-- src/lib/Behat/Component/DraftConflictDialog.php | 2 +- src/lib/Behat/Component/Fields/MapLocation.php | 2 +- src/lib/Behat/Component/Fields/Matrix.php | 2 +- src/lib/Behat/Page/ContentViewPage.php | 4 ++-- src/lib/Behat/Page/DashboardPage.php | 2 +- .../UniversalDiscoveryWidgetType.php | 2 +- .../Menu/Action/VersionListActionMenuBuilder.php | 2 +- .../AbstractContentTypeRightSidebarBuilder.php | 6 +++--- .../ContentTypeGroupCreateRightSidebarBuilder.php | 2 +- .../ContentTypeGroupEditRightSidebarBuilder.php | 2 +- .../Language/LanguageCreateRightSidebarBuilder.php | 2 +- .../Language/LanguageEditRightSidebarBuilder.php | 2 +- .../ObjectStateCreateRightSidebarBuilder.php | 2 +- .../ObjectStateEditRightSidebarBuilder.php | 2 +- .../ObjectStateGroupCreateRightSidebarBuilder.php | 2 +- .../ObjectStateGroupEditRightSidebarBuilder.php | 2 +- .../Admin/Role/PolicyCreateRightSidebarBuilder.php | 2 +- .../Admin/Role/PolicyEditRightSidebarBuilder.php | 2 +- .../RoleAssignmentCreateRightSidebarBuilder.php | 2 +- .../Admin/Role/RoleCopyRightSidebarBuilder.php | 2 +- .../Admin/Role/RoleCreateRightSidebarBuilder.php | 2 +- .../Admin/Role/RoleEditRightSidebarBuilder.php | 2 +- src/lib/Menu/ContentCreateRightSidebarBuilder.php | 2 +- src/lib/Menu/ContentEditRightSidebarBuilder.php | 2 +- src/lib/Menu/ContentRightSidebarBuilder.php | 14 +++++++------- src/lib/Menu/ContentTypeRightSidebarBuilder.php | 2 +- src/lib/Menu/SectionCreateRightSidebarBuilder.php | 2 +- src/lib/Menu/SectionEditRightSidebarBuilder.php | 2 +- src/lib/Menu/URLEditRightSidebarBuilder.php | 2 +- .../Menu/URLWildcardEditRightSidebarBuilder.php | 2 +- src/lib/Menu/UserCreateRightSidebarBuilder.php | 4 ++-- src/lib/Menu/UserEditRightSidebarBuilder.php | 4 ++-- .../Menu/UserPasswordChangeRightSidebarBuilder.php | 2 +- .../UserSettingUpdateRightSidebarBuilder.php | 2 +- .../Action/VersionListActionMenuBuilderTest.php | 2 +- 104 files changed, 161 insertions(+), 161 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.contenttype.copy.js b/src/bundle/Resources/public/js/scripts/admin.contenttype.copy.js index 5f4dae22d..42494971e 100644 --- a/src/bundle/Resources/public/js/scripts/admin.contenttype.copy.js +++ b/src/bundle/Resources/public/js/scripts/admin.contenttype.copy.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, Routing) { - const copyButtons = doc.querySelectorAll('.ids-button--copy-content-type'); + const copyButtons = doc.querySelectorAll('.ids-btn--copy-content-type'); const copyContentType = ({ currentTarget }) => { const contentTypeCopyForm = doc.querySelector('form[name="content_type_copy"]'); const contentTypeIdentifierInput = contentTypeCopyForm.querySelector('#content_type_copy_content_type'); diff --git a/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js b/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js index 515189738..9c5fc3337 100644 --- a/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js +++ b/src/bundle/Resources/public/js/scripts/admin.contenttype.relation.default.location.js @@ -53,7 +53,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ }; const resetStartingLocation = ({ currentTarget }) => { const container = currentTarget.closest('.ibexa-default-location'); - const udwBtn = container.querySelector('.ids-button--udw-relation-default-location'); + const udwBtn = container.querySelector('.ids-btn--udw-relation-default-location'); const pathSelector = container.querySelector('.ibexa-default-location__path-selector'); const { relationRootInputSelector } = udwBtn.dataset; @@ -62,7 +62,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ pathSelector.classList.remove('ibexa-default-location__path-selector--filled'); }; const attachEvents = (container) => { - const udwBtn = container.querySelector('.ids-button--udw-relation-default-location'); + const udwBtn = container.querySelector('.ids-btn--udw-relation-default-location'); const deleteBtn = container.querySelector(SELECTOR_RESET_STARTING_LOCATION_BTN); const choices = container.querySelectorAll('input[type="radio"]'); @@ -71,7 +71,7 @@ import * as middleEllipsisHelper from '@ibexa-admin-ui/src/bundle/Resources/publ choices.forEach((choice) => choice.addEventListener('change', toggleDisabledState.bind(null, container), false)); }; const toggleDisabledState = (container) => { - const locationBtn = container.querySelector('.ids-button--udw-relation-default-location'); + const locationBtn = container.querySelector('.ids-btn--udw-relation-default-location'); const deleteBtn = container.querySelector(SELECTOR_RESET_STARTING_LOCATION_BTN); const isDisabled = !container.querySelector('input[value="1"]').checked; diff --git a/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js b/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js index d611753a3..ef9bff4e1 100644 --- a/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js +++ b/src/bundle/Resources/public/js/scripts/admin.location.add.translation.js @@ -9,7 +9,7 @@ if (!modal) { return; } - const buttonCreate = modal.querySelector('.ids-button--create-translation'); + const buttonCreate = modal.querySelector('.ids-btn--create-translation'); if (!buttonCreate) { return; } diff --git a/src/bundle/Resources/public/js/scripts/admin.location.view.js b/src/bundle/Resources/public/js/scripts/admin.location.view.js index 3f8bb8a83..4a7dea508 100644 --- a/src/bundle/Resources/public/js/scripts/admin.location.view.js +++ b/src/bundle/Resources/public/js/scripts/admin.location.view.js @@ -29,7 +29,7 @@ import { checkIsContainer } from './helpers/content.type.helper'; bootstrap.Modal.getOrCreateInstance(doc.querySelector('#version-draft-conflict-modal')).hide(); }; const attachModalListeners = (wrapper) => { - const addDraftButton = wrapper.querySelector('.ids-button--add-draft'); + const addDraftButton = wrapper.querySelector('.ids-btn--add-draft'); const conflictModal = doc.querySelector('#version-draft-conflict-modal'); if (addDraftButton) { @@ -37,7 +37,7 @@ import { checkIsContainer } from './helpers/content.type.helper'; } wrapper - .querySelectorAll('.ids-button--prevented') + .querySelectorAll('.ids-btn--prevented') .forEach((btn) => btn.addEventListener('click', (event) => event.preventDefault(), false)); if (conflictModal) { diff --git a/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js b/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js index 82c1da028..4e47c55b5 100644 --- a/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js +++ b/src/bundle/Resources/public/js/scripts/admin.notifications.filters.js @@ -1,8 +1,8 @@ (function (global, doc) { const searchForm = doc.querySelector('.ibexa-list-search-form'); const filtersContainerNode = doc.querySelector('.ibexa-list-filters'); - const applyFiltersBtn = filtersContainerNode.querySelector('.ids-button--apply'); - const clearFiltersBtn = filtersContainerNode.querySelector('.ids-button--clear'); + const applyFiltersBtn = filtersContainerNode.querySelector('.ids-btn--apply'); + const clearFiltersBtn = filtersContainerNode.querySelector('.ids-btn--clear'); const statusFilterNode = filtersContainerNode.querySelector('.ibexa-list-filters__item--statuses'); const typeFilterNode = filtersContainerNode.querySelector('.ibexa-list-filters__item--type'); const datetimeFilterNodes = filtersContainerNode.querySelectorAll('.ibexa-list-filters__item--date-time .ibexa-picker'); diff --git a/src/bundle/Resources/public/js/scripts/admin.search.filters.js b/src/bundle/Resources/public/js/scripts/admin.search.filters.js index 1ea7526ec..fbf465183 100644 --- a/src/bundle/Resources/public/js/scripts/admin.search.filters.js +++ b/src/bundle/Resources/public/js/scripts/admin.search.filters.js @@ -7,8 +7,8 @@ const token = doc.querySelector('meta[name="CSRF-Token"]').content; const siteaccess = doc.querySelector('meta[name="SiteAccess"]').content; const filters = doc.querySelector('.ibexa-filters'); - const clearBtn = filters.querySelector('.ids-button--clear'); - const applyBtn = filters.querySelector('.ids-button--apply'); + const clearBtn = filters.querySelector('.ids-btn--clear'); + const applyBtn = filters.querySelector('.ids-btn--apply'); const contentTypeSelect = doc.querySelector('.ibexa-filters__item--content-type .ibexa-filters__select'); const sectionSelect = doc.querySelector('.ibexa-filters__item--section .ibexa-filters__select'); const lastModifiedSelectNode = doc.querySelector('.ibexa-filters__item--modified .ibexa-filters__select'); diff --git a/src/bundle/Resources/public/js/scripts/admin.section.list.js b/src/bundle/Resources/public/js/scripts/admin.section.list.js index d3bbc6bb9..997177771 100644 --- a/src/bundle/Resources/public/js/scripts/admin.section.list.js +++ b/src/bundle/Resources/public/js/scripts/admin.section.list.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient) { - const btns = doc.querySelectorAll('.ids-button--open-udw'); + const btns = doc.querySelectorAll('.ids-btn--open-udw'); const udwContainer = doc.getElementById('react-udw'); let udwRoot = null; const closeUDW = () => udwRoot.unmount(); diff --git a/src/bundle/Resources/public/js/scripts/admin.section.view.js b/src/bundle/Resources/public/js/scripts/admin.section.view.js index c244ad69a..2dd3d0f25 100644 --- a/src/bundle/Resources/public/js/scripts/admin.section.view.js +++ b/src/bundle/Resources/public/js/scripts/admin.section.view.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient) { - const btns = doc.querySelectorAll('.ids-button--open-udw, .ibexa-btn--open-udw'); + const btns = doc.querySelectorAll('.ids-btn--open-udw, .ids-btn--open-udw'); const udwContainer = doc.getElementById('react-udw'); let udwRoot = null; const closeUDW = () => udwRoot.unmount(); diff --git a/src/bundle/Resources/public/js/scripts/admin.trash.js b/src/bundle/Resources/public/js/scripts/admin.trash.js index 9c6ac384f..bcd7dfc9f 100644 --- a/src/bundle/Resources/public/js/scripts/admin.trash.js +++ b/src/bundle/Resources/public/js/scripts/admin.trash.js @@ -16,7 +16,7 @@ const { numberOfSubitems } = event.detail; const sendToTrashModal = document.querySelector('.ibexa-modal--trash-location'); const modalBody = sendToTrashModal.querySelector('.modal-body'); - const modalSendToTrashButton = sendToTrashModal.querySelector('.modal-footer .ibexa-btn--confirm-send-to-trash'); + const modalSendToTrashButton = sendToTrashModal.querySelector('.modal-footer .ids-btn--confirm-send-to-trash'); const { contentName } = sendToTrashModal.dataset; if (numberOfSubitems) { diff --git a/src/bundle/Resources/public/js/scripts/admin.trash.list.js b/src/bundle/Resources/public/js/scripts/admin.trash.list.js index 2bdeb4fd1..ae57b4b0a 100644 --- a/src/bundle/Resources/public/js/scripts/admin.trash.list.js +++ b/src/bundle/Resources/public/js/scripts/admin.trash.list.js @@ -17,10 +17,10 @@ const sortDirection = doc.querySelector('#trash_search_sort_direction'); const creatorInput = doc.querySelector('.ibexa-trash-search-form__item--creator .ibexa-trash-search-form__input'); const usersList = doc.querySelector('.ibexa-trash-search-form__item--creator .ibexa-trash-search-form__user-list'); - const resetCreatorBtn = doc.querySelector('.ids-button--reset-creator'); + const resetCreatorBtn = doc.querySelector('.ids-btn--reset-creator'); const searchCreatorInput = doc.querySelector('#trash_search_creator'); const sortableColumns = doc.querySelectorAll('.ibexa-table__sort-column'); - const btns = doc.querySelectorAll('.ids-button--open-udw, .ibexa-btn--open-udw'); + const btns = doc.querySelectorAll('.ids-btn--open-udw, .ids-btn--open-udw'); const udwContainer = doc.getElementById('react-udw'); const autoSendNodes = doc.querySelectorAll('.ibexa-trash-search-form__item--auto-send'); const errorMessage = Translator.trans(/* @Desc("Cannot fetch user list") */ 'trash.user_list.error', {}, 'ibexa_trash_ui'); diff --git a/src/bundle/Resources/public/js/scripts/button.content.edit.js b/src/bundle/Resources/public/js/scripts/button.content.edit.js index f05e8b41a..d286f6417 100644 --- a/src/bundle/Resources/public/js/scripts/button.content.edit.js +++ b/src/bundle/Resources/public/js/scripts/button.content.edit.js @@ -35,14 +35,14 @@ wrapper.innerHTML = modalHtml; const conflictModal = doc.querySelector('#version-draft-conflict-modal'); - const addDraftButton = wrapper.querySelector('.ids-button--add-draft'); + const addDraftButton = wrapper.querySelector('.ids-btn--add-draft'); if (addDraftButton) { addDraftButton.addEventListener('click', addDraft, false); } wrapper - .querySelectorAll('.ids-button--prevented') + .querySelectorAll('.ids-btn--prevented') .forEach((btn) => btn.addEventListener('click', (wrapperBtnEvent) => wrapperBtnEvent.preventDefault(), false)); bootstrap.Modal.getOrCreateInstance(conflictModal).show(); @@ -80,5 +80,5 @@ .catch(showErrorNotification); }; - doc.querySelectorAll('.ids-button--content-edit').forEach((button) => button.addEventListener('click', editVersion, false)); + doc.querySelectorAll('.ids-btn--content-edit').forEach((button) => button.addEventListener('click', editVersion, false)); })(window, window.document, window.bootstrap, window.ibexa, window.Translator, window.Routing); diff --git a/src/bundle/Resources/public/js/scripts/button.prevent.default.js b/src/bundle/Resources/public/js/scripts/button.prevent.default.js index c30c664e3..7bf575388 100644 --- a/src/bundle/Resources/public/js/scripts/button.prevent.default.js +++ b/src/bundle/Resources/public/js/scripts/button.prevent.default.js @@ -1,3 +1,3 @@ (function (global, doc) { - doc.querySelectorAll('.ids-button--prevented').forEach((btn) => btn.addEventListener('click', (event) => event.preventDefault(), false)); + doc.querySelectorAll('.ids-btn--prevented').forEach((btn) => btn.addEventListener('click', (event) => event.preventDefault(), false)); })(window, window.document); diff --git a/src/bundle/Resources/public/js/scripts/button.translation.edit.js b/src/bundle/Resources/public/js/scripts/button.translation.edit.js index dc28193ea..7181521a0 100644 --- a/src/bundle/Resources/public/js/scripts/button.translation.edit.js +++ b/src/bundle/Resources/public/js/scripts/button.translation.edit.js @@ -2,11 +2,11 @@ class EditTranslation { constructor(config) { this.container = config.container; - this.toggler = config.container.querySelector('.ids-button--translations-list-toggler'); + this.toggler = config.container.querySelector('.ids-btn--translations-list-toggler'); this.extraActionsContainer = config.container.querySelector('.ibexa-extra-actions'); this.closeBtn = config.container.querySelector('.ibexa-extra-actions__close-btn'); this.confirmBtn = config.container.querySelector('.ibexa-extra-actions__confirm-btn'); - this.languagesBtns = config.container.querySelectorAll('.ids-button--select-language'); + this.languagesBtns = config.container.querySelectorAll('.ids-btn--select-language'); this.backdrop = config.backdrop; this.tableNode = null; @@ -64,8 +64,8 @@ this.confirmBtn.dataset.languageCode = languageCode; this.confirmBtn.disabled = false; - this.languagesBtns.forEach((btn) => btn.classList.remove('ids-button--active')); - event.currentTarget.classList.add('ids-button--active'); + this.languagesBtns.forEach((btn) => btn.classList.remove('ids-btn--active')); + event.currentTarget.classList.add('ids-btn--active'); } resetLanguageSelector() { @@ -73,7 +73,7 @@ this.confirmBtn.dataset.languageCode = null; this.confirmBtn.disabled = true; - this.languagesBtns.forEach((btn) => btn.classList.remove('ids-button--active')); + this.languagesBtns.forEach((btn) => btn.classList.remove('ids-btn--active')); } init() { diff --git a/src/bundle/Resources/public/js/scripts/button.trigger.js b/src/bundle/Resources/public/js/scripts/button.trigger.js index 89ef90956..3e93ad477 100644 --- a/src/bundle/Resources/public/js/scripts/button.trigger.js +++ b/src/bundle/Resources/public/js/scripts/button.trigger.js @@ -2,7 +2,7 @@ doc.addEventListener( 'DOMContentLoaded', () => { - const buttons = doc.querySelectorAll('.ids-btn--trigger, .ids-button--trigger, .ibexa-btn--trigger'); + const buttons = doc.querySelectorAll('.ids-btn--trigger'); const trigger = (event) => { event.preventDefault(); diff --git a/src/bundle/Resources/public/js/scripts/cotf/create.js b/src/bundle/Resources/public/js/scripts/cotf/create.js index 9c8c4efcd..721a159ae 100644 --- a/src/bundle/Resources/public/js/scripts/cotf/create.js +++ b/src/bundle/Resources/public/js/scripts/cotf/create.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient, Translator, Routing) { - const btns = doc.querySelectorAll('.ids-button--cotf-create'); + const btns = doc.querySelectorAll('.ids-btn--cotf-create'); const udwContainer = doc.getElementById('react-udw'); let udwRoot = null; const closeUDW = () => udwRoot.unmount(); diff --git a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js index 5fd43d225..6204293e4 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa) { - const SELECTOR_REMOVE_AUTHOR = '.ids-button--remove-author'; + const SELECTOR_REMOVE_AUTHOR = '.ids-btn--remove-author'; const SELECTOR_AUTHOR = '.ibexa-data-source__author'; const SELECTOR_FIELD = '.ibexa-field-edit--ibexa_author'; const SELECTOR_LABEL = '.ibexa-data-source__label'; @@ -106,7 +106,7 @@ const container = event.target.closest(SELECTOR_FIELD); const checkboxes = container.querySelectorAll('.ibexa-input--checkbox'); const isAnyCheckboxSelected = [...checkboxes].some((checkbox) => checkbox.checked); - const bulkDeleteButton = container.querySelector('.ids-button--bulk-remove-author'); + const bulkDeleteButton = container.querySelector('.ids-btn--bulk-remove-author'); bulkDeleteButton.toggleAttribute('disabled', !isAnyCheckboxSelected); } @@ -114,7 +114,7 @@ removeSelectedItems(event) { const container = event.target.closest(SELECTOR_FIELD); const selectedCheckboxes = container.querySelectorAll('.ibexa-input--checkbox:checked'); - const bulkDeleteButton = container.querySelector('.ids-button--bulk-remove-author'); + const bulkDeleteButton = container.querySelector('.ids-btn--bulk-remove-author'); selectedCheckboxes.forEach((checkbox) => checkbox.closest(SELECTOR_AUTHOR).remove()); @@ -123,7 +123,7 @@ const authorsRowsExist = !!container.querySelector(SELECTOR_AUTHOR); if (!authorsRowsExist) { - container.querySelector('.ids-button--add-author').click(); + container.querySelector('.ids-btn--add-author').click(); } this.updateDisabledState(container); @@ -252,13 +252,13 @@ }, { isValueValidator: false, - selector: '.ids-button--bulk-remove-author', + selector: '.ids-btn--bulk-remove-author', eventName: 'click', callback: 'removeSelectedItems', }, { isValueValidator: false, - selector: '.ids-button--add-author', + selector: '.ids-btn--add-author', eventName: 'click', callback: 'addItem', }, diff --git a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js index 4e4d6e158..c4e789d18 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_gmap_location.js @@ -454,7 +454,7 @@ const latitudeInput = field.querySelector(SELECTOR_LAT_INPUT); const areCoordsSet = !!longitudeInput.value.length && !!latitudeInput.value.length; const locateMeBtn = field.querySelector('.ibexa-data-source__locate-me .btn'); - const searchBtn = field.querySelector('.ids-button--search-by-address'); + const searchBtn = field.querySelector('.ids-btn--search-by-address'); const mapContainer = field.querySelector('.ibexa-data-source__map'); let mapConfig = { zoom: areCoordsSet ? 15 : 1, diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.edit.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.edit.js index a2d8d1287..24eefe1cf 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.edit.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.edit.js @@ -1,5 +1,5 @@ (function (global, doc) { - const editButtons = doc.querySelectorAll('.ibexa-btn--edit'); + const editButtons = doc.querySelectorAll('.ids-btn--edit'); editButtons.forEach((editButton) => { const languageRadioOption = doc.querySelector( diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js index 8c307fe32..5e40ec86d 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js @@ -9,7 +9,7 @@ } if (modal) { - modal.querySelector('.ids-button--confirm').addEventListener('click', () => { + modal.querySelector('.ids-btn--confirm').addEventListener('click', () => { visiblity.value = 0; form.submit(); }); diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.reveal.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.reveal.js index b82f904cd..3c656ec67 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.reveal.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.reveal.js @@ -1,5 +1,5 @@ (function (global, doc) { - const revealButton = doc.querySelector('.ibexa-btn--reveal'); + const revealButton = doc.querySelector('.ids-btn--reveal'); const form = doc.querySelector('form[name="content_visibility_update"]'); const visiblity = doc.querySelector('#content_visibility_update_visible'); diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/contenttype.edit.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/contenttype.edit.js index 437a1b5f8..c9ff0a4a8 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/contenttype.edit.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/contenttype.edit.js @@ -1,5 +1,5 @@ (function (global, doc) { - const editButton = doc.querySelector('.ibexa-btn--edit'); + const editButton = doc.querySelector('.ids-btn--edit'); const languageRadioOption = doc.querySelector('.ibexa-extra-actions--edit.ibexa-extra-actions--prevent-show .ibexa-input--radio'); const editActions = doc.querySelector('.ibexa-extra-actions--edit'); const btns = editActions.querySelectorAll('.form-check [type="radio"]'); diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/location.edit.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/location.edit.js index 8bed60377..e70a3d5e0 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/location.edit.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/location.edit.js @@ -21,7 +21,7 @@ doc.body.dispatchEvent(event); }; const attachModalListeners = (wrapper, form, btns) => { - const addDraftButton = wrapper.querySelector('.ids-button--add-draft'); + const addDraftButton = wrapper.querySelector('.ids-btn--add-draft'); const conflictModal = doc.querySelector('#version-draft-conflict-modal'); if (addDraftButton) { @@ -29,7 +29,7 @@ } wrapper - .querySelectorAll('.ids-button--prevented') + .querySelectorAll('.ids-btn--prevented') .forEach((btn) => btn.addEventListener('click', (event) => event.preventDefault(), false)); if (conflictModal) { diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/user.edit.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/user.edit.js index d2a8204ce..19dd2c8af 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/user.edit.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/user.edit.js @@ -1,5 +1,5 @@ (function (global, doc) { - const editButton = doc.querySelector('.ibexa-btn--edit-user'); + const editButton = doc.querySelector('.ids-btn--edit-user'); const languageRadioOption = doc.querySelector('.ibexa-extra-actions--edit-user.ibexa-extra-actions--prevent-show .ibexa-input--radio'); const editActions = doc.querySelector('.ibexa-extra-actions--edit-user'); diff --git a/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js b/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js index e10f61de9..e36d02a51 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/extra.actions.js @@ -5,9 +5,9 @@ import { getInstance } from '@ibexa-admin-ui/src/bundle/Resources/public/js/scri const CLASS_EXPANDED = 'ibexa-context-menu--expanded'; const CLASS_PREVENT_SHOW = 'ibexa-extra-actions--prevent-show'; const closeBtns = doc.querySelectorAll( - '.ibexa-extra-actions .ids-button--close, .ibexa-extra-actions .ibexa-extra-actions__btn--cancel', + '.ibexa-extra-actions .ids-btn--close, .ibexa-extra-actions .ibexa-extra-actions__btn--cancel', ); - const btns = [...doc.querySelectorAll('.ids-button--extra-actions, .ibexa-btn--extra-actions')]; + const btns = [...doc.querySelectorAll('.ids-btn--extra-actions, .ids-btn--extra-actions')]; const menu = doc.querySelector('.ibexa-context-menu'); const backdrop = new ibexa.core.Backdrop(); const formsInitialData = new Map(); diff --git a/src/bundle/Resources/public/js/scripts/sidebar/side.panel.js b/src/bundle/Resources/public/js/scripts/sidebar/side.panel.js index 96f953343..9ed57d203 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/side.panel.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/side.panel.js @@ -1,7 +1,7 @@ (function (global, doc, ibexa) { const CLASS_HIDDEN = 'ibexa-side-panel--hidden'; const sidePanelCloseBtns = doc.querySelectorAll( - '.ibexa-side-panel .ids-button--close, .ibexa-side-panel .ibexa-side-panel__btn--cancel', + '.ibexa-side-panel .ids-btn--close, .ibexa-side-panel .ibexa-side-panel__btn--cancel', ); const sidePanelTriggers = [...doc.querySelectorAll('.ibexa-side-panel-trigger')]; const panelBackdrops = new Map(); diff --git a/src/bundle/Resources/public/js/scripts/udw/copy.js b/src/bundle/Resources/public/js/scripts/udw/copy.js index 3378b5b0f..91f33b85d 100644 --- a/src/bundle/Resources/public/js/scripts/udw/copy.js +++ b/src/bundle/Resources/public/js/scripts/udw/copy.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient, Translator) { - const btns = doc.querySelectorAll('.ibexa-btn--udw-copy'); + const btns = doc.querySelectorAll('.ids-btn--udw-copy'); const form = doc.querySelector('form[name="location_copy"]'); const input = form.querySelector('#location_copy_new_parent_location'); const udwContainer = doc.getElementById('react-udw'); diff --git a/src/bundle/Resources/public/js/scripts/udw/copy_subtree.js b/src/bundle/Resources/public/js/scripts/udw/copy_subtree.js index fa1670e5c..47853926b 100644 --- a/src/bundle/Resources/public/js/scripts/udw/copy_subtree.js +++ b/src/bundle/Resources/public/js/scripts/udw/copy_subtree.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient, Translator) { - const btns = doc.querySelectorAll('.ibexa-btn--udw-copy-subtree'); + const btns = doc.querySelectorAll('.ids-btn--udw-copy-subtree'); const form = doc.querySelector('form[name="location_copy_subtree"]'); const input = form.querySelector('#location_copy_subtree_new_parent_location'); const udwContainer = doc.querySelector('#react-udw'); diff --git a/src/bundle/Resources/public/js/scripts/udw/move.js b/src/bundle/Resources/public/js/scripts/udw/move.js index 731872e2e..35731284a 100644 --- a/src/bundle/Resources/public/js/scripts/udw/move.js +++ b/src/bundle/Resources/public/js/scripts/udw/move.js @@ -1,5 +1,5 @@ (function (global, doc, ibexa, React, ReactDOMClient, Translator) { - const btns = doc.querySelectorAll('.ibexa-btn--udw-move'); + const btns = doc.querySelectorAll('.ids-btn--udw-move'); const form = doc.querySelector('form[name="location_move"]'); if (!form) { diff --git a/src/bundle/Resources/public/scss/_buttons.scss b/src/bundle/Resources/public/scss/_buttons.scss index bc4c1739b..18b826e5c 100644 --- a/src/bundle/Resources/public/scss/_buttons.scss +++ b/src/bundle/Resources/public/scss/_buttons.scss @@ -589,7 +589,7 @@ } } -.ids-button--content-edit { +.ids-btn--content-edit { background-color: transparent; cursor: pointer; } diff --git a/src/bundle/Resources/public/scss/_icons.scss b/src/bundle/Resources/public/scss/_icons.scss index ec7b1b6ee..d0111e3d8 100644 --- a/src/bundle/Resources/public/scss/_icons.scss +++ b/src/bundle/Resources/public/scss/_icons.scss @@ -67,7 +67,7 @@ } } -.ibexa-btn--extra-actions { +.ids-btn--extra-actions { .ibexa-icon { pointer-events: none; } diff --git a/src/bundle/Resources/public/scss/_trash-search-form.scss b/src/bundle/Resources/public/scss/_trash-search-form.scss index 647bd7a09..5152e5011 100644 --- a/src/bundle/Resources/public/scss/_trash-search-form.scss +++ b/src/bundle/Resources/public/scss/_trash-search-form.scss @@ -80,13 +80,13 @@ &.ibexa-input.form-control:disabled { background-color: $ibexa-color-white; - & + .ids-button--reset-creator { + & + .ids-btn--reset-creator { display: block; } } } - .ids-button--reset-creator { + .ids-btn--reset-creator { display: none; position: absolute; right: 0; diff --git a/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss b/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss index ebc00b245..d3c08d61e 100644 --- a/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss +++ b/src/bundle/Resources/public/scss/fieldType/edit/_ibexa_gmap_location.scss @@ -85,7 +85,7 @@ width: 100%; } - .ids-button--locate-me { + .ids-btn--locate-me { padding: calculateRem(13px); border: calculateRem(1px) solid $ibexa-color-dark-200; border-left: none; @@ -97,7 +97,7 @@ } } - .ids-button--search-by-address { + .ids-btn--search-by-address { position: absolute; top: 0; left: 0; diff --git a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig index ec25a9f45..08f31a8e9 100644 --- a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig @@ -60,7 +60,7 @@ type="tertiary-alt" icon="edit" icon_size="small-medium" - class="ids-button--content-edit" + class="ids-btn--content-edit" title="{{ 'bookmark.list.content.edit'|trans|desc('Edit') }}" data-content-id="{{ bookmark.contentInfo.id }}" data-language-code="{{ bookmark.contentInfo.mainLanguageCode }}" diff --git a/src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig b/src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig index 384ec5845..12d7be876 100644 --- a/src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/error/credentials_expired.html.twig @@ -14,7 +14,7 @@ href="{{ path('ibexa.user.forgot_password') }}" variant="button" type="primary" - class="ids-button--login" + class="ids-btn--login" > {{ 'authentication.credentials_expired.reset_password'|trans|desc('Reset password') }} diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig index 103f70b3d..96dd85338 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/filters.html.twig @@ -23,7 +23,7 @@ html_type="button" type="tertiary-alt" size="small" - class="ids-button--clear" + class="ids-btn--clear" :disabled="not is_any_filter_set" > {{ 'ibexa.notifications.search_form.clear'|trans|desc('Clear') }} @@ -32,7 +32,7 @@ html_type="submit" type="secondary" size="small" - class="ids-button--apply" + class="ids-btn--apply" :disabled="not is_any_filter_set" > {{ 'ibexa.notifications.search_form.apply'|trans|desc('Apply') }} diff --git a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig index dcf76846e..6cc5b1583 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/add_translation.html.twig @@ -45,7 +45,7 @@ {{ custom_footer|raw }} {% else %} {% if form.add is defined %} - {{ form_widget(form.add, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium ibexa-btn--create-translation'}}) }} + {{ form_widget(form.add, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium ids-btn--create-translation'}}) }} {% endif %} {{ 'content.hide.modal.confirm'|trans()|desc('Confirm') }} {{ 'content.hide.modal.cancel'|trans()|desc('Cancel') }} diff --git a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig index 0af2267ea..15d3149db 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig @@ -43,7 +43,7 @@ {% endblock %} {% block footer_content %} {{ form_widget(form.trash, - {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium disabled ibexa-btn--confirm-send-to-trash', 'disabled': true}}) + {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium disabled ids-btn--confirm-send-to-trash', 'disabled': true}}) }} {{ 'edit.languages.discard'|trans|desc('Discard') }} diff --git a/src/bundle/Resources/views/themes/admin/content_type/list.html.twig b/src/bundle/Resources/views/themes/admin/content_type/list.html.twig index 49481afc9..3582a90e1 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/list.html.twig @@ -66,7 +66,7 @@ icon="copy" icon_size="small" title="{{ 'content_type.action.copy'|trans|desc('Duplicate') }}" - class="ids-button--copy-content-type" + class="ids-btn--copy-content-type" data-content-type-id="{{ content_type.id }}" data-content-type-identifier="{{ content_type.identifier }}" data-content-type-group-id="{{ content_type_group.id }}" diff --git a/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig b/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig index 03469af62..cb4b038f0 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/relation_form_fields.html.twig @@ -14,7 +14,7 @@ html_type="button" type="secondary" size="small" - class="ids-button--udw-relation-default-location" + class="ids-btn--udw-relation-default-location" data-universaldiscovery-title="{{ 'field_definition.ibexa_object_relation.selection_root_udw_title'|trans({}, 'ibexa_content_type')|desc('Select where to start browsing for a Relation') }}" data-relation-root-input-selector="#{{ form_default_location.location.vars.id }}" data-starting-location-id="{{ ibexa_admin_ui_config.universalDiscoveryWidget.startingLocationId|default(1) }}" diff --git a/src/bundle/Resources/views/themes/admin/content_type/relation_list_form_fields.html.twig b/src/bundle/Resources/views/themes/admin/content_type/relation_list_form_fields.html.twig index 157c505dd..744c813e8 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/relation_list_form_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/relation_list_form_fields.html.twig @@ -14,7 +14,7 @@ html_type="button" type="secondary" size="small" - class="ids-button--udw-relation-default-location" + class="ids-btn--udw-relation-default-location" data-universaldiscovery-title="{{ 'field_definition.ibexa_object_relation_list.selection_root_udw_title'|trans({}, 'ibexa_content_type')|desc('Select where to start browsing for Relations') }}" data-relation-root-input-selector="#{{ form_default_location.location.vars.id }}" data-starting-location-id="{{ ibexa_admin_ui_config.universalDiscoveryWidget.startingLocationId|default(1) }}" diff --git a/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig b/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig index 9e3a8f63c..1fe522798 100644 --- a/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/link_manager/view.html.twig @@ -108,7 +108,7 @@ icon="edit" icon_size="small" title="{{ 'url.action.item.edit'|trans|desc('Edit') }}" - class="ids-button--content-edit" + class="ids-btn--content-edit" data-content-id="{{ content.id }}" data-language-code="{{ content.mainLanguageCode }}" /> diff --git a/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig b/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig index 7b7e6a4ad..7caa86715 100644 --- a/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/assigned_content.html.twig @@ -66,7 +66,7 @@ {{ form_widget(form_section_content_assign.locations.location) }} {{ form_widget(form_section_content_assign.locations.select_content, {'attr': { - 'class': 'ids-btn ids-btn--tertiary ids-btn--small ibexa-btn--open-udw', + 'class': 'ids-btn ids-btn--tertiary ids-btn--small ids-btn--open-udw', 'data-udw-config': ibexa_udw_config('multiple', {'type': 'section_assign'}) }} ) }} diff --git a/src/bundle/Resources/views/themes/admin/section/list.html.twig b/src/bundle/Resources/views/themes/admin/section/list.html.twig index a50e6b6ef..0e3488d0f 100644 --- a/src/bundle/Resources/views/themes/admin/section/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/list.html.twig @@ -99,7 +99,7 @@ :data-section-id="section.id" data-form-action="{{ path('ibexa.section.assign_content', {'sectionId': section.id}) }}" data-udw-config="{{ ibexa_udw_config('multiple', {'type': 'section_assign'}) }}" - class="ids-button--open-udw" + class="ids-btn--open-udw" /> {% endif %} {% if can_edit %} diff --git a/src/bundle/Resources/views/themes/admin/trash/list.html.twig b/src/bundle/Resources/views/themes/admin/trash/list.html.twig index 7d0747c9c..96a869f46 100644 --- a/src/bundle/Resources/views/themes/admin/trash/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/trash/list.html.twig @@ -49,7 +49,7 @@ type="tertiary-alt" icon="discard" icon_size="tiny-small" - class="ids-button--reset-creator" + class="ids-btn--reset-creator" />
        diff --git a/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig index f5db93000..744df1cf7 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/extra_actions/extra_actions.html.twig @@ -16,7 +16,7 @@ type="tertiary-alt" icon="discard" icon_size="small" - class="ids-button--close" + class="ids-btn--close" />
        diff --git a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig index 05d78920d..a09dd71d9 100644 --- a/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/dashboard/dashboard.html.twig @@ -17,7 +17,7 @@ type="primary" icon="add" icon_size="small-medium" - class="ids-button--cotf-create" + class="ids-btn--cotf-create" data-udw-config="{{ ibexa_udw_config('create', {'type': 'content_create'}) }}" :disabled="not can_create_content" > diff --git a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig index 1455ae16b..8736a4ea6 100644 --- a/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/edit_translation_button.html.twig @@ -8,7 +8,7 @@ type="tertiary-alt" icon="edit" icon_size="small-medium" - class="mx-2 ids-button--content-edit" + class="mx-2 ids-btn--content-edit" title="{{ title }}" data-content-id="{{ contentId }}" data-language-code="{{ language.languageCode }}" @@ -21,7 +21,7 @@ type="tertiary-alt" icon="edit" icon_size="small-medium" - class="mx-2 ids-button--translations-list-toggler" + class="mx-2 ids-btn--translations-list-toggler" title="{{ title }}" /> @@ -40,7 +40,7 @@
        {{ 'edit_translation.languages.edit'|trans|desc('Edit') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig index 1f6e049e0..e51fd03bf 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig @@ -18,7 +18,7 @@ size="small" icon="add" icon_size="small-medium" - class="ids-button--add-author" + class="ids-btn--add-author" title="{{ 'ibexa_author.action.add'|trans|desc('Add') }}" :disabled="readonly|default(false)" > @@ -30,7 +30,7 @@ size="small" icon="trash" icon_size="small-medium" - class="ids-button--bulk-remove-author" + class="ids-btn--bulk-remove-author" title="{{ 'ibexa_author.action.delete'|trans|desc('Delete') }}" disabled > @@ -66,7 +66,7 @@ type="tertiary-alt" icon="trash" icon_size="small-medium" - class="ids-button--remove-author" + class="ids-btn--remove-author" title="{{ 'ibexa_author.action.delete'|trans|desc('Delete') }}" disabled /> diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig index bf5a4ab83..eff712969 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_gmap_location.html.twig @@ -14,7 +14,7 @@ type="tertiary-alt" icon="localize" icon_size="small-medium" - class="ids-button--locate-me" + class="ids-btn--locate-me" :disabled="readonly" />
        @@ -23,7 +23,7 @@ type="tertiary-alt" icon="search" icon_size="small-medium" - class="ids-button--search-by-address" + class="ids-btn--search-by-address" />
        diff --git a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig index 730b92f6d..ad7c9b8a5 100644 --- a/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/menu/context_menu.html.twig @@ -115,7 +115,7 @@ main_btn_attr: attributes, main_btn_element: element, toggler_btn_attr: { - class: attributes.class|replace({ 'ids-button--trigger': '' }), + class: attributes.class|replace({ 'ids-btn--trigger': '' }), disabled: all_subitems_disabled, }, label: btn_label, diff --git a/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig index 27cc2f8a5..e63dd278e 100644 --- a/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig @@ -10,7 +10,7 @@ {% block footer_content %} {% if not delete_label is defined %} diff --git a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig index 291129e45..6ea9600ab 100644 --- a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig @@ -2,7 +2,7 @@ {%- block confirm_button -%} {{ 'modal.delete'|trans|desc('Delete') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig index 411f3a87b..b8bc78de5 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig @@ -11,12 +11,12 @@ {% set context_actions %} {% set menu_items %}
      • - + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }}
      • - + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }}
      • diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig index 8874857fe..89a95c77e 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig @@ -11,12 +11,12 @@ {% set context_actions %} {% set menu_items %}
      • - + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }}
      • - + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }}
      • diff --git a/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig index 9ef3d9d0e..37cde14c4 100644 --- a/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/search/filters.html.twig @@ -14,10 +14,10 @@

        {{ 'search.filters.title'|trans|desc('Filters') }}

        - + {{ 'search.clear'|trans|desc('Clear') }} - + {{ 'search.apply'|trans|desc('Apply') }}
        diff --git a/src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/language.selector.compoment.js b/src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/language.selector.compoment.js index 49b9b168f..8ab57037b 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/language.selector.compoment.js +++ b/src/bundle/ui-dev/src/modules/sub-items/components/sub-items-list/language.selector.compoment.js @@ -65,13 +65,13 @@ const LanguageSelector = ({ isOpen = false, label = '', languageItems = [], hand
        -
        diff --git a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js index ae716f7a3..5237d6209 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js +++ b/src/bundle/ui-dev/src/modules/sub-items/sub.items.module.js @@ -980,11 +980,11 @@ export default class SubItemsModule extends Component { const confirmBtnAttrs = { label: confirmLabel, onClick: this.onBulkDeletePopupConfirm, - className: 'ibexa-btn--primary ids-button--trigger', + className: 'ids-btn--primary ids-btn--trigger', }; const cancelBtnAttrs = { label: Translator.trans(/* @Desc("Cancel") */ 'bulk_action.popup.cancel', {}, 'ibexa_sub_items'), - className: 'ibexa-btn--secondary', + className: 'ids-btn--secondary', 'data-bs-dismiss': 'modal', }; @@ -995,11 +995,11 @@ export default class SubItemsModule extends Component { const confirmBtnAttrs = { label: Translator.trans(/* @Desc("Hide") */ 'bulk_hide.popup.confirm', {}, 'ibexa_sub_items'), onClick: this.onBulkHidePopupConfirm, - className: 'ibexa-btn--primary ids-button--trigger', + className: 'ids-btn--primary ids-btn--trigger', }; const cancelBtnAttrs = { label: Translator.trans(/* @Desc("Cancel") */ 'bulk_action.popup.cancel', {}, 'ibexa_sub_items'), - className: 'ibexa-btn--secondary', + className: 'ids-btn--secondary', 'data-bs-dismiss': 'modal', }; @@ -1010,11 +1010,11 @@ export default class SubItemsModule extends Component { const confirmBtnAttrs = { label: Translator.trans(/* @Desc("Reveal") */ 'bulk_unhide.popup.confirm', {}, 'ibexa_sub_items'), onClick: this.onBulkUnhidePopupConfirm, - className: 'ibexa-btn--primary ids-button--trigger', + className: 'ids-btn--primary ids-btn--trigger', }; const cancelBtnAttrs = { label: Translator.trans(/* @Desc("Cancel") */ 'bulk_action.popup.cancel', {}, 'ibexa_sub_items'), - className: 'ibexa-btn--secondary', + className: 'ids-btn--secondary', 'data-bs-dismiss': 'modal', }; diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js index 754e68d49..8d2f5e083 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/filters/filters.panel.js @@ -23,7 +23,7 @@ const FiltersPanel = ({ children = null, isApplyButtonEnabled, makeSearch, clear size={ButtonSize.Small} onClick={makeSearch} disabled={!isApplyButtonEnabled} - className="ibexa-btn--apply" + className="ids-btn--apply" > {applyLabel} diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/translation-selector/translation.selector.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/translation-selector/translation.selector.js index 334808702..e59fe80c1 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/translation-selector/translation.selector.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/translation-selector/translation.selector.js @@ -112,15 +112,15 @@ const TranslationSelectorButton = ({ hideTranslationSelector, selectTranslation,
        - - +
        diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js index 31f035cfc..fba314720 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/content.create.tab.module.js @@ -60,8 +60,8 @@ const ContentCreateTabModule = () => { const handleIframeLoad = () => { const locationId = iframeRef.current.contentWindow.document.querySelector('meta[name="LocationID"]'); const iframeBody = iframeRef.current.contentWindow.document.body; - const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--confirm'); - const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--cancel'); + const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ids-btn--confirm'); + const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-btn--cancel'); const iframeCloseBtn = iframeBody.querySelector('.ibexa-anchor-navigation-menu__close'); if (locationId) { diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js b/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js index dd30702b2..33cfbab37 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/content.edit.tab.module.js @@ -67,8 +67,8 @@ const ContentEditTabModule = () => { const handleIframeLoad = () => { const locationId = iframeRef.current.contentWindow.document.querySelector('meta[name="LocationID"]'); const iframeBody = iframeRef.current.contentWindow.document.body; - const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--confirm'); - const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-button--cancel'); + const iframeConfirmBtn = iframeBody.querySelector('.ibexa-context-menu .ids-btn--confirm'); + const iframeCancelBtn = iframeBody.querySelector('.ibexa-context-menu .ids-btn--cancel'); const iframeCloseBtn = iframeBody.querySelector('.ibexa-anchor-navigation-menu__close'); if (locationId) { diff --git a/src/contracts/Menu/AbstractFormContextMenuBuilder.php b/src/contracts/Menu/AbstractFormContextMenuBuilder.php index 6eeff761a..77d347f00 100644 --- a/src/contracts/Menu/AbstractFormContextMenuBuilder.php +++ b/src/contracts/Menu/AbstractFormContextMenuBuilder.php @@ -55,7 +55,7 @@ protected function createStructure(array $options): ItemInterface [ 'label' => self::getActionLabel(), 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => $options['submit_selector'] ?? '#', ], 'translation_domain' => 'ibexa_menu', diff --git a/src/lib/Behat/Component/CreateNewPopup.php b/src/lib/Behat/Component/CreateNewPopup.php index 04186b6e9..39abdbdf0 100644 --- a/src/lib/Behat/Component/CreateNewPopup.php +++ b/src/lib/Behat/Component/CreateNewPopup.php @@ -75,8 +75,8 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('popupHeader', '.ibexa-extra-actions__header'), - new VisibleCSSLocator('addButton', '.ibexa-extra-actions__pre-form-btns .ibexa-btn--primary, .ibexa-extra-actions__pre-form-btns .ids-btn--primary, .ibexa-extra-actions--create .ibexa-btn--primary'), - new VisibleCSSLocator('cancelButton', '.ibexa-extra-actions__pre-form-btns .ids-btn--secondary, .ibexa-extra-actions__pre-form-btns .ibexa-btn--secondary'), + new VisibleCSSLocator('addButton', '.ibexa-extra-actions__pre-form-btns .ids-btn--primary, .ibexa-extra-actions--create .ids-btn--primary'), + new VisibleCSSLocator('cancelButton', '.ibexa-extra-actions__pre-form-btns .ids-btn--secondary'), new VisibleCSSLocator('popup', '.ibexa-extra-actions:not(.ibexa-extra-actions--hidden)'), new VisibleCSSLocator('formGroup', '.form-group'), new VisibleCSSLocator('dropdown', '.ibexa-dropdown'), diff --git a/src/lib/Behat/Component/Dialog.php b/src/lib/Behat/Component/Dialog.php index 6f83e04a1..18eddb85d 100644 --- a/src/lib/Behat/Component/Dialog.php +++ b/src/lib/Behat/Component/Dialog.php @@ -32,8 +32,8 @@ public function verifyIsLoaded(): void protected function specifyLocators(): array { return [ - new VisibleCSSLocator('confirm', '.modal.show button[type="submit"],.modal.show button[data-click], .modal.show .ibexa-btn--confirm, .modal.show .ibexa-btn--primary, .modal.show .ids-btn--confirm, .modal.show .ids-btn--primary'), - new VisibleCSSLocator('decline', '.modal.show .ids-btn--secondary, .modal.show .ibexa-btn--secondary'), + new VisibleCSSLocator('confirm', '.modal.show button[type="submit"],.modal.show button[data-click], .modal.show .ids-btn--confirm, .modal.show .ids-btn--primary'), + new VisibleCSSLocator('decline', '.modal.show .ids-btn--secondary'), ]; } } diff --git a/src/lib/Behat/Component/DraftConflictDialog.php b/src/lib/Behat/Component/DraftConflictDialog.php index 366551464..d965a8b1e 100644 --- a/src/lib/Behat/Component/DraftConflictDialog.php +++ b/src/lib/Behat/Component/DraftConflictDialog.php @@ -46,7 +46,7 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('dialog', '#version-draft-conflict-modal.ibexa-modal--version-draft-conflict.show .modal-content'), - new VisibleCSSLocator('addDraft', '.ids-button--add-draft'), + new VisibleCSSLocator('addDraft', '.ids-btn--add-draft'), new VisibleCSSLocator('table', '#version-draft-conflict-modal .modal-content'), ]; } diff --git a/src/lib/Behat/Component/Fields/MapLocation.php b/src/lib/Behat/Component/Fields/MapLocation.php index 0e6f5ec13..41ea22dec 100644 --- a/src/lib/Behat/Component/Fields/MapLocation.php +++ b/src/lib/Behat/Component/Fields/MapLocation.php @@ -113,7 +113,7 @@ public function specifyLocators(): array new VisibleCSSLocator('latitude', '#ezplatform_content_forms_content_edit_fieldsData_ibexa_gmap_location_value_latitude'), new VisibleCSSLocator('longitude', '#ezplatform_content_forms_content_edit_fieldsData_ibexa_gmap_location_value_longitude'), new VisibleCSSLocator('address', '#ezplatform_content_forms_content_edit_fieldsData_ibexa_gmap_location_value_address'), - new VisibleCSSLocator('searchButton', '.ids-button--search-by-address'), + new VisibleCSSLocator('searchButton', '.ids-btn--search-by-address'), ]; } diff --git a/src/lib/Behat/Component/Fields/Matrix.php b/src/lib/Behat/Component/Fields/Matrix.php index 4a17e00f4..2cb787e2f 100644 --- a/src/lib/Behat/Component/Fields/Matrix.php +++ b/src/lib/Behat/Component/Fields/Matrix.php @@ -62,7 +62,7 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('row', '.ibexa-table__row'), - new VisibleCSSLocator('addRowButton', '.ibexa-btn--add-matrix-entry, .ids-button--add-matrix-entry'), + new VisibleCSSLocator('addRowButton', '.ids-btn--add-matrix-entry, .ids-btn--add-matrix-entry'), new VisibleCSSLocator('viewModeTableHeaders', 'thead th'), new VisibleCSSLocator('viewModeTableRow', 'tbody tr'), new VisibleCSSLocator('editModeTableHeaders', '.ibexa-table thead th[data-identifier]'), diff --git a/src/lib/Behat/Page/ContentViewPage.php b/src/lib/Behat/Page/ContentViewPage.php index a4996c01b..098bd18d8 100644 --- a/src/lib/Behat/Page/ContentViewPage.php +++ b/src/lib/Behat/Page/ContentViewPage.php @@ -289,7 +289,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('addLocationButton', '#ibexa-tab-location-view-locations .ibexa-table-header__actions .ibexa-btn--udw-add'), new VisibleCSSLocator('bookmarkButton', '.ibexa-add-to-bookmarks'), new VisibleCSSLocator('isBookmarked', '.ibexa-add-to-bookmarks--checked'), - new VisibleCSSLocator('addTranslationButton', '#ibexa-tab-location-view-translations .ibexa-table-header__actions .ids-button--add-translation, [data-bs-target="#add-translation-modal"]'), + new VisibleCSSLocator('addTranslationButton', '#ibexa-tab-location-view-translations .ibexa-table-header__actions .ids-btn--add-translation, [data-bs-target="#add-translation-modal"]'), new VisibleCSSLocator('ibexaDropdownPreview', '.ibexa-raw-content-title__language-form .ibexa-dropdown__selection-info'), new VisibleCSSLocator('moreTab', '.ibexa-tabs__tab--more'), new VisibleCSSLocator('popupMenuItem', '.ibexa-popup-menu__item .ibexa-popup-menu__item-content'), @@ -297,7 +297,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('customUrlAliasesTable', '#ibexa-tab-location-view-urls .ibexa-table'), new VisibleCSSLocator('alertTitle', '.ibexa-alert__title'), new VisibleCSSLocator('selectHideMode', '.form-check .ibexa-input--radio'), - new VisibleCSSLocator('cancelScheduleButton', '.ids-button--schedule-hide-cancel'), + new VisibleCSSLocator('cancelScheduleButton', '.ids-btn--schedule-hide-cancel'), ]; } diff --git a/src/lib/Behat/Page/DashboardPage.php b/src/lib/Behat/Page/DashboardPage.php index 33bf16b14..da115a225 100644 --- a/src/lib/Behat/Page/DashboardPage.php +++ b/src/lib/Behat/Page/DashboardPage.php @@ -120,7 +120,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('tableTab', '.ibexa-tabs .nav-item'), new VisibleCSSLocator('pageTitle', '.ibexa-header-wrapper h1'), new VisibleCSSLocator('table', '#ibexa-tab-dashboard-my-my-drafts'), - new VisibleCSSLocator('createButton', '.ids-button--cotf-create'), + new VisibleCSSLocator('createButton', '.ids-btn--cotf-create'), new VisibleCSSLocator('activeTabLink', '.ibexa-tabs__link.active'), ]; } diff --git a/src/lib/Form/Type/UniversalDiscoveryWidget/UniversalDiscoveryWidgetType.php b/src/lib/Form/Type/UniversalDiscoveryWidget/UniversalDiscoveryWidgetType.php index 0d258ce21..af798a3ad 100644 --- a/src/lib/Form/Type/UniversalDiscoveryWidget/UniversalDiscoveryWidgetType.php +++ b/src/lib/Form/Type/UniversalDiscoveryWidget/UniversalDiscoveryWidgetType.php @@ -62,7 +62,7 @@ public function finishView(FormView $view, FormInterface $form, array $options): $selectContentButtonView->vars['attr']['class'] = ''; } - $selectContentButtonView->vars['attr']['class'] = trim($selectContentButtonView->vars['attr']['class'] . ' ibexa-btn--open-udw'); + $selectContentButtonView->vars['attr']['class'] = trim($selectContentButtonView->vars['attr']['class'] . ' ids-btn--open-udw'); } public function configureOptions(OptionsResolver $resolver): void diff --git a/src/lib/Menu/Action/VersionListActionMenuBuilder.php b/src/lib/Menu/Action/VersionListActionMenuBuilder.php index 674b1cbed..0a1168ecc 100644 --- a/src/lib/Menu/Action/VersionListActionMenuBuilder.php +++ b/src/lib/Menu/Action/VersionListActionMenuBuilder.php @@ -120,7 +120,7 @@ private function createArchiveRestoreAction(VersionInfo $versionInfo): ItemInter self::TRANSLATION_DOMAIN ), 'attributes' => [ - 'class' => 'ibexa-btn--content-edit', + 'class' => 'ids-btn--content-edit', 'data-content-id' => $versionInfo->getContentInfo()->getId(), 'data-language-code' => $versionInfo->getInitialLanguage()->getLanguageCode(), 'data-version-no' => $versionInfo->getVersionNo(), diff --git a/src/lib/Menu/Admin/ContentType/AbstractContentTypeRightSidebarBuilder.php b/src/lib/Menu/Admin/ContentType/AbstractContentTypeRightSidebarBuilder.php index c18b7688b..c7b02db87 100644 --- a/src/lib/Menu/Admin/ContentType/AbstractContentTypeRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ContentType/AbstractContentTypeRightSidebarBuilder.php @@ -29,7 +29,7 @@ public function createStructure(array $options): ItemInterface $itemSaveIdentifier, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $contentTypeFormView['publishContentType']->vars['id']), ], ] @@ -39,7 +39,7 @@ public function createStructure(array $options): ItemInterface $itemPublishAndEditIdentifier, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $contentTypeFormView['publishAndEditContentType']->vars['id']), ], ] @@ -53,7 +53,7 @@ public function createStructure(array $options): ItemInterface $itemCancelIdentifier, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $contentTypeFormView['removeDraft']->vars['id']), ], ] diff --git a/src/lib/Menu/Admin/ContentType/ContentTypeGroupCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/ContentType/ContentTypeGroupCreateRightSidebarBuilder.php index 17749069a..8ba0ce5b9 100644 --- a/src/lib/Menu/Admin/ContentType/ContentTypeGroupCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ContentType/ContentTypeGroupCreateRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/ContentType/ContentTypeGroupEditRightSidebarBuilder.php b/src/lib/Menu/Admin/ContentType/ContentTypeGroupEditRightSidebarBuilder.php index 2b2d803eb..0890dc3b8 100644 --- a/src/lib/Menu/Admin/ContentType/ContentTypeGroupEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ContentType/ContentTypeGroupEditRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/Language/LanguageCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/Language/LanguageCreateRightSidebarBuilder.php index fdfeb6d91..957040613 100644 --- a/src/lib/Menu/Admin/Language/LanguageCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Language/LanguageCreateRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/Language/LanguageEditRightSidebarBuilder.php b/src/lib/Menu/Admin/Language/LanguageEditRightSidebarBuilder.php index c06e8d9be..6abd0f85e 100644 --- a/src/lib/Menu/Admin/Language/LanguageEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Language/LanguageEditRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/ObjectState/ObjectStateCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/ObjectState/ObjectStateCreateRightSidebarBuilder.php index 8ca1e0226..4656aaf72 100644 --- a/src/lib/Menu/Admin/ObjectState/ObjectStateCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ObjectState/ObjectStateCreateRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#object_state_create_create', ], ] diff --git a/src/lib/Menu/Admin/ObjectState/ObjectStateEditRightSidebarBuilder.php b/src/lib/Menu/Admin/ObjectState/ObjectStateEditRightSidebarBuilder.php index 3e5482a5f..83d70bd5b 100644 --- a/src/lib/Menu/Admin/ObjectState/ObjectStateEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ObjectState/ObjectStateEditRightSidebarBuilder.php @@ -41,7 +41,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/ObjectState/ObjectStateGroupCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/ObjectState/ObjectStateGroupCreateRightSidebarBuilder.php index 99607cbff..c06234f8a 100644 --- a/src/lib/Menu/Admin/ObjectState/ObjectStateGroupCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ObjectState/ObjectStateGroupCreateRightSidebarBuilder.php @@ -38,7 +38,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#object_state_group_create_create', ], ] diff --git a/src/lib/Menu/Admin/ObjectState/ObjectStateGroupEditRightSidebarBuilder.php b/src/lib/Menu/Admin/ObjectState/ObjectStateGroupEditRightSidebarBuilder.php index 7318908ef..96fba7a8f 100644 --- a/src/lib/Menu/Admin/ObjectState/ObjectStateGroupEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/ObjectState/ObjectStateGroupEditRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/Role/PolicyCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/PolicyCreateRightSidebarBuilder.php index 0d8618bd6..dab577d57 100644 --- a/src/lib/Menu/Admin/Role/PolicyCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/PolicyCreateRightSidebarBuilder.php @@ -43,7 +43,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveId), ], ] diff --git a/src/lib/Menu/Admin/Role/PolicyEditRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/PolicyEditRightSidebarBuilder.php index 495aa2a2e..4ed2b70ab 100644 --- a/src/lib/Menu/Admin/Role/PolicyEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/PolicyEditRightSidebarBuilder.php @@ -42,7 +42,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/Role/RoleAssignmentCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/RoleAssignmentCreateRightSidebarBuilder.php index 00f96b3aa..75de0a57a 100644 --- a/src/lib/Menu/Admin/Role/RoleAssignmentCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/RoleAssignmentCreateRightSidebarBuilder.php @@ -42,7 +42,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#role_assignment_create_save', ], ] diff --git a/src/lib/Menu/Admin/Role/RoleCopyRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/RoleCopyRightSidebarBuilder.php index 8178fb09c..54a3f46d4 100644 --- a/src/lib/Menu/Admin/Role/RoleCopyRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/RoleCopyRightSidebarBuilder.php @@ -54,7 +54,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#role_copy_copy', 'data-extra-classes' => 'ibexa-tooltip--medium', 'data-placement' => 'left', diff --git a/src/lib/Menu/Admin/Role/RoleCreateRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/RoleCreateRightSidebarBuilder.php index cace96b3b..c83dd8fd6 100644 --- a/src/lib/Menu/Admin/Role/RoleCreateRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/RoleCreateRightSidebarBuilder.php @@ -41,7 +41,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/Admin/Role/RoleEditRightSidebarBuilder.php b/src/lib/Menu/Admin/Role/RoleEditRightSidebarBuilder.php index 46fb89c98..fa61ff7eb 100644 --- a/src/lib/Menu/Admin/Role/RoleEditRightSidebarBuilder.php +++ b/src/lib/Menu/Admin/Role/RoleEditRightSidebarBuilder.php @@ -40,7 +40,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#%s', $saveAndCloseId), ], ] diff --git a/src/lib/Menu/ContentCreateRightSidebarBuilder.php b/src/lib/Menu/ContentCreateRightSidebarBuilder.php index bb3288099..dc57baa56 100644 --- a/src/lib/Menu/ContentCreateRightSidebarBuilder.php +++ b/src/lib/Menu/ContentCreateRightSidebarBuilder.php @@ -36,7 +36,7 @@ final class ContentCreateRightSidebarBuilder extends AbstractBuilder implements public const string ITEM__PREVIEW = 'content_create__sidebar_right__preview'; public const string ITEM__CANCEL = 'content_create__sidebar_right__cancel'; - public const string BTN_TRIGGER_CLASS = 'ibexa-btn--trigger'; + public const string BTN_TRIGGER_CLASS = 'ids-btn--trigger'; public const array BTN_DISABLED_ATTR = ['disabled' => 'disabled']; public function __construct( diff --git a/src/lib/Menu/ContentEditRightSidebarBuilder.php b/src/lib/Menu/ContentEditRightSidebarBuilder.php index 47ac3c6f3..35989d389 100644 --- a/src/lib/Menu/ContentEditRightSidebarBuilder.php +++ b/src/lib/Menu/ContentEditRightSidebarBuilder.php @@ -36,7 +36,7 @@ final class ContentEditRightSidebarBuilder extends AbstractBuilder implements Tr public const string ITEM__PREVIEW = 'content_edit__sidebar_right__preview'; public const string ITEM__CANCEL = 'content_edit__sidebar_right__cancel'; - public const string BTN_TRIGGER_CLASS = 'ibexa-btn--trigger'; + public const string BTN_TRIGGER_CLASS = 'ids-btn--trigger'; public const array BTN_DISABLED_ATTR = ['disabled' => 'disabled']; public function __construct( diff --git a/src/lib/Menu/ContentRightSidebarBuilder.php b/src/lib/Menu/ContentRightSidebarBuilder.php index 0d1dd469e..51fd7c1fd 100644 --- a/src/lib/Menu/ContentRightSidebarBuilder.php +++ b/src/lib/Menu/ContentRightSidebarBuilder.php @@ -128,7 +128,7 @@ public function createStructure(array $options): ItemInterface $canCopy = $this->canCopy($hasCreatePermission); $canCopySubtree = $this->canCopySubtree($location, $hasCreatePermission); $createAttributes = [ - 'class' => 'ibexa-btn--extra-actions ibexa-btn--create ibexa-btn--primary', + 'class' => 'ids-btn--extra-actions ids-btn--create ids-btn--primary', 'data-actions' => 'create', ]; $sendToTrashAttributes = [ @@ -136,17 +136,17 @@ public function createStructure(array $options): ItemInterface 'data-bs-target' => '#trash-location-modal', ]; $copySubtreeAttributes = [ - 'class' => 'ibexa-btn--udw-copy-subtree', + 'class' => 'ids-btn--udw-copy-subtree', 'data-udw-config' => $uwdConfig, 'data-root-location' => $startingLocationId, ]; $moveAttributes = [ - 'class' => 'ibexa-btn--udw-move', + 'class' => 'ids-btn--udw-move', 'data-udw-config' => $uwdConfig, 'data-root-location' => $startingLocationId, ]; $copyAttributes = [ - 'class' => 'ibexa-btn--udw-copy', + 'class' => 'ids-btn--udw-copy', 'data-udw-config' => $uwdConfig, 'data-root-location' => $startingLocationId, ]; @@ -305,11 +305,11 @@ public static function getTranslationMessages(): array private function addEditMenuItem(ItemInterface $menu, bool $contentIsUser, bool $canEdit): void { $editAttributes = [ - 'class' => 'ibexa-btn--extra-actions ibexa-btn--edit', + 'class' => 'ids-btn--extra-actions ids-btn--edit', 'data-actions' => 'edit', ]; $editUserAttributes = [ - 'class' => 'ibexa-btn--extra-actions ibexa-btn--edit-user', + 'class' => 'ids-btn--extra-actions ids-btn--edit-user', 'data-actions' => 'edit-user', ]; @@ -343,7 +343,7 @@ private function addEditMenuItem(ItemInterface $menu, bool $contentIsUser, bool private function addRevealMenuItem(ItemInterface $menu, bool $canHide): void { $attributes = [ - 'class' => 'ibexa-btn--reveal', + 'class' => 'ids-btn--reveal', 'data-actions' => 'reveal', ]; diff --git a/src/lib/Menu/ContentTypeRightSidebarBuilder.php b/src/lib/Menu/ContentTypeRightSidebarBuilder.php index b1c7d30e0..b7cb847bd 100644 --- a/src/lib/Menu/ContentTypeRightSidebarBuilder.php +++ b/src/lib/Menu/ContentTypeRightSidebarBuilder.php @@ -54,7 +54,7 @@ public function createStructure(array $options): ItemInterface $menu = $this->factory->createItem('root'); $editAttributes = [ - 'class' => 'ibexa-btn--extra-actions ibexa-btn--edit', + 'class' => 'ids-btn--extra-actions ids-btn--edit', 'data-actions' => 'edit', ]; $canEdit = $this->permissionResolver->canUser( diff --git a/src/lib/Menu/SectionCreateRightSidebarBuilder.php b/src/lib/Menu/SectionCreateRightSidebarBuilder.php index 3d38da62b..5fd938dc2 100644 --- a/src/lib/Menu/SectionCreateRightSidebarBuilder.php +++ b/src/lib/Menu/SectionCreateRightSidebarBuilder.php @@ -38,7 +38,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#section_create_create', ], ] diff --git a/src/lib/Menu/SectionEditRightSidebarBuilder.php b/src/lib/Menu/SectionEditRightSidebarBuilder.php index 7cd54bf04..f5e1a41b0 100644 --- a/src/lib/Menu/SectionEditRightSidebarBuilder.php +++ b/src/lib/Menu/SectionEditRightSidebarBuilder.php @@ -41,7 +41,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => sprintf('#update-section-%d_update', $section->id), ], ] diff --git a/src/lib/Menu/URLEditRightSidebarBuilder.php b/src/lib/Menu/URLEditRightSidebarBuilder.php index 9fd25624f..0012f7fd3 100644 --- a/src/lib/Menu/URLEditRightSidebarBuilder.php +++ b/src/lib/Menu/URLEditRightSidebarBuilder.php @@ -33,7 +33,7 @@ protected function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => $options['save_and_close_selector'], ], ] diff --git a/src/lib/Menu/URLWildcardEditRightSidebarBuilder.php b/src/lib/Menu/URLWildcardEditRightSidebarBuilder.php index 1bf3815fe..e7e3d7602 100644 --- a/src/lib/Menu/URLWildcardEditRightSidebarBuilder.php +++ b/src/lib/Menu/URLWildcardEditRightSidebarBuilder.php @@ -42,7 +42,7 @@ protected function createStructure(array $options): ItemInterface self::ITEM__SAVE_AND_CLOSE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => $options['submit_selector'], ], ] diff --git a/src/lib/Menu/UserCreateRightSidebarBuilder.php b/src/lib/Menu/UserCreateRightSidebarBuilder.php index cc9a78fb8..a461627b6 100644 --- a/src/lib/Menu/UserCreateRightSidebarBuilder.php +++ b/src/lib/Menu/UserCreateRightSidebarBuilder.php @@ -44,7 +44,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CREATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#ezplatform_content_forms_user_create_create', ], ] @@ -53,7 +53,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CANCEL, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#ezplatform_content_forms_user_create_cancel', ], ] diff --git a/src/lib/Menu/UserEditRightSidebarBuilder.php b/src/lib/Menu/UserEditRightSidebarBuilder.php index 71eb28b83..03a0e80f6 100644 --- a/src/lib/Menu/UserEditRightSidebarBuilder.php +++ b/src/lib/Menu/UserEditRightSidebarBuilder.php @@ -44,7 +44,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__UPDATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#ezplatform_content_forms_user_update_update', ], ] @@ -53,7 +53,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__CANCEL, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#ezplatform_content_forms_user_update_cancel', ], ] diff --git a/src/lib/Menu/UserPasswordChangeRightSidebarBuilder.php b/src/lib/Menu/UserPasswordChangeRightSidebarBuilder.php index 6fbb083eb..ddfa1efb0 100644 --- a/src/lib/Menu/UserPasswordChangeRightSidebarBuilder.php +++ b/src/lib/Menu/UserPasswordChangeRightSidebarBuilder.php @@ -39,7 +39,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__UPDATE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#user_password_change_change', ], ] diff --git a/src/lib/Menu/UserSetting/UserSettingUpdateRightSidebarBuilder.php b/src/lib/Menu/UserSetting/UserSettingUpdateRightSidebarBuilder.php index ddd2266d6..2930be2ac 100644 --- a/src/lib/Menu/UserSetting/UserSettingUpdateRightSidebarBuilder.php +++ b/src/lib/Menu/UserSetting/UserSettingUpdateRightSidebarBuilder.php @@ -38,7 +38,7 @@ public function createStructure(array $options): ItemInterface self::ITEM__SAVE, [ 'attributes' => [ - 'class' => 'ibexa-btn--trigger', + 'class' => 'ids-btn--trigger', 'data-click' => '#user_setting_update_update', ], ] diff --git a/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php b/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php index 5d112471b..9288ae256 100644 --- a/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php +++ b/tests/lib/Menu/Action/VersionListActionMenuBuilderTest.php @@ -148,7 +148,7 @@ public function provideDataForTestBuildVersionListActionMenu(): iterable null, self::RESTORE_ACTION_ITEM_EXTRAS, [ - 'class' => 'ibexa-btn--content-edit', + 'class' => 'ids-btn--content-edit', 'data-content-id' => 1, 'data-language-code' => 'eng-GB', 'data-version-no' => 1, From f438da46fb53b0629c2dfa7fcfbda8e7037a47ea Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 23 Apr 2026 07:04:20 +0200 Subject: [PATCH 222/234] fix: align admin UI hide button helper --- .../Resources/public/js/scripts/sidebar/btn/content.hide.js | 2 +- src/lib/Menu/ContentRightSidebarBuilder.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js index 5e40ec86d..60e32afcc 100644 --- a/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js +++ b/src/bundle/Resources/public/js/scripts/sidebar/btn/content.hide.js @@ -1,5 +1,5 @@ (function (global, doc, bootstrap) { - const hideButton = doc.querySelector('.ibexa-btn--hide'); + const hideButton = doc.querySelector('.ids-btn--hide'); const modal = doc.querySelector('#hide-content-modal'); const form = doc.querySelector('form[name="content_visibility_update"]'); const visiblity = doc.querySelector('#content_visibility_update_visible'); diff --git a/src/lib/Menu/ContentRightSidebarBuilder.php b/src/lib/Menu/ContentRightSidebarBuilder.php index 51fd7c1fd..00feb0c70 100644 --- a/src/lib/Menu/ContentRightSidebarBuilder.php +++ b/src/lib/Menu/ContentRightSidebarBuilder.php @@ -363,7 +363,7 @@ private function addRevealMenuItem(ItemInterface $menu, bool $canHide): void private function addHideMenuItem(ItemInterface $menu, bool $canHide): void { $attributes = [ - 'class' => 'ibexa-btn--hide', + 'class' => 'ids-btn--hide', 'data-actions' => 'hide', ]; From 0910711d4779a9e2c4479b077a1e95dd611b8b8e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 23 Apr 2026 07:36:59 +0200 Subject: [PATCH 223/234] fix: align admin UI draft edit button helper --- .../Resources/public/js/scripts/admin.version.edit.conflict.js | 2 +- src/contracts/Menu/AbstractActionBuilder.php | 2 +- tests/lib/Menu/Action/BaseActionMenuBuilderTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.version.edit.conflict.js b/src/bundle/Resources/public/js/scripts/admin.version.edit.conflict.js index da4114023..e28b703ad 100644 --- a/src/bundle/Resources/public/js/scripts/admin.version.edit.conflict.js +++ b/src/bundle/Resources/public/js/scripts/admin.version.edit.conflict.js @@ -41,5 +41,5 @@ .catch(showErrorNotification); }; - doc.querySelectorAll('.ibexa-btn--content-draft-edit').forEach((button) => button.addEventListener('click', editVersion, false)); + doc.querySelectorAll('.ids-btn--content-draft-edit').forEach((button) => button.addEventListener('click', editVersion, false)); })(window, window.document, window.bootstrap, window.ibexa, window.Translator, window.Routing); diff --git a/src/contracts/Menu/AbstractActionBuilder.php b/src/contracts/Menu/AbstractActionBuilder.php index 433429246..699be2507 100644 --- a/src/contracts/Menu/AbstractActionBuilder.php +++ b/src/contracts/Menu/AbstractActionBuilder.php @@ -20,7 +20,7 @@ abstract class AbstractActionBuilder extends AbstractBuilder { protected const string TRANSLATION_DOMAIN = 'ibexa_action_menu'; - protected const string IBEXA_BTN_CONTENT_DRAFT_EDIT_CLASS = 'ibexa-btn--content-draft-edit'; + protected const string IBEXA_BTN_CONTENT_DRAFT_EDIT_CLASS = 'ids-btn--content-draft-edit'; private const string ICON_EDIT = 'edit'; private const int ORDER_NUMBER = 200; diff --git a/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php b/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php index d137bdb6f..1b04f1575 100644 --- a/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php +++ b/tests/lib/Menu/Action/BaseActionMenuBuilderTest.php @@ -32,7 +32,7 @@ abstract class BaseActionMenuBuilderTest extends TestCase protected const string ROUTE_VERSION_HAS_NO_CONFLICT = 'ibexa.version.has_no_conflict'; protected const string ROUTE_CONTENT_EDIT_DRAFT = '/content/edit/draft/%d/%d/%s'; protected const string ROUTE_USER_UPDATE = '/user/update/%d/%d/%s'; - protected const string IBEXA_BTN_CONTENT_DRAFT_EDIT_CLASS = 'ibexa-btn--content-draft-edit'; + protected const string IBEXA_BTN_CONTENT_DRAFT_EDIT_CLASS = 'ids-btn--content-draft-edit'; protected const array EDIT_ACTION_ITEM_EXTRAS = [ 'icon' => 'edit', From daf9de1256a21c814a83171fc8cd6fd232f33366 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 23 Apr 2026 09:05:14 +0200 Subject: [PATCH 224/234] fix: remove admin UI legacy no-text DS mix --- .../Resources/views/themes/admin/ui/action_list.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig index fc64bbcac..6985f857f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig @@ -4,7 +4,7 @@ {% for action in item.children %} {% set action_attrs = action.attributes|default({})|merge({ - class: 'ids-btn ids-btn--tertiary-alt ids-btn--medium ibexa-btn--no-text ' ~ action.attributes.class|default(''), + class: 'ids-btn ids-btn--tertiary-alt ids-btn--medium ' ~ action.attributes.class|default(''), }) %} {% if action.uri %} {% set action_attrs = action_attrs|merge({ href: action.uri }) %} @@ -25,7 +25,7 @@ - + + ); From f3f2fa74e6ac7d2437ae78ad9a0a02e04cae0604 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 14 May 2026 10:45:22 +0200 Subject: [PATCH 229/234] fix: use Twig button tags in admin UI macros --- .../account/notifications/list_all.html.twig | 42 +++++++++---------- .../admin/content/draft/draft_list.html.twig | 17 ++++---- .../content/modal/draft_conflict.html.twig | 11 ++--- .../admin/content/tab/locations/tab.html.twig | 38 ++++++++--------- .../content/tab/translations/tab.html.twig | 40 +++++++++--------- .../themes/admin/content/tab/urls.html.twig | 40 +++++++++--------- .../admin/content/tab/versions/tab.html.twig | 22 +++++----- .../content_type/field_definitions.html.twig | 17 ++++---- 8 files changed, 106 insertions(+), 121 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig index 0c6f0b553..0087a8ab6 100644 --- a/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/notifications/list_all.html.twig @@ -115,28 +115,26 @@ {% set modal_data_target = 'modal-selection_remove' %}
        - {{ component('ibexa:button', { - id: 'confirm-mark-selected-as-read', - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'mail-open', - label: 'notification.mark_as_read'|trans|desc('Mark as read'), - class: 'ibexa-notification-list__btn-mark-as-read', - disabled: true, - }) }} - {{ component('ibexa:button', { - id: 'confirm-selection_remove', - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'trash', - label: 'notification.delete'|trans|desc('Delete'), - class: 'ibexa-notification-list__btn-delete', - disabled: true, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - }) }} + {{ 'notification.mark_as_read'|trans|desc('Mark as read') }} + {{ 'notification.delete'|trans|desc('Delete') }}
        {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig index 08a6157f7..49a32b501 100644 --- a/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/draft/draft_list.html.twig @@ -149,15 +149,14 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - {{ component('ibexa:button', { - type: 'tertiary-alt', - icon: 'trash', - label: 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete'), - disabled: true, - id: 'confirm-' ~ form.remove.vars.id, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - }) }} + {{ 'drafts.list.action.remove.confirmation.title'|trans|desc('Delete') }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index 30db64fb5..b9a9137f5 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,13 +43,8 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - {{ component('ibexa:button', { - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'add', - label: 'draft.conflict.add_new'|trans|desc('Add'), - class: 'ids-btn--add-draft', - }) }} + + {{ 'draft.conflict.add_new'|trans|desc('Add') }} + {% endif %} {% endmacro %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index efe276c2c..81fcd2ea7 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -148,28 +148,26 @@ } %} {% macro table_header_tools(form_add, form_remove, can_add) %} - {{ component('ibexa:button', { - type: 'tertiary-alt', - size: 'small', - icon: 'add', - label: 'tab.locations.action.add'|trans|desc('Add'), - class: 'ibexa-btn--udw-add', - 'data-udw-config': ibexa_udw_config('add_location', {}), - disabled: not can_add, - }) }} + {{ 'tab.locations.action.add'|trans|desc('Add') }} {% set modal_data_target = 'delete-content-types-modal' %} - {{ component('ibexa:button', { - html_type: 'button', - id: 'delete-locations', - type: 'tertiary-alt', - size: 'small', - icon: 'trash', - label: 'tab.locations.action.delete'|trans|desc('Delete'), - disabled: true, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - }) }} + {{ 'tab.locations.action.delete'|trans|desc('Delete') }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.locations.modal.message'|trans|desc('Do you want to delete the Location? All its sub-items will be sent to Trash.'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig index 01a61076a..a3a0fcebc 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/translations/tab.html.twig @@ -117,29 +117,27 @@ {% macro table_header_tools(form_translation_remove, can_translate) %} {% if can_translate %} - {{ component('ibexa:button', { - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'add', - label: 'tab.translations.action.add'|trans|desc('Add'), - class: 'ids-btn--prevented ids-btn--add-translation', - 'data-bs-toggle': 'modal', - 'data-bs-target': '#add-translation-modal', - }) }} + {{ 'tab.translations.action.add'|trans|desc('Add') }} {% set modal_data_target = 'delete-translations-modal' %} - {{ component('ibexa:button', { - html_type: 'button', - id: 'delete-translations', - type: 'tertiary-alt', - size: 'small', - icon: 'trash', - label: 'tab.translations.action.delete'|trans|desc('Delete'), - disabled: true, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - }) }} + {{ 'tab.translations.action.delete'|trans|desc('Delete') }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.translations.modal.message'|trans|desc('Do you want to delete the translation?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index 0c126aa36..62c8d1cbe 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -49,29 +49,27 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %} - {{ component('ibexa:button', { - html_type: 'button', - type: 'tertiary', - size: 'small', - icon: 'add', - label: 'tab.urls.action.add'|trans|desc('Add'), - class: 'ids-btn--prevented', - 'data-bs-toggle': 'modal', - 'data-bs-target': '#ibexa-modal--custom-url-alias', - }) }} + {{ 'tab.urls.action.add'|trans|desc('Add') }} {% set modal_data_target = 'delete-custom-url-modal' %} - {{ component('ibexa:button', { - id: 'delete-custom-urls', - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'trash', - label: 'tab.urls.action.delete'|trans|desc('Delete'), - disabled: true, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - }) }} + {{ 'tab.urls.action.delete'|trans|desc('Delete') }} {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.urls.modal.message'|trans|desc('Delete the selected custom URL aliases permanently?'), diff --git a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig index 7837bba60..097f6973a 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/versions/tab.html.twig @@ -96,17 +96,17 @@ {% macro table_header_tools(form) %} {% set modal_data_target = 'modal-' ~ form.remove.vars.id %} - {{ component('ibexa:button', { - id: 'delete-translations-' ~ form.remove.vars.id, - html_type: 'button', - type: 'tertiary-alt', - size: 'small', - icon: 'trash', - disabled: true, - 'data-bs-toggle': 'modal', - 'data-bs-target': '#' ~ modal_data_target, - title: 'tab.versions.action.delete'|trans|desc('Delete version'), - }) }} + {% include '@ibexadesign/ui/modal/bulk_delete_confirmation.html.twig' with { 'id': modal_data_target, 'message': 'tab.versions.modal.message'|trans|desc('Do you want to delete the version(s)?'), diff --git a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig index cad2e8254..30cc265df 100644 --- a/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig +++ b/src/bundle/Resources/views/themes/admin/content_type/field_definitions.html.twig @@ -73,15 +73,14 @@ {% endfor %}
        - {{ component('ibexa:button', { - html_type: 'button', - type: 'secondary', - icon: 'add', - icon_size: 'small', - label: 'content_type.view.edit.add'|trans|desc('Add'), - class: 'ibexa-content-type-edit__add-field-definitions-group-btn', - 'data-is-disabled': is_field_definitions_draggable ? 'false' : 'true', - }) }} + {{ 'content_type.view.edit.add'|trans|desc('Add') }} {{ include('@ibexadesign/ui/component/popup_menu/popup_menu.html.twig', { 'items': grouped_field_defintions|keys|map(group => { From 5d8a43f1fdda622cd02ebcb04e187f42bbf6c9e9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 14 May 2026 13:26:28 +0200 Subject: [PATCH 230/234] style: remove redundant Twig button html_type attrs --- .../views/themes/admin/account/bookmarks/list.html.twig | 1 - .../themes/admin/account/bookmarks/toggle_switch.html.twig | 2 -- .../themes/admin/account/notifications/filters.html.twig | 1 - .../themes/admin/account/notifications/list_all.html.twig | 3 --- .../themes/admin/account/notifications/list_item.html.twig | 1 - .../admin/account/notifications/list_item_all.html.twig | 3 --- .../themes/admin/account/notifications/side_panel.html.twig | 1 - .../themes/admin/content/modal/add_translation.html.twig | 1 - .../themes/admin/content/modal/draft_conflict.html.twig | 2 +- .../themes/admin/content/modal/location_trash.html.twig | 1 - .../views/themes/admin/content/modal/user_delete.html.twig | 2 +- .../themes/admin/content/modal/version_conflict.html.twig | 1 - .../views/themes/admin/content/tab/locations/tab.html.twig | 1 - .../themes/admin/content/tab/translations/tab.html.twig | 2 -- .../admin/content/tab/url/modal_add_custom_url.html.twig | 2 +- .../Resources/views/themes/admin/content/tab/urls.html.twig | 2 -- .../views/themes/admin/content/tab/versions/tab.html.twig | 1 - .../admin/content_type/content_type_group/list.html.twig | 1 - .../themes/admin/content_type/field_definitions.html.twig | 1 - .../views/themes/admin/content_type/field_types.html.twig | 2 -- .../Resources/views/themes/admin/content_type/list.html.twig | 2 -- .../themes/admin/content_type/relation_form_fields.html.twig | 1 - .../admin/content_type/relation_list_form_fields.html.twig | 1 - .../Resources/views/themes/admin/language/index.html.twig | 1 - .../admin/language/modal/delete_confirmation.html.twig | 2 +- .../themes/admin/limitation/udw_limitation_value.html.twig | 1 - .../Resources/views/themes/admin/link_manager/view.html.twig | 1 - .../Resources/views/themes/admin/object_state/list.html.twig | 1 - .../admin/object_state/object_state_group/list.html.twig | 1 - .../Resources/views/themes/admin/section/list.html.twig | 1 - .../themes/admin/section/modal/delete_confirmation.html.twig | 2 +- .../Resources/views/themes/admin/section/view.html.twig | 1 - src/bundle/Resources/views/themes/admin/trash/list.html.twig | 2 -- .../admin/trash/modal/empty_trash_confirmation.html.twig | 2 +- .../ui/component/adaptive_filters/adaptive_filters.html.twig | 1 - .../views/themes/admin/ui/component/alert/alert.html.twig | 1 - .../themes/admin/ui/component/details/details.html.twig | 1 - .../embedded_item_actions/embedded_item_actions.html.twig | 1 - .../admin/ui/component/extra_actions/extra_actions.html.twig | 1 - .../views/themes/admin/ui/component/input_text.html.twig | 1 - .../ui/component/inputs/input_date_time_picker.html.twig | 1 - .../admin/ui/component/side_panel/side_panel.html.twig | 2 -- .../themes/admin/ui/component/taggify/taggify_tag.html.twig | 1 - .../views/themes/admin/ui/dashboard/dashboard.html.twig | 1 - .../themes/admin/ui/field_type/edit/binary_base.html.twig | 1 - .../themes/admin/ui/field_type/edit/ibexa_author.html.twig | 3 --- .../admin/ui/field_type/edit/ibexa_binaryfile.html.twig | 1 - .../admin/ui/field_type/edit/ibexa_gmap_location.html.twig | 2 -- .../themes/admin/ui/field_type/edit/ibexa_image.html.twig | 1 - .../admin/ui/field_type/edit/ibexa_image_asset.html.twig | 1 - .../themes/admin/ui/field_type/edit/ibexa_media.html.twig | 1 - .../themes/admin/ui/field_type/edit/relation_base.html.twig | 4 ---- .../Resources/views/themes/admin/ui/form_fields.html.twig | 2 -- src/bundle/Resources/views/themes/admin/ui/layout.html.twig | 2 +- .../Resources/views/themes/admin/ui/layout_error.html.twig | 2 +- .../themes/admin/ui/modal/bulk_delete_confirmation.html.twig | 1 - .../themes/admin/ui/modal/delete_confirmation.html.twig | 1 - .../themes/admin/ui/on_the_fly/create_on_the_fly.html.twig | 4 ++-- .../themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig | 4 ++-- .../Resources/views/themes/admin/url_wildcard/list.html.twig | 2 -- .../views/themes/admin/url_wildcard/modal_create.html.twig | 2 +- .../views/themes/admin/user/invitation/modal.html.twig | 5 ----- .../views/themes/admin/user/invitation/modal_entry.html.twig | 1 - .../Resources/views/themes/admin/user/policy/list.html.twig | 1 - .../Resources/views/themes/admin/user/role/list.html.twig | 1 - .../views/themes/admin/user/role_assignment/list.html.twig | 1 - 66 files changed, 13 insertions(+), 91 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig index 08f31a8e9..dfea479f5 100644 --- a/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/account/bookmarks/list.html.twig @@ -56,7 +56,6 @@ {% set col_action_btns %} {% if bookmark.userCanEdit %} {{ 'ibexa.notifications.search_form.title'|trans()|desc('Filters') }}
        {{ 'notification.mark_as_read'|trans|desc('Mark as read') }} ({{max_visible_notifications_count}}) diff --git a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig index b9a9137f5..aa5921dd2 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/draft_conflict.html.twig @@ -43,7 +43,7 @@ {% macro table_header_tools(show_add_button) %} {% if show_add_button %} - + {{ 'draft.conflict.add_new'|trans|desc('Add') }} {% endif %} diff --git a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig index 15d3149db..40eaaab08 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/location_trash.html.twig @@ -46,7 +46,6 @@ {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium disabled ids-btn--confirm-send-to-trash', 'disabled': true}}) }} diff --git a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig index 8b009e9c6..361999e6c 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/user_delete.html.twig @@ -12,7 +12,7 @@ {% block footer_content %} {{ form_start(form, {'action': path('ibexa.user.delete')}) }} {{ form_widget(form.delete, {'attr': {'class': 'ids-btn ids-btn--primary ids-btn--medium'}}) }} - + {{ 'delete.form.cancel'|trans|desc('Cancel') }} {{ form_end(form) }} diff --git a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig index a4ee0cb61..230de5c45 100644 --- a/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/modal/version_conflict.html.twig @@ -36,7 +36,6 @@ {{ 'version.conflict.form.continue'|trans|desc('Continue') }} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig index 81fcd2ea7..a65fcf60e 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/locations/tab.html.twig @@ -159,7 +159,6 @@ {% set modal_data_target = 'delete-content-types-modal' %} + {{ 'tab.urls.add.cancel'|trans|desc('Cancel') }} {% endblock %} diff --git a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig index 62c8d1cbe..3cfc2e814 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/urls.html.twig @@ -50,7 +50,6 @@ {% macro table_header_tools(form_custom_url_remove, can_edit_custom_url) %} {% if can_edit_custom_url %}
        {{ 'field_definition.ibexa_selection.add_option'|trans({}, 'ibexa_content_type')|desc('Add an option') }} + {{ 'language.form.cancel'|trans|desc('Cancel') }} {% endblock %} diff --git a/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig b/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig index 6b009c19b..2c61cf00b 100755 --- a/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig +++ b/src/bundle/Resources/views/themes/admin/limitation/udw_limitation_value.html.twig @@ -9,7 +9,6 @@ 'is_loading_state': true })|e('html_attr') %} + {{ 'form.cancel'|trans|desc('Cancel') }} {{ form_end(form) }} diff --git a/src/bundle/Resources/views/themes/admin/section/view.html.twig b/src/bundle/Resources/views/themes/admin/section/view.html.twig index 135b1ce44..22a84a91f 100644 --- a/src/bundle/Resources/views/themes/admin/section/view.html.twig +++ b/src/bundle/Resources/views/themes/admin/section/view.html.twig @@ -54,7 +54,6 @@ {% set delete_btn_toggle = deletable ? 'modal' : '' %} {% set delete_btn_target = deletable ? '#delete-section-modal' : '' %} + {{ 'trash.delete.button.cancel'|trans|desc('Cancel') }} {{ form_widget(form.empty_trash, {'label_attr': {'class': 'checkbox-inline'}, 'attr': {'hidden': true}}) }} diff --git a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig index 5f309c052..cd82bef89 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/adaptive_filters/adaptive_filters.html.twig @@ -119,7 +119,6 @@ {% endblock %} {% block action_clear %}

        {{ title|default('') }}

        {% block header %} {% block footer %} diff --git a/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig index 2a3bebd69..98fb4ac55 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/taggify/taggify_tag.html.twig @@ -1,7 +1,6 @@
        {{ name }} diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig index e51fd03bf..f8d9a761f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_author.html.twig @@ -13,7 +13,6 @@
        - + {{ 'back.to.top'|trans|desc('Go to top') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig b/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig index 4b74c77dd..cf9b09253 100644 --- a/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/layout_error.html.twig @@ -67,7 +67,7 @@ {% if not is_back_to_top_disabled|default(false) %} {% block back_to_top %}
        - + {{ 'back.to.top'|trans|desc('Go to top') }} diff --git a/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig index e63dd278e..54d2b333d 100644 --- a/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/modal/bulk_delete_confirmation.html.twig @@ -19,7 +19,6 @@ {{ delete_label }} diff --git a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig index 6ea9600ab..25e25211a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/modal/delete_confirmation.html.twig @@ -13,7 +13,6 @@ {% set cancel_button_rendered %} {%- block cancel_button -%} diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig index b8bc78de5..b987dcc1c 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/create_on_the_fly.html.twig @@ -11,12 +11,12 @@ {% set context_actions %} {% set menu_items %}
      • - + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }}
      • - + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }}
      • diff --git a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig index 89a95c77e..4d9610a34 100644 --- a/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/on_the_fly/edit_on_the_fly.html.twig @@ -11,12 +11,12 @@ {% set context_actions %} {% set menu_items %}
      • - + {{ 'on_the_fly.confirm'|trans()|desc('Publish') }}
      • - + {{ 'on_the_fly.cancel'|trans()|desc('Discard') }}
      • diff --git a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig index ac5db5316..85973d8d5 100644 --- a/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig +++ b/src/bundle/Resources/views/themes/admin/url_wildcard/list.html.twig @@ -101,7 +101,6 @@ {% block actions %} + {{ 'url_wildcard.modal.create.cancel'|trans|desc('Cancel') }} {% endblock %} diff --git a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig index 42553ecf1..a763b8258 100644 --- a/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig +++ b/src/bundle/Resources/views/themes/admin/user/invitation/modal.html.twig @@ -75,7 +75,6 @@ {% endblock %} {% block actions %} @@ -168,7 +164,6 @@ }, }) }} {% block entry_form_fields %}{% endblock %} Date: Thu, 14 May 2026 14:09:10 +0200 Subject: [PATCH 231/234] fix: use Twig button tags in admin UI templates --- .../views/themes/admin/ui/action_list.html.twig | 15 ++++++--------- .../collapse_all_btn/collapse_all_btn.html.twig | 11 ++++++++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig index 6985f857f..57c2b7c3a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig @@ -23,15 +23,12 @@
        {% set btn_data_dropdown_trigger = 'ibexa-action-list-more__trigger-' ~ random() %} - + {{ include('@ibexadesign/ui/component/multilevel_popup_menu/multilevel_popup_menu.html.twig', { groups: [{ id: 'default', items: menu_items }], diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig index 9c6d60aa0..811293001 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig @@ -1,7 +1,12 @@ {% trans_default_domain 'ibexa_collapse' %}
        - + + {{ 'collapse.collapse_all'|trans({}, 'ibexa_collapse')|desc('Collapse all sections') }} +
        From f829bc4244a769c2b90d26a641e629cfe49138c7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 14 May 2026 15:56:53 +0200 Subject: [PATCH 232/234] style: fix Twig button tag indentation in admin UI templates --- .../views/themes/admin/ui/action_list.html.twig | 10 +++++----- .../collapse_all_btn/collapse_all_btn.html.twig | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig index 57c2b7c3a..d46dd47ad 100644 --- a/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/action_list.html.twig @@ -24,11 +24,11 @@ {% set btn_data_dropdown_trigger = 'ibexa-action-list-more__trigger-' ~ random() %} + type="tertiary-alt" + icon="options" + icon_only="true" + data-dropdown-trigger="{{ btn_data_dropdown_trigger }}" + /> {{ include('@ibexadesign/ui/component/multilevel_popup_menu/multilevel_popup_menu.html.twig', { groups: [{ id: 'default', items: menu_items }], diff --git a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig index 811293001..8e9a28006 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/collapse_all_btn/collapse_all_btn.html.twig @@ -2,11 +2,11 @@
        - {{ 'collapse.collapse_all'|trans({}, 'ibexa_collapse')|desc('Collapse all sections') }} - + type="tertiary-alt" + size="small" + class="ibexa-multi-collapse-btn" + data-multi-collapse-btn-id="{{ multi_collapse_btn_id }}" + > + {{ 'collapse.collapse_all'|trans({}, 'ibexa_collapse')|desc('Collapse all sections') }} +
        From 7355c9f1bdcbe187d52702508ab0de06e84fbc3d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 15 May 2026 08:28:07 +0200 Subject: [PATCH 233/234] remove TODOs --- .../views/themes/admin/content/content_preview.html.twig | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig b/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig index 3d017f726..68ff88a65 100644 --- a/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/content_preview.html.twig @@ -18,10 +18,6 @@ {{ form(site_access_form) }}