9 trap (dialog, drawer, alert-dialog, context-menu, dropdown-menu,
menu-dial, onion-menu, float-panel, popover) y 19 roving (toolbar, menubar,
tabs, listbox, radio-group, stepper, tag-group, tags-input, toggle-group,
carousel, drag-drop, tree-view, tree-grid, grid-list, chronos, calendar,
range-calendar, month-grid, year-grid).
Actas dentro de cada declaración; las que corrigen mentiras:
- popover: trap FALSE — declaraba true desde hacía meses con cero lectores;
la verdad embarcada manda.
- radio-group: orientation 'both' por APG — su propio keyboard[] declaraba
las 4 flechas; lo embarcado (2 flechas) era la deriva. El provider pasa
both=true al ejecutor.
- calendarios ×4 (calendar, range-calendar, month-grid, year-grid):
grid + executor.custom firmado — roving-tabindex REAL medido en sus
providers (focused ? 0 : -1), 2D que el primitivo 1D no expresa.
- grids/árboles (tree-grid, grid-list, chronos, carousel, drag-drop,
tree-view): custom firmado con su razón.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
'Slide membership is viewport-virtualised: the roving stop follows the scroller and snap state, not a static candidate query — the shared primitive cannot see it (eje focus-first F2).'
'Keyboard drag model (pick up / move / drop with live target announcement) exceeds arrow roving — the arrows move a PAYLOAD, not just the stop (eje focus-first F2).'
'Flattened-tree projection with typeahead and expand/collapse/* keys: the movement set exceeds next/prev over a static candidate list (eje focus-first F2).'