From 1795e8b718ed2c822ea756d3e602c2dbb2034d36 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 27 Mar 2026 13:18:28 +0100 Subject: [PATCH 001/105] IBX-11506: Add DS toggle form theme --- .../ui/form_fields/toggle_widget_ds.html.twig | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig diff --git a/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig b/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig new file mode 100644 index 0000000000..5ba0505aa0 --- /dev/null +++ b/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig @@ -0,0 +1,40 @@ +{%- block toggle_widget -%} + {% set default_label_on = 'toggle_widget.label.on'|trans|desc('On') %} + {% set default_label_off = 'toggle_widget.label.off'|trans|desc('Off') %} + {% set field_type = block_prefixes[1]|default('choice') %} + {% set attr = attr|default({}) %} + {% set is_disabled = disabled|default(false) or attr.readonly|default(false) %} + + {% if checked|default(false) %} + {% set attr = attr|merge({ 'checked': 'checked' }) %} + {% endif %} + {% if value is defined %} + {% set attr = attr|merge({ 'value': value }) %} + {% endif %} + + {% set input_content %} + {% if custom_inputs is defined %} + {{ custom_inputs }} + {% elseif field_type == 'choice' %} + {{ block('choice_widget') }} + {% else %} + + {% endif %} + {% endset %} + + + + {{ input_content|raw }} + + +{%- endblock -%} From 95e143bb50d271a3a3a6cc3ed8056ec1a5c6d0bd Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 27 Mar 2026 13:18:39 +0100 Subject: [PATCH 002/105] IBX-11506: Use DS toggle form theme in admin UI --- .../Resources/views/themes/admin/ui/form_fields.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 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 91a7092d11..70715d1a84 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 @@ -1,6 +1,6 @@ {% extends 'bootstrap_5_layout.html.twig' %} -{% use '@ibexadesign/ui/form_fields/toggle_widget.html.twig' %} +{% use '@ibexadesign/ui/form_fields/toggle_widget_ds.html.twig' %} {% use '@ibexadesign/ui/form_fields/dropdown_widget.html.twig' %} {%- block button_widget -%} @@ -504,7 +504,7 @@ {%- endblock %} {% block content_type_meta_field_definition_enabled_row -%} - {% use '@ibexadesign/ui/form_fields/toggle_widget.html.twig' %} + {% use '@ibexadesign/ui/form_fields/toggle_widget_ds.html.twig' %}
{{ block('form_label') }} From 4fd68b24c7a9b77f72f49ffb53c93f69590c107f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 27 Mar 2026 13:18:39 +0100 Subject: [PATCH 003/105] IBX-11506: Use DS toggle in custom URL checkbox --- .../views/themes/admin/content/tab/url/checkbox.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig index 6a0a768ed0..e005f17794 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig @@ -1,4 +1,4 @@ -{% use '@ibexadesign/ui/form_fields/toggle_widget.html.twig' %} +{% use '@ibexadesign/ui/form_fields/toggle_widget_ds.html.twig' %} {%- block checkbox_widget -%} {% if value is defined %} From 26067efb0c4c31f8fe5947cd9f28519f11d0b642 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 27 Mar 2026 13:18:57 +0100 Subject: [PATCH 004/105] IBX-11506: Use DS toggle in boolean field --- .../themes/admin/ui/field_type/edit/ibexa_boolean.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_boolean.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_boolean.html.twig index c6a286b4f7..930734b00f 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_boolean.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/ibexa_boolean.html.twig @@ -1,4 +1,4 @@ -{% use '@ibexadesign/ui/form_fields/toggle_widget.html.twig' %} +{% use '@ibexadesign/ui/form_fields/toggle_widget_ds.html.twig' %} {% block ezplatform_fieldtype_ibexa_boolean_label %} {{ block('form_label') }} From a9254c974ea63fa4b90fd08954eedbab3b2a32f7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Fri, 27 Mar 2026 13:18:57 +0100 Subject: [PATCH 005/105] IBX-11506: Use DS toggle in locations tab --- .../admin/content/tab/locations/tab.html.twig | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 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 0fa5775eeb..b5ffabc308 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 @@ -48,25 +48,25 @@ {% set col_raw %}
-
- - - {{ 'toggle_widget.label.on'|trans|desc('On') }} - - - {{ 'toggle_widget.label.off'|trans|desc('Off') }} - -
+ +
{% endblock %} @@ -153,4 +153,3 @@ {% endembed %} {% endblock %} {% endembed %} - From 8173dc989e6c969f9987ae0157dd184ff7a0d348 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:38:54 +0100 Subject: [PATCH 049/105] IBX-11506: Update table checkbox styles --- src/bundle/Resources/public/scss/_tables.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/public/scss/_tables.scss b/src/bundle/Resources/public/scss/_tables.scss index 2af7e8cd0d..7ae670c80f 100644 --- a/src/bundle/Resources/public/scss/_tables.scss +++ b/src/bundle/Resources/public/scss/_tables.scss @@ -40,7 +40,7 @@ border-color: $ibexa-color-primary; } - .ibexa-input--checkbox, + .ids-input--checkbox, .ids-input--radio { border-color: $ibexa-color-primary; } @@ -149,7 +149,7 @@ } &__header-cell-checkbox { - &.ibexa-input--checkbox { + &.ids-input--checkbox { margin-bottom: 0; } } @@ -186,7 +186,7 @@ &--has-checkbox { width: calculateRem(48px); - .ibexa-input--checkbox { + .ids-input--checkbox { float: left; margin-bottom: 0; } @@ -212,7 +212,7 @@ &--content-center { text-align: center; - .ibexa-input--checkbox { + .ids-input--checkbox { margin-bottom: 0; } } From 71bf6927b4e5426eb5660a546ce0e27e7e00cee2 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:38:47 +0100 Subject: [PATCH 050/105] IBX-11506: Update bulk toggle checkbox selectors --- src/bundle/Resources/public/js/scripts/button.state.toggle.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/js/scripts/button.state.toggle.js b/src/bundle/Resources/public/js/scripts/button.state.toggle.js index a06a27b90f..e17acd6ac0 100644 --- a/src/bundle/Resources/public/js/scripts/button.state.toggle.js +++ b/src/bundle/Resources/public/js/scripts/button.state.toggle.js @@ -1,8 +1,9 @@ (function (global, doc) { + const SELECTOR_TABLE_CHECKBOX = '.ids-input--checkbox'; const toggleForms = doc.querySelectorAll('.ibexa-toggle-btn-state'); toggleForms.forEach((toggleForm) => { - const checkboxes = [...toggleForm.querySelectorAll('.ibexa-table__cell--has-checkbox .ibexa-input--checkbox')]; + const checkboxes = [...toggleForm.querySelectorAll(`.ibexa-table__cell--has-checkbox ${SELECTOR_TABLE_CHECKBOX}`)]; const buttonRemove = doc.querySelector(toggleForm.dataset.toggleButtonId); if (!buttonRemove) { From f20f431e0aa7ed04530a9ba2ee82e77ed374fbd9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:38:39 +0100 Subject: [PATCH 051/105] IBX-11506: Update table checkbox selectors --- src/bundle/Resources/public/js/scripts/admin.table.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/admin.table.js b/src/bundle/Resources/public/js/scripts/admin.table.js index cd95832999..325c822c9c 100644 --- a/src/bundle/Resources/public/js/scripts/admin.table.js +++ b/src/bundle/Resources/public/js/scripts/admin.table.js @@ -1,4 +1,5 @@ (function (global, doc) { + const SELECTOR_TABLE_CHECKBOX = '.ids-input--checkbox'; const ibexaTables = doc.querySelectorAll('.ibexa-table'); const setMainCheckboxState = (mainCheckbox, subCheckboxes, event) => { const isFromJS = event?.detail?.isFromJS ?? false; @@ -61,9 +62,9 @@ } const mainCheckboxIndex = [...headCells].indexOf(headCellWithCheckbox); - const mainCheckbox = headCellWithCheckbox.querySelector('.ibexa-input--checkbox'); + const mainCheckbox = headCellWithCheckbox.querySelector(SELECTOR_TABLE_CHECKBOX); const subCheckboxes = tableBody.querySelectorAll( - `.ibexa-table__cell--has-checkbox:nth-child(${mainCheckboxIndex + 1}) .ibexa-input--checkbox`, + `.ibexa-table__cell--has-checkbox:nth-child(${mainCheckboxIndex + 1}) ${SELECTOR_TABLE_CHECKBOX}`, ); if (!mainCheckbox) { @@ -138,7 +139,7 @@ const uncheckCheckboxes = (table) => { const mainCheckbox = table.querySelector('.ibexa-table__header-cell-checkbox'); - const subCheckboxes = [...table.querySelectorAll('.ibexa-table__cell--has-checkbox .ibexa-input--checkbox')]; + const subCheckboxes = [...table.querySelectorAll(`.ibexa-table__cell--has-checkbox ${SELECTOR_TABLE_CHECKBOX}`)]; mainCheckbox.checked = false; mainCheckbox.indeterminate = false; From ffd6cc51db23073539e9863f0c931ad09ccb3e21 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:38:31 +0100 Subject: [PATCH 052/105] IBX-11506: Drop legacy checkbox classes from table headers --- .../themes/admin/ui/component/table/table_head_cell.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig index 0712156e72..d5eb915727 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig @@ -14,7 +14,7 @@ {%- if has_checkbox|default(false) -%}
From dba27e93f527b87260fee47cbcc2be9deaa7e1b8 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:36:33 +0100 Subject: [PATCH 053/105] IBX-11506: Update author checkbox selector --- .../Resources/public/js/scripts/fieldType/ibexa_author.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 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 117997bd48..94ee075d34 100644 --- a/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js +++ b/src/bundle/Resources/public/js/scripts/fieldType/ibexa_author.js @@ -1,6 +1,7 @@ (function (global, doc, ibexa) { const SELECTOR_REMOVE_AUTHOR = '.ibexa-btn--remove-author'; const SELECTOR_AUTHOR = '.ibexa-data-source__author'; + const SELECTOR_AUTHOR_CHECKBOX = '.ibexa-data-source__author-checkbox'; const SELECTOR_FIELD = '.ibexa-field-edit--ibexa_author'; const SELECTOR_LABEL = '.ibexa-data-source__label'; const SELECTOR_FIELD_EMAIL = '.ibexa-data-source__field--email'; @@ -104,7 +105,7 @@ toggleBulkDeleteButtonState(event) { const container = event.target.closest(SELECTOR_FIELD); - const checkboxes = container.querySelectorAll('.ibexa-input--checkbox'); + const checkboxes = container.querySelectorAll(SELECTOR_AUTHOR_CHECKBOX); const isAnyCheckboxSelected = [...checkboxes].some((checkbox) => checkbox.checked); const bulkDeleteButton = container.querySelector('.ibexa-btn--bulk-remove-author'); @@ -113,7 +114,7 @@ removeSelectedItems(event) { const container = event.target.closest(SELECTOR_FIELD); - const selectedCheckboxes = container.querySelectorAll('.ibexa-input--checkbox:checked'); + const selectedCheckboxes = container.querySelectorAll(`${SELECTOR_AUTHOR_CHECKBOX}:checked`); const bulkDeleteButton = container.querySelector('.ibexa-btn--bulk-remove-author'); selectedCheckboxes.forEach((checkbox) => checkbox.closest(SELECTOR_AUTHOR).remove()); @@ -246,7 +247,7 @@ }, { isValueValidator: false, - selector: '.ibexa-data-source__author .ibexa-input--checkbox', + selector: `.ibexa-data-source__author ${SELECTOR_AUTHOR_CHECKBOX}`, eventName: 'change', callback: 'toggleBulkDeleteButtonState', }, From 1cf995f337b81828995b63e540a4071cc1b91748 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:36:11 +0100 Subject: [PATCH 054/105] IBX-11506: Drop legacy checkbox classes from author rows --- .../themes/admin/ui/field_type/edit/ibexa_author.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 e7c79d7343..42202618a1 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 @@ -52,7 +52,7 @@
From f60dcce1865113a4a5af2d2370367665fffb7932 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:35:02 +0100 Subject: [PATCH 055/105] IBX-11506: Update dropdown checkbox selector --- src/bundle/Resources/public/js/scripts/core/dropdown.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/js/scripts/core/dropdown.js b/src/bundle/Resources/public/js/scripts/core/dropdown.js index b69bf0c740..705905be42 100644 --- a/src/bundle/Resources/public/js/scripts/core/dropdown.js +++ b/src/bundle/Resources/public/js/scripts/core/dropdown.js @@ -152,7 +152,7 @@ this.sourceInput.querySelectorAll('option').forEach((option) => (option.selected = false)); this.itemsListContainer.querySelectorAll('.ibexa-dropdown__item--selected').forEach((option) => { - const checkbox = option.querySelector('.ibexa-input--checkbox'); + const checkbox = option.querySelector('.ibexa-dropdown__item-checkbox'); option.classList.remove('ibexa-dropdown__item--selected'); From f2e23af5f3a18b0c9e5027b3227ed9b36489c77e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 10:34:55 +0100 Subject: [PATCH 056/105] IBX-11506: Drop legacy checkbox classes from dropdown items --- .../themes/admin/ui/component/dropdown/dropdown_item.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig index 2e8ed6dac9..6e04189b9a 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig @@ -23,7 +23,7 @@ {% if is_selected %}ibexa-dropdown__item--selected{% endif %}" > {% if multiple is defined and multiple %} - + {% endif %} {% if icon is defined and icon != '' %} From a782ea54dea0d16e0afc2fde2c0e54eb30632a2d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:52:15 +0100 Subject: [PATCH 057/105] IBX-11506: Use Twig checkbox tag in table header cells --- .../admin/ui/component/table/table_head_cell.html.twig | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig index d5eb915727..5ae383acfb 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/table/table_head_cell.html.twig @@ -13,10 +13,11 @@ {%- block content -%} {%- if has_checkbox|default(false) -%}
- + />
{%- else -%} Date: Thu, 26 Mar 2026 09:50:23 +0100 Subject: [PATCH 058/105] IBX-11506: Use Twig checkbox tag in dropdown items --- .../admin/ui/component/dropdown/dropdown_item.html.twig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig b/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig index 6e04189b9a..c5eeb0c030 100644 --- a/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/component/dropdown/dropdown_item.html.twig @@ -23,7 +23,11 @@ {% if is_selected %}ibexa-dropdown__item--selected{% endif %}" > {% if multiple is defined and multiple %} - + {% endif %} {% if icon is defined and icon != '' %} From abb8b822aefa7f2d820a3e6dd3853011a907a2b9 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:45:25 +0100 Subject: [PATCH 059/105] IBX-11506: Use Twig checkbox tag in language list --- .../themes/admin/language/tab/languages.html.twig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 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 ab47eae92b..2f9508cc13 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 @@ -39,13 +39,13 @@ {% set col_raw %}
- + :disabled="true" + :checked="language.enabled" + />
{% endset %} {% set body_row_cols = body_row_cols|merge([{ From b27cd8271c8ba8bb2db76a8f38cb6eda9ea0b2f2 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:45:16 +0100 Subject: [PATCH 060/105] IBX-11506: Use Twig checkbox tag in binary preview --- .../ui/field_type/edit/binary_base_fields.html.twig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig index 89f31e52d4..44feda7f3c 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig @@ -1,7 +1,14 @@ {% block checkbox_row %}
- + {{ translation_domain is same as(false) ? label : label|trans({}, translation_domain) }}
From 2f86b8200c40a33b29f881ea4064b37690c4f66a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:45:16 +0100 Subject: [PATCH 061/105] IBX-11506: Use Twig checkbox tag in author rows --- .../admin/ui/field_type/edit/ibexa_author.html.twig | 10 +++++----- 1 file changed, 5 insertions(+), 5 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 42202618a1..ac41b62722 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 @@ -50,11 +50,11 @@
{{- form_widget(form.id) -}}
- +
{{- 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 }}) -}} From 030909b2fe508f488b8a2e3afee891d6019113e7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:45:16 +0100 Subject: [PATCH 062/105] IBX-11506: Use Twig checkbox tag in notifications list --- .../admin/account/notifications/list_item_all.html.twig | 8 ++++---- 1 file changed, 4 insertions(+), 4 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 db8387fc5d..3f1b97dd8b 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 @@ -87,11 +87,11 @@ {% embed '@ibexadesign/ui/component/table/table_body_cell.html.twig' with { class: 'ibexa-table__cell--has-checkbox' } %} {% block content %}
-
{% endblock %} From c9af3e3aa64e026b57efefdfa0e61c04a8b87462 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 26 Mar 2026 09:45:16 +0100 Subject: [PATCH 063/105] IBX-11506: Use Twig checkbox tag in language details --- .../views/themes/admin/language/index.html.twig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/language/index.html.twig b/src/bundle/Resources/views/themes/admin/language/index.html.twig index faf9099ddc..608fa21844 100644 --- a/src/bundle/Resources/views/themes/admin/language/index.html.twig +++ b/src/bundle/Resources/views/themes/admin/language/index.html.twig @@ -60,13 +60,13 @@ {% block content %} {% set enable_checkbox_raw %}
- + :disabled="true" + :checked="language.enabled" + />
{% endset %} {% set language_items = [ From 889ef8294f893117d48c5efa2b393a12b261cb0e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 28 Mar 2026 17:15:02 +0100 Subject: [PATCH 064/105] IBX-11506: Update language checkbox locator --- src/lib/Behat/Page/LanguagePage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Page/LanguagePage.php b/src/lib/Behat/Page/LanguagePage.php index 9b51734af9..cf2287a71a 100644 --- a/src/lib/Behat/Page/LanguagePage.php +++ b/src/lib/Behat/Page/LanguagePage.php @@ -137,7 +137,7 @@ protected function specifyLocators(): array return [ new VisibleCSSLocator('pageTitle', '.ibexa-page-title h1'), new VisibleCSSLocator('button', '.ibexa-btn'), - new VisibleCSSLocator('enabledField', '.ibexa-input--checkbox'), + new VisibleCSSLocator('enabledField', '.ibexa-language-status-checkbox'), new VisibleCSSLocator('languagePropertiesItem', '.ibexa-details__item'), new VisibleCSSLocator('languagePropertiesLabel', '.ibexa-details__item-label'), new VisibleCSSLocator('languagePropertiesValue', '.ibexa-details__item-content'), From 0cd39b357290ecf154fb7a7a454a768d2d1f5545 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 28 Mar 2026 17:15:02 +0100 Subject: [PATCH 065/105] IBX-11506: Update UDW checkbox locator --- src/lib/Behat/Component/UniversalDiscoveryWidget.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/UniversalDiscoveryWidget.php b/src/lib/Behat/Component/UniversalDiscoveryWidget.php index 8a133284ec..4ce85b1d6f 100644 --- a/src/lib/Behat/Component/UniversalDiscoveryWidget.php +++ b/src/lib/Behat/Component/UniversalDiscoveryWidget.php @@ -222,7 +222,7 @@ protected function specifyLocators(): array new CSSLocator('categoryTabSelector', '.c-tab-selector__item'), new CSSLocator('selectedTab', '.c-tab-selector__item--selected'), new VisibleCSSLocator('contentIframe', '.c-content-edit__iframe, .m-content-create__iframe'), - new VisibleCSSLocator('multiselect', '.m-ud .c-finder-leaf .ibexa-input--checkbox'), + new VisibleCSSLocator('multiselect', '.m-ud .c-finder-leaf .ids-input--checkbox'), new VisibleCSSLocator('selectedItemName', '.c-content-meta-preview__content-name'), new VisibleCSSLocator('previewImage', '.c-content-meta-preview__preview'), new VisibleCSSLocator('createNewButton', '.c-content-create-button__btn'), From a406c61c1c44812b6470249375f084b35d69c3fe Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sat, 28 Mar 2026 17:15:02 +0100 Subject: [PATCH 066/105] IBX-11506: Update delete dialog checkbox locator --- src/lib/Behat/Component/DeleteContentDialog.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/DeleteContentDialog.php b/src/lib/Behat/Component/DeleteContentDialog.php index ed27cd3b2f..26912eab00 100644 --- a/src/lib/Behat/Component/DeleteContentDialog.php +++ b/src/lib/Behat/Component/DeleteContentDialog.php @@ -20,7 +20,7 @@ public function confirmTrashing(): void public function specifyLocators(): array { return array_merge(parent::specifyLocators(), [ - new VisibleCSSLocator('trashConfirmCheckbox', '.modal-content .ibexa-input--checkbox'), + new VisibleCSSLocator('trashConfirmCheckbox', '.modal-content .ids-input--checkbox'), ]); } } From fa41efb9359fc8b4128477c9eaf2ccdfd4afb58d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 30 Mar 2026 15:21:54 +0200 Subject: [PATCH 067/105] IBX-11506: Fix dropdown checkbox selectors --- .../Resources/public/js/scripts/core/dropdown.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/public/js/scripts/core/dropdown.js b/src/bundle/Resources/public/js/scripts/core/dropdown.js index 705905be42..f587021d99 100644 --- a/src/bundle/Resources/public/js/scripts/core/dropdown.js +++ b/src/bundle/Resources/public/js/scripts/core/dropdown.js @@ -211,7 +211,11 @@ const value = this.getValueFromElement(element); if (value && !this.canSelectOnlyOne) { - element.querySelector('.ibexa-input').checked = selected; + const checkbox = element.querySelector('.ibexa-dropdown__item-checkbox'); + + if (checkbox) { + checkbox.checked = selected; + } } this.itemsListContainer.querySelector(`[data-value=${value}]`).classList.toggle('ibexa-dropdown__item--selected', selected); @@ -314,7 +318,11 @@ itemSelected.classList.remove('ibexa-dropdown__item--selected'); if (!this.canSelectOnlyOne) { - itemSelected.querySelector('.ibexa-input').checked = false; + const checkbox = itemSelected.querySelector('.ibexa-dropdown__item-checkbox'); + + if (checkbox) { + checkbox.checked = false; + } } if (optionSelect) { From a54dce5a496c581a423e9afe61ddb20cdd16c463 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Mon, 30 Mar 2026 15:22:29 +0200 Subject: [PATCH 068/105] IBX-11506: Update dropdown checkbox styles --- src/bundle/Resources/public/scss/_dropdown.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/public/scss/_dropdown.scss b/src/bundle/Resources/public/scss/_dropdown.scss index 5cb76a2d78..26f2965a36 100644 --- a/src/bundle/Resources/public/scss/_dropdown.scss +++ b/src/bundle/Resources/public/scss/_dropdown.scss @@ -281,7 +281,7 @@ } } - .ibexa-input { + .ibexa-dropdown__item-checkbox { flex-shrink: 0; margin: 0 calculateRem(16px) 0 0; } From dc2c31ef7ab2066aef9d2d99729b707d61dc819d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 31 Mar 2026 10:49:57 +0200 Subject: [PATCH 069/105] IBX-11507-use-ds-radio-button: restore checked choice input background --- src/bundle/Resources/public/scss/_inputs.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/bundle/Resources/public/scss/_inputs.scss b/src/bundle/Resources/public/scss/_inputs.scss index 05b9140b8b..b80fd66d33 100644 --- a/src/bundle/Resources/public/scss/_inputs.scss +++ b/src/bundle/Resources/public/scss/_inputs.scss @@ -529,6 +529,10 @@ } } +.form-check-input:checked { + background-color: $ibexa-color-white; +} + .form-check-input:checked[type=checkbox] { --bs-form-check-bg-image: none; } From 0002a0860cc8a861a516599a03fa383b956e486b Mon Sep 17 00:00:00 2001 From: tischsoic Date: Tue, 31 Mar 2026 10:52:25 +0200 Subject: [PATCH 070/105] IBX-11507-use-ds-radio-button: restore form-check-input classes in form widgets --- .../views/themes/admin/ui/form_fields.html.twig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 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 2cdfdb26c1..ac7db64eb6 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 @@ -148,7 +148,13 @@ {%- endblock -%} {%- block checkbox_widget -%} - {%- set attr = attr|merge({class: 'ids-input ids-input--checkbox ' ~ attr.class|default('') }) -%} + {%- set attr_class = attr.class|default('') -%} + {%- if 'btn-check' not in attr_class -%} + {%- set attr_class = 'ids-input ids-input--checkbox form-check-input ' ~ attr_class -%} + {%- else -%} + {%- set attr_class = 'ids-input ids-input--checkbox ' ~ attr_class -%} + {%- endif -%} + {%- set attr = attr|merge({class: attr_class|trim }) -%} {{ parent() }} {%- endblock -%} @@ -156,6 +162,7 @@ {%- set attr_class = attr.class|default('') -%} {%- set row_class = '' -%} {%- if 'btn-check' not in attr_class -%} + {%- set attr_class = attr_class ~ ' form-check-input' -%} {%- set row_class = 'form-check' -%} {%- endif -%} {%- set parent_label_class = parent_label_class|default(label_attr.class|default('')) -%} @@ -185,7 +192,7 @@ {%- endblock -%} {%- block trash_item_checkbox_widget -%} - + {%- endblock -%} {%- block _trash_item_restore_restore_widget -%} From 0bf4bdf50bf1eb9643d6dba9c9c6b48b882aca3f Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 1 Apr 2026 23:17:50 +0200 Subject: [PATCH 071/105] IBX-11506: update URL alias toggle locator --- src/lib/Behat/Component/CreateUrlAliasModal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/CreateUrlAliasModal.php b/src/lib/Behat/Component/CreateUrlAliasModal.php index dabaa05191..215d82bb26 100644 --- a/src/lib/Behat/Component/CreateUrlAliasModal.php +++ b/src/lib/Behat/Component/CreateUrlAliasModal.php @@ -76,7 +76,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('createButton', '#custom_url_add_add'), new VisibleCSSLocator('pathInput', '#custom_url_add_path'), new VisibleCSSLocator('languageDropdown', '.ibexa-custom-url-from__item .ibexa-dropdown__selection-info'), - new VisibleCSSLocator('redirectToggle', '.ibexa-custom-url-from__item .ibexa-toggle'), + new VisibleCSSLocator('redirectToggle', '.ibexa-custom-url-from__item .ids-toggle'), ]; } } From 5bc980aec274d69c2861f7c6feba51f38d9d9eba Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 1 Apr 2026 23:18:10 +0200 Subject: [PATCH 072/105] IBX-11506: fix focus mode toggle state locator --- src/lib/Behat/Component/UpperMenu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/UpperMenu.php b/src/lib/Behat/Component/UpperMenu.php index afa6258a23..9aa798661e 100644 --- a/src/lib/Behat/Component/UpperMenu.php +++ b/src/lib/Behat/Component/UpperMenu.php @@ -99,7 +99,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('userSettingsPopup', '.ibexa-header-user-menu .ibexa-header-user-menu__popup-menu'), new VisibleCSSLocator('searchInput', '.ibexa-main-header #search_query'), new VisibleCSSLocator('searchButton', '.ibexa-main-header .ibexa-input-text-wrapper__action-btn--search'), - new VisibleCSSLocator('userFocusEnabled', '[name="focus_mode_change"] .ids-toggle__label'), + new VisibleCSSLocator('userFocusEnabled', '[name="focus_mode_change"] .ids-toggle--checked'), new VisibleCSSLocator('userFocusMode', '[name="focus_mode_change"] .ids-toggle__widget'), new VisibleCSSLocator('focusModeBadge', '.ibexa-user-mode-badge'), new VisibleCSSLocator('siteDropdown', '.ibexa-preview-context-switch-form .ibexa-dropdown'), From d0fd38c940ebff424b397689c6531f3781cff827 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Wed, 1 Apr 2026 23:19:05 +0200 Subject: [PATCH 073/105] IBX-11506: wait for dropdown popover visibility --- src/lib/Behat/Component/IbexaDropdown.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lib/Behat/Component/IbexaDropdown.php b/src/lib/Behat/Component/IbexaDropdown.php index c1fad443b2..d9150afc9a 100644 --- a/src/lib/Behat/Component/IbexaDropdown.php +++ b/src/lib/Behat/Component/IbexaDropdown.php @@ -10,7 +10,6 @@ use Ibexa\Behat\Browser\Component\Component; use Ibexa\Behat\Browser\Element\Condition\ElementExistsCondition; -use Ibexa\Behat\Browser\Element\Condition\ElementTransitionHasEndedCondition; use Ibexa\Behat\Browser\Element\Criterion\ElementTextCriterion; use Ibexa\Behat\Browser\Element\Criterion\ElementTextFragmentCriterion; use Ibexa\Behat\Browser\Locator\VisibleCSSLocator; @@ -21,7 +20,7 @@ public function verifyIsLoaded(): void { $this->getHTMLPage() ->setTimeout(5) - ->waitUntilCondition(new ElementTransitionHasEndedCondition($this->getHTMLPage(), $this->getLocator('isIbexaDropdownVisible'))); + ->waitUntilCondition(new ElementExistsCondition($this->getHTMLPage(), $this->getLocator('isIbexaDropdownVisible'))); } protected function specifyLocators(): array From 85e2669fe3ef544a0b425c9098eacb838620b6f2 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 09:46:58 +0200 Subject: [PATCH 074/105] IBX-11506: wait for focus mode state update --- src/lib/Behat/Component/UpperMenu.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/Behat/Component/UpperMenu.php b/src/lib/Behat/Component/UpperMenu.php index 9aa798661e..c4708dde07 100644 --- a/src/lib/Behat/Component/UpperMenu.php +++ b/src/lib/Behat/Component/UpperMenu.php @@ -65,6 +65,14 @@ public function setFocusMode(bool $expectedModeStatus): void if ($expectedModeStatus != $isEnabled) { $this->getHTMLPage()->find($this->getLocator('userFocusMode'))->click(); + + $this->getHTMLPage()->setTimeout(10)->waitUntil(function (): bool { + return !$this->getHTMLPage()->findAll($this->getLocator('userSettingsPopup'))->any(); + }, 'Focus mode dropdown did not close after toggling'); + + $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($expectedModeStatus): bool { + return $this->getHTMLPage()->findAll($this->getLocator('focusModeBadge'))->any() === $expectedModeStatus; + }, 'Focus mode state did not update after toggling'); } else { $this->toggleUserDropdown(); } From 3b5f7999a40e079c8095852b86a8c59131d1179d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 09:47:42 +0200 Subject: [PATCH 075/105] IBX-11506: scope user enabled toggle checks --- src/lib/Behat/Component/Fields/User.php | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/lib/Behat/Component/Fields/User.php b/src/lib/Behat/Component/Fields/User.php index f39334bf41..dcfe808c2c 100644 --- a/src/lib/Behat/Component/Fields/User.php +++ b/src/lib/Behat/Component/Fields/User.php @@ -9,6 +9,7 @@ namespace Ibexa\AdminUi\Behat\Component\Fields; use Ibexa\Behat\Browser\Element\Condition\ElementExistsCondition; +use Ibexa\Behat\Browser\Element\Condition\ElementNotExistsCondition; use Ibexa\Behat\Browser\Element\Mapper\ElementTextMapper; use Ibexa\Behat\Browser\Locator\CSSLocatorBuilder; use Ibexa\Behat\Browser\Locator\VisibleCSSLocator; @@ -27,7 +28,7 @@ public function setValue(array $parameters): void $this->setSpecificFieldValue('password', $parameters['Password']); $this->setSpecificFieldValue('confirmPassword', $parameters['Confirm password']); $this->setSpecificFieldValue('email', $parameters['Email']); - $this->setEnabledField(true); + $this->setEnabledField(($parameters['Enabled'] ?? 'Yes') === 'Yes'); } public function setSpecificFieldValue(string $fieldName, string $value): void @@ -89,20 +90,29 @@ protected function specifyLocators(): array new VisibleCSSLocator('password', '#ezplatform_content_forms_user_create_fieldsData_user_account_value_password_first,#ezplatform_content_forms_user_update_fieldsData_user_account_value_password_first'), new VisibleCSSLocator('confirmPassword', '#ezplatform_content_forms_user_create_fieldsData_user_account_value_password_second,#ezplatform_content_forms_user_update_fieldsData_user_account_value_password_second'), new VisibleCSSLocator('email', '#ezplatform_content_forms_user_create_fieldsData_user_account_value_email,#ezplatform_content_forms_user_update_fieldsData_user_account_value_email'), - new VisibleCSSLocator('buttonEnabled', '.ids-toggle'), + new VisibleCSSLocator('buttonEnabled', '.ids-toggle__widget'), + new VisibleCSSLocator('buttonEnabledWrapper', '.ids-toggle'), new VisibleCSSLocator('buttonEnabledToggleConfirmation', '.ids-toggle--checked'), ]; } private function setEnabledField(bool $enabled): void { - $isCurrentlyEnabled = $this->getHTMLPage()->find($this->parentLocator)->find($this->getLocator('buttonEnabled'))->getText() === 'On'; + $parentField = $this->getHTMLPage()->find($this->parentLocator); + $enabledToggleSelector = CSSLocatorBuilder::base($this->parentLocator) + ->withDescendant($this->getLocator('buttonEnabledToggleConfirmation')) + ->build(); + $isCurrentlyEnabled = $parentField->findAll($this->getLocator('buttonEnabledToggleConfirmation'))->any(); + if ($isCurrentlyEnabled !== $enabled) { $script = sprintf("document.querySelector('%s %s').click()", $this->parentLocator->getSelector(), $this->getLocator('buttonEnabled')->getSelector()); $this->getHTMLPage()->executeJavaScript($script); - $this->getHTMLPage() - ->setTimeout(10) - ->waitUntilCondition(new ElementExistsCondition($this->getHTMLPage(), $this->getLocator('buttonEnabledToggleConfirmation'))); + + $condition = $enabled + ? new ElementExistsCondition($this->getHTMLPage(), $enabledToggleSelector) + : new ElementNotExistsCondition($this->getHTMLPage(), $enabledToggleSelector); + + $this->getHTMLPage()->setTimeout(10)->waitUntilCondition($condition); } } } From 7fc7c2413290fd8d02efb455bdd21bfb249d0b87 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 09:48:36 +0200 Subject: [PATCH 076/105] IBX-11506: stabilize last field definition expansion --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 32 +++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index 8c2c385171..a760fb5b07 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -12,7 +12,6 @@ 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; use Ibexa\Behat\Browser\Element\Criterion\ElementTextCriterion; use Ibexa\Behat\Browser\Element\Mapper\ElementTextMapper; @@ -23,7 +22,9 @@ class ContentTypeUpdatePage extends AdminUpdateItemPage public function fillFieldDefinitionFieldWithValue(string $fieldName, string $label, string $value): void { $this->expandLastFieldDefinition(); - $this->getHTMLPage() + $lastFieldDefinition = $this->getHTMLPage()->findAll($this->getLocator('fieldDefinition'))->last(); + + $lastFieldDefinition ->find($this->getLocator('fieldDefinitionOpenContainer')) ->findAll($this->getLocator('field')) ->getByCriterion(new ElementTextCriterion($label)) @@ -40,27 +41,22 @@ public function expandLastFieldDefinition(): void $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator): bool { $fieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); - $fieldDefinition->click(); + + if ($fieldDefinition->findAll($this->getLocator('fieldDefinitionOpenContainer'))->any()) { + return true; + } + + $fieldDefinition->find($this->getLocator('fieldDefinitionToggle'))->click(); + $this->getHTMLPage()->setTimeout(3)->waitUntilCondition( - new ElementNotExistsCondition( + new ElementExistsCondition( $fieldDefinition, - new VisibleCSSLocator('isCollapsed', 'button.collapsed') + $this->getLocator('fieldDefinitionOpenContainer') ) ); return true; }, 'Error expanding the last Field definition'); - - $lastFieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); - $this - ->getHTMLPage() - ->setTimeout(10) - ->waitUntilCondition( - new ElementTransitionHasEndedCondition( - $lastFieldDefinition, - new VisibleCSSLocator('transition', 'div') - ) - ); } public function specifyLocators(): array @@ -72,9 +68,9 @@ public function specifyLocators(): array new VisibleCSSLocator('contentTypeCategoryList', ' div.ibexa-content-type-edit__add-field-definitions-group > ul > li:nth-child(n):not(.ibexa-popup-menu__item-action--disabled)'), new VisibleCSSLocator('availableFieldLabelList', '.ibexa-available-field-types__list > li:not(.ibexa-available-field-type--hidden)'), 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('fieldDefinitionToggle', '.ibexa-collapse__toggle-btn--status'), new VisibleCSSLocator('selectLaunchEditorMode', '.form-check .ids-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 4c576f174416451808c315ad616b44f5e2252710 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 09:49:04 +0200 Subject: [PATCH 077/105] IBX-11506: cast DS toggle values to string --- .../themes/admin/ui/form_fields/toggle_widget_ds.html.twig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig b/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig index 5ba0505aa0..456d0f3d26 100644 --- a/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/form_fields/toggle_widget_ds.html.twig @@ -9,7 +9,7 @@ {% set attr = attr|merge({ 'checked': 'checked' }) %} {% endif %} {% if value is defined %} - {% set attr = attr|merge({ 'value': value }) %} + {% set attr = attr|merge({ 'value': value ~ '' }) %} {% endif %} {% set input_content %} @@ -28,7 +28,7 @@ :checked="checked|default(false)" :disabled="is_disabled" :required="required|default(false)" - :value="value is defined ? value : null" + value="{{ value is defined ? value ~ '' : '' }}" size="{{ small|default(false) ? 'small' : 'medium' }}" onLabel="{{ label_on|default(default_label_on) }}" offLabel="{{ label_off|default(default_label_off) }}" From da1a9d657a39dfe57bd9e1c59e8bebd090afa5fe Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 09:49:33 +0200 Subject: [PATCH 078/105] IBX-11506: cast binary checkbox values to string --- .../admin/ui/field_type/edit/binary_base_fields.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_fields.html.twig b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig index 44feda7f3c..9c23e338c9 100644 --- a/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig +++ b/src/bundle/Resources/views/themes/admin/ui/field_type/edit/binary_base_fields.html.twig @@ -4,7 +4,7 @@ Date: Thu, 2 Apr 2026 09:50:07 +0200 Subject: [PATCH 079/105] IBX-11506: cast URL toggle values to string --- .../views/themes/admin/content/tab/url/checkbox.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig b/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig index e005f17794..79508080d5 100644 --- a/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig +++ b/src/bundle/Resources/views/themes/admin/content/tab/url/checkbox.html.twig @@ -2,7 +2,7 @@ {%- block checkbox_widget -%} {% if value is defined %} - {% set attr = attr|merge({'value': value}) %} + {% set attr = attr|merge({'value': value ~ ''}) %} {% endif %} {% if checked %} {% set attr = attr|merge({'checked': checked}) %} From 68bb30e25dd103421f54a1aa065e26ab0659218a Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 10:09:51 +0200 Subject: [PATCH 080/105] IBX-11506: drop field definition hover transition wait --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index a760fb5b07..23332f8db9 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -91,14 +91,6 @@ public function addFieldDefinition(string $fieldName): void $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldSelector): bool { $this->getHTMLPage()->setTimeout(0)->find($fieldSelector)->mouseOver(); - $this->getHTMLPage() - ->setTimeout(0) - ->waitUntilCondition( - new ElementTransitionHasEndedCondition( - $this->getHTMLPage(), - $fieldSelector - ) - ); return true; }, 'Error hovering over the Field Definition to add'); From f447519b7d0242c695b9e684b89ec747923e34eb Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 10:10:29 +0200 Subject: [PATCH 081/105] IBX-11506: verify language enabled state from checkbox --- src/lib/Behat/Page/LanguagePage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Page/LanguagePage.php b/src/lib/Behat/Page/LanguagePage.php index cf2287a71a..27ed11946c 100644 --- a/src/lib/Behat/Page/LanguagePage.php +++ b/src/lib/Behat/Page/LanguagePage.php @@ -56,7 +56,7 @@ public function hasProperties(array $languageProperties): bool $hasEnabledField = $this ->getHTMLPage() ->find($this->getLocator('enabledField')) - ->getValue() === 'on'; + ->isChecked(); $shouldHaveEnabledField = 'true' === $languageProperties['Enabled']; $hasExpectedEnabledFieldValue = $hasEnabledField === $shouldHaveEnabledField; From 6315a29ed3ef4564d2d3f8081c61c4a111969553 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 10:28:10 +0200 Subject: [PATCH 082/105] IBX-11506: fail cleanly when context menu has no more button --- src/lib/Behat/Component/ContentActionsMenu.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/Behat/Component/ContentActionsMenu.php b/src/lib/Behat/Component/ContentActionsMenu.php index edaab7b13e..25d899c00c 100644 --- a/src/lib/Behat/Component/ContentActionsMenu.php +++ b/src/lib/Behat/Component/ContentActionsMenu.php @@ -28,9 +28,7 @@ public function clickButton(string $buttonName, ?string $groupName = null): void private function clickStandaloneButton(string $buttonName): void { - $buttons = $this->getHTMLPage() - ->findAll($this->getLocator('menuButton')) - ->filterBy(new ElementTextCriterion($buttonName)); + $buttons = $this->getStandaloneButtons($buttonName); if ($buttons->any()) { $buttons->single()->execute(new MouseOverAndClick()); @@ -38,12 +36,24 @@ private function clickStandaloneButton(string $buttonName): void return; } - $this->getHTMLPage()->find($this->getLocator('moreButton'))->click(); + $moreButtons = $this->getHTMLPage()->findAll($this->getLocator('moreButton')); + if (!$moreButtons->any()) { + throw new \RuntimeException(sprintf('Standalone action button "%s" was not found.', $buttonName)); + } + + $moreButtons->single()->click(); $this->getHTMLPage() ->findAll($this->getLocator('expandedMenuButton')) ->getByCriterion(new ElementTextCriterion($buttonName))->click(); } + private function getStandaloneButtons(string $buttonName) + { + return $this->getHTMLPage() + ->findAll($this->getLocator('menuButton')) + ->filterBy(new ElementTextCriterion($buttonName)); + } + private function clickButtonInGroup(string $groupName, string $buttonName): void { $group = $this->getHTMLPage() From aa54382a55b3a5074f2fad4d1eff99e197ca19ad Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 13:53:43 +0200 Subject: [PATCH 083/105] IBX-11506: use checkbox attribute for language state --- src/lib/Behat/Page/LanguagePage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Page/LanguagePage.php b/src/lib/Behat/Page/LanguagePage.php index 27ed11946c..2806557fa6 100644 --- a/src/lib/Behat/Page/LanguagePage.php +++ b/src/lib/Behat/Page/LanguagePage.php @@ -56,7 +56,7 @@ public function hasProperties(array $languageProperties): bool $hasEnabledField = $this ->getHTMLPage() ->find($this->getLocator('enabledField')) - ->isChecked(); + ->hasAttribute('checked'); $shouldHaveEnabledField = 'true' === $languageProperties['Enabled']; $hasExpectedEnabledFieldValue = $hasEnabledField === $shouldHaveEnabledField; From e67730f61780115661991945ef48f27b92382fd7 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 14:08:23 +0200 Subject: [PATCH 084/105] IBX-11506: expand field definitions from title toggle --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index 23332f8db9..81cbc4cc7f 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -46,9 +46,9 @@ public function expandLastFieldDefinition(): void return true; } - $fieldDefinition->find($this->getLocator('fieldDefinitionToggle'))->click(); + $fieldDefinition->find($this->getLocator('fieldDefinitionToggle'))->execute(new MouseOverAndClick()); - $this->getHTMLPage()->setTimeout(3)->waitUntilCondition( + $this->getHTMLPage()->setTimeout(5)->waitUntilCondition( new ElementExistsCondition( $fieldDefinition, $this->getLocator('fieldDefinitionOpenContainer') @@ -68,7 +68,7 @@ public function specifyLocators(): array new VisibleCSSLocator('contentTypeCategoryList', ' div.ibexa-content-type-edit__add-field-definitions-group > ul > li:nth-child(n):not(.ibexa-popup-menu__item-action--disabled)'), new VisibleCSSLocator('availableFieldLabelList', '.ibexa-available-field-types__list > li:not(.ibexa-available-field-type--hidden)'), new VisibleCSSLocator('workspace', '.ibexa-collapse__body-content'), - new VisibleCSSLocator('fieldDefinitionToggle', '.ibexa-collapse__toggle-btn--status'), + new VisibleCSSLocator('fieldDefinitionToggle', '.ibexa-collapse__toggle-btn--title'), new VisibleCSSLocator('selectLaunchEditorMode', '.form-check .ids-input--radio'), new VisibleCSSLocator('fieldDefinitionOpenContainer', '.ibexa-collapse__body.show .ibexa-content-type-edit__field-definition-content'), new VisibleCSSLocator('selectBlocksDropdown', '.ibexa-page-select-items__toggler'), From 11868f22dd245c7e5ff26bbacac1c6ea127b5141 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 14:19:27 +0200 Subject: [PATCH 085/105] IBX-11506: match IDS action buttons in context menu --- src/lib/Behat/Component/ContentActionsMenu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/ContentActionsMenu.php b/src/lib/Behat/Component/ContentActionsMenu.php index 25d899c00c..e193d738e4 100644 --- a/src/lib/Behat/Component/ContentActionsMenu.php +++ b/src/lib/Behat/Component/ContentActionsMenu.php @@ -126,7 +126,7 @@ protected function specifyLocators(): array { return [ new VisibleCSSLocator('label', '.ibexa-btn__label'), - new VisibleCSSLocator('menuButton', '.ibexa-context-menu .ibexa-btn'), + new VisibleCSSLocator('menuButton', '.ibexa-context-menu .ibexa-btn, .ibexa-context-menu .ids-button'), new VisibleCSSLocator('button', '.ibexa-popup-menu__item-content'), new VisibleCSSLocator('toggle', '.ibexa-split-btn__toggle-btn '), new VisibleCSSLocator('splitButton', '.ibexa-split-btn'), From 7a2ffb1825bb9b46be7d1c6507f7a36b7ecfc37d Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 2 Apr 2026 14:21:09 +0200 Subject: [PATCH 086/105] IBX-11506: wait for URL alias redirect toggle state --- src/lib/Behat/Component/CreateUrlAliasModal.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/CreateUrlAliasModal.php b/src/lib/Behat/Component/CreateUrlAliasModal.php index 215d82bb26..83955d6086 100644 --- a/src/lib/Behat/Component/CreateUrlAliasModal.php +++ b/src/lib/Behat/Component/CreateUrlAliasModal.php @@ -48,7 +48,13 @@ private function setRedirectToggle(bool $shouldBeChecked): void $toggle = $this->getHTMLPage()->find($this->getLocator('redirectToggle')); $isChecked = $toggle->hasClass('ids-toggle--checked'); if ($shouldBeChecked !== $isChecked) { - $this->getHTMLPage()->find($this->getLocator('redirectToggle'))->click(); + $toggle->click(); + + $this->getHTMLPage()->setTimeout(5)->waitUntil(function () use ($shouldBeChecked): bool { + $updatedToggle = $this->getHTMLPage()->find($this->getLocator('redirectToggle')); + + return $updatedToggle->hasClass('ids-toggle--checked') === $shouldBeChecked; + }, 'Redirect toggle state did not update'); } } From eb754565bad6306f5f5323fc6988318ef7e1822c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 16 Apr 2026 11:52:34 +0200 Subject: [PATCH 087/105] IBX-11506: use DS checkbox and radio label classes in form theme --- .../Resources/views/themes/admin/ui/form_fields.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 ac7db64eb6..3bacedb046 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 @@ -22,7 +22,7 @@ {%- endblock form_label %} {% block checkbox_radio_label -%} - {%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' ibexa-label ibexa-label--checkbox-radio')|trim}) -%} + {%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' ids-choice-input-label ids-choice-input-field__label')|trim}) -%} {{ parent() }} {%- endblock checkbox_radio_label %} From 62f5634a601b34819786ca9c68069d9c68032994 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 16 Apr 2026 12:10:00 +0200 Subject: [PATCH 088/105] IBX-11506: update DS choice input label selectors --- src/bundle/Resources/public/scss/_instant-filter.scss | 2 +- src/bundle/Resources/public/scss/ui/modules/common/_popup.scss | 2 +- .../components/content-create-widget/content.create.widget.js | 2 +- src/lib/Behat/Component/CreateNewPopup.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/public/scss/_instant-filter.scss b/src/bundle/Resources/public/scss/_instant-filter.scss index 24c71b7606..31fb9ea605 100644 --- a/src/bundle/Resources/public/scss/_instant-filter.scss +++ b/src/bundle/Resources/public/scss/_instant-filter.scss @@ -64,7 +64,7 @@ } &:hover { - .ibexa-label--checkbox-radio { + .ids-choice-input-label { color: $ibexa-color-primary; } diff --git a/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss b/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss index 6f16e7306a..5c7d48f9d2 100644 --- a/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss +++ b/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss @@ -74,7 +74,7 @@ } } - .ibexa-label--checkbox-radio { + .ids-choice-input-label { padding-left: calculateRem(4px); } } 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 0d2615d30c..7ce7777023 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 @@ -243,7 +243,7 @@ const ContentCreateWidget = () => {
-
+
{name}
diff --git a/src/lib/Behat/Component/CreateNewPopup.php b/src/lib/Behat/Component/CreateNewPopup.php index fcf26c7a29..87da161343 100644 --- a/src/lib/Behat/Component/CreateNewPopup.php +++ b/src/lib/Behat/Component/CreateNewPopup.php @@ -83,7 +83,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('label', '.ibexa-label'), new VisibleCSSLocator('dropdownValue', '.ibexa-dropdown__selection-info'), new VisibleCSSLocator('radioValue', '.ibexa-dc-extra-actions-applies-to__option'), - new VisibleCSSLocator('radioLabel', '.ibexa-label--checkbox-radio'), + new VisibleCSSLocator('radioLabel', '.ids-choice-input-label'), ]; } } From 01b810f503aa9a21aae4ec363e63b92acf14318c Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 16 Apr 2026 12:40:15 +0200 Subject: [PATCH 089/105] Revert "IBX-11506: use DS checkbox and radio label classes in form theme" This reverts commit 5497deddf0aced496909881791ae02c14396231b. --- .../Resources/views/themes/admin/ui/form_fields.html.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3bacedb046..ac7db64eb6 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 @@ -22,7 +22,7 @@ {%- endblock form_label %} {% block checkbox_radio_label -%} - {%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' ids-choice-input-label ids-choice-input-field__label')|trim}) -%} + {%- set label_attr = label_attr|merge({class: (label_attr.class|default('') ~ ' ibexa-label ibexa-label--checkbox-radio')|trim}) -%} {{ parent() }} {%- endblock checkbox_radio_label %} From c4f3d5bc71aad0a78f90516e516d1d3db633bd7e Mon Sep 17 00:00:00 2001 From: tischsoic Date: Thu, 16 Apr 2026 12:40:15 +0200 Subject: [PATCH 090/105] Revert "IBX-11506: update DS choice input label selectors" This reverts commit 534fe40a578e684b131a030281ba7da565ab161c. --- src/bundle/Resources/public/scss/_instant-filter.scss | 2 +- src/bundle/Resources/public/scss/ui/modules/common/_popup.scss | 2 +- .../components/content-create-widget/content.create.widget.js | 2 +- src/lib/Behat/Component/CreateNewPopup.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bundle/Resources/public/scss/_instant-filter.scss b/src/bundle/Resources/public/scss/_instant-filter.scss index 31fb9ea605..24c71b7606 100644 --- a/src/bundle/Resources/public/scss/_instant-filter.scss +++ b/src/bundle/Resources/public/scss/_instant-filter.scss @@ -64,7 +64,7 @@ } &:hover { - .ids-choice-input-label { + .ibexa-label--checkbox-radio { color: $ibexa-color-primary; } diff --git a/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss b/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss index 5c7d48f9d2..6f16e7306a 100644 --- a/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss +++ b/src/bundle/Resources/public/scss/ui/modules/common/_popup.scss @@ -74,7 +74,7 @@ } } - .ids-choice-input-label { + .ibexa-label--checkbox-radio { padding-left: calculateRem(4px); } } 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 7ce7777023..0d2615d30c 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 @@ -243,7 +243,7 @@ const ContentCreateWidget = () => {
-
+
{name}
diff --git a/src/lib/Behat/Component/CreateNewPopup.php b/src/lib/Behat/Component/CreateNewPopup.php index 87da161343..fcf26c7a29 100644 --- a/src/lib/Behat/Component/CreateNewPopup.php +++ b/src/lib/Behat/Component/CreateNewPopup.php @@ -83,7 +83,7 @@ protected function specifyLocators(): array new VisibleCSSLocator('label', '.ibexa-label'), new VisibleCSSLocator('dropdownValue', '.ibexa-dropdown__selection-info'), new VisibleCSSLocator('radioValue', '.ibexa-dc-extra-actions-applies-to__option'), - new VisibleCSSLocator('radioLabel', '.ids-choice-input-label'), + new VisibleCSSLocator('radioLabel', '.ibexa-label--checkbox-radio'), ]; } } From 94d07dba093cf26d0c59dbc1c6855a7e8fb388ef Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Fri, 17 Apr 2026 14:14:22 +0200 Subject: [PATCH 091/105] [Behat] Adjusted selector --- src/lib/Behat/Component/CreateUrlAliasModal.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/lib/Behat/Component/CreateUrlAliasModal.php b/src/lib/Behat/Component/CreateUrlAliasModal.php index 83955d6086..215d82bb26 100644 --- a/src/lib/Behat/Component/CreateUrlAliasModal.php +++ b/src/lib/Behat/Component/CreateUrlAliasModal.php @@ -48,13 +48,7 @@ private function setRedirectToggle(bool $shouldBeChecked): void $toggle = $this->getHTMLPage()->find($this->getLocator('redirectToggle')); $isChecked = $toggle->hasClass('ids-toggle--checked'); if ($shouldBeChecked !== $isChecked) { - $toggle->click(); - - $this->getHTMLPage()->setTimeout(5)->waitUntil(function () use ($shouldBeChecked): bool { - $updatedToggle = $this->getHTMLPage()->find($this->getLocator('redirectToggle')); - - return $updatedToggle->hasClass('ids-toggle--checked') === $shouldBeChecked; - }, 'Redirect toggle state did not update'); + $this->getHTMLPage()->find($this->getLocator('redirectToggle'))->click(); } } From a7e7047631b03ee41767289a2f21d2d06ecf4627 Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Mon, 20 Apr 2026 13:03:11 +0200 Subject: [PATCH 092/105] [Behat] Adjusted UrlAlias test --- src/lib/Behat/Component/CreateUrlAliasModal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/CreateUrlAliasModal.php b/src/lib/Behat/Component/CreateUrlAliasModal.php index 215d82bb26..0e615eb6fb 100644 --- a/src/lib/Behat/Component/CreateUrlAliasModal.php +++ b/src/lib/Behat/Component/CreateUrlAliasModal.php @@ -48,7 +48,7 @@ private function setRedirectToggle(bool $shouldBeChecked): void $toggle = $this->getHTMLPage()->find($this->getLocator('redirectToggle')); $isChecked = $toggle->hasClass('ids-toggle--checked'); if ($shouldBeChecked !== $isChecked) { - $this->getHTMLPage()->find($this->getLocator('redirectToggle'))->click(); + $this->getHTMLPage()->find(new VisibleCSSLocator('toggle', '.ibexa-custom-url-from__item .ids-toggle .ids-toggle__widget'))->click(); } } From 460bac4bb0e1ac6eefd79ebdef3e02cfe74b750d Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Mon, 20 Apr 2026 15:10:47 +0200 Subject: [PATCH 093/105] [Behat] Adjusted tests --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 29 +++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index 81cbc4cc7f..4db3bb3185 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -22,9 +22,7 @@ class ContentTypeUpdatePage extends AdminUpdateItemPage public function fillFieldDefinitionFieldWithValue(string $fieldName, string $label, string $value): void { $this->expandLastFieldDefinition(); - $lastFieldDefinition = $this->getHTMLPage()->findAll($this->getLocator('fieldDefinition'))->last(); - - $lastFieldDefinition + $this->getHTMLPage() ->find($this->getLocator('fieldDefinitionOpenContainer')) ->findAll($this->getLocator('field')) ->getByCriterion(new ElementTextCriterion($label)) @@ -41,22 +39,27 @@ public function expandLastFieldDefinition(): void $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldDefinitionLocator): bool { $fieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); - - if ($fieldDefinition->findAll($this->getLocator('fieldDefinitionOpenContainer'))->any()) { - return true; - } - - $fieldDefinition->find($this->getLocator('fieldDefinitionToggle'))->execute(new MouseOverAndClick()); - - $this->getHTMLPage()->setTimeout(5)->waitUntilCondition( - new ElementExistsCondition( + $fieldDefinition->find(new VisibleCSSLocator('collapseButton', 'button.ibexa-collapse__toggle-btn'))->click(); + $this->getHTMLPage()->setTimeout(3)->waitUntilCondition( + new ElementNotExistsCondition( $fieldDefinition, - $this->getLocator('fieldDefinitionOpenContainer') + new VisibleCSSLocator('isCollapsed', 'button.collapsed') ) ); return true; }, 'Error expanding the last Field definition'); + + $lastFieldDefinition = $this->getHTMLPage()->findAll($fieldDefinitionLocator)->last(); + $this + ->getHTMLPage() + ->setTimeout(10) + ->waitUntilCondition( + new ElementTransitionHasEndedCondition( + $lastFieldDefinition, + new VisibleCSSLocator('transition', 'div') + ) + ); } public function specifyLocators(): array From 64c95fd70d838db807136caa022c66abb5d0664a Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Mon, 20 Apr 2026 15:13:21 +0200 Subject: [PATCH 094/105] [Behat] Adjusted tests --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index 4db3bb3185..f52b522609 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -94,6 +94,14 @@ public function addFieldDefinition(string $fieldName): void $this->getHTMLPage()->setTimeout(10)->waitUntil(function () use ($fieldSelector): bool { $this->getHTMLPage()->setTimeout(0)->find($fieldSelector)->mouseOver(); + $this->getHTMLPage() + ->setTimeout(0) + ->waitUntilCondition( + new ElementTransitionHasEndedCondition( + $this->getHTMLPage(), + $fieldSelector + ) + ); return true; }, 'Error hovering over the Field Definition to add'); From e8e43a8ac8b7a8f166464d2ded5777cc6e7dd690 Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Mon, 20 Apr 2026 16:46:33 +0200 Subject: [PATCH 095/105] [Behat] Added import --- src/lib/Behat/Page/ContentTypeUpdatePage.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/Behat/Page/ContentTypeUpdatePage.php b/src/lib/Behat/Page/ContentTypeUpdatePage.php index f52b522609..f6dfc13b5f 100644 --- a/src/lib/Behat/Page/ContentTypeUpdatePage.php +++ b/src/lib/Behat/Page/ContentTypeUpdatePage.php @@ -12,6 +12,7 @@ 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; use Ibexa\Behat\Browser\Element\Criterion\ElementTextCriterion; use Ibexa\Behat\Browser\Element\Mapper\ElementTextMapper; From fabf13e9dd529f507b22936db9688d5e973a81dd Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Tue, 21 Apr 2026 12:58:17 +0200 Subject: [PATCH 096/105] [Behat] Adjusted tests --- features/standard/UserCreation.feature | 4 ++-- .../Behat/Component/ContentActionsMenu.php | 2 +- src/lib/Behat/Component/Fields/User.php | 21 ++++++------------- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/features/standard/UserCreation.feature b/features/standard/UserCreation.feature index 4bfe8d89d9..624e81c2e9 100644 --- a/features/standard/UserCreation.feature +++ b/features/standard/UserCreation.feature @@ -37,8 +37,8 @@ Feature: User management | First name | testuseredited | | Last name | lastnameedited | And I set content fields for user - | label | Username | Password | Confirm password | Email | - | User account | testuser | Test123456 | Test123456 | test@test.org | + | label | Username | Password | Confirm password | Email | Enabled | + | User account | testuser | Test123456 | Test123456 | test@test.org | Yes | And I perform the "Update" action Then I should be on Content view Page for "Users/testuseredited lastnameedited" And content attributes equal diff --git a/src/lib/Behat/Component/ContentActionsMenu.php b/src/lib/Behat/Component/ContentActionsMenu.php index e193d738e4..ce4cee91ee 100644 --- a/src/lib/Behat/Component/ContentActionsMenu.php +++ b/src/lib/Behat/Component/ContentActionsMenu.php @@ -47,7 +47,7 @@ private function clickStandaloneButton(string $buttonName): void ->getByCriterion(new ElementTextCriterion($buttonName))->click(); } - private function getStandaloneButtons(string $buttonName) + private function getStandaloneButtons(string $buttonName): ElementCollectionInterface { return $this->getHTMLPage() ->findAll($this->getLocator('menuButton')) diff --git a/src/lib/Behat/Component/Fields/User.php b/src/lib/Behat/Component/Fields/User.php index dcfe808c2c..433ed7acce 100644 --- a/src/lib/Behat/Component/Fields/User.php +++ b/src/lib/Behat/Component/Fields/User.php @@ -9,7 +9,6 @@ namespace Ibexa\AdminUi\Behat\Component\Fields; use Ibexa\Behat\Browser\Element\Condition\ElementExistsCondition; -use Ibexa\Behat\Browser\Element\Condition\ElementNotExistsCondition; use Ibexa\Behat\Browser\Element\Mapper\ElementTextMapper; use Ibexa\Behat\Browser\Locator\CSSLocatorBuilder; use Ibexa\Behat\Browser\Locator\VisibleCSSLocator; @@ -28,7 +27,7 @@ public function setValue(array $parameters): void $this->setSpecificFieldValue('password', $parameters['Password']); $this->setSpecificFieldValue('confirmPassword', $parameters['Confirm password']); $this->setSpecificFieldValue('email', $parameters['Email']); - $this->setEnabledField(($parameters['Enabled'] ?? 'Yes') === 'Yes'); + $this->setEnabledField(true); } public function setSpecificFieldValue(string $fieldName, string $value): void @@ -91,28 +90,20 @@ protected function specifyLocators(): array new VisibleCSSLocator('confirmPassword', '#ezplatform_content_forms_user_create_fieldsData_user_account_value_password_second,#ezplatform_content_forms_user_update_fieldsData_user_account_value_password_second'), new VisibleCSSLocator('email', '#ezplatform_content_forms_user_create_fieldsData_user_account_value_email,#ezplatform_content_forms_user_update_fieldsData_user_account_value_email'), new VisibleCSSLocator('buttonEnabled', '.ids-toggle__widget'), - new VisibleCSSLocator('buttonEnabledWrapper', '.ids-toggle'), + new VisibleCSSLocator('buttonEnabledLabel', '.ids-toggle__label'), new VisibleCSSLocator('buttonEnabledToggleConfirmation', '.ids-toggle--checked'), ]; } private function setEnabledField(bool $enabled): void { - $parentField = $this->getHTMLPage()->find($this->parentLocator); - $enabledToggleSelector = CSSLocatorBuilder::base($this->parentLocator) - ->withDescendant($this->getLocator('buttonEnabledToggleConfirmation')) - ->build(); - $isCurrentlyEnabled = $parentField->findAll($this->getLocator('buttonEnabledToggleConfirmation'))->any(); - + $isCurrentlyEnabled = $this->getHTMLPage()->find($this->parentLocator)->find($this->getLocator('buttonEnabledLabel'))->getText() === 'On'; if ($isCurrentlyEnabled !== $enabled) { $script = sprintf("document.querySelector('%s %s').click()", $this->parentLocator->getSelector(), $this->getLocator('buttonEnabled')->getSelector()); $this->getHTMLPage()->executeJavaScript($script); - - $condition = $enabled - ? new ElementExistsCondition($this->getHTMLPage(), $enabledToggleSelector) - : new ElementNotExistsCondition($this->getHTMLPage(), $enabledToggleSelector); - - $this->getHTMLPage()->setTimeout(10)->waitUntilCondition($condition); + $this->getHTMLPage() + ->setTimeout(10) + ->waitUntilCondition(new ElementExistsCondition($this->getHTMLPage(), $this->getLocator('buttonEnabledToggleConfirmation'))); } } } From 710469dc93ac8306992f44c282ea404f40f1f6ea Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Tue, 21 Apr 2026 13:02:13 +0200 Subject: [PATCH 097/105] [Behat] Adjusted return type --- src/lib/Behat/Component/ContentActionsMenu.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/ContentActionsMenu.php b/src/lib/Behat/Component/ContentActionsMenu.php index ce4cee91ee..37ab10cd3e 100644 --- a/src/lib/Behat/Component/ContentActionsMenu.php +++ b/src/lib/Behat/Component/ContentActionsMenu.php @@ -47,7 +47,7 @@ private function clickStandaloneButton(string $buttonName): void ->getByCriterion(new ElementTextCriterion($buttonName))->click(); } - private function getStandaloneButtons(string $buttonName): ElementCollectionInterface + private function getStandaloneButtons(string $buttonName): string { return $this->getHTMLPage() ->findAll($this->getLocator('menuButton')) From 8089bf2a3f89e301038fe16c5aaedda414c8f664 Mon Sep 17 00:00:00 2001 From: katarzynazawada Date: Tue, 21 Apr 2026 13:07:32 +0200 Subject: [PATCH 098/105] [Behat] Adjusted return type --- src/lib/Behat/Component/ContentActionsMenu.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/Behat/Component/ContentActionsMenu.php b/src/lib/Behat/Component/ContentActionsMenu.php index 37ab10cd3e..e2876707f8 100644 --- a/src/lib/Behat/Component/ContentActionsMenu.php +++ b/src/lib/Behat/Component/ContentActionsMenu.php @@ -11,6 +11,7 @@ use Ibexa\Behat\Browser\Component\Component; use Ibexa\Behat\Browser\Element\Action\MouseOverAndClick; use Ibexa\Behat\Browser\Element\Criterion\ElementTextCriterion; +use Ibexa\Behat\Browser\Element\ElementCollectionInterface; use Ibexa\Behat\Browser\Locator\VisibleCSSLocator; final class ContentActionsMenu extends Component @@ -47,7 +48,7 @@ private function clickStandaloneButton(string $buttonName): void ->getByCriterion(new ElementTextCriterion($buttonName))->click(); } - private function getStandaloneButtons(string $buttonName): string + private function getStandaloneButtons(string $buttonName): ElementCollectionInterface { return $this->getHTMLPage() ->findAll($this->getLocator('menuButton')) From 4b5334b15ea7b2bf20846f83701aca64fe9d5753 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 26 Apr 2026 18:49:38 +0200 Subject: [PATCH 099/105] IBX-11506: use DS checkbox in three-state wrapper --- .../three.state.checkbox.component.js | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/sub-items/components/three-state-checkbox/three.state.checkbox.component.js b/src/bundle/ui-dev/src/modules/sub-items/components/three-state-checkbox/three.state.checkbox.component.js index 6eb85900f4..27cb1734e5 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/components/three-state-checkbox/three.state.checkbox.component.js +++ b/src/bundle/ui-dev/src/modules/sub-items/components/three-state-checkbox/three.state.checkbox.component.js @@ -1,16 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + const ThreeStateCheckboxComponent = ({ indeterminate = false, ...restOfProps }) => ( - { - if (input) { - input.indeterminate = indeterminate; - } - }} - /> + ); ThreeStateCheckboxComponent.propTypes = { From 98bf314cedfcfadc66cd8b4c894f6ef73f667839 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 26 Apr 2026 18:49:57 +0200 Subject: [PATCH 100/105] IBX-11506: use DS checkbox in UDW selection toggle --- .../components/toggle-selection/toggle.selection.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.selection.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.selection.js index 08002f54c1..64544ef946 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.selection.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.selection.js @@ -1,6 +1,8 @@ import React, { useContext } from 'react'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + import { createCssClassNames } from '../../../common/helpers/css.class.names'; import { SelectedLocationsContext } from '../../universal.discovery.module'; @@ -21,9 +23,7 @@ const ToggleSelection = ({ multiple, location, isDisabled = false, isHidden = fa return null; } - return ( - - ); + return ; }; ToggleSelection.propTypes = { From a21884211f04f1acdee804a12b787fc91dcc72e5 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 26 Apr 2026 18:50:19 +0200 Subject: [PATCH 101/105] IBX-11506: use DS checkbox in UDW item toggle --- .../toggle-selection/toggle.item.selection.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.item.selection.js b/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.item.selection.js index 9eac172573..22ab04b50f 100644 --- a/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.item.selection.js +++ b/src/bundle/ui-dev/src/modules/universal-discovery/components/toggle-selection/toggle.item.selection.js @@ -1,6 +1,8 @@ import React, { useContext, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + import { createCssClassNames } from '../../../common/helpers/css.class.names'; import { MultipleConfigContext, SelectedItemsContext } from '../../universal.discovery.module'; @@ -26,6 +28,19 @@ const ToggleItemSelection = ({ item, isDisabled = false, isPreselected = false, inputRef.current.indeterminate = isIndeterminate; }, [isIndeterminate]); + if (multiple) { + return ( + + ); + } + return ( Date: Sun, 26 Apr 2026 18:50:58 +0200 Subject: [PATCH 102/105] IBX-11506: use DS checkbox in sub-items rows --- .../components/table-view/table.view.item.component.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 cf975b8119..0408ee805b 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 @@ -1,6 +1,8 @@ import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + import { getTranslator } from '@ibexa-admin-ui-helpers/context.helper'; import { getContentTypeIconUrl } from '@ibexa-admin-ui-helpers/content.type.helper'; import { formatShortDateTime } from '@ibexa-admin-ui-helpers/timezone.helper'; @@ -439,8 +441,7 @@ export default class TableViewItemComponent extends PureComponent { return ( - Date: Sun, 26 Apr 2026 18:51:33 +0200 Subject: [PATCH 103/105] IBX-11506: use DS checkbox in dropdown items --- .../ui-dev/src/modules/common/dropdown/dropdown.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 26c8e2a79e..afe558613a 100644 --- a/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js +++ b/src/bundle/ui-dev/src/modules/common/dropdown/dropdown.js @@ -2,6 +2,8 @@ import React, { useState, useEffect, useRef, useLayoutEffect } from 'react'; import ReactDOM from 'react-dom'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + 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'; @@ -82,7 +84,13 @@ const Dropdown = ({ } }} > - {!single && {}} />} + {!single && ( + {}} + /> + )} {item.label} {single && (
From 17bb4da45c7a8cbbb34be1ad77a5741fc36c2696 Mon Sep 17 00:00:00 2001 From: tischsoic Date: Sun, 26 Apr 2026 18:51:57 +0200 Subject: [PATCH 104/105] IBX-11506: use DS checkbox in columns toggler --- .../view.columns.toggler.list.element.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/bundle/ui-dev/src/modules/sub-items/components/view-columns-toggler/view.columns.toggler.list.element.js b/src/bundle/ui-dev/src/modules/sub-items/components/view-columns-toggler/view.columns.toggler.list.element.js index a7262577ae..5fb7f1bbb8 100644 --- a/src/bundle/ui-dev/src/modules/sub-items/components/view-columns-toggler/view.columns.toggler.list.element.js +++ b/src/bundle/ui-dev/src/modules/sub-items/components/view-columns-toggler/view.columns.toggler.list.element.js @@ -1,13 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; +import { CheckboxInput } from '@ids-components/components/Checkbox'; + const ViewColumnsTogglerListElement = ({ label, isColumnVisible, toggleColumnVisibility, columnKey }) => { return (