pickem 0.2.0 → 1.0.1

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.
Files changed (104) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +67 -68
  3. package/checkbox.d.ts.map +1 -1
  4. package/checkbox.js +10 -9
  5. package/checkbox.js.map +1 -1
  6. package/core/ansi.d.ts +16 -0
  7. package/core/ansi.d.ts.map +1 -0
  8. package/core/ansi.js +21 -0
  9. package/core/ansi.js.map +1 -0
  10. package/core/chrome.d.ts +37 -0
  11. package/core/chrome.d.ts.map +1 -0
  12. package/core/chrome.js +51 -0
  13. package/core/chrome.js.map +1 -0
  14. package/core/cleanup.d.ts +5 -0
  15. package/core/cleanup.d.ts.map +1 -0
  16. package/core/cleanup.js +31 -0
  17. package/core/cleanup.js.map +1 -0
  18. package/core/colors.d.ts +24 -0
  19. package/core/colors.d.ts.map +1 -0
  20. package/core/colors.js +67 -0
  21. package/core/colors.js.map +1 -0
  22. package/core/hooks.d.ts +26 -0
  23. package/core/hooks.d.ts.map +1 -0
  24. package/core/hooks.js +80 -0
  25. package/core/hooks.js.map +1 -0
  26. package/core/index.d.ts +9 -0
  27. package/core/index.d.ts.map +1 -0
  28. package/core/index.js +9 -0
  29. package/core/index.js.map +1 -0
  30. package/core/key-reader.d.ts +6 -0
  31. package/core/key-reader.d.ts.map +1 -0
  32. package/core/key-reader.js +29 -0
  33. package/core/key-reader.js.map +1 -0
  34. package/core/keys.d.ts +17 -0
  35. package/core/keys.d.ts.map +1 -0
  36. package/core/keys.js +17 -0
  37. package/core/keys.js.map +1 -0
  38. package/core/pagination.d.ts +14 -0
  39. package/core/pagination.d.ts.map +1 -0
  40. package/core/pagination.js +36 -0
  41. package/core/pagination.js.map +1 -0
  42. package/core/runtime.d.ts +20 -0
  43. package/core/runtime.d.ts.map +1 -0
  44. package/core/runtime.js +74 -0
  45. package/core/runtime.js.map +1 -0
  46. package/core/screen.d.ts +14 -0
  47. package/core/screen.d.ts.map +1 -0
  48. package/core/screen.js +50 -0
  49. package/core/screen.js.map +1 -0
  50. package/core/status-glyph.d.ts +10 -0
  51. package/core/status-glyph.d.ts.map +1 -0
  52. package/core/status-glyph.js +18 -0
  53. package/core/status-glyph.js.map +1 -0
  54. package/core/symbols.d.ts +27 -0
  55. package/core/symbols.d.ts.map +1 -0
  56. package/core/symbols.js +41 -0
  57. package/core/symbols.js.map +1 -0
  58. package/core/testing.d.ts +15 -0
  59. package/core/testing.d.ts.map +1 -0
  60. package/core/testing.js +47 -0
  61. package/core/testing.js.map +1 -0
  62. package/core/theme.d.ts +14 -0
  63. package/core/theme.d.ts.map +1 -0
  64. package/core/theme.js +10 -0
  65. package/core/theme.js.map +1 -0
  66. package/core/width.d.ts +7 -0
  67. package/core/width.d.ts.map +1 -0
  68. package/core/width.js +46 -0
  69. package/core/width.js.map +1 -0
  70. package/package.json +4 -13
  71. package/pickem.d.ts.map +1 -1
  72. package/pickem.js +6 -5
  73. package/pickem.js.map +1 -1
  74. package/prompts/checkbox.d.ts +14 -0
  75. package/prompts/checkbox.d.ts.map +1 -0
  76. package/prompts/checkbox.js +56 -0
  77. package/prompts/checkbox.js.map +1 -0
  78. package/prompts/confirm.d.ts +6 -0
  79. package/prompts/confirm.d.ts.map +1 -0
  80. package/prompts/confirm.js +32 -0
  81. package/prompts/confirm.js.map +1 -0
  82. package/prompts/input.d.ts +7 -0
  83. package/prompts/input.d.ts.map +1 -0
  84. package/prompts/input.js +52 -0
  85. package/prompts/input.js.map +1 -0
  86. package/prompts/search.d.ts +12 -0
  87. package/prompts/search.d.ts.map +1 -0
  88. package/prompts/search.js +67 -0
  89. package/prompts/search.js.map +1 -0
  90. package/prompts/searchable-checkbox.d.ts +14 -0
  91. package/prompts/searchable-checkbox.d.ts.map +1 -0
  92. package/prompts/searchable-checkbox.js +150 -0
  93. package/prompts/searchable-checkbox.js.map +1 -0
  94. package/prompts/select.d.ts +12 -0
  95. package/prompts/select.d.ts.map +1 -0
  96. package/prompts/select.js +40 -0
  97. package/prompts/select.js.map +1 -0
  98. package/wizard.d.ts.map +1 -1
  99. package/wizard.js +7 -5
  100. package/wizard.js.map +1 -1
  101. package/prompt/searchable-checkbox.d.ts +0 -26
  102. package/prompt/searchable-checkbox.d.ts.map +0 -1
  103. package/prompt/searchable-checkbox.js +0 -173
  104. package/prompt/searchable-checkbox.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import type { PickItem, UsageStats } from '../types.js';
2
+ export interface SearchableCheckboxConfig<V = string> {
3
+ message: string;
4
+ items: PickItem<V>[];
5
+ pageSize: number;
6
+ required: boolean;
7
+ defaultChecked: V[];
8
+ allowFreeText: boolean;
9
+ searchFn: (item: PickItem<V>, term: string) => boolean;
10
+ formatFn: (item: PickItem<V>, stats: UsageStats | null) => string;
11
+ usageStats: Map<V, UsageStats | null> | null;
12
+ }
13
+ export declare const searchableCheckbox: (config: SearchableCheckboxConfig<unknown>, opts?: import("../core/runtime.js").RunOptions) => Promise<unknown[]>;
14
+ //# sourceMappingURL=searchable-checkbox.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,150 @@
1
+ // src/prompts/searchable-checkbox.ts
2
+ // Native engine port of the searchableCheckbox multi-select.
3
+ // Behavioral spec: src/prompt/searchable-checkbox.ts (the original implementation, now removed).
4
+ import { createPicker } from '../core/runtime.js';
5
+ import { useState, useMemo, useKeypress } from '../core/hooks.js';
6
+ import { usePagination } from '../core/pagination.js';
7
+ import { makeTheme } from '../core/theme.js';
8
+ import { isUp, isDown, isSpace, isEnter, isBackspace, isEscape, isPrintable } from '../core/keys.js';
9
+ export const searchableCheckbox = createPicker((config, done) => {
10
+ const { chrome, colors, symbols } = makeTheme();
11
+ const [status, setStatus] = useState('idle');
12
+ const [filter, setFilter] = useState('');
13
+ const [cursor, setCursor] = useState(0);
14
+ const [checked, setChecked] = useState(new Set(config.defaultChecked));
15
+ const [extras, setExtras] = useState([]);
16
+ const [error, setError] = useState(undefined);
17
+ // Full item pool: original items + free-text extras (source order).
18
+ const pool = useMemo(() => (extras.length > 0 ? [...config.items, ...extras] : config.items), [extras]);
19
+ // Filtered + pin-reordered view. Pinned items respect the filter (hidden on no-match).
20
+ const view = useMemo(() => {
21
+ const matched = filter ? pool.filter((it) => config.searchFn(it, filter)) : pool;
22
+ const first = matched.filter((it) => it.pin === 'first');
23
+ const last = matched.filter((it) => it.pin === 'last');
24
+ const mid = matched.filter((it) => !it.pin);
25
+ return [...first, ...mid, ...last];
26
+ }, [filter, pool]);
27
+ const submit = () => {
28
+ if (config.required && checked.size === 0) {
29
+ setError('At least one item must be selected.');
30
+ return;
31
+ }
32
+ setStatus('done');
33
+ // SOURCE order: original items then extras, filtered to checked set.
34
+ done(pool.filter((it) => checked.has(it.value)).map((it) => it.value));
35
+ };
36
+ useKeypress((key, input) => {
37
+ if (status === 'done')
38
+ return;
39
+ if (isEnter(key)) {
40
+ // Free-text path: filter has text, no visible matches, allowFreeText is on.
41
+ if (config.allowFreeText && filter.length > 0 && view.length === 0) {
42
+ const existing = extras.find((e) => e.value === filter);
43
+ const next = new Set(checked);
44
+ if (existing) {
45
+ // Dedup: already an extra — just ensure it is checked and clear filter.
46
+ next.add(existing.value);
47
+ setChecked(next);
48
+ }
49
+ else {
50
+ const newItem = { label: filter, value: filter };
51
+ setExtras([...extras, newItem]);
52
+ next.add(filter);
53
+ setChecked(next);
54
+ }
55
+ setFilter('');
56
+ setCursor(0);
57
+ setError(undefined);
58
+ input.clearLine();
59
+ return;
60
+ }
61
+ submit();
62
+ return;
63
+ }
64
+ if (isSpace(key)) {
65
+ if (view.length === 0)
66
+ return;
67
+ const item = view[cursor];
68
+ const next = new Set(checked);
69
+ if (next.has(item.value))
70
+ next.delete(item.value);
71
+ else
72
+ next.add(item.value);
73
+ setChecked(next);
74
+ setError(undefined);
75
+ return;
76
+ }
77
+ if (isUp(key)) {
78
+ if (view.length === 0)
79
+ return;
80
+ setCursor((cursor - 1 + view.length) % view.length);
81
+ return;
82
+ }
83
+ if (isDown(key)) {
84
+ if (view.length === 0)
85
+ return;
86
+ setCursor((cursor + 1) % view.length);
87
+ return;
88
+ }
89
+ if (isBackspace(key)) {
90
+ if (filter.length > 0) {
91
+ const next = filter.slice(0, -1);
92
+ setFilter(next);
93
+ setCursor(0);
94
+ input.setLine(next);
95
+ }
96
+ return;
97
+ }
98
+ if (isEscape(key)) {
99
+ if (filter.length > 0) {
100
+ setFilter('');
101
+ setCursor(0);
102
+ input.clearLine();
103
+ }
104
+ return;
105
+ }
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
+ if (status === 'done') {
117
+ const labels = pool
118
+ .filter((it) => checked.has(it.value))
119
+ .map((it) => it.label)
120
+ .join(', ');
121
+ return `${chrome.header(config.message)} ${colors.accent(labels || '(none)')}`;
122
+ }
123
+ const header = chrome.header(config.message, ['type to filter', 'space to toggle', 'enter to confirm']);
124
+ const box = chrome.searchBox({ value: filter, placeholder: 'Filter…' });
125
+ if (view.length === 0) {
126
+ const msg = error ? colors.red(error) : '(no matches)';
127
+ return `${header}\n\n${box}\n\n${chrome.footer({ summary: msg })}`;
128
+ }
129
+ const page = usePagination({
130
+ items: view,
131
+ active: cursor,
132
+ pageSize: config.pageSize,
133
+ loop: true,
134
+ renderItem: ({ item, isActive }) => {
135
+ const checkGlyph = checked.has(item.value)
136
+ ? colors.green(symbols.radioOn)
137
+ : colors.dim(symbols.radioOff);
138
+ const stats = config.usageStats?.get(item.value) ?? null;
139
+ return chrome.row({ label: config.formatFn(item, stats), glyph: checkGlyph, active: isActive });
140
+ },
141
+ });
142
+ const footer = error
143
+ ? chrome.footer({ summary: colors.red(error) })
144
+ : chrome.footer({
145
+ moreBelow: Math.max(0, view.length - config.pageSize),
146
+ summary: `${view.length} shown, ${checked.size} selected`,
147
+ });
148
+ return `${header}\n\n${box}\n\n${page}\n${footer}`;
149
+ });
150
+ //# sourceMappingURL=searchable-checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"searchable-checkbox.js","sourceRoot":"","sources":["../../src/prompts/searchable-checkbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface SelectChoice<V> {
2
+ name: string;
3
+ value: V;
4
+ description?: string;
5
+ }
6
+ export interface SelectConfig<V> {
7
+ message: string;
8
+ choices: SelectChoice<V>[];
9
+ pageSize?: number;
10
+ }
11
+ export declare const selectPicker: (config: SelectConfig<unknown>, opts?: import("../core/runtime.js").RunOptions) => Promise<unknown>;
12
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/prompts/select.ts"],"names":[],"mappings":"AAOA,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,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,YAAY,qGAiCvB,CAAA"}
@@ -0,0 +1,40 @@
1
+ // src/prompts/select.ts
2
+ import { createPicker } from '../core/runtime.js';
3
+ import { useState, useKeypress } from '../core/hooks.js';
4
+ import { usePagination } from '../core/pagination.js';
5
+ import { makeTheme } from '../core/theme.js';
6
+ import { isUp, isDown, isEnter } from '../core/keys.js';
7
+ export const selectPicker = createPicker((config, done) => {
8
+ const { chrome, colors } = makeTheme();
9
+ const [cursor, setCursor] = useState(0);
10
+ const [status, setStatus] = useState('idle');
11
+ const choices = config.choices;
12
+ const pageSize = config.pageSize ?? 15;
13
+ useKeypress((key) => {
14
+ if (isUp(key))
15
+ setCursor((cursor - 1 + choices.length) % choices.length);
16
+ else if (isDown(key))
17
+ setCursor((cursor + 1) % choices.length);
18
+ else if (isEnter(key)) {
19
+ setStatus('done');
20
+ done(choices[cursor].value);
21
+ }
22
+ });
23
+ if (status === 'done') {
24
+ return `${chrome.header(config.message)} ${colors.accent(choices[cursor].name)}`;
25
+ }
26
+ const header = chrome.header(config.message, ['↑↓ to move', 'enter to select']);
27
+ const page = usePagination({
28
+ items: choices,
29
+ active: cursor,
30
+ pageSize,
31
+ loop: true,
32
+ renderItem: ({ item, isActive }) => chrome.row({ label: item.name, active: isActive }),
33
+ });
34
+ const footer = chrome.footer({
35
+ moreBelow: Math.max(0, choices.length - pageSize),
36
+ summary: `${choices.length} options`,
37
+ });
38
+ return `${header}\n\n${page}\n${footer}`;
39
+ });
40
+ //# sourceMappingURL=select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/prompts/select.ts"],"names":[],"mappings":"AAAA,wBAAwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAcvD,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAiC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;IACxF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAA;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACvC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAkB,MAAM,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA;IAEtC,WAAW,CAAC,CAAC,GAAG,EAAE,EAAE;QAClB,IAAI,IAAI,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;aACnE,IAAI,MAAM,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;aACzD,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,MAAM,CAAC,CAAA;YACjB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAA;IAClF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAA;IAC/E,MAAM,IAAI,GAAG,aAAa,CAAC;QACzB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM;QACd,QAAQ;QACR,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;KACvF,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC;QACjD,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,UAAU;KACrC,CAAC,CAAA;IACF,OAAO,GAAG,MAAM,OAAO,IAAI,KAAK,MAAM,EAAE,CAAA;AAC1C,CAAC,CAAC,CAAA"}
package/wizard.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAOX,MAAM,YAAY,CAAA;AA2GnB,wBAAsB,MAAM,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAClE,KAAK,EAAE,UAAU,EAAE,EACnB,cAAc,GAAE,OAAO,CAAC,CAAC,CAAM,GAC9B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EAOX,MAAM,YAAY,CAAA;AA2GnB,wBAAsB,MAAM,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,EAClE,KAAK,EAAE,UAAU,EAAE,EACnB,cAAc,GAAE,OAAO,CAAC,CAAC,CAAM,GAC9B,OAAO,CAAC,CAAC,CAAC,CA8BZ"}
package/wizard.js CHANGED
@@ -1,4 +1,6 @@
1
- import { select, input, confirm } from '@inquirer/prompts';
1
+ import { selectPicker } from './prompts/select.js';
2
+ import { inputPicker } from './prompts/input.js';
3
+ import { confirmPicker } from './prompts/confirm.js';
2
4
  import { pickem } from './pickem.js';
3
5
  async function executePick(step, ctx) {
4
6
  const items = typeof step.items === 'function' ? await step.items(ctx) : step.items;
@@ -16,18 +18,18 @@ async function executeCheckbox(step, ctx) {
16
18
  }
17
19
  async function executeSelect(step, ctx) {
18
20
  const choices = typeof step.choices === 'function' ? await step.choices(ctx) : step.choices;
19
- return select({
21
+ return (await selectPicker({
20
22
  message: step.message ?? 'Select:',
21
23
  choices: choices.map((c) => ({
22
24
  name: c.label,
23
25
  value: c.value,
24
26
  description: c.description,
25
27
  })),
26
- });
28
+ }));
27
29
  }
28
30
  async function executeInput(step, ctx) {
29
31
  const defaultVal = typeof step.default === 'function' ? step.default(ctx) : step.default;
30
- return input({
32
+ return inputPicker({
31
33
  message: step.message ?? 'Enter value:',
32
34
  default: defaultVal,
33
35
  validate: step.validate
@@ -36,7 +38,7 @@ async function executeInput(step, ctx) {
36
38
  });
37
39
  }
38
40
  async function executeConfirm(step) {
39
- return confirm({
41
+ return confirmPicker({
40
42
  message: step.message ?? 'Confirm?',
41
43
  default: step.default,
42
44
  });
package/wizard.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../src/wizard.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { PickItem, UsageStats } from '../types.js';
2
- export interface SearchableCheckboxConfig<V = string> {
3
- message: string;
4
- items: PickItem<V>[];
5
- pageSize: number;
6
- required: boolean;
7
- defaultChecked: V[];
8
- allowFreeText: boolean;
9
- searchFn: (item: PickItem<V>, term: string) => boolean;
10
- formatFn: (item: PickItem<V>, stats: UsageStats | null) => string;
11
- usageStats: Map<V, UsageStats | null> | null;
12
- }
13
- export declare const searchableCheckbox: <V>(config: {
14
- message: string;
15
- items: PickItem<V>[];
16
- pageSize: number;
17
- required: boolean;
18
- defaultChecked: V[];
19
- allowFreeText: boolean;
20
- searchFn: (item: PickItem<V>, term: string) => boolean;
21
- formatFn: (item: PickItem<V>, stats: UsageStats | null) => string;
22
- usageStats: Map<V, UsageStats | null> | null;
23
- }, context?: import("@inquirer/type").Context) => Promise<V[]> & {
24
- cancel: () => void;
25
- };
26
- //# sourceMappingURL=searchable-checkbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchable-checkbox.d.ts","sourceRoot":"","sources":["../../src/prompt/searchable-checkbox.ts"],"names":[],"mappings":"AAcA,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;AAgCD,eAAO,MAAM,kBAAkB,GAC5B,CAAC;aA1CO,MAAM;;cAEL,MAAM;cACN,OAAO;;mBAEF,OAAO;wCACc,MAAM,KAAK,OAAO;yCACjB,UAAU,GAAG,IAAI,KAAK,MAAM;;;;CAoMlE,CAAA"}
@@ -1,173 +0,0 @@
1
- import { createPrompt, useState, useKeypress, useMemo, usePrefix, usePagination, isUpKey, isDownKey, isSpaceKey, isEnterKey, isBackspaceKey, } from '@inquirer/core';
2
- const ANSI = {
3
- reset: '\x1b[0m',
4
- dim: '\x1b[2m',
5
- red: '\x1b[31m',
6
- green: '\x1b[32m',
7
- cyan: '\x1b[36m',
8
- bold: '\x1b[1m',
9
- };
10
- const dim = (s) => `${ANSI.dim}${s}${ANSI.reset}`;
11
- const red = (s) => `${ANSI.red}${s}${ANSI.reset}`;
12
- const green = (s) => `${ANSI.green}${s}${ANSI.reset}`;
13
- const cyan = (s) => `${ANSI.cyan}${s}${ANSI.reset}`;
14
- const bold = (s) => `${ANSI.bold}${s}${ANSI.reset}`;
15
- function reorderByPin(items) {
16
- const first = [];
17
- const last = [];
18
- const middle = [];
19
- for (const it of items) {
20
- if (it.pin === 'first')
21
- first.push(it);
22
- else if (it.pin === 'last')
23
- last.push(it);
24
- else
25
- middle.push(it);
26
- }
27
- return [...first, ...middle, ...last];
28
- }
29
- function isEscapeKey(key) {
30
- return key.name === 'escape';
31
- }
32
- export const searchableCheckbox = createPrompt((config, done) => {
33
- const [status, setStatus] = useState('idle');
34
- const [filter, setFilter] = useState('');
35
- const [cursor, setCursor] = useState(0);
36
- const [checked, setChecked] = useState(new Set(config.defaultChecked));
37
- const [extras, setExtras] = useState([]);
38
- const [error, setError] = useState(undefined);
39
- const view = useMemo(() => {
40
- const all = extras.length > 0 ? [...config.items, ...extras] : config.items;
41
- const filtered = filter
42
- ? all.filter((it) => config.searchFn(it, filter))
43
- : all;
44
- return reorderByPin(filtered);
45
- }, [filter, config.items, extras]);
46
- const prefix = usePrefix({ status });
47
- useKeypress((key, rl) => {
48
- if (status === 'done')
49
- return;
50
- if (isEnterKey(key)) {
51
- // Free-text path: filter has text, no matches, allowFreeText is on
52
- if (config.allowFreeText && filter.length > 0 && view.length === 0) {
53
- // Skip dedupe: if the typed text already exists as an extra, just clear filter
54
- const existing = extras.find((it) => it.value === filter);
55
- if (existing) {
56
- const nextChecked = new Set(checked);
57
- nextChecked.add(existing.value);
58
- setChecked(nextChecked);
59
- setFilter('');
60
- setCursor(0);
61
- setError(undefined);
62
- rl.clearLine(0);
63
- return;
64
- }
65
- const newItem = { label: filter, value: filter };
66
- setExtras([...extras, newItem]);
67
- const nextChecked = new Set(checked);
68
- nextChecked.add(newItem.value);
69
- setChecked(nextChecked);
70
- setFilter('');
71
- setCursor(0);
72
- setError(undefined);
73
- rl.clearLine(0);
74
- return;
75
- }
76
- if (config.required && checked.size === 0) {
77
- setError('At least one item must be selected.');
78
- return;
79
- }
80
- setStatus('done');
81
- done([...config.items, ...extras]
82
- .filter((it) => checked.has(it.value))
83
- .map((it) => it.value));
84
- return;
85
- }
86
- if (isSpaceKey(key)) {
87
- if (view.length === 0)
88
- return;
89
- const item = view[cursor];
90
- const next = new Set(checked);
91
- if (next.has(item.value))
92
- next.delete(item.value);
93
- else
94
- next.add(item.value);
95
- setChecked(next);
96
- setError(undefined);
97
- // Space is also a printable char in readline; restore the filter buffer
98
- // so the space doesn't get treated as filter input.
99
- rl.clearLine(0);
100
- if (filter)
101
- rl.write(filter);
102
- return;
103
- }
104
- if (isUpKey(key)) {
105
- if (view.length === 0)
106
- return;
107
- setCursor((cursor - 1 + view.length) % view.length);
108
- return;
109
- }
110
- if (isDownKey(key)) {
111
- if (view.length === 0)
112
- return;
113
- setCursor((cursor + 1) % view.length);
114
- return;
115
- }
116
- if (isBackspaceKey(key)) {
117
- if (filter.length > 0) {
118
- const next = filter.slice(0, -1);
119
- setFilter(next);
120
- setCursor(0);
121
- // Sync readline buffer with our filter string.
122
- rl.clearLine(0);
123
- if (next)
124
- rl.write(next);
125
- }
126
- return;
127
- }
128
- if (isEscapeKey(key)) {
129
- if (filter.length > 0) {
130
- setFilter('');
131
- setCursor(0);
132
- rl.clearLine(0);
133
- }
134
- return;
135
- }
136
- // Printable char: readline already updated rl.line
137
- if (rl.line !== filter) {
138
- setFilter(rl.line);
139
- setCursor(0);
140
- setError(undefined);
141
- }
142
- });
143
- if (status === 'done') {
144
- const labels = [...config.items, ...extras]
145
- .filter((it) => checked.has(it.value))
146
- .map((it) => it.label)
147
- .join(', ');
148
- return `${prefix} ${config.message} ${labels || '(none)'}`;
149
- }
150
- const header = `${prefix} ${config.message}${filter ? ` ${filter}_` : ' _'} ${dim(`(${view.length} shown, ${checked.size} selected)`)}`;
151
- if (view.length === 0) {
152
- return `${header}\n ${dim('(no matches)')}${error ? `\n ${red(error)}` : ''}`;
153
- }
154
- const renderItem = ({ item, index, }) => {
155
- const isCursor = index === cursor;
156
- const isChecked = checked.has(item.value);
157
- const box = isChecked ? green('●') : '○';
158
- const pointer = isCursor ? cyan('❯') : ' ';
159
- const stats = config.usageStats?.get(item.value) ?? null;
160
- const label = config.formatFn(item, stats);
161
- const line = `${pointer} ${box} ${label}`;
162
- return isCursor ? bold(line) : line;
163
- };
164
- const page = usePagination({
165
- items: view,
166
- active: cursor,
167
- renderItem,
168
- pageSize: config.pageSize,
169
- loop: true,
170
- });
171
- return `${header}\n${page}${error ? `\n ${red(error)}` : ''}`;
172
- });
173
- //# sourceMappingURL=searchable-checkbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"searchable-checkbox.js","sourceRoot":"","sources":["../../src/prompt/searchable-checkbox.ts"],"names":[],"mappings":"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"}