artisanal_widgets 0.1.0+1 copy "artisanal_widgets: ^0.1.0+1" to clipboard
artisanal_widgets: ^0.1.0+1 copied to clipboard

Widget system for composable TUI components, built on top of the artisanal terminal toolkit.

artisanal_widgets #

Flutter-inspired widget framework for terminal UIs, built on top of artisanal.

Table of Contents #

Installation #

dependencies:
  artisanal_widgets: ^0.1.0

Import #

import 'package:artisanal_widgets/artisanal_widgets.dart';
import 'package:artisanal/tui.dart' as tui;

Quick start #

class HelloApp extends StatelessWidget {
  HelloApp({super.key});

  @override
  Widget build(BuildContext context) {
    final theme = ThemeScope.of(context);
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        Text('Hello widgets', style: theme.titleLarge),
        Text('Press q to quit', style: theme.bodyMedium),
      ],
    );
  }
}

void main() async {
  final app = tui.WidgetApp(HelloApp());

  await tui.runProgram(app);
}

Flutter-style component ports #

  • Chips: Chip, ActionChip, ChoiceChip, FilterChip, InputChip
  • Menus: DropdownButton, DropdownMenuItem, PopupMenuButton, PopupMenuItem, CheckedPopupMenuItem, PopupMenuDivider
  • Sliders: Slider, RangeSlider, RangeValues
  • Indicators: LinearProgressIndicator, CircularProgressIndicator
  • Charts: SparklineChart, LineChart, BarChart, HeatmapChart, PieChart, RibbonChart with optional in-chart legends

Charts The OpenCode example is self-contained under example/opencode (including local data models and theme assets).

OpenCode Clone OpenCode Clone 2 Panel Box

Program Instrumentation #

The core TUI runtime (Program) supports general instrumentation and automation for any app (not OpenCode-specific):

  • ProgramInterceptor for message interception/timing hooks.
  • ProgramReplay for deterministic event playback.
import 'package:artisanal/tui.dart' as tui;

final replay = tui.ProgramReplay.script([
  tui.ProgramReplayStep(
    after: Duration(milliseconds: 120),
    msg: tui.KeyMsg(tui.Key(tui.KeyType.runes, runes: [0x61])),
  ),
  tui.ProgramReplayStep(after: Duration(milliseconds: 16), msg: tui.QuitMsg()),
]);

await tui.runProgram(
  tui.WidgetApp(MyApp()),
  options: tui.ProgramOptions(replay: replay),
);

See the package:artisanal/tui.dart API docs for full interceptor/replay details.

Tests #

Component tests are split by widget under test/components/*_test.dart.

Useful commands:

dart test test/components
dart test
dart analyze

Command execution note #

When combining commands that include runtime-managed commands (EveryCmd, StreamCmd, or helpers like every(...)), use ParallelCmd so those commands are started by Program.

Use Cmd.batch(...) for finite commands that only need execute().

0
likes
160
points
48
downloads

Publisher

unverified uploader

Weekly Downloads

Widget system for composable TUI components, built on top of the artisanal terminal toolkit.

Repository (GitHub)
View/report issues

Topics

#cli #tui #terminal #widget

Documentation

API reference

Funding

Consider supporting this project:

www.buymeacoffee.com

License

MIT (license)

Dependencies

artisanal, image, meta

More

Packages that depend on artisanal_widgets