You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
items, GTK4 menu-model items, and the WinUI window wrapper report portable
333
+
coverage instead of silently dropping unsupported native properties.
325
334
- Native IR capabilities are versioned. Every host exposes a feature manifest
326
335
with unsupported, portable, or native support levels, role-specific
327
336
overrides, and auditable capability issues. Protocol render responses carry
@@ -366,6 +375,7 @@ existence of a platform object:
366
375
| NumberField stepping | The shared runtime maps ArrowUp/ArrowDown/PageUp/PageDown, Home/End, focused vertical wheels, and stepper presses to model-space `Change` events. Wheel input rejects horizontal-dominant gestures and control-wheel zoom and honors `isWheelDisabled`. Built-in decrement and increment buttons expose the same next values and boundary/read-only state through native Button controls, and mouse presses preserve input focus. AppKit, GTK4, and WinUI share cancellable pointer-hold stepping with immediate mouse/pen activation, delayed touch activation, and 60-millisecond repeats; handled toolkit defaults and terminal native clicks are suppressed. Default stepper labels, the role description, and empty-value text follow a 34-locale catalog. Focused value changes emit assertive native accessibility announcements on all three backends. |
367
376
| Live regions | Stable keyed updates implement WAI-ARIA `polite`/`assertive`, `atomic`, `relevant`, and ancestor `busy` semantics in the shared runtime. Implicit alert/status/log/output policies and nested boundaries are honored. AppKit, GTK4, and WinUI deliver the resulting typed message through their native assistive-technology APIs; headless and protocol hosts retain the same ordered command. |
368
377
| Accessible names |`aria-label` is independent from visible native text and is projected through AppKit accessibility labels, GTK4 accessible label properties, and WinUI UI Automation names. Headless and protocol output retain the same computed name. The capability manifest conservatively reports portable-only coverage for AppKit logical list/tree and tab items, GTK4 `gio::MenuItem`, and the WinUI window wrapper. |
378
+
| Accessible descriptions | Description, role-description, shortcut, and value-text metadata have independent executable capabilities. GTK4 projects all four. AppKit projects description, role description, and value text; WinUI projects description and shortcuts. Unsupported field/backend combinations and non-accessible logical wrappers remain available to headless/protocol consumers and produce explicit portable capability issues. |
369
379
| Native menu activation | AppKit and GTK4 menu items emit terminal press only because their menu models do not expose a mounted generic view event source. |
370
380
| Hover and typed modality | View-backed widgets; explicit exceptions are reported for AppKit non-view wrappers/items, GTK4 menu items, and the WinUI window wrapper. |
371
381
| Focus within | Portable runtime routing on AppKit, GTK4, WinUI, and headless hosts. Native blur/focus batches are linked with `relatedTarget`; direct focus callbacks remain target-only while focus-within callbacks run only when a subtree boundary is crossed. |
@@ -450,7 +460,7 @@ props:
450
460
| P1 | Collections and selection | Complete IME/dead-key typeahead conformance and add real-platform fixtures for layout-aware page navigation. |
451
461
| P1 | NumberField interaction | Add real-platform assistive-technology fixtures for localized labels and focused announcements. Group/input/button anatomy, localized stepper labels and role descriptions, focused native value announcements, minimum-anchored button and continuous press-and-hold stepping, Arrow/Page/Home/End keyboard semantics, focused vertical-wheel stepping with horizontal/zoom rejection and `isWheelDisabled`, mouse input-focus preservation, decimal-noise cleanup, boundary disabling, cancellation/re-entry, and native-default suppression are implemented. |
452
462
| P1 | Internationalization | Expand message formatting beyond NumberField, and add currency/unit parsing and formatting plus date ranges/time zones. Reusable decimal/percent parsing and formatting, partial-input validation, locale-aware filtering, localized NumberField model/display conversion, and a 34-locale NumberField message catalog now build on inherited locale/direction. |
453
-
| P1 | Accessibility conformance | Complete native relationship, state, and role-specific property projection, close the documented logical-item/window accessible-name exceptions, and add real assistive-technology fixtures. Independent `aria-label` projection, the typed announcement channel, WAI-ARIA live-region diff policy, and focused NumberField value announcements are implemented on AppKit, GTK4, and WinUI. |
463
+
| P1 | Accessibility conformance | Complete native relationshipand state projection, close the documented logical-item/window accessible-name and description exceptions, fill the remaining AppKit shortcut and WinUI role-description/value-text gaps, and add real assistive-technology fixtures. Independent `aria-label`and field-level descriptive metadata projection, the typed announcement channel, WAI-ARIA live-region diff policy, and focused NumberField value announcements are implemented with explicit per-backend capabilities. |
| P2 | Capability enforcement | Turn reported capability gaps into adapter policy and conformance gates where portable fallback is not sufficient. |
456
466
| P2 | Environment style variants | Add native environment and ancestry evaluators for responsive/container, theme, group, peer, and structural selector variants. These remain preserved in the style IR but inactive at runtime today. |
"value text uses the native NSAccessibility value-description property"
333
+
}
334
+
NativeBackendKind::Gtk4 => {
335
+
"value text uses the native GtkAccessible value-text property"
336
+
}
337
+
NativeBackendKind::WinUI => {
338
+
"value text remains in portable accessibility output because WinUI has no generic attached-property override for a control pattern value"
339
+
}
340
+
NativeBackendKind::Headless => {
341
+
"headless mode retains value text without an OS accessibility object"
342
+
}
343
+
}),
344
+
),
260
345
NativeFeatureCapability::new(
261
346
Feature::AccessibilityRelationships,
262
347
Portable,
@@ -399,6 +484,22 @@ impl NativeCapabilities {
399
484
"AppKit logical combo-box/list and tab items retain the computed name in portable accessibility output but do not expose an independent native accessibility-label setter",
400
485
),
401
486
);
487
+
for feature in[
488
+
Feature::AccessibilityDescription,
489
+
Feature::AccessibilityRoleDescription,
490
+
Feature::AccessibilityKeyShortcuts,
491
+
Feature::AccessibilityValueText,
492
+
]{
493
+
set_role_capability(
494
+
&mut role_overrides,
495
+
role,
496
+
feature,
497
+
Portable,
498
+
Some(
499
+
"AppKit logical combo-box/list and tab items retain descriptive accessibility metadata in portable output but do not expose an independent native accessibility-property setter",
500
+
),
501
+
);
502
+
}
402
503
}
403
504
}
404
505
NativeBackendKind::Gtk4 => {
@@ -411,6 +512,22 @@ impl NativeCapabilities {
411
512
"GTK4 gio::MenuItem retains the computed name in portable accessibility output but has no independent GtkAccessible label property",
412
513
),
413
514
);
515
+
for feature in[
516
+
Feature::AccessibilityDescription,
517
+
Feature::AccessibilityRoleDescription,
518
+
Feature::AccessibilityKeyShortcuts,
519
+
Feature::AccessibilityValueText,
520
+
]{
521
+
set_role_capability(
522
+
&mut role_overrides,
523
+
NativeRole::MenuItem,
524
+
feature,
525
+
Portable,
526
+
Some(
527
+
"GTK4 gio::MenuItem retains descriptive accessibility metadata in portable output but has no independent GtkAccessible property",
528
+
),
529
+
);
530
+
}
414
531
}
415
532
NativeBackendKind::WinUI => {
416
533
set_role_capability(
@@ -422,6 +539,22 @@ impl NativeCapabilities {
422
539
"the WinUI Window wrapper retains the computed name in portable accessibility output but is not a UIElement AutomationProperties target",
423
540
),
424
541
);
542
+
for feature in[
543
+
Feature::AccessibilityDescription,
544
+
Feature::AccessibilityRoleDescription,
545
+
Feature::AccessibilityKeyShortcuts,
546
+
Feature::AccessibilityValueText,
547
+
]{
548
+
set_role_capability(
549
+
&mut role_overrides,
550
+
NativeRole::Window,
551
+
feature,
552
+
Portable,
553
+
Some(
554
+
"the WinUI Window wrapper retains descriptive accessibility metadata in portable output but is not a UIElement AutomationProperties target",
0 commit comments