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
This file tracks known gaps, planned improvements, and long-term goals for php-io-cli. It is written for contributors who want to pick up meaningful work and for maintainers planning future releases.
Status icons: 🔴 Not started · 🟡 In progress · 🟢 Done · ⚪ Deferred
1. Test Coverage
Item
Priority
Status
Notes
Unit tests for State
P0
🟢
Done in tests/Unit/StateTest.php
Unit tests for Colors
P0
🟢
Done
Unit tests for Fuzzy
P0
🟢
Done
Unit tests for Key
P0
🟢
Done
Unit tests for Hooks
P0
🟢
Done
Unit tests for Input
P0
🟢
Done
Unit tests for ShellResult
P0
🟢
Done
Unit tests for RenderContext
P0
🟢
Done
Unit tests for Table
P0
🟢
Done
Unit tests for NullIO
P0
🟢
Done
Integration: AbstractCommand
P0
🟢
Done
Integration: CLIApplication
P0
🟢
Done
Integration: BufferIO
P0
🟢
Done
Unit tests for Alert
P1
🟢
Done in tests/Unit/AlertTest.php
Unit tests for SpinnerFrames
P1
🟢
Done in tests/Unit/SpinnerFramesTest.php
Unit tests for Spinner
P1
🟢
Done in tests/Unit/SpinnerTest.php
Unit tests for Renderer
P1
🟢
Done in tests/Unit/RendererTest.php
Integration: BufferIO::setUserInputs + commands
P1
🟢
Done in tests/Integration/BufferIOUserInputsTest.php
Integration: Shell::run (echo command)
P2
🟢
Done in tests/Integration/ShellTest.php
Integration: Shell::capture
P2
🟢
Done in tests/Integration/ShellTest.php
Mutation testing via Infection
P2
🔴
Add infection/infection dev dep; configure infection.json5
Coverage badge > 80% target
P2
🔴
Depends on above items
2. New Components
Component
Priority
Status
Description
SliderInput
P1
🟢
Done in src/Components/SliderInput.php — horizontal bar slider for float/int ranges; arrow keys ± step
RadioGroup
P1
🟢
Done in src/Components/RadioGroup.php — renders all options at once; ↑↓←→ navigate, 1-9 jump, multi-column layout
SearchableTreeSelect
P2
🔴
Nested tree navigation. parent > child > grandchild grouping.
TagInput
P2
🔴
Free-form comma-delimited tags with fuzzy autocomplete.
CodeEditor
P3
🔴
Minimal inline code block with basic syntax highlighting.
FilePathInput
P2
🔴
TextInput with Tab-completion from the filesystem.
TimePicker
P2
🔴
Companion to DatePicker. HH:MM[:SS] with arrow-key stepping.
Done — KeyReaderInterface, TerminalKeyReader, ArrayKeyReader; AbstractPrompt::withKeyReader() injection; full test coverage in KeyReaderTest.php
Component base — remove direct echo from render()
P1
🔴
Components should write to an OutputInterface buffer, not STDOUT directly. Enables headless rendering.
Windows support — full VT100 parity
P1
🔴
Terminal::readKey() on Windows needs a separate implementation (no stty, use ReadConsoleInput via FFI or sapi_windows_*). Currently usable only in Windows Terminal / modern CMD.
Async / non-blocking loop
P2
🔴
Optional event loop hook (e.g. Swoole / ReactPHP / Revolt) so components can run inside coroutines without blocking the main thread
IRenderer diffing
P2
🔴
Implement dirty-region diffing in Renderer to only repaint changed lines, reducing flicker on slow terminals
State serialization
P2
🔴
State::toArray() / State::fromArray() for save/restore across TTY sessions
Component composition
P2
🔴
Allow embedding one component inside another (e.g. TextInput inside Autocomplete without copy/paste)