From 85fbc88f80254cf56c239714e798def9a094b37e Mon Sep 17 00:00:00 2001
From: Christian Rath-Ulrich <christian@rath-ulrich.de>
Date: Mon, 10 Jun 2024 17:06:20 +0200
Subject: [PATCH] [BUGFIX] Change header tag in PaletteAndSingleContainer and
 adjust tab.html

This commit fixes a minor issue where the header
tag in PaletteAndSingleContainer was incorrectly
set as h4. The tag has been changed to h3 for
better readability and semantics. Simultaneously,
visually hidden headers were also added to tabs to
improve accessibility.

Resolves: #104021
Releases: main, 12.4
Change-Id: Ic2301eabb23d1d17169056ec8e9ec40a5824c52c
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84545
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Benjamin Kott <benjamin.kott@outlook.com>
Tested-by: Oliver Bartsch <bo@cedev.de>
Tested-by: Benjamin Kott <benjamin.kott@outlook.com>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Tested-by: core-ci <typo3@b13.com>
---
 Build/Sources/Sass/component/_panel.scss                   | 1 +
 Build/Sources/Sass/typo3/_main_form.scss                   | 7 +------
 .../Classes/Form/Container/PaletteAndSingleContainer.php   | 2 +-
 .../Resources/Private/Partials/ModuleTemplate/Tabs.html    | 1 +
 typo3/sysext/backend/Resources/Public/Css/backend.css      | 5 ++---
 5 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/Build/Sources/Sass/component/_panel.scss b/Build/Sources/Sass/component/_panel.scss
index 53a6de922d91..cce3352c6d11 100644
--- a/Build/Sources/Sass/component/_panel.scss
+++ b/Build/Sources/Sass/component/_panel.scss
@@ -322,6 +322,7 @@ $panel-heading-bg-scale: -85%;
 }
 
 .tab-pane {
+    > h2 + .form-section,
     > .panel-tab:first-child {
         border-top: none;
     }
diff --git a/Build/Sources/Sass/typo3/_main_form.scss b/Build/Sources/Sass/typo3/_main_form.scss
index 609482bbd806..c63343d2505f 100644
--- a/Build/Sources/Sass/typo3/_main_form.scss
+++ b/Build/Sources/Sass/typo3/_main_form.scss
@@ -248,13 +248,8 @@ select {
     }
 }
 
-.tab-pane {
-    > .form-section:first-child {
-        border-top: none;
-    }
-}
-
 .form-section-headline {
+    font-size: $h4-font-size;
     margin-top: 0;
     margin-bottom: 10px;
 
diff --git a/typo3/sysext/backend/Classes/Form/Container/PaletteAndSingleContainer.php b/typo3/sysext/backend/Classes/Form/Container/PaletteAndSingleContainer.php
index 682e1b358764..238e31ffd897 100644
--- a/typo3/sysext/backend/Classes/Form/Container/PaletteAndSingleContainer.php
+++ b/typo3/sysext/backend/Classes/Form/Container/PaletteAndSingleContainer.php
@@ -159,7 +159,7 @@ class PaletteAndSingleContainer extends AbstractContainer
                 $html = [];
                 $html[] = '<fieldset class="form-section' . ($isHiddenPalette ? ' hide' : '') . '">';
                 if (!empty($element['paletteLegend'])) {
-                    $html[] = '<h4 class="form-section-headline">' . htmlspecialchars($element['paletteLegend']) . '</h4>';
+                    $html[] = '<h3 class="form-section-headline">' . htmlspecialchars($element['paletteLegend']) . '</h3>';
                 }
                 if (!empty($element['paletteDescription'])) {
                     $html[] = '<p class="form-section-description text-body-secondary">' . nl2br(htmlspecialchars($element['paletteDescription'])) . '</p>';
diff --git a/typo3/sysext/backend/Resources/Private/Partials/ModuleTemplate/Tabs.html b/typo3/sysext/backend/Resources/Private/Partials/ModuleTemplate/Tabs.html
index d1fbf18bbf3e..521512df56fc 100644
--- a/typo3/sysext/backend/Resources/Private/Partials/ModuleTemplate/Tabs.html
+++ b/typo3/sysext/backend/Resources/Private/Partials/ModuleTemplate/Tabs.html
@@ -28,6 +28,7 @@
         <f:for each="{items}" as="item" iteration="iteration">
             <f:if condition="{item.content}">
                 <div role="tabpanel" class="tab-pane{f:if(condition: '{iteration.cycle} == {defaultTabIndex}', then: ' active')}" id="{id}-{iteration.cycle}">
+                    <h2 class="visually-hidden">{item.label}</h2>
                     <f:if condition="{item.description}">
                         <div class="form-section">
                             <p><f:format.nl2br>{item.description}</f:format.nl2br></p>
diff --git a/typo3/sysext/backend/Resources/Public/Css/backend.css b/typo3/sysext/backend/Resources/Public/Css/backend.css
index e63a80bab0ea..1beeeb704af5 100644
--- a/typo3/sysext/backend/Resources/Public/Css/backend.css
+++ b/typo3/sysext/backend/Resources/Public/Css/backend.css
@@ -3073,7 +3073,7 @@ a.dropdown-toggle{text-decoration:none}
 .panel-condensed{--panel-padding:.5rem;--panel-header-padding-x:.5rem;--panel-header-padding-y:.5rem}
 .panel-collapsed .panel-collapse{display:none;visibility:hidden}
 .panel-tab{--panel-border-radius:0;border:1px solid #ccc;background-color:#fafafa}
-.tab-pane>.panel-tab:first-child{border-top:none}
+.tab-pane>.h2+.form-section,.tab-pane>.panel-tab:first-child,.tab-pane>h2+.form-section{border-top:none}
 .panel-primary{--panel-border-color:var(--panel-primary-border-color);--panel-progress-bg:var(--panel-primary-progress-bg);--panel-heading-color:var(--panel-primary-heading-color);--panel-heading-bg:var(--panel-primary-heading-bg)}
 .panel-secondary{--panel-border-color:var(--panel-secondary-border-color);--panel-progress-bg:var(--panel-secondary-progress-bg);--panel-heading-color:var(--panel-secondary-heading-color);--panel-heading-bg:var(--panel-secondary-heading-bg)}
 .panel-success{--panel-border-color:var(--panel-success-border-color);--panel-progress-bg:var(--panel-success-progress-bg);--panel-heading-color:var(--panel-success-heading-color);--panel-heading-bg:var(--panel-success-heading-bg)}
@@ -4236,8 +4236,7 @@ select.icon-select option{padding-inline-start:22px}
 .form-notice-capslock>img{display:block;opacity:.5}
 .form-section{border:1px solid #ccc;background-color:#fafafa;padding:15px 12px 3px}
 .form-section+.form-section{margin-top:-1px}
-.tab-pane>.form-section:first-child{border-top:none}
-.form-section-headline{margin-top:0;margin-bottom:10px}
+.form-section-headline{font-size:14px;margin-top:0;margin-bottom:10px}
 .form-section-headline+.form-section-description{margin-top:-5px;margin-bottom:10px}
 .form-wizards-wrap{width:100%;display:grid;grid-template:"top . ." "main  side-move side-control" "bottom . .";grid-template-rows:auto;grid-template-columns:1fr auto auto}
 .form-wizards-wrap>.form-wizards-element{grid-area:main;min-width:120px}
-- 
GitLab