@tooee/choose 0.7.3 → 0.9.0

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