Skip to content

[P2-28] Add terminal accessibility, search, refresh, and application actions #33

Description

@phranck

Problem

TUIkit lacks terminal-meaningful cross-cutting SwiftUI behaviors: accessibility labels/values/hints/hidden state, .searchable, .refreshable, keyboardShortcut, Link, Toolbar families, ScenePhase, OpenURLAction, and DismissAction. Without them, controls and navigation cannot expose a consistent semantic model or application action flow.

Application command menus are already tracked by issue #5 and should consume the same action/shortcut infrastructure rather than being reimplemented here.

Proposed solution

  • Add an internal semantic tree populated by SwiftUI-compatible accessibility modifiers and control defaults.
  • Add searchable state/presentation for lists, tables, navigation, and command palettes.
  • Add refresh actions with task identity, cancellation, and visible progress semantics.
  • Add keyboardShortcut resolution and action dispatch shared with Enhancement: Implementation of an Application Menu System #5.
  • Add Link, ScenePhase, OpenURLAction, and DismissAction through the per-app Scene/Environment model with portable terminal behavior.
  • Add ToolbarContent, ToolbarItem, applicable placements, and toolbar modifiers mapped to status-bar and command regions without duplicating Enhancement: Implementation of an Application Menu System #5.

Acceptance criteria

  • Semantic snapshots expose stable labels, values, hints, roles/states, and hidden behavior for all public controls.
  • Search filters/queries, focus, cancellation, and navigation are deterministic.
  • Refresh runs once per trigger, inherits actor isolation, and cancels on identity removal/shutdown.
  • Shortcut conflicts have deterministic priority and are testable without a real terminal.
  • Scene/open/dismiss actions and Link are injected per app and have documented unsupported-platform behavior.
  • Toolbar content composes with Scene/commands/status-bar placement and preserves stable action identity.
  • Swift 6.0 macOS/Linux build, tests, lint, and DocC are warning-free.

Dependencies

Depends on runtime #8, event loop #9, Scene composition #19, data flow #18, focus #22, controls #23, and navigation #31. Command rendering remains in #5.

Parallelization

Accessibility semantics and action/environment infrastructure can proceed in parallel. Search/refresh integration follows the relevant containers.

Commit structure

  • Split this issue into small, thematic, independently revertible commits wherever the work can remain coherent.
  • Every commit must build and keep its applicable tests/gates green. Do not commit an intentionally failing regression test; use local/known-issue characterization or land the test with the smallest fix.
  • Keep characterization/fixtures, mechanical renames or moves, semantic changes, and documentation/migration updates separate when each step remains green.
  • The issue boundary is not a commit boundary; multiple commits are expected for independently reversible changes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority: mediumImportant follow-up after critical and high dependencies

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions