From f3266397c1f857b1bbb21652a3faa17a4097df3c Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Tue, 23 Jun 2026 00:13:23 -0400 Subject: [PATCH] Expand interaction candidate fixtures --- .../src/HtmlToBlocks/HtmlTransformer.php | 8 +++--- .../html-interaction-candidates-report.json | 27 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/php-transformer/src/HtmlToBlocks/HtmlTransformer.php b/php-transformer/src/HtmlToBlocks/HtmlTransformer.php index 21fa6be..9bd51db 100644 --- a/php-transformer/src/HtmlToBlocks/HtmlTransformer.php +++ b/php-transformer/src/HtmlToBlocks/HtmlTransformer.php @@ -1012,12 +1012,12 @@ private function interactionCandidatesForElement(DOMElement $element): array $candidates[] = $this->interactionCandidate($element, 'modal', $this->modalTriggerHint($element), $this->targetForElement($element), array_filter(array('modal_like', 'dialog' === $tagName ? 'dialog_element' : '', '' !== $role ? 'role:' . $role : '')), 'medium', 'modal_runtime'); } - if ( 'tablist' === $role || 'tab' === $role ) { - $candidates[] = $this->interactionCandidate($element, 'tabs', 'tab' === $role ? 'tab_select' : 'tablist', $this->controlledTarget($element), array_filter(array('role:' . $role, '' !== $this->attr($element, 'aria-controls') ? 'aria-controls' : '')), 'high', 'tab_state'); + if ( in_array($role, array('tablist', 'tab', 'tabpanel'), true) ) { + $candidates[] = $this->interactionCandidate($element, 'tabs', 'tab' === $role ? 'tab_select' : $role, $this->controlledTarget($element), array_filter(array('role:' . $role, '' !== $this->attr($element, 'aria-controls') ? 'aria-controls' : '')), 'high', 'tab_state'); } - if ( ( in_array($tagName, array('button', 'a'), true) || '' !== $role ) && preg_match('/(?:^|[\s_-])accordion(?:$|[\s_-])/', $nameText) ) { - $candidates[] = $this->interactionCandidate($element, 'accordion', $this->controlTrigger($element, $events), $this->controlledTarget($element), array_filter(array('accordion_like', '' !== $this->attr($element, 'aria-expanded') ? 'aria-expanded' : '')), 'medium', 'accordion_state'); + if ( ( in_array($tagName, array('button', 'a'), true) || '' !== $role ) && ( preg_match('/(?:^|[\s_-])accordion(?:$|[\s_-])/', $nameText) || ( $hasAriaControl && 'tab' !== $role && '' !== trim($this->attr($element, 'aria-expanded')) ) ) ) { + $candidates[] = $this->interactionCandidate($element, 'accordion', $this->controlTrigger($element, $events), $this->controlledTarget($element), array_filter(array('accordion_like', '' !== $this->attr($element, 'aria-expanded') ? 'aria-expanded' : '', '' !== $this->attr($element, 'aria-controls') ? 'aria-controls' : '')), 'medium', 'accordion_state'); } if ( preg_match('/(?:^|[\s_-])(?:carousel|slider|slideshow|swiper)(?:$|[\s_-])/', $nameText) ) { diff --git a/php-transformer/tests/fixtures/parity/html-interaction-candidates-report.json b/php-transformer/tests/fixtures/parity/html-interaction-candidates-report.json index 8e9b76e..b9eeca5 100644 --- a/php-transformer/tests/fixtures/parity/html-interaction-candidates-report.json +++ b/php-transformer/tests/fixtures/parity/html-interaction-candidates-report.json @@ -13,28 +13,35 @@ }, "operation": "html_transformer.transform", "input": { - "content": "
FAQ

Answer.

Panel
Tab one
Join
Open signup
" + "content": "
FAQ

Answer.

Shipping details.
Overview panel.
Join
Promo modal
Slide one
Menu panel
" }, "expect": [ { "path": "status", "assert": "equals", "value": "success" }, - { "path": "source_reports.interaction_candidates", "assert": "count", "count": 11 }, + { "path": "source_reports.interaction_candidates", "assert": "count", "count": 17 }, { "path": "source_reports.interaction_candidates.0.kind", "assert": "equals", "value": "details" }, { "path": "source_reports.interaction_candidates.0.target", "assert": "equals", "value": "#faq" }, { "path": "source_reports.interaction_candidates.1.kind", "assert": "equals", "value": "form" }, { "path": "source_reports.interaction_candidates.1.trigger", "assert": "equals", "value": "submit" }, { "path": "source_reports.interaction_candidates.1.target", "assert": "equals", "value": "/contact" }, { "path": "source_reports.interaction_candidates.2.kind", "assert": "equals", "value": "control" }, - { "path": "source_reports.interaction_candidates.2.target", "assert": "equals", "value": "#panel" }, + { "path": "source_reports.interaction_candidates.2.target", "assert": "equals", "value": "#faq-panel" }, { "path": "source_reports.interaction_candidates.3.kind", "assert": "equals", "value": "accordion" }, { "path": "source_reports.interaction_candidates.4.kind", "assert": "equals", "value": "tabs" }, { "path": "source_reports.interaction_candidates.5.kind", "assert": "equals", "value": "control" }, - { "path": "source_reports.interaction_candidates.5.target", "assert": "equals", "value": "#tab-one" }, + { "path": "source_reports.interaction_candidates.5.target", "assert": "equals", "value": "#panel-one" }, { "path": "source_reports.interaction_candidates.6.kind", "assert": "equals", "value": "tabs" }, - { "path": "source_reports.interaction_candidates.7.kind", "assert": "equals", "value": "modal" }, - { "path": "source_reports.interaction_candidates.8.kind", "assert": "equals", "value": "carousel" }, - { "path": "source_reports.interaction_candidates.9.kind", "assert": "equals", "value": "carousel" }, - { "path": "source_reports.interaction_candidates.10.kind", "assert": "equals", "value": "control" }, - { "path": "source_reports.conversion_report.interaction_candidates", "assert": "count", "count": 11 }, - { "path": "source_reports.conversion_report.interaction_candidates.10.evidence.0", "assert": "equals", "value": "onclick" } + { "path": "source_reports.interaction_candidates.7.kind", "assert": "equals", "value": "tabs" }, + { "path": "source_reports.interaction_candidates.7.trigger", "assert": "equals", "value": "tabpanel" }, + { "path": "source_reports.interaction_candidates.8.kind", "assert": "equals", "value": "modal" }, + { "path": "source_reports.interaction_candidates.9.kind", "assert": "equals", "value": "modal" }, + { "path": "source_reports.interaction_candidates.10.kind", "assert": "equals", "value": "carousel" }, + { "path": "source_reports.interaction_candidates.11.kind", "assert": "equals", "value": "carousel" }, + { "path": "source_reports.interaction_candidates.12.kind", "assert": "equals", "value": "carousel" }, + { "path": "source_reports.interaction_candidates.13.kind", "assert": "equals", "value": "carousel" }, + { "path": "source_reports.interaction_candidates.14.kind", "assert": "equals", "value": "control" }, + { "path": "source_reports.interaction_candidates.15.kind", "assert": "equals", "value": "carousel" }, + { "path": "source_reports.interaction_candidates.16.kind", "assert": "equals", "value": "control" }, + { "path": "source_reports.conversion_report.interaction_candidates", "assert": "count", "count": 17 }, + { "path": "source_reports.conversion_report.interaction_candidates.16.evidence.0", "assert": "equals", "value": "data-action" } ] }