# Changelog

## [0.1.9] - 2026-09-22

### Fixed

- Removed the dead `ConfigPanelModel.width` field (declared, never read —
  `render()` takes width as a parameter).
- CHANGELOG housekeeping: removed a stray trailing HTML comment artifact and
  normalized the 0.1.6 heading style to `## [0.1.6] - YYYY-MM-DD`.

## [0.1.8] - 2026-09-21

### Fixed

- Completion picker cursor math: accepting a suggestion in the first segment
  (empty head) no longer parks the cursor 2 chars past the picked value —
  `", "` was counted even though no separator is inserted there.
- Action rows: Esc during an action's inline prompt no longer marks the panel
  dirty, so closing the panel after a cancelled action no longer fires a
  spurious `onSave(true)`.

## [0.1.7] - 2026-09-20

### Fixed

- Group windowing: a single group with more than `MAX_VISIBLE_ROWS` (18)
  rows now renders in full instead of producing an empty panel with a
  "1-0 of N" footer (the selected group is clamped into the window).

### Changed

- `ConfigPanelModel.invalidate()` (zero internal callers, but required by the
  SDK's `Component` interface) is now documented with that contract role and
  also requests a render after replaying the flat model.

## [0.1.6] - 2026-09-12

### Fixed

- Removed the phantom `extensions/tsconfig.json` from `files[]` (the file
  does not exist; npm pack warned and the tarball shipped nothing for it).

## 0.1.5 (2026-09-11)

### Changed

- Dropped the `pi-package` npm keyword: pi-config-panel is a library dependency
  of other extensions (no `pi` field), not a user-installable pi package, and
  should not surface in pi-hub / `keywords:pi-package` discovery.

## 0.1.4 (2026-08-29)

### Changed

- The inline picker is now cursor-aware: it edits whichever comma-separated
  entry the cursor sits in, not just the last one. Arrow left/right into an
  earlier entry retargets the list live (full list on a pure cursor move;
  typing filters as usual), Tab replaces that entry and PRESERVES the other
  segments, and the cursor parks at the end of the replaced segment.
  filterSuggestions/joinCompletion take an optional cursor (legacy two-arg
  calls keep last-segment behavior). Tests: helper cases + component flow
  (30 total).

## 0.1.3 (2026-08-29)

### Changed

- Editing a string row with an existing value now PREFILLS the input (cursor
  at the end) so entries are edited in place instead of retyped — backspace
  trims, `,` re-offers the picker, Tab appends, Enter commits. Blank submit
  still resets (callers define blank = default). Masked (secret) rows keep
  empty-start (never render the secret) and number rows keep type-to-replace.
  Non-masked rows drop the redundant `(was: …)` hint; editing hint lines now
  include `ctrl+u clear` (verified: pi-tui Input implements deleteToLineStart).
  Regression tests: prefill+edit flow, masked-stays-empty, empty-value path
  (28 tests total).

## 0.1.2 (2026-08-29)

### Fixed

- Inline suggestion list never rendered in the live TUI: `renderRow` returned
  the editing row as one joined string and `truncateToWidth` collapsed the
  ANSI-styled multi-line blob to its first line, so the popup was invisible
  and Tab always picked the first (alphabetical) item. `renderRow` now returns
  an array of lines — suggestions render as their own rows, `↑/↓` navigate,
  Tab picks the highlighted one. Regression test renders with a styled theme
  and asserts the suggestion row survives truncation.

## 0.1.1 (2026-08-29)

### Added

- Panel rows accept optional `completions` (inline suggestion list while
  editing): `filterSuggestions` filters by the segment after the last comma,
  `joinCompletion` implements segment replacement, `Tab` picks the highlighted
  suggestion and `Enter` always submits the typed text (custom values never
  get trapped).

## 0.1.0

- Initial release — kernel extracted from pi-a2a's `/a2a-config` panel (design unchanged since a2a 0.3.0).
- Exports: `openConfigPanel`, `ConfigPanelModel`, `makeOnAction`, `row`, `toInt`, `applyRows`, `kindValue`, row-model types.
- `BuildRows<T>` generic row builder replaces pi-a2a's hardcoded `buildRows`; `title` option replaces the hardcoded "A2A Configuration" header.
- Kernel tests ported from pi-a2a against a generic fixture config.

