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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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