Raise the declared minimums in pubspec.yaml to what our deps already require: Flutter >=3.35.0 / Dart >=3.9.0 (was 3.19.0 / 3.5.0). alchemist 0.12 needs Flutter 3.32; Dart 3.9 first ships in Flutter 3.35, so 3.35 is the binding floor. Pin the exact build toolchain in .fvmrc (Flutter 3.44.1). Moving to the Dart 3.9 language level switches `dart format` to the new "tall" style and enables two new lints. This commit is the resulting mechanical churn, isolated from any behaviour change: - whole-tree `dart format` reformat (tall style) - `dart fix` for unnecessary_underscores + use_null_aware_elements No runtime behaviour change; `make test` green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
35 lines
1.4 KiB
Dart
35 lines
1.4 KiB
Dart
/// A non-PTY pane the user sees in the GUI — a kernel tab (Claude, Files,
|
|
/// Editor, a viewer) surfaced so `pane list` reflects the live workspace,
|
|
/// not only PTY-spawned panes (T-219, D-6 parity / D-83).
|
|
///
|
|
/// The PTY-backed [Pane] can't represent these: a tab has no child process.
|
|
/// Rather than mirror state into [PaneRegistry] (and risk it drifting from
|
|
/// the live UI), the kernel snapshots its `PanelRegistry` into these value
|
|
/// objects at request time — `pane.list` reads them through an injected
|
|
/// source. Pure data, Flutter-free, so it serialises on the IPC wire and
|
|
/// stays usable from `dart test`.
|
|
library;
|
|
|
|
class ViewPane {
|
|
const ViewPane({required this.id, required this.slot, required this.title, required this.active, required this.visible});
|
|
|
|
/// Stable contribution id (e.g. `claude`, `files`, `editor`) — the same id
|
|
/// `pane.focus` would target.
|
|
final String id;
|
|
|
|
/// The slot the tab lives in (`sidebar` / `workspace` / `context`).
|
|
final String slot;
|
|
|
|
/// Display title the user sees on the tab.
|
|
final String title;
|
|
|
|
/// Whether this is the active (front) tab in its slot — the focus state
|
|
/// the acceptance asks for.
|
|
final bool active;
|
|
|
|
/// Whether the tab's slot is currently visible (not collapsed/hidden).
|
|
final bool visible;
|
|
|
|
Map<String, Object?> toJson() => {'id': id, 'kind': 'view', 'slot': slot, 'title': title, 'active': active, 'visible': visible, 'source': 'ui'};
|
|
}
|