@tooee/shell 0.1.9 → 0.1.12

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 (52) hide show
  1. package/dist/command-palette-provider.d.ts +5 -0
  2. package/dist/command-palette-provider.d.ts.map +1 -0
  3. package/dist/command-palette-provider.js +28 -0
  4. package/dist/command-palette-provider.js.map +1 -0
  5. package/dist/commands.d.ts +9 -0
  6. package/dist/commands.d.ts.map +1 -1
  7. package/dist/commands.js +61 -11
  8. package/dist/commands.js.map +1 -1
  9. package/dist/copy-hook.d.ts +12 -0
  10. package/dist/copy-hook.d.ts.map +1 -0
  11. package/dist/copy-hook.js +35 -0
  12. package/dist/copy-hook.js.map +1 -0
  13. package/dist/copy-on-select.d.ts.map +1 -1
  14. package/dist/copy-on-select.js +1 -3
  15. package/dist/copy-on-select.js.map +1 -1
  16. package/dist/index.d.ts +8 -5
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +5 -3
  19. package/dist/index.js.map +1 -1
  20. package/dist/navigation.d.ts +24 -0
  21. package/dist/navigation.d.ts.map +1 -0
  22. package/dist/navigation.js +239 -0
  23. package/dist/navigation.js.map +1 -0
  24. package/dist/provider.d.ts.map +1 -1
  25. package/dist/provider.js +4 -1
  26. package/dist/provider.js.map +1 -1
  27. package/dist/search-hook.d.ts +14 -0
  28. package/dist/search-hook.d.ts.map +1 -0
  29. package/dist/search-hook.js +120 -0
  30. package/dist/search-hook.js.map +1 -0
  31. package/dist/theme-picker.js +1 -1
  32. package/dist/theme-picker.js.map +1 -1
  33. package/package.json +20 -20
  34. package/src/command-palette-provider.tsx +39 -0
  35. package/src/commands.ts +64 -11
  36. package/src/copy-hook.ts +45 -0
  37. package/src/copy-on-select.ts +1 -4
  38. package/src/index.ts +15 -5
  39. package/src/navigation.ts +297 -0
  40. package/src/provider.tsx +6 -1
  41. package/src/search-hook.ts +147 -0
  42. package/src/theme-picker.ts +1 -1
  43. package/dist/command-palette.d.ts +0 -9
  44. package/dist/command-palette.d.ts.map +0 -1
  45. package/dist/command-palette.js +0 -51
  46. package/dist/command-palette.js.map +0 -1
  47. package/dist/modal.d.ts +0 -33
  48. package/dist/modal.d.ts.map +0 -1
  49. package/dist/modal.js +0 -394
  50. package/dist/modal.js.map +0 -1
  51. package/src/command-palette.ts +0 -73
  52. package/src/modal.ts +0 -449
package/dist/modal.js DELETED
@@ -1,394 +0,0 @@
1
- import { useState, useCallback, useRef, useEffect } from "react";
2
- import { useCommand, useMode, useSetMode } from "@tooee/commands";
3
- import { copyToClipboard } from "@tooee/clipboard";
4
- import { useTerminalDimensions } from "@opentui/react";
5
- import { findMatchingLines } from "./search.js";
6
- export function useModalNavigationCommands(opts) {
7
- const { height: terminalHeight } = useTerminalDimensions();
8
- const { totalLines, viewportHeight = terminalHeight - 2, getText, blockCount, blockLineMap, searchLineOffset = 0, multiSelect = false, } = opts;
9
- const mode = useMode();
10
- const setMode = useSetMode();
11
- const [cursor, setCursor] = useState(null);
12
- const [selectionAnchor, setSelectionAnchor] = useState(null);
13
- const [toggledIndices, setToggledIndices] = useState(new Set());
14
- const [searchQuery, setSearchQuery] = useState("");
15
- const [searchActive, setSearchActive] = useState(false);
16
- const [matchingLines, setMatchingLines] = useState([]);
17
- const [currentMatchIndex, setCurrentMatchIndex] = useState(0);
18
- const preSearchModeRef = useRef("cursor");
19
- // Incremental search: recompute matches when query changes while search is active
20
- const searchQueryRef = useRef(searchQuery);
21
- searchQueryRef.current = searchQuery;
22
- const matchingLinesRef = useRef(matchingLines);
23
- matchingLinesRef.current = matchingLines;
24
- useEffect(() => {
25
- if (!searchActive)
26
- return;
27
- const text = getText?.();
28
- if (!text || !searchQuery) {
29
- setMatchingLines([]);
30
- setCurrentMatchIndex(0);
31
- return;
32
- }
33
- const matches = findMatchingLines(text, searchQuery);
34
- setMatchingLines(matches);
35
- setCurrentMatchIndex(0);
36
- if (matches.length > 0) {
37
- // Auto-jump to first match
38
- const line = matches[0];
39
- if (mode === "cursor" || mode === "select") {
40
- setCursor((c) => (c ? { line, col: 0 } : c));
41
- }
42
- }
43
- }, [searchQuery, searchActive]); // eslint-disable-line react-hooks/exhaustive-deps
44
- const isBlockMode = blockCount != null;
45
- const cursorMax = isBlockMode ? Math.max(0, blockCount - 1) : Math.max(0, totalLines - 1);
46
- const clampCursor = useCallback((value) => Math.max(0, Math.min(value, cursorMax)), [cursorMax]);
47
- useEffect(() => {
48
- setToggledIndices((prev) => {
49
- const filtered = Array.from(prev).filter((index) => index <= cursorMax);
50
- if (filtered.length === prev.size)
51
- return prev;
52
- return new Set(filtered);
53
- });
54
- }, [cursorMax]);
55
- // When entering cursor mode, initialize cursor if not already set
56
- const prevMode = useRef(null);
57
- useEffect(() => {
58
- if (mode === "cursor" && prevMode.current !== "cursor" && prevMode.current !== "select") {
59
- setCursor((existing) => {
60
- // If cursor already exists (e.g. set by a command via palette), preserve it
61
- if (existing)
62
- return existing;
63
- // If there's an active search match, start cursor there; otherwise start at scroll position
64
- const matches = matchingLinesRef.current;
65
- if (matches.length > 0) {
66
- const matchLine = matches[currentMatchIndex] ?? matches[0];
67
- // In block mode, convert search line to block index using offset
68
- if (isBlockMode) {
69
- const blockIndex = Math.max(0, matchLine - searchLineOffset);
70
- return { line: Math.min(blockIndex, cursorMax), col: 0 };
71
- }
72
- return { line: matchLine, col: 0 };
73
- }
74
- // No search match - start at top
75
- return { line: 0, col: 0 };
76
- });
77
- }
78
- if (mode === "select" && prevMode.current === "cursor" && cursor) {
79
- setSelectionAnchor({ ...cursor });
80
- }
81
- prevMode.current = mode;
82
- }, [mode]); // eslint-disable-line react-hooks/exhaustive-deps
83
- // === CURSOR MODE ===
84
- useCommand({
85
- id: "cursor-down",
86
- title: "Cursor down",
87
- hotkey: "j",
88
- modes: ["cursor"],
89
- handler: () => {
90
- setCursor((c) => {
91
- if (!c)
92
- return c;
93
- return { line: clampCursor(c.line + 1), col: 0 };
94
- });
95
- },
96
- });
97
- useCommand({
98
- id: "cursor-toggle",
99
- title: "Toggle selection",
100
- hotkey: "tab",
101
- modes: ["cursor"],
102
- when: () => multiSelect,
103
- handler: () => {
104
- setToggledIndices((prev) => {
105
- if (!cursor)
106
- return prev;
107
- const next = new Set(prev);
108
- const idx = cursor.line;
109
- if (next.has(idx)) {
110
- next.delete(idx);
111
- }
112
- else {
113
- next.add(idx);
114
- }
115
- return next;
116
- });
117
- },
118
- });
119
- useCommand({
120
- id: "cursor-toggle-up",
121
- title: "Toggle and move up",
122
- hotkey: "shift+tab",
123
- modes: ["cursor"],
124
- when: () => multiSelect,
125
- handler: () => {
126
- setToggledIndices((prev) => {
127
- if (!cursor)
128
- return prev;
129
- const next = new Set(prev);
130
- const idx = cursor.line;
131
- if (next.has(idx)) {
132
- next.delete(idx);
133
- }
134
- else {
135
- next.add(idx);
136
- }
137
- return next;
138
- });
139
- setCursor((c) => {
140
- if (!c)
141
- return c;
142
- return { line: clampCursor(c.line - 1), col: 0 };
143
- });
144
- },
145
- });
146
- useCommand({
147
- id: "cursor-up",
148
- title: "Cursor up",
149
- hotkey: "k",
150
- modes: ["cursor"],
151
- handler: () => {
152
- setCursor((c) => {
153
- if (!c)
154
- return c;
155
- return { line: clampCursor(c.line - 1), col: 0 };
156
- });
157
- },
158
- });
159
- useCommand({
160
- id: "cursor-half-down",
161
- title: "Cursor half page down",
162
- hotkey: "ctrl+d",
163
- modes: ["cursor"],
164
- handler: () => {
165
- setCursor((c) => {
166
- if (!c)
167
- return c;
168
- const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2);
169
- return { line: clampCursor(c.line + step), col: 0 };
170
- });
171
- },
172
- });
173
- useCommand({
174
- id: "cursor-half-up",
175
- title: "Cursor half page up",
176
- hotkey: "ctrl+u",
177
- modes: ["cursor"],
178
- handler: () => {
179
- setCursor((c) => {
180
- if (!c)
181
- return c;
182
- const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2);
183
- return { line: clampCursor(c.line - step), col: 0 };
184
- });
185
- },
186
- });
187
- useCommand({
188
- id: "cursor-top",
189
- title: "Cursor to top",
190
- hotkey: "g g",
191
- modes: ["cursor"],
192
- handler: () => {
193
- setCursor({ line: 0, col: 0 });
194
- },
195
- });
196
- useCommand({
197
- id: "cursor-bottom",
198
- title: "Cursor to bottom",
199
- hotkey: "shift+g",
200
- modes: ["cursor"],
201
- handler: () => {
202
- setCursor({ line: cursorMax, col: 0 });
203
- },
204
- });
205
- useCommand({
206
- id: "cursor-search-start",
207
- title: "Search",
208
- hotkey: "/",
209
- modes: ["cursor"],
210
- handler: () => {
211
- preSearchModeRef.current = mode;
212
- setSearchActive(true);
213
- setSearchQuery("");
214
- setMode("insert");
215
- },
216
- });
217
- useCommand({
218
- id: "cursor-search-next",
219
- title: "Next match",
220
- hotkey: "n",
221
- modes: ["cursor"],
222
- when: () => !searchActive,
223
- handler: () => {
224
- const matches = matchingLinesRef.current;
225
- if (matches.length === 0)
226
- return;
227
- setCurrentMatchIndex((idx) => {
228
- const next = (idx + 1) % matches.length;
229
- const line = matches[next];
230
- setCursor({ line, col: 0 });
231
- return next;
232
- });
233
- },
234
- });
235
- useCommand({
236
- id: "cursor-search-prev",
237
- title: "Previous match",
238
- hotkey: "shift+n",
239
- modes: ["cursor"],
240
- when: () => !searchActive,
241
- handler: () => {
242
- const matches = matchingLinesRef.current;
243
- if (matches.length === 0)
244
- return;
245
- setCurrentMatchIndex((idx) => {
246
- const next = (idx - 1 + matches.length) % matches.length;
247
- const line = matches[next];
248
- setCursor({ line, col: 0 });
249
- return next;
250
- });
251
- },
252
- });
253
- // === SELECT MODE ===
254
- useCommand({
255
- id: "select-down",
256
- title: "Extend selection down",
257
- hotkey: "j",
258
- modes: ["select"],
259
- handler: () => {
260
- setCursor((c) => {
261
- if (!c)
262
- return c;
263
- return { line: clampCursor(c.line + 1), col: 0 };
264
- });
265
- },
266
- });
267
- useCommand({
268
- id: "select-up",
269
- title: "Extend selection up",
270
- hotkey: "k",
271
- modes: ["select"],
272
- handler: () => {
273
- setCursor((c) => {
274
- if (!c)
275
- return c;
276
- return { line: clampCursor(c.line - 1), col: 0 };
277
- });
278
- },
279
- });
280
- useCommand({
281
- id: "select-toggle",
282
- title: "Toggle selection",
283
- hotkey: "tab",
284
- modes: ["select"],
285
- when: () => multiSelect,
286
- handler: () => {
287
- setToggledIndices((prev) => {
288
- if (!cursor)
289
- return prev;
290
- const next = new Set(prev);
291
- const idx = cursor.line;
292
- if (next.has(idx)) {
293
- next.delete(idx);
294
- }
295
- else {
296
- next.add(idx);
297
- }
298
- return next;
299
- });
300
- },
301
- });
302
- useCommand({
303
- id: "select-copy",
304
- title: "Copy selection",
305
- hotkey: "y",
306
- modes: ["select"],
307
- handler: () => {
308
- if (!getText || !selectionAnchor || !cursor)
309
- return;
310
- const text = getText();
311
- if (!text)
312
- return;
313
- if (isBlockMode && blockLineMap) {
314
- // Block-based copy: use blockLineMap to find line ranges
315
- const startBlock = Math.min(selectionAnchor.line, cursor.line);
316
- const endBlock = Math.max(selectionAnchor.line, cursor.line);
317
- const startLine = blockLineMap[startBlock] ?? 0;
318
- const endLine = endBlock + 1 < blockLineMap.length
319
- ? (blockLineMap[endBlock + 1] ?? text.split("\n").length)
320
- : text.split("\n").length;
321
- const lines = text.split("\n");
322
- const selected = lines.slice(startLine, endLine).join("\n");
323
- if (selected) {
324
- void copyToClipboard(selected);
325
- }
326
- }
327
- else {
328
- const lines = text.split("\n");
329
- const startLine = Math.min(selectionAnchor.line, cursor.line);
330
- const endLine = Math.max(selectionAnchor.line, cursor.line);
331
- const selected = lines.slice(startLine, endLine + 1).join("\n");
332
- if (selected) {
333
- void copyToClipboard(selected);
334
- }
335
- }
336
- setMode("cursor");
337
- },
338
- });
339
- useCommand({
340
- id: "select-cancel",
341
- title: "Cancel selection",
342
- hotkey: "escape",
343
- modes: ["select"],
344
- handler: () => setMode("cursor"),
345
- });
346
- // === MODE TRANSITIONS ===
347
- useCommand({
348
- id: "enter-select",
349
- title: "Enter select mode",
350
- hotkey: "v",
351
- modes: ["cursor"],
352
- handler: () => setMode("select"),
353
- });
354
- // === SEARCH CANCEL (any mode) ===
355
- useCommand({
356
- id: "search-cancel",
357
- title: "Cancel search",
358
- hotkey: "escape",
359
- modes: ["cursor", "select", "insert"],
360
- when: () => searchActive,
361
- handler: () => {
362
- setSearchActive(false);
363
- setSearchQuery("");
364
- setMatchingLines([]);
365
- setCurrentMatchIndex(0);
366
- setMode(preSearchModeRef.current);
367
- },
368
- });
369
- // Compute selection from anchor + cursor
370
- const selection = selectionAnchor && cursor && mode === "select"
371
- ? {
372
- start: selectionAnchor.line <= cursor.line ? selectionAnchor : cursor,
373
- end: selectionAnchor.line <= cursor.line ? cursor : selectionAnchor,
374
- }
375
- : null;
376
- const submitSearch = useCallback(() => {
377
- setSearchActive(false);
378
- setMode(preSearchModeRef.current);
379
- }, [setMode]);
380
- return {
381
- mode,
382
- setMode,
383
- cursor,
384
- selection,
385
- toggledIndices,
386
- searchQuery,
387
- searchActive,
388
- setSearchQuery,
389
- matchingLines,
390
- currentMatchIndex,
391
- submitSearch,
392
- };
393
- }
394
- //# sourceMappingURL=modal.js.map
package/dist/modal.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAa,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAgC/C,MAAM,UAAU,0BAA0B,CAAC,IAA4B;IACrE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,qBAAqB,EAAE,CAAA;IAC1D,MAAM,EACJ,UAAU,EACV,cAAc,GAAG,cAAc,GAAG,CAAC,EACnC,OAAO,EACP,UAAU,EACV,YAAY,EACZ,gBAAgB,GAAG,CAAC,EACpB,WAAW,GAAG,KAAK,GACpB,GAAG,IAAI,CAAA;IACR,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAA;IAC3D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAkB,IAAI,CAAC,CAAA;IAC7E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAA;IAC5E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAClD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAA;IAChE,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,MAAM,CAAO,QAAQ,CAAC,CAAA;IAE/C,kFAAkF;IAClF,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IAC1C,cAAc,CAAC,OAAO,GAAG,WAAW,CAAA;IACpC,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;IAC9C,gBAAgB,CAAC,OAAO,GAAG,aAAa,CAAA;IAExC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY;YAAE,OAAM;QACzB,MAAM,IAAI,GAAG,OAAO,EAAE,EAAE,CAAA;QACxB,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1B,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACpB,oBAAoB,CAAC,CAAC,CAAC,CAAA;YACvB,OAAM;QACR,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QACpD,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACzB,oBAAoB,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,2BAA2B;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACvB,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3C,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA,CAAC,kDAAkD;IAElF,MAAM,WAAW,GAAG,UAAU,IAAI,IAAI,CAAA;IACtC,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;IAEzF,MAAM,WAAW,GAAG,WAAW,CAC7B,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,EAC1D,CAAC,SAAS,CAAC,CACZ,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC,CAAA;YACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC9C,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAEf,kEAAkE;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxF,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrB,4EAA4E;gBAC5E,IAAI,QAAQ;oBAAE,OAAO,QAAQ,CAAA;gBAC7B,4FAA4F;gBAC5F,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAA;gBACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;oBAC1D,iEAAiE;oBACjE,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAA;wBAC5D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;oBAC1D,CAAC;oBACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;gBACpC,CAAC;gBACD,iCAAiC;gBACjC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,EAAE,CAAC;YACjE,kBAAkB,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;QACnC,CAAC;QACD,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAA;IACzB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA,CAAC,kDAAkD;IAE7D,sBAAsB;IAEtB,UAAU,CAAC;QACT,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW;QACvB,OAAO,EAAE,GAAG,EAAE;YACZ,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAA;gBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACf,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE,WAAW;QACnB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW;QACvB,OAAO,EAAE,GAAG,EAAE;YACZ,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAA;gBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACf,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;YACF,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,uBAAuB;QAC9B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;gBAC1F,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YACrD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAA;gBAC1F,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YACrD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAChC,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QACxC,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,qBAAqB;QACzB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;YAC/B,eAAe,CAAC,IAAI,CAAC,CAAA;YACrB,cAAc,CAAC,EAAE,CAAC,CAAA;YAClB,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY;QACzB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAA;YACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAChC,oBAAoB,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;gBACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC1B,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC3B,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,oBAAoB;QACxB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY;QACzB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAA;YACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAChC,oBAAoB,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAA;gBACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBAC1B,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC3B,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,sBAAsB;IAEtB,UAAU,CAAC;QACT,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,uBAAuB;QAC9B,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,qBAAqB;QAC5B,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;gBACd,IAAI,CAAC,CAAC;oBAAE,OAAO,CAAC,CAAA;gBAChB,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAClD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,KAAK;QACb,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW;QACvB,OAAO,EAAE,GAAG,EAAE;YACZ,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAA;gBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAA;gBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACf,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,gBAAgB;QACvB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM;gBAAE,OAAM;YACnD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;gBAChC,yDAAyD;gBACzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC5D,MAAM,SAAS,GAAG,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC/C,MAAM,OAAO,GACX,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM;oBAChC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;oBACzD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3D,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC/D,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAChC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;IAEF,UAAU,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KACjC,CAAC,CAAA;IAEF,2BAA2B;IAE3B,UAAU,CAAC;QACT,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;KACjC,CAAC,CAAA;IAEF,mCAAmC;IAEnC,UAAU,CAAC;QACT,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACrC,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY;QACxB,OAAO,EAAE,GAAG,EAAE;YACZ,eAAe,CAAC,KAAK,CAAC,CAAA;YACtB,cAAc,CAAC,EAAE,CAAC,CAAA;YAClB,gBAAgB,CAAC,EAAE,CAAC,CAAA;YACpB,oBAAoB,CAAC,CAAC,CAAC,CAAA;YACvB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC;KACF,CAAC,CAAA;IAEF,yCAAyC;IACzC,MAAM,SAAS,GACb,eAAe,IAAI,MAAM,IAAI,IAAI,KAAK,QAAQ;QAC5C,CAAC,CAAC;YACE,KAAK,EAAE,eAAe,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM;YACrE,GAAG,EAAE,eAAe,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe;SACpE;QACH,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,eAAe,CAAC,KAAK,CAAC,CAAA;QACtB,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,OAAO;QACL,IAAI;QACJ,OAAO;QACP,MAAM;QACN,SAAS;QACT,cAAc;QACd,WAAW;QACX,YAAY;QACZ,cAAc;QACd,aAAa;QACb,iBAAiB;QACjB,YAAY;KACb,CAAA;AACH,CAAC"}
@@ -1,73 +0,0 @@
1
- import { useCallback, useMemo, useRef, useState } from "react"
2
- import { createElement } from "react"
3
- import { useCommandContext, useCommand, useMode } from "@tooee/commands"
4
- import type { Mode } from "@tooee/commands"
5
- import { useOverlay } from "@tooee/overlays"
6
- import type { OverlayCloseReason } from "@tooee/overlays"
7
- import type { CommandPaletteEntry } from "@tooee/renderers"
8
- import { CommandPaletteOverlay } from "./CommandPaletteOverlay.js"
9
-
10
- const DEFAULT_MODES: Mode[] = ["cursor"]
11
- const OVERLAY_ID = "command-palette"
12
-
13
- export interface CommandPaletteState {
14
- isOpen: boolean
15
- open: () => void
16
- close: () => void
17
- entries: CommandPaletteEntry[]
18
- }
19
-
20
- export function useCommandPalette(): CommandPaletteState {
21
- const { commands } = useCommandContext()
22
- const mode = useMode()
23
- const overlay = useOverlay()
24
- const [isOpen, setIsOpen] = useState(false)
25
- const launchModeRef = useRef<Mode>(mode)
26
-
27
- const launchMode = launchModeRef.current
28
- const entries = useMemo(() => {
29
- return commands
30
- .filter((cmd) => !cmd.hidden)
31
- .filter((cmd) => {
32
- const cmdModes = cmd.modes ?? DEFAULT_MODES
33
- return cmdModes.includes(launchMode)
34
- })
35
- .map((cmd) => ({
36
- id: cmd.id,
37
- title: cmd.title,
38
- hotkey: cmd.defaultHotkey,
39
- category: cmd.category,
40
- icon: cmd.icon,
41
- }))
42
- }, [commands, launchMode])
43
-
44
- const close = useCallback(() => {
45
- setIsOpen(false)
46
- overlay.hide(OVERLAY_ID)
47
- }, [overlay])
48
-
49
- const open = useCallback(() => {
50
- launchModeRef.current = mode
51
- setIsOpen(true)
52
- overlay.open(
53
- OVERLAY_ID,
54
- ({ close }: { close: (reason?: OverlayCloseReason) => void }) =>
55
- createElement(CommandPaletteOverlay, {
56
- launchMode: mode,
57
- close: () => close(),
58
- }),
59
- null,
60
- { mode: "insert", dismissOnEscape: true, onClose: () => setIsOpen(false) },
61
- )
62
- }, [overlay, mode])
63
-
64
- useCommand({
65
- id: "command-palette",
66
- title: "Command Palette",
67
- hotkey: ":",
68
- modes: ["cursor"],
69
- handler: open,
70
- })
71
-
72
- return { isOpen, open, close, entries }
73
- }