pickem 1.0.1 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
  ![npm version](https://img.shields.io/npm/v/pickem) ![node](https://img.shields.io/node/v/pickem) ![license](https://img.shields.io/npm/l/pickem)
6
6
 
7
+ ![pickem demo — searchable, usage-sorted CLI picker](https://raw.githubusercontent.com/calebogden/pickem-assets/main/pickem-demo.gif)
8
+
7
9
  - **Search as you type** — filter on labels, descriptions, or any field you name
8
10
  - **Usage-aware ordering** — frequently chosen items sort to the top automatically
9
11
  - **Single- and multi-select** — with optional free-text entry for ad-hoc values
package/core/chrome.d.ts CHANGED
@@ -9,8 +9,10 @@ export interface RowArgs {
9
9
  meta?: string[];
10
10
  active?: boolean;
11
11
  glyph?: string;
12
- state?: string;
13
- maxWidth?: number;
12
+ /** Filter term to highlight inside the label on inactive rows. */
13
+ term?: string;
14
+ /** Row width for right-aligning the active chevron. Defaults to the terminal width. */
15
+ width?: number;
14
16
  }
15
17
  export interface SearchBoxArgs {
16
18
  value: string;
@@ -26,10 +28,19 @@ export interface FooterArgs {
26
28
  export declare function makeChrome({ colors, symbols }: ChromeDeps): {
27
29
  /** Accent+bold title, then a dim "·"-joined hint line. */
28
30
  header(title: string, hints?: string[]): string;
29
- /** Rounded boxed search input (searchable pickers only). */
31
+ /**
32
+ * Rounded boxed search input (searchable pickers only). When empty, the block
33
+ * cursor sits at the START of the input (where typing begins) with the
34
+ * placeholder dimmed behind it — not parked after the placeholder text.
35
+ */
30
36
  searchBox({ value, placeholder, focused, width }: SearchBoxArgs): string;
31
- /** One columnar list row: pointer [glyph] [state] name · dim-meta. */
32
- row({ label, meta, active, glyph, state, maxWidth }: RowArgs): string;
37
+ /**
38
+ * One columnar list row. The left column (glyph + name) is FIXED — it never
39
+ * shifts as the cursor moves. The active row is marked by a left-pointing `❮`
40
+ * right-aligned at the row's right edge (plus an accent name). Inactive rows
41
+ * highlight the matched `term` substring in accent.
42
+ */
43
+ row({ label, meta, active, glyph, term, width }: RowArgs): string;
33
44
  /** Dim pagination/summary footer. */
34
45
  footer({ moreAbove, moreBelow, summary }: FooterArgs): string;
35
46
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/core/chrome.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU;IAKtD,0DAA0D;kBAC5C,MAAM,UAAS,MAAM,EAAE,GAAQ,MAAM;IAMnD,4DAA4D;sDACO,aAAa,GAAG,MAAM;IAYzF,sEAAsE;yDACW,OAAO,GAAG,MAAM;IASjG,qCAAqC;8CACkB,UAAU,GAAG,MAAM;EAQ7E;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA"}
1
+ {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/core/chrome.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAWD,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU;IAKtD,0DAA0D;kBAC5C,MAAM,UAAS,MAAM,EAAE,GAAQ,MAAM;IAMnD;;;;OAIG;sDACgE,aAAa,GAAG,MAAM;IAYzF;;;;;OAKG;qDACuF,OAAO,GAAG,MAAM;IAgB1G,qCAAqC;8CACkB,UAAU,GAAG,MAAM;EAQ7E;AAED,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA"}
package/core/chrome.js CHANGED
@@ -1,8 +1,11 @@
1
- import { displayWidth, truncateToWidth } from './width.js';
1
+ import { displayWidth } from './width.js';
2
2
  function padToWidth(str, width) {
3
3
  const w = displayWidth(str);
4
4
  return w >= width ? str : str + ' '.repeat(width - w);
5
5
  }
6
+ function terminalWidth() {
7
+ return (typeof process !== 'undefined' && process.stdout && process.stdout.columns) || 80;
8
+ }
6
9
  export function makeChrome({ colors, symbols }) {
7
10
  const dot = colors.dim(' · ');
8
11
  const accent = colors.accent;
@@ -14,11 +17,15 @@ export function makeChrome({ colors, symbols }) {
14
17
  return head;
15
18
  return `${head}\n${colors.dim(hints.join(' · '))}`;
16
19
  },
17
- /** Rounded boxed search input (searchable pickers only). */
20
+ /**
21
+ * Rounded boxed search input (searchable pickers only). When empty, the block
22
+ * cursor sits at the START of the input (where typing begins) with the
23
+ * placeholder dimmed behind it — not parked after the placeholder text.
24
+ */
18
25
  searchBox({ value, placeholder = '', focused = true, width = 40 }) {
19
26
  const w = Math.max(20, Math.min(width, 60));
20
27
  const cursor = focused ? colors.inverse(' ') : '';
21
- const text = value.length ? value + cursor : colors.dim(placeholder) + cursor;
28
+ const text = value.length ? `${value}${cursor}` : `${cursor}${colors.dim(placeholder)}`;
22
29
  const content = `${colors.dim(symbols.search)} ${text}`;
23
30
  const inner = padToWidth(content, w);
24
31
  const top = colors.dim(symbols.cornerTL + symbols.line.repeat(w + 1) + symbols.cornerTR);
@@ -26,14 +33,30 @@ export function makeChrome({ colors, symbols }) {
26
33
  const bot = colors.dim(symbols.cornerBL + symbols.line.repeat(w + 1) + symbols.cornerBR);
27
34
  return `${top}\n${mid}\n${bot}`;
28
35
  },
29
- /** One columnar list row: pointer [glyph] [state] name · dim-meta. */
30
- row({ label, meta = [], active = false, glyph = '', state = '', maxWidth = 80 }) {
31
- const pointer = active ? accent(symbols.pointer) : ' ';
36
+ /**
37
+ * One columnar list row. The left column (glyph + name) is FIXED it never
38
+ * shifts as the cursor moves. The active row is marked by a left-pointing `❮`
39
+ * right-aligned at the row's right edge (plus an accent name). Inactive rows
40
+ * highlight the matched `term` substring in accent.
41
+ */
42
+ row({ label, meta = [], active = false, glyph = '', term = '', width = terminalWidth() }) {
43
+ const highlight = (text) => {
44
+ if (active)
45
+ return accent(text);
46
+ if (!term)
47
+ return text;
48
+ const i = text.toLowerCase().indexOf(term.toLowerCase());
49
+ if (i < 0)
50
+ return text;
51
+ return text.slice(0, i) + accent(text.slice(i, i + term.length)) + text.slice(i + term.length);
52
+ };
32
53
  const g = glyph ? `${glyph} ` : '';
33
- const s = state ? `${colors.dim(state)} ` : '';
34
- const name = active ? accent(truncateToWidth(label, maxWidth)) : truncateToWidth(label, maxWidth);
35
54
  const m = meta.length ? dot + colors.dim(meta.join(' · ')) : '';
36
- return `${pointer} ${g}${s}${name}${m}`;
55
+ const content = `${g}${highlight(label)}${m}`;
56
+ if (!active)
57
+ return content;
58
+ const pad = Math.max(1, width - displayWidth(content) - 1);
59
+ return `${content}${' '.repeat(pad)}${accent(symbols.pointerLeft)}`;
37
60
  },
38
61
  /** Dim pagination/summary footer. */
39
62
  footer({ moreAbove = 0, moreBelow = 0, summary = '' }) {
@@ -1 +1 @@
1
- {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/core/chrome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/core/chrome.ts"],"names":[],"mappings":"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"}
package/core/screen.d.ts CHANGED
@@ -1,6 +1,13 @@
1
+ /**
2
+ * Line-diffing terminal renderer. Only the lines that actually changed since the
3
+ * previous frame are repainted (per-line `eraseLine`), so unchanged lines never
4
+ * flash — even on terminals that don't support DEC synchronized output (e.g.
5
+ * macOS Terminal.app). Sync-output markers are still emitted as a bonus for
6
+ * terminals that do support them (atomic repaint).
7
+ */
1
8
  export declare class Screen {
2
9
  private readonly out;
3
- private height;
10
+ private prevLines;
4
11
  private offExit;
5
12
  private onResize;
6
13
  private lastRender;
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/core/screen.ts"],"names":[],"mappings":"AAIA,qBAAa,MAAM;IAML,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA+E;IAC/F,OAAO,CAAC,UAAU,CAAgC;gBAErB,GAAG,EAAE,MAAM,CAAC,WAAW;IAEpD,OAAO,KAAK,OAAO,GAElB;IAED,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,IAAI;IAMZ,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,IAAI;IAgBvC,IAAI,IAAI,IAAI;CAOb"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../src/core/screen.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,qBAAa,MAAM;IAML,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAA+E;IAC/F,OAAO,CAAC,UAAU,CAAgC;gBAErB,GAAG,EAAE,MAAM,CAAC,WAAW;IAEpD,OAAO,KAAK,OAAO,GAElB;IAED,KAAK,IAAI,IAAI;IAMb,OAAO,CAAC,IAAI;IAMZ,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAK,GAAG,IAAI;IA4CvC,IAAI,IAAI,IAAI;CAOb"}
package/core/screen.js CHANGED
@@ -1,9 +1,16 @@
1
1
  import { ansi } from './ansi.js';
2
2
  import { onExit } from './cleanup.js';
3
- import { wrapToWidth } from './width.js';
3
+ import { displayWidth, wrapToWidth } from './width.js';
4
+ /**
5
+ * Line-diffing terminal renderer. Only the lines that actually changed since the
6
+ * previous frame are repainted (per-line `eraseLine`), so unchanged lines never
7
+ * flash — even on terminals that don't support DEC synchronized output (e.g.
8
+ * macOS Terminal.app). Sync-output markers are still emitted as a bonus for
9
+ * terminals that do support them (atomic repaint).
10
+ */
4
11
  export class Screen {
5
12
  out;
6
- height = 0;
13
+ prevLines = [];
7
14
  offExit = null;
8
15
  onResize = () => this.lastRender && this.render(this.lastRender[0], this.lastRender[1]);
9
16
  lastRender = null;
@@ -26,24 +33,51 @@ export class Screen {
26
33
  render(body, bottom = '') {
27
34
  this.lastRender = [body, bottom];
28
35
  const frame = bottom ? `${body}\n${bottom}` : body;
29
- const lines = this.wrap(frame);
36
+ const next = this.wrap(frame);
37
+ const prev = this.prevLines;
30
38
  let buf = ansi.beginSync;
31
- if (this.height > 0) {
32
- buf += ansi.cursorTo(0);
33
- if (this.height > 1)
34
- buf += ansi.cursorUp(this.height - 1);
35
- buf += ansi.eraseDown;
39
+ if (prev.length === 0) {
40
+ // First paint — write the whole frame once.
41
+ buf += next.join('\n');
42
+ }
43
+ else {
44
+ // Move to column 0 of the first line of the previous block.
45
+ buf += '\r';
46
+ if (prev.length > 1)
47
+ buf += ansi.cursorUp(prev.length - 1);
48
+ const max = Math.max(prev.length, next.length);
49
+ for (let i = 0; i < max; i++) {
50
+ if (i > 0)
51
+ buf += '\n\r'; // advance to next line, column 0
52
+ if (i < next.length) {
53
+ // Overwrite in-place rather than erase-then-write: write the new content
54
+ // then pad with spaces to the terminal width. This covers any longer old
55
+ // content in a single write, so the line never flashes blank.
56
+ if (next[i] !== prev[i]) {
57
+ const pad = Math.max(0, this.columns - displayWidth(next[i]));
58
+ buf += next[i] + ' '.repeat(pad);
59
+ }
60
+ }
61
+ else {
62
+ // Line existed before but not now — blank it.
63
+ buf += ansi.eraseLine;
64
+ }
65
+ }
66
+ // If the new frame is shorter, the cursor is parked on an old (now-blank)
67
+ // line; move it back up to the real last content line so height tracking
68
+ // stays correct for the next diff.
69
+ if (next.length < prev.length)
70
+ buf += ansi.cursorUp(prev.length - next.length);
36
71
  }
37
- buf += lines.join('\n');
38
72
  buf += ansi.endSync;
39
73
  this.out.write(buf);
40
- this.height = lines.length;
74
+ this.prevLines = next;
41
75
  }
42
76
  done() {
43
77
  this.out.write(`${ansi.showCursor}\n`);
44
78
  this.out.off?.('resize', this.onResize);
45
79
  this.offExit?.();
46
- this.height = 0;
80
+ this.prevLines = [];
47
81
  this.lastRender = null;
48
82
  }
49
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/core/screen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/core/screen.ts"],"names":[],"mappings":"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"}
package/core/symbols.d.ts CHANGED
@@ -12,6 +12,7 @@ export declare function makeSymbols(unicode?: boolean): {
12
12
  checkOn: string;
13
13
  checkOff: string;
14
14
  pointer: string;
15
+ pointerLeft: string;
15
16
  cornerTL: string;
16
17
  cornerTR: string;
17
18
  cornerBL: string;
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAUhF;AAED,wBAAgB,WAAW,CAAC,OAAO,UAAuB;;;;;;;;;;;;;;;;;;;;;;;EA2BzD;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAUhF;AAED,wBAAgB,WAAW,CAAC,OAAO,UAAuB;;;;;;;;;;;;;;;;;;;;;;;;EA4BzD;AAED,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAA"}
package/core/symbols.js CHANGED
@@ -25,6 +25,7 @@ export function makeSymbols(unicode = isUnicodeSupported()) {
25
25
  checkOn: u('◼', '[x]'),
26
26
  checkOff: u('◻', '[ ]'),
27
27
  pointer: u('❯', '>'),
28
+ pointerLeft: u('❮', '<'),
28
29
  cornerTL: u('╭', '+'),
29
30
  cornerTR: u('╮', '+'),
30
31
  cornerBL: u('╰', '+'),
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,CAAA;IAC7D,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,mBAAmB;QAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC7B,GAAG,CAAC,UAAU,KAAK,cAAc;QACjC,GAAG,CAAC,YAAY,KAAK,QAAQ;QAC7B,GAAG,CAAC,IAAI,KAAK,gBAAgB;QAC7B,GAAG,CAAC,IAAI,KAAK,WAAW,CACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,kBAAkB,EAAE;IACxD,MAAM,CAAC,GAAG,CAAI,GAAM,EAAE,KAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1D,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACvB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACvB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;QACtB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;QACvB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,qDAAqD;QACrD,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;KACpG,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"symbols.js","sourceRoot":"","sources":["../../src/core/symbols.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,CAAA;IAC7D,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,mBAAmB;QAC9C,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC7B,GAAG,CAAC,UAAU,KAAK,cAAc;QACjC,GAAG,CAAC,YAAY,KAAK,QAAQ;QAC7B,GAAG,CAAC,IAAI,KAAK,gBAAgB;QAC7B,GAAG,CAAC,IAAI,KAAK,WAAW,CACzB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,kBAAkB,EAAE;IACxD,MAAM,CAAC,GAAG,CAAI,GAAM,EAAE,KAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC1D,OAAO;QACL,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACvB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACvB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;QACtB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC;QACvB,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACpB,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACxB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACrB,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACjB,qDAAqD;QACrD,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACnB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;KACpG,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/core/testing.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AA+BzC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IACtD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,IAAI,MAAM,CAAA;CACpB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,EACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3E,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAgBxB"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/core/testing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AA0HzC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAA;IACtD,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAClB,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,IAAI,MAAM,CAAA;CACpB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,CAAC,EACxC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAA;CAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAC3E,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAgBxB"}
package/core/testing.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { EventEmitter } from 'node:events';
2
- import { stripAnsi } from './width.js';
3
2
  class FakeInput extends EventEmitter {
4
3
  isTTY = false;
5
4
  setRawMode() { }
@@ -11,20 +10,108 @@ class FakeInput extends EventEmitter {
11
10
  this.emit('keypress', key.sequence, key);
12
11
  }
13
12
  }
13
+ /**
14
+ * A minimal virtual terminal. It records every write and, on demand, replays the
15
+ * whole stream into a line buffer — honoring cursor moves, line/whole-screen
16
+ * erases, and carriage returns. This is what makes a *line-diff* renderer (which
17
+ * only re-emits the lines that changed) testable: `getScreen()` reflects the true
18
+ * on-screen state, not just the bytes of the last frame. SGR/colour and private
19
+ * modes (synchronized output, cursor hide/show) are zero-width and ignored.
20
+ */
14
21
  class FakeOutput extends EventEmitter {
15
22
  columns = 80;
16
23
  isTTY = true;
17
- buffer = '';
24
+ writes = '';
18
25
  write(s) {
19
- // Synchronized-output + erase sequences are stripped for assertion simplicity;
20
- // we keep only the latest "frame" by resetting on the begin-sync marker.
21
- this.buffer += s;
26
+ this.writes += s;
22
27
  return true;
23
28
  }
24
- latestFrame() {
25
- // Keep text after the final beginSync marker, strip all ANSI.
26
- const parts = this.buffer.split('\x1b[?2026h');
27
- return stripAnsi(parts[parts.length - 1] ?? '');
29
+ /** Replay the full write stream into a fresh line buffer and return it. */
30
+ screen() {
31
+ const lines = [''];
32
+ let row = 0;
33
+ let col = 0;
34
+ const s = this.writes;
35
+ let i = 0;
36
+ const ensureRow = () => {
37
+ while (lines.length <= row)
38
+ lines.push('');
39
+ };
40
+ const put = (ch) => {
41
+ ensureRow();
42
+ let line = lines[row];
43
+ if (line.length < col)
44
+ line += ' '.repeat(col - line.length);
45
+ lines[row] = line.slice(0, col) + ch + line.slice(col + 1);
46
+ col += 1;
47
+ };
48
+ while (i < s.length) {
49
+ const ch = s[i];
50
+ if (ch === '\x1b' && s[i + 1] === '[') {
51
+ // Parse a CSI sequence: ESC [ [?] params final
52
+ let j = i + 2;
53
+ let question = false;
54
+ if (s[j] === '?') {
55
+ question = true;
56
+ j += 1;
57
+ }
58
+ let params = '';
59
+ while (j < s.length && /[0-9;]/.test(s[j])) {
60
+ params += s[j];
61
+ j += 1;
62
+ }
63
+ const final = s[j] ?? '';
64
+ const n = parseInt(params, 10) || 0;
65
+ if (!question) {
66
+ switch (final) {
67
+ case 'A':
68
+ row = Math.max(0, row - Math.max(1, n));
69
+ break;
70
+ case 'B':
71
+ row += Math.max(1, n);
72
+ ensureRow();
73
+ break;
74
+ case 'C':
75
+ col += Math.max(1, n);
76
+ break;
77
+ case 'D':
78
+ col = Math.max(0, col - Math.max(1, n));
79
+ break;
80
+ case 'G':
81
+ col = Math.max(0, (n || 1) - 1);
82
+ break;
83
+ case 'K': // erase line (0/2 → whole line for our purposes)
84
+ ensureRow();
85
+ lines[row] = '';
86
+ break;
87
+ case 'J': // erase from cursor down
88
+ ensureRow();
89
+ lines[row] = lines[row].slice(0, col);
90
+ lines.length = row + 1;
91
+ break;
92
+ // 'm' (SGR) and anything else: no layout effect
93
+ }
94
+ }
95
+ // private modes (?2026h/l, ?25h/l) and SGR: skip
96
+ i = j + 1;
97
+ continue;
98
+ }
99
+ if (ch === '\n') {
100
+ row += 1;
101
+ col = 0;
102
+ ensureRow();
103
+ i += 1;
104
+ continue;
105
+ }
106
+ if (ch === '\r') {
107
+ col = 0;
108
+ i += 1;
109
+ continue;
110
+ }
111
+ put(ch);
112
+ i += 1;
113
+ }
114
+ return lines.join('\n');
28
115
  }
29
116
  }
30
117
  export async function renderTest(picker, config) {
@@ -42,6 +129,6 @@ export async function renderTest(picker, config) {
42
129
  };
43
130
  // Let the initial render settle.
44
131
  await Promise.resolve();
45
- return { answer, events, getScreen: () => output.latestFrame().trim() };
132
+ return { answer, events, getScreen: () => output.screen().replace(/[ \t]+$/gm, '').replace(/\n+$/, '') };
46
133
  }
47
134
  //# sourceMappingURL=testing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/core/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtC,MAAM,SAAU,SAAQ,YAAY;IAClC,KAAK,GAAG,KAAK,CAAA;IACb,UAAU,KAAI,CAAC;IACf,MAAM,KAAI,CAAC;IACX,+EAA+E;IAC/E,2EAA2E;IAC3E,OAAO,CAAC,IAAY,EAAE,OAA0B,EAAE;QAChD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAC9G,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC1C,CAAC;CACF;AAED,MAAM,UAAW,SAAQ,YAAY;IACnC,OAAO,GAAG,EAAE,CAAA;IACZ,KAAK,GAAG,IAAI,CAAA;IACJ,MAAM,GAAG,EAAE,CAAA;IACnB,KAAK,CAAC,CAAS;QACb,+EAA+E;QAC/E,yEAAyE;QACzE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,WAAW;QACT,8DAA8D;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC9C,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACjD,CAAC;CACF;AAaD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAA2E,EAC3E,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAY,EAAE,MAAM,EAAE,MAAa,EAAE,CAAC,CAAA;IAE7E,MAAM,MAAM,GAAe;QACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE;YACtB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI;YACP,KAAK,MAAM,EAAE,IAAI,IAAI;gBAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5D,CAAC;KACF,CAAA;IACD,iCAAiC;IACjC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAA;AACzE,CAAC"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/core/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAG1C,MAAM,SAAU,SAAQ,YAAY;IAClC,KAAK,GAAG,KAAK,CAAA;IACb,UAAU,KAAI,CAAC;IACf,MAAM,KAAI,CAAC;IACX,+EAA+E;IAC/E,2EAA2E;IAC3E,OAAO,CAAC,IAAY,EAAE,OAA0B,EAAE;QAChD,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAA;QAC9G,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAC1C,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAW,SAAQ,YAAY;IACnC,OAAO,GAAG,EAAE,CAAA;IACZ,KAAK,GAAG,IAAI,CAAA;IACJ,MAAM,GAAG,EAAE,CAAA;IAEnB,KAAK,CAAC,CAAS;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,2EAA2E;IAC3E,MAAM;QACJ,MAAM,KAAK,GAAa,CAAC,EAAE,CAAC,CAAA;QAC5B,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;QACrB,IAAI,CAAC,GAAG,CAAC,CAAA;QAET,MAAM,SAAS,GAAG,GAAG,EAAE;YACrB,OAAO,KAAK,CAAC,MAAM,IAAI,GAAG;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5C,CAAC,CAAA;QACD,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAE;YACzB,SAAS,EAAE,CAAA;YACX,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;gBAAE,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YAC5D,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;YAC1D,GAAG,IAAI,CAAC,CAAA;QACV,CAAC,CAAA;QAED,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACf,IAAI,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtC,+CAA+C;gBAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACb,IAAI,QAAQ,GAAG,KAAK,CAAA;gBACpB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBACjB,QAAQ,GAAG,IAAI,CAAA;oBACf,CAAC,IAAI,CAAC,CAAA;gBACR,CAAC;gBACD,IAAI,MAAM,GAAG,EAAE,CAAA;gBACf,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3C,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;oBACd,CAAC,IAAI,CAAC,CAAA;gBACR,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;gBACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,KAAK,EAAE,CAAC;wBACd,KAAK,GAAG;4BACN,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;4BACvC,MAAK;wBACP,KAAK,GAAG;4BACN,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;4BACrB,SAAS,EAAE,CAAA;4BACX,MAAK;wBACP,KAAK,GAAG;4BACN,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;4BACrB,MAAK;wBACP,KAAK,GAAG;4BACN,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;4BACvC,MAAK;wBACP,KAAK,GAAG;4BACN,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;4BAC/B,MAAK;wBACP,KAAK,GAAG,EAAE,iDAAiD;4BACzD,SAAS,EAAE,CAAA;4BACX,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;4BACf,MAAK;wBACP,KAAK,GAAG,EAAE,yBAAyB;4BACjC,SAAS,EAAE,CAAA;4BACX,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;4BACrC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAA;4BACtB,MAAK;wBACP,gDAAgD;oBAClD,CAAC;gBACH,CAAC;gBACD,iDAAiD;gBACjD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACT,SAAQ;YACV,CAAC;YACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChB,GAAG,IAAI,CAAC,CAAA;gBACR,GAAG,GAAG,CAAC,CAAA;gBACP,SAAS,EAAE,CAAA;gBACX,CAAC,IAAI,CAAC,CAAA;gBACN,SAAQ;YACV,CAAC;YACD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChB,GAAG,GAAG,CAAC,CAAA;gBACP,CAAC,IAAI,CAAC,CAAA;gBACN,SAAQ;YACV,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,CAAA;YACP,CAAC,IAAI,CAAC,CAAA;QACR,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AAaD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAA2E,EAC3E,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,SAAS,EAAE,CAAA;IAC7B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAY,EAAE,MAAM,EAAE,MAAa,EAAE,CAAC,CAAA;IAE7E,MAAM,MAAM,GAAe;QACzB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE;YACtB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI;YACP,KAAK,MAAM,EAAE,IAAI,IAAI;gBAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;QAC5D,CAAC;KACF,CAAA;IACD,iCAAiC;IACjC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACvB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAA;AAC1G,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pickem",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Usage-sorted searchable autocomplete for CLI tools",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,CAAA;IACR,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,YAAY,qGAwDvB,CAAA"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,CAAA;IACR,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,YAAY,qGAyDvB,CAAA"}
package/prompts/search.js CHANGED
@@ -29,7 +29,11 @@ export const searchPicker = createPicker((config, done) => {
29
29
  }, [term]);
30
30
  useKeypress((key) => {
31
31
  const n = Math.max(results.length, 1);
32
- if (isUp(key))
32
+ if (isPrintable(key))
33
+ setTerm(term + key.sequence);
34
+ else if (isBackspace(key))
35
+ setTerm(term.slice(0, -1));
36
+ else if (isUp(key))
33
37
  setCursor((cursor - 1 + n) % n);
34
38
  else if (isDown(key))
35
39
  setCursor((cursor + 1) % n);
@@ -39,10 +43,6 @@ export const searchPicker = createPicker((config, done) => {
39
43
  done(results[cursor].value);
40
44
  }
41
45
  }
42
- else if (isBackspace(key))
43
- setTerm(term.slice(0, -1));
44
- else if (isPrintable(key))
45
- setTerm(term + key.sequence);
46
46
  });
47
47
  const spinner = useStatusGlyph({ status, colors, symbols });
48
48
  if (status === 'done')
@@ -59,7 +59,7 @@ export const searchPicker = createPicker((config, done) => {
59
59
  active: cursor,
60
60
  pageSize,
61
61
  loop: true,
62
- renderItem: ({ item, isActive }) => chrome.row({ label: item.name, active: isActive }),
62
+ renderItem: ({ item, isActive }) => chrome.row({ label: item.name, active: isActive, term }),
63
63
  });
64
64
  const footer = chrome.footer({ moreBelow: Math.max(0, results.length - pageSize), summary: `${results.length} matches` });
65
65
  return `${header}\n\n${box}\n\n${page}\n${footer}`;
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/prompts/search.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"searchable-checkbox.d.ts","sourceRoot":"","sources":["../../src/prompts/searchable-checkbox.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,MAAM;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,CAAC,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,MAAM,CAAA;IACjE,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;CAC7C;AAED,eAAO,MAAM,kBAAkB,mHAwJ9B,CAAA"}
1
+ {"version":3,"file":"searchable-checkbox.d.ts","sourceRoot":"","sources":["../../src/prompts/searchable-checkbox.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,WAAW,wBAAwB,CAAC,CAAC,GAAG,MAAM;IAClD,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,cAAc,EAAE,CAAC,EAAE,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACtD,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,MAAM,CAAA;IACjE,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;CAC7C;AAED,eAAO,MAAM,kBAAkB,mHAyJ9B,CAAA"}
@@ -61,6 +61,16 @@ export const searchableCheckbox = createPicker((config, done) => {
61
61
  submit();
62
62
  return;
63
63
  }
64
+ // Printable input goes to the filter first — before any navigation shortcut.
65
+ // This ensures typing "j"/"k" appends to the filter rather than navigating.
66
+ if (isPrintable(key)) {
67
+ const next = filter + key.sequence;
68
+ setFilter(next);
69
+ setCursor(0);
70
+ setError(undefined);
71
+ input.setLine(next);
72
+ return;
73
+ }
64
74
  if (isSpace(key)) {
65
75
  if (view.length === 0)
66
76
  return;
@@ -103,15 +113,6 @@ export const searchableCheckbox = createPicker((config, done) => {
103
113
  }
104
114
  return;
105
115
  }
106
- // Printable char: update filter.
107
- // Space is handled above and returns early, so it won't reach this branch.
108
- if (isPrintable(key)) {
109
- const next = filter + key.sequence;
110
- setFilter(next);
111
- setCursor(0);
112
- setError(undefined);
113
- input.setLine(next);
114
- }
115
116
  });
116
117
  if (status === 'done') {
117
118
  const labels = pool
@@ -136,7 +137,7 @@ export const searchableCheckbox = createPicker((config, done) => {
136
137
  ? colors.green(symbols.radioOn)
137
138
  : colors.dim(symbols.radioOff);
138
139
  const stats = config.usageStats?.get(item.value) ?? null;
139
- return chrome.row({ label: config.formatFn(item, stats), glyph: checkGlyph, active: isActive });
140
+ return chrome.row({ label: config.formatFn(item, stats), glyph: checkGlyph, active: isActive, term: filter });
140
141
  },
141
142
  });
142
143
  const footer = error
@@ -1 +1 @@
1
- {"version":3,"file":"searchable-checkbox.js","sourceRoot":"","sources":["../../src/prompts/searchable-checkbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"searchable-checkbox.js","sourceRoot":"","sources":["../../src/prompts/searchable-checkbox.ts"],"names":[],"mappings":"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"}