sugarcraft / candy-kit
PHP port of charmbracelet/fang — opinionated CLI presentation helpers: StatusLine (✓/✗/⚠/ℹ), Banner, Section header, Stage step, HelpText page, and 6 stock themes (ansi/plain/charm/dracula/nord/catppuccin).
Requires
- php: ^8.3
- sugarcraft/candy-core: dev-master
- sugarcraft/candy-sprinkles: dev-master
Requires (Dev)
- phpunit/phpunit: ^10.5
- sugarcraft/candy-testing: dev-master
This package is auto-updated.
Last update: 2026-07-10 03:48:55 UTC
README
CandyKit
composer require sugarcraft/candy-kit
PHP port of charmbracelet/fang — opinionated CLI presentation helpers that turn ordinary command- line output into something that matches the rest of the SugarCraft stack. CandyKit is library-only — drop it into any Composer project, no Symfony Console requirement.
use SugarCraft\Kit\StatusLine; use SugarCraft\Kit\Banner; use SugarCraft\Kit\Theme; echo Banner::title('CandyApp', 'v0.1.0'), "\n\n"; echo StatusLine::info('connecting to https://example.com'), "\n"; echo StatusLine::success('done in 0.4s'), "\n"; echo StatusLine::warn('disk almost full'), "\n"; echo StatusLine::error('connection refused'), "\n";
Components
Theme— palette ofSprinkles\Styleobjects keyed by status level (success / error / warn / info / prompt / accent / muted).Theme::ansi()ships a sensible default; bring your own theme by passing styles to the constructor.StatusLine—success/error/warn/infostatic helpers returning a glyph + message string styled per the active theme.Banner— render a bordered title block with optional subtitle, rounded by default. Useful for app intros /--versionoutput.Logo— ASCII-art logo renderer withLogo::sugarcraft()built-in preset andLogo::fromAscii($art)for custom art. Chain->withColor($hex)to apply foreground color.Section— styled section with title and body content, themeable.Stage— multi-section presentation container.HelpText— formatted help output.Frame— full-screen application chrome: a double-line box that fills the terminal exactly (Frame::new()->withTitle($bar) ->withStatus($bar)->render($body, $cols, $rows)), with a centred title bar, dividers, and a status bar. Normalises the body to a constant line count and pads ANSI-width-aware so it never overflows the terminal — safe for a TEA program whose frame-diff renderer owns the screen.
Demos
CLI page
Logo
Section
Stage
Test
cd candy-kit && composer install && vendor/bin/phpunit
Snapshot tests
Presenter output is pinned via candy-testing's assertGoldenAnsi golden-file
snapshots. Any change to the ANSI slide output must be intentional — re-record the
fixture with --update-golden to accept a new canonical render.



