@@ -39,6 +39,18 @@ ruleTester.run('template-no-nested-interactive', rule, {
3939 Text
4040 </label>
4141 </template>` ,
42+ // Canonical ARIA composite-widget hierarchies — driven by aria-query's
43+ // `requiredOwnedElements` (see lib/utils/interactive-roles.js). These are
44+ // WAI-ARIA APG patterns and must not be flagged.
45+ '<template><div role="listbox"><div role="option">A</div><div role="option">B</div></div></template>' ,
46+ '<template><div role="tablist"><div role="tab">Tab 1</div><div role="tab">Tab 2</div></div></template>' ,
47+ '<template><div role="tree"><div role="treeitem">Node</div></div></template>' ,
48+ '<template><div role="grid"><div role="row"><div role="gridcell">Cell</div></div></div></template>' ,
49+ '<template><div role="grid"><div role="row"><div role="rowheader">Header</div></div></div></template>' ,
50+ '<template><div role="grid"><div role="row"><div role="columnheader">Header</div></div></div></template>' ,
51+ '<template><div role="treegrid"><div role="row"><div role="gridcell">Cell</div></div></div></template>' ,
52+ '<template><div role="radiogroup"><div role="radio">Opt 1</div></div></template>' ,
53+
4254 // <audio>/<video> without `controls` are NOT interactive (no rendered UI, no focus).
4355 '<template><button><audio></audio></button></template>' ,
4456 '<template><button><video></video></button></template>' ,
@@ -357,6 +369,16 @@ hbsRuleTester.run('template-no-nested-interactive', rule, {
357369 // <audio>/<video> without `controls` are NOT interactive.
358370 '<button><audio></audio></button>' ,
359371 '<button><video></video></button>' ,
372+
373+ // Canonical ARIA composite-widget hierarchies.
374+ '<div role="listbox"><div role="option">A</div><div role="option">B</div></div>' ,
375+ '<div role="tablist"><div role="tab">Tab 1</div><div role="tab">Tab 2</div></div>' ,
376+ '<div role="tree"><div role="treeitem">Node</div></div>' ,
377+ '<div role="grid"><div role="row"><div role="gridcell">Cell</div></div></div>' ,
378+ '<div role="grid"><div role="row"><div role="rowheader">Header</div></div></div>' ,
379+ '<div role="grid"><div role="row"><div role="columnheader">Header</div></div></div>' ,
380+ '<div role="treegrid"><div role="row"><div role="gridcell">Cell</div></div></div>' ,
381+ '<div role="radiogroup"><div role="radio">Opt 1</div></div>' ,
360382 ] ,
361383 invalid : [
362384 {
0 commit comments