@tooee/choose 0.1.22 → 0.2.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 (50) hide show
  1. package/README.md +28 -2
  2. package/dist/Choose.d.ts +14 -17
  3. package/dist/Choose.d.ts.map +1 -1
  4. package/dist/Choose.js +42 -266
  5. package/dist/Choose.js.map +1 -1
  6. package/dist/ChooseFilter.d.ts +12 -0
  7. package/dist/ChooseFilter.d.ts.map +1 -0
  8. package/dist/ChooseFilter.js +9 -0
  9. package/dist/ChooseFilter.js.map +1 -0
  10. package/dist/ChooseHighlightedText.d.ts +9 -0
  11. package/dist/ChooseHighlightedText.d.ts.map +1 -0
  12. package/dist/ChooseHighlightedText.js +30 -0
  13. package/dist/ChooseHighlightedText.js.map +1 -0
  14. package/dist/ChooseList.d.ts +28 -0
  15. package/dist/ChooseList.d.ts.map +1 -0
  16. package/dist/ChooseList.js +51 -0
  17. package/dist/ChooseList.js.map +1 -0
  18. package/dist/ChooseOverlay.d.ts +34 -5
  19. package/dist/ChooseOverlay.d.ts.map +1 -1
  20. package/dist/ChooseOverlay.js +29 -200
  21. package/dist/ChooseOverlay.js.map +1 -1
  22. package/dist/ChoosePanel.d.ts +30 -0
  23. package/dist/ChoosePanel.d.ts.map +1 -0
  24. package/dist/ChoosePanel.js +25 -0
  25. package/dist/ChoosePanel.js.map +1 -0
  26. package/dist/index.d.ts +13 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +6 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/source.d.ts +5 -0
  31. package/dist/source.d.ts.map +1 -0
  32. package/dist/source.js +12 -0
  33. package/dist/source.js.map +1 -0
  34. package/dist/types.d.ts +2 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/use-choose.d.ts +80 -0
  37. package/dist/use-choose.d.ts.map +1 -0
  38. package/dist/use-choose.js +365 -0
  39. package/dist/use-choose.js.map +1 -0
  40. package/package.json +11 -11
  41. package/src/Choose.tsx +68 -355
  42. package/src/ChooseFilter.tsx +45 -0
  43. package/src/ChooseHighlightedText.tsx +42 -0
  44. package/src/ChooseList.tsx +137 -0
  45. package/src/ChooseOverlay.tsx +73 -307
  46. package/src/ChoosePanel.tsx +123 -0
  47. package/src/index.ts +26 -1
  48. package/src/source.ts +12 -0
  49. package/src/types.ts +6 -0
  50. package/src/use-choose.ts +479 -0
@@ -0,0 +1,365 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ import { useActiveCommandSurface, useActions, useCommand, useCommandSurfaceId, useMode, useProvideCommandContext, useSetMode, } from "@tooee/commands";
3
+ import { fuzzyFilter } from "./fuzzy.js";
4
+ import { chooseSourceError, loadChooseSource } from "./source.js";
5
+ /**
6
+ * Shared headless chooser: source lifecycle, fuzzy matches, selection,
7
+ * command context, controller, and all built-in keyboard commands.
8
+ */
9
+ export function useChoose(options) {
10
+ const { source, multi = false, initialFilter = "", commandScope = "choose" } = options;
11
+ const initialItems = Array.isArray(source) ? source : [];
12
+ const [items, setItems] = useState(initialItems);
13
+ const [filterQuery, setFilterQuery] = useState(initialFilter);
14
+ const [activeIndex, setActiveIndexState] = useState(0);
15
+ const [selectedOriginalIndices, setSelectedOriginalIndices] = useState(new Set());
16
+ const [loading, setLoading] = useState(!Array.isArray(source));
17
+ const [error, setError] = useState(null);
18
+ const [reloadRevision, setReloadRevision] = useState(0);
19
+ const filterRef = useRef(null);
20
+ const requestIdRef = useRef(0);
21
+ const initialArraySourceRef = useRef(Array.isArray(source) ? source : null);
22
+ const didHandleInitialSourceRef = useRef(false);
23
+ const matches = useMemo(() => fuzzyFilter(items, filterQuery), [items, filterQuery]);
24
+ const activeItem = matches[activeIndex]?.item;
25
+ const selectedItems = useMemo(() => {
26
+ if (!multi)
27
+ return activeItem ? [activeItem] : [];
28
+ const selected = Array.from(selectedOriginalIndices).flatMap((index) => {
29
+ const item = items[index];
30
+ return item ? [item] : [];
31
+ });
32
+ return selected.length > 0 ? selected : activeItem ? [activeItem] : [];
33
+ }, [multi, activeItem, selectedOriginalIndices, items]);
34
+ const mode = useMode();
35
+ const setMode = useSetMode();
36
+ // Stable controller methods read live values through refs, including when
37
+ // multiple imperative operations happen before React renders again.
38
+ const optionsRef = useRef(options);
39
+ optionsRef.current = options;
40
+ const itemsRef = useRef(items);
41
+ itemsRef.current = items;
42
+ const matchesRef = useRef(matches);
43
+ matchesRef.current = matches;
44
+ const filterQueryRef = useRef(filterQuery);
45
+ filterQueryRef.current = filterQuery;
46
+ const activeIndexRef = useRef(activeIndex);
47
+ activeIndexRef.current = activeIndex;
48
+ const selectedRef = useRef(selectedOriginalIndices);
49
+ selectedRef.current = selectedOriginalIndices;
50
+ const multiRef = useRef(multi);
51
+ multiRef.current = multi;
52
+ const modeRef = useRef(mode);
53
+ modeRef.current = mode;
54
+ const replaceItems = useCallback((nextItems) => {
55
+ itemsRef.current = nextItems;
56
+ matchesRef.current = fuzzyFilter(nextItems, filterQueryRef.current);
57
+ activeIndexRef.current = 0;
58
+ selectedRef.current = new Set();
59
+ setItems(nextItems);
60
+ setActiveIndexState(0);
61
+ setSelectedOriginalIndices(selectedRef.current);
62
+ }, []);
63
+ useEffect(() => {
64
+ const requestId = ++requestIdRef.current;
65
+ let active = true;
66
+ let result;
67
+ // Direct arrays seed state during the first render. Avoid a redundant
68
+ // post-mount reset that could overwrite immediate controller operations.
69
+ if (!didHandleInitialSourceRef.current &&
70
+ Array.isArray(source) &&
71
+ source === initialArraySourceRef.current) {
72
+ didHandleInitialSourceRef.current = true;
73
+ setLoading(false);
74
+ return;
75
+ }
76
+ didHandleInitialSourceRef.current = true;
77
+ setError(null);
78
+ try {
79
+ result = loadChooseSource(source);
80
+ }
81
+ catch (loadError) {
82
+ if (requestId !== requestIdRef.current)
83
+ return;
84
+ replaceItems([]);
85
+ setError(chooseSourceError(loadError));
86
+ setLoading(false);
87
+ return;
88
+ }
89
+ if (result instanceof Promise) {
90
+ setLoading(true);
91
+ void result.then((loaded) => {
92
+ if (!active || requestId !== requestIdRef.current)
93
+ return;
94
+ replaceItems(loaded);
95
+ setError(null);
96
+ setLoading(false);
97
+ }, (loadError) => {
98
+ if (!active || requestId !== requestIdRef.current)
99
+ return;
100
+ replaceItems([]);
101
+ setError(chooseSourceError(loadError));
102
+ setLoading(false);
103
+ });
104
+ return () => {
105
+ active = false;
106
+ };
107
+ }
108
+ replaceItems(result);
109
+ setLoading(false);
110
+ }, [source, reloadRevision, replaceItems]);
111
+ const setFilter = useCallback((query) => {
112
+ // Controlled OpenTUI inputs may echo a programmatic `value` update through
113
+ // onInput. Only a real query change resets navigation.
114
+ if (query === filterQueryRef.current) {
115
+ setFilterQuery(query);
116
+ return;
117
+ }
118
+ filterQueryRef.current = query;
119
+ matchesRef.current = fuzzyFilter(itemsRef.current, query);
120
+ activeIndexRef.current = 0;
121
+ setFilterQuery(query);
122
+ setActiveIndexState(0);
123
+ }, []);
124
+ const setActiveIndex = useCallback((index) => {
125
+ const lastIndex = Math.max(0, matchesRef.current.length - 1);
126
+ const next = Math.min(lastIndex, Math.max(0, index));
127
+ activeIndexRef.current = next;
128
+ setActiveIndexState(next);
129
+ }, []);
130
+ const moveUp = useCallback(() => setActiveIndex(activeIndexRef.current - 1), [setActiveIndex]);
131
+ const moveDown = useCallback(() => setActiveIndex(activeIndexRef.current + 1), [setActiveIndex]);
132
+ const getActiveItem = useCallback(() => matchesRef.current[activeIndexRef.current]?.item, []);
133
+ const getSelectedItems = useCallback(() => {
134
+ const active = getActiveItem();
135
+ if (!multiRef.current)
136
+ return active ? [active] : [];
137
+ const selected = Array.from(selectedRef.current).flatMap((index) => {
138
+ const item = itemsRef.current[index];
139
+ return item ? [item] : [];
140
+ });
141
+ return selected.length > 0 ? selected : active ? [active] : [];
142
+ }, [getActiveItem]);
143
+ const toggleActive = useCallback(() => {
144
+ if (!multiRef.current)
145
+ return;
146
+ const originalIndex = matchesRef.current[activeIndexRef.current]?.originalIndex;
147
+ if (originalIndex === undefined)
148
+ return;
149
+ const next = new Set(selectedRef.current);
150
+ if (next.has(originalIndex))
151
+ next.delete(originalIndex);
152
+ else
153
+ next.add(originalIndex);
154
+ selectedRef.current = next;
155
+ setSelectedOriginalIndices(next);
156
+ }, []);
157
+ const submit = useCallback(() => {
158
+ void optionsRef.current.onSubmit({ items: getSelectedItems() });
159
+ }, [getSelectedItems]);
160
+ const cancel = useCallback(() => optionsRef.current.onCancel?.(), []);
161
+ const reload = useCallback(() => setReloadRevision((revision) => revision + 1), []);
162
+ const setModeExternal = useCallback((nextMode) => setMode(nextMode), [setMode]);
163
+ useProvideCommandContext(() => ({
164
+ choose: {
165
+ activeItem: getActiveItem(),
166
+ selectedItems: getSelectedItems(),
167
+ filterQuery: filterQueryRef.current,
168
+ },
169
+ ...(optionsRef.current.onCancel ? { exit: cancel } : {}),
170
+ }));
171
+ useActions(options.commands);
172
+ const enabled = useCallback((group) => !(optionsRef.current.disable?.includes(group) ?? false), []);
173
+ useCommand({
174
+ id: `${commandScope}:escape`,
175
+ title: "Back / cancel",
176
+ hotkey: "Escape",
177
+ modes: ["insert", "cursor"],
178
+ hidden: true,
179
+ when: () => modeRef.current === "insert"
180
+ ? enabled("mode")
181
+ : enabled("cancel") && optionsRef.current.onCancel !== undefined,
182
+ handler: () => {
183
+ if (modeRef.current === "insert")
184
+ setMode("cursor");
185
+ else
186
+ cancel();
187
+ },
188
+ });
189
+ useCommand({
190
+ id: `${commandScope}:cancel`,
191
+ title: "Cancel",
192
+ hotkey: "q",
193
+ modes: ["cursor"],
194
+ hidden: true,
195
+ when: () => enabled("cancel") && optionsRef.current.onCancel !== undefined,
196
+ handler: cancel,
197
+ });
198
+ useCommand({
199
+ id: `${commandScope}:insert-mode-i`,
200
+ title: "Insert mode",
201
+ hotkey: "i",
202
+ modes: ["cursor"],
203
+ hidden: true,
204
+ when: () => enabled("mode"),
205
+ handler: () => setMode("insert"),
206
+ });
207
+ useCommand({
208
+ id: `${commandScope}:insert-mode-a`,
209
+ title: "Insert mode",
210
+ hotkey: "a",
211
+ modes: ["cursor"],
212
+ hidden: true,
213
+ when: () => enabled("mode"),
214
+ handler: () => setMode("insert"),
215
+ });
216
+ useCommand({
217
+ id: `${commandScope}:move-down-vim`,
218
+ title: "Move down",
219
+ hotkey: "j",
220
+ modes: ["cursor"],
221
+ hidden: true,
222
+ when: () => enabled("navigation"),
223
+ handler: moveDown,
224
+ });
225
+ useCommand({
226
+ id: `${commandScope}:move-up-vim`,
227
+ title: "Move up",
228
+ hotkey: "k",
229
+ modes: ["cursor"],
230
+ hidden: true,
231
+ when: () => enabled("navigation"),
232
+ handler: moveUp,
233
+ });
234
+ useCommand({
235
+ id: `${commandScope}:confirm`,
236
+ title: "Confirm",
237
+ hotkey: "Enter",
238
+ modes: ["insert", "cursor"],
239
+ hidden: true,
240
+ when: () => enabled("submit"),
241
+ handler: submit,
242
+ });
243
+ useCommand({
244
+ id: `${commandScope}:move-up`,
245
+ title: "Move up",
246
+ hotkey: "up",
247
+ modes: ["insert", "cursor"],
248
+ hidden: true,
249
+ when: () => enabled("navigation"),
250
+ handler: moveUp,
251
+ });
252
+ useCommand({
253
+ id: `${commandScope}:move-up-ctrl-p`,
254
+ title: "Move up",
255
+ hotkey: "ctrl+p",
256
+ modes: ["insert", "cursor"],
257
+ hidden: true,
258
+ when: () => enabled("navigation"),
259
+ handler: moveUp,
260
+ });
261
+ useCommand({
262
+ id: `${commandScope}:move-down`,
263
+ title: "Move down",
264
+ hotkey: "down",
265
+ modes: ["insert", "cursor"],
266
+ hidden: true,
267
+ when: () => enabled("navigation"),
268
+ handler: moveDown,
269
+ });
270
+ useCommand({
271
+ id: `${commandScope}:move-down-ctrl-n`,
272
+ title: "Move down",
273
+ hotkey: "ctrl+n",
274
+ modes: ["insert", "cursor"],
275
+ hidden: true,
276
+ when: () => enabled("navigation"),
277
+ handler: moveDown,
278
+ });
279
+ useCommand({
280
+ id: `${commandScope}:toggle-next`,
281
+ title: "Toggle selection and move down",
282
+ hotkey: "Tab",
283
+ modes: ["insert", "cursor"],
284
+ hidden: true,
285
+ when: () => enabled("multi-select") && multiRef.current,
286
+ handler: () => {
287
+ toggleActive();
288
+ moveDown();
289
+ },
290
+ });
291
+ useCommand({
292
+ id: `${commandScope}:toggle-previous`,
293
+ title: "Toggle selection and move up",
294
+ hotkey: "shift+Tab",
295
+ modes: ["insert", "cursor"],
296
+ hidden: true,
297
+ when: () => enabled("multi-select") && multiRef.current,
298
+ handler: () => {
299
+ toggleActive();
300
+ moveUp();
301
+ },
302
+ });
303
+ const surfaceId = useCommandSurfaceId();
304
+ const activeSurface = useActiveCommandSurface();
305
+ const suspended = (options.suspended ?? false) || (activeSurface !== null && activeSurface.id !== surfaceId);
306
+ const onFilterKeyDown = useCallback((event) => {
307
+ if (event.name !== "tab" ||
308
+ !multiRef.current ||
309
+ !enabled("multi-select") ||
310
+ modeRef.current !== "insert") {
311
+ return;
312
+ }
313
+ event.preventDefault();
314
+ toggleActive();
315
+ if (event.shift)
316
+ moveUp();
317
+ else
318
+ moveDown();
319
+ }, [enabled, moveDown, moveUp, toggleActive]);
320
+ const controllerRef = useRef(null);
321
+ if (controllerRef.current === null) {
322
+ controllerRef.current = {
323
+ getFilter: () => filterQueryRef.current,
324
+ setFilter,
325
+ clearFilter: () => setFilter(""),
326
+ moveUp,
327
+ moveDown,
328
+ setActiveIndex,
329
+ getActiveItem,
330
+ getSelectedItems,
331
+ toggleActive,
332
+ submit,
333
+ cancel,
334
+ reload,
335
+ get mode() {
336
+ return modeRef.current;
337
+ },
338
+ setMode: setModeExternal,
339
+ };
340
+ }
341
+ return {
342
+ controller: controllerRef.current,
343
+ state: {
344
+ items,
345
+ matches,
346
+ filterQuery,
347
+ activeIndex,
348
+ activeItem,
349
+ selectedOriginalIndices,
350
+ selectedItems,
351
+ loading,
352
+ error,
353
+ multi,
354
+ },
355
+ view: {
356
+ filterRef,
357
+ mode,
358
+ suspended,
359
+ filterFocused: mode === "insert" && !suspended,
360
+ onFilterInput: setFilter,
361
+ onFilterKeyDown,
362
+ },
363
+ };
364
+ }
365
+ //# sourceMappingURL=use-choose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-choose.js","sourceRoot":"","sources":["../src/use-choose.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tooee/choose",
3
- "version": "0.1.22",
3
+ "version": "0.2.1",
4
4
  "description": "Terminal selection with fuzzy filtering",
5
5
  "keywords": [
6
6
  "cli",
@@ -37,23 +37,23 @@
37
37
  "typecheck": "tsc --noEmit"
38
38
  },
39
39
  "dependencies": {
40
- "@tooee/commands": "0.1.22",
41
- "@tooee/fuzzy": "0.1.22",
42
- "@tooee/layout": "0.1.22",
43
- "@tooee/overlays": "0.1.22",
44
- "@tooee/shell": "0.1.22",
45
- "@tooee/themes": "0.1.22"
40
+ "@tooee/commands": "0.2.1",
41
+ "@tooee/fuzzy": "0.2.1",
42
+ "@tooee/layout": "0.2.1",
43
+ "@tooee/overlays": "0.2.1",
44
+ "@tooee/shell": "0.2.1",
45
+ "@tooee/themes": "0.2.1"
46
46
  },
47
47
  "devDependencies": {
48
- "@opentui/core": "^0.2.15",
49
- "@opentui/react": "^0.2.15",
48
+ "@opentui/core": "^0.4.3",
49
+ "@opentui/react": "^0.4.3",
50
50
  "@types/bun": "^1.3.10",
51
51
  "@types/react": "^19.2.14",
52
52
  "typescript": "^5.9.3"
53
53
  },
54
54
  "peerDependencies": {
55
- "@opentui/core": "^0.2.15",
56
- "@opentui/react": "^0.2.15",
55
+ "@opentui/core": "^0.4.3",
56
+ "@opentui/react": "^0.4.3",
57
57
  "react": "^18.0.0 || ^19.0.0"
58
58
  }
59
59
  }