@tooee/shell 0.1.11 → 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.
- package/dist/command-palette-provider.d.ts +5 -0
- package/dist/command-palette-provider.d.ts.map +1 -0
- package/dist/command-palette-provider.js +28 -0
- package/dist/command-palette-provider.js.map +1 -0
- package/dist/commands.d.ts +9 -0
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +52 -1
- package/dist/commands.js.map +1 -1
- package/dist/copy-hook.d.ts +12 -0
- package/dist/copy-hook.d.ts.map +1 -0
- package/dist/copy-hook.js +35 -0
- package/dist/copy-hook.js.map +1 -0
- package/dist/copy-on-select.d.ts.map +1 -1
- package/dist/copy-on-select.js +1 -3
- package/dist/copy-on-select.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/navigation.d.ts +24 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +239 -0
- package/dist/navigation.js.map +1 -0
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +4 -1
- package/dist/provider.js.map +1 -1
- package/dist/search-hook.d.ts +14 -0
- package/dist/search-hook.d.ts.map +1 -0
- package/dist/search-hook.js +120 -0
- package/dist/search-hook.js.map +1 -0
- package/package.json +20 -20
- package/src/command-palette-provider.tsx +39 -0
- package/src/commands.ts +55 -1
- package/src/copy-hook.ts +45 -0
- package/src/copy-on-select.ts +1 -4
- package/src/index.ts +15 -5
- package/src/navigation.ts +297 -0
- package/src/provider.tsx +6 -1
- package/src/search-hook.ts +147 -0
- package/dist/command-palette.d.ts +0 -9
- package/dist/command-palette.d.ts.map +0 -1
- package/dist/command-palette.js +0 -51
- package/dist/command-palette.js.map +0 -1
- package/dist/modal.d.ts +0 -33
- package/dist/modal.d.ts.map +0 -1
- package/dist/modal.js +0 -395
- package/dist/modal.js.map +0 -1
- package/src/command-palette.ts +0 -73
- package/src/modal.ts +0 -454
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette-provider.d.ts","sourceRoot":"","sources":["../src/command-palette-provider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAU3D,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,aA4B3E"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx } from "@opentui/react/jsx-runtime";
|
|
2
|
+
import { useCallback, useRef } from "react";
|
|
3
|
+
import { createElement } from "react";
|
|
4
|
+
import { useCommand, useMode } from "@tooee/commands";
|
|
5
|
+
import { useOverlay } from "@tooee/overlays";
|
|
6
|
+
import { CommandPaletteOverlay } from "./CommandPaletteOverlay.js";
|
|
7
|
+
const OVERLAY_ID = "command-palette";
|
|
8
|
+
export function CommandPaletteProvider({ children }) {
|
|
9
|
+
const mode = useMode();
|
|
10
|
+
const overlay = useOverlay();
|
|
11
|
+
const launchModeRef = useRef(mode);
|
|
12
|
+
const open = useCallback(() => {
|
|
13
|
+
launchModeRef.current = mode;
|
|
14
|
+
overlay.open(OVERLAY_ID, ({ close }) => createElement(CommandPaletteOverlay, {
|
|
15
|
+
launchMode: mode,
|
|
16
|
+
close: () => close(),
|
|
17
|
+
}), null, { mode: "insert", dismissOnEscape: true });
|
|
18
|
+
}, [overlay, mode]);
|
|
19
|
+
useCommand({
|
|
20
|
+
id: "command-palette",
|
|
21
|
+
title: "Command Palette",
|
|
22
|
+
hotkey: ":",
|
|
23
|
+
modes: ["cursor", "select"],
|
|
24
|
+
handler: open,
|
|
25
|
+
});
|
|
26
|
+
return _jsx(_Fragment, { children: children });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=command-palette-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-palette-provider.js","sourceRoot":"","sources":["../src/command-palette-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAElE,MAAM,UAAU,GAAG,iBAAiB,CAAA;AAEpC,MAAM,UAAU,sBAAsB,CAAC,EAAE,QAAQ,EAA2B;IAC1E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,aAAa,GAAG,MAAM,CAAO,IAAI,CAAC,CAAA;IAExC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;QAC5B,OAAO,CAAC,IAAI,CACV,UAAU,EACV,CAAC,EAAE,KAAK,EAAoD,EAAE,EAAE,CAC9D,aAAa,CAAC,qBAAqB,EAAE;YACnC,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE;SACrB,CAAC,EACJ,IAAI,EACJ,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,CAC1C,CAAA;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;IAEnB,UAAU,CAAC;QACT,EAAE,EAAE,iBAAiB;QACrB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;QAC3B,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC"}
|
package/dist/commands.d.ts
CHANGED
|
@@ -15,6 +15,15 @@ export declare function useCopyCommand(opts: {
|
|
|
15
15
|
getText: () => string | undefined;
|
|
16
16
|
when?: CommandWhen;
|
|
17
17
|
}): void;
|
|
18
|
+
export declare function usePasteCommands(opts: {
|
|
19
|
+
getTarget: () => {
|
|
20
|
+
insertText: (text: string) => void;
|
|
21
|
+
} | null;
|
|
22
|
+
when?: CommandWhen;
|
|
23
|
+
}): void;
|
|
24
|
+
export declare function useDebugConsoleCommand(opts?: {
|
|
25
|
+
when?: CommandWhen;
|
|
26
|
+
}): void;
|
|
18
27
|
export declare function useToggleLineNumbersCommand(opts: {
|
|
19
28
|
showLineNumbers: boolean;
|
|
20
29
|
onToggle: () => void;
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAwBA;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,QAgBA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,QAgB7F;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,QAgBA"}
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG;IAC/D,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAwBA;AAED,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE;IACpC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB,QAgBA;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,QAgB7F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,SAAS,EAAE,MAAM;QAAE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;IAC9D,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,QAmCA;AAED,wBAAgB,sBAAsB,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,WAAW,CAAA;CAAE,QAYnE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IAChD,eAAe,EAAE,OAAO,CAAA;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,WAAW,CAAA;CACnB,QAgBA"}
|
package/dist/commands.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useRenderer } from "@opentui/react";
|
|
2
|
-
import { copyToClipboard } from "@tooee/clipboard";
|
|
2
|
+
import { copyToClipboard, readClipboardText, readPrimaryText } from "@tooee/clipboard";
|
|
3
3
|
import { useCommand } from "@tooee/commands";
|
|
4
4
|
import { useToast } from "@tooee/toasts";
|
|
5
5
|
import { useThemePicker } from "./theme-picker.js";
|
|
@@ -60,6 +60,57 @@ export function useCopyCommand(opts) {
|
|
|
60
60
|
},
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
+
export function usePasteCommands(opts) {
|
|
64
|
+
useCommand({
|
|
65
|
+
id: "paste-clipboard",
|
|
66
|
+
title: "Paste from clipboard",
|
|
67
|
+
hotkey: "p",
|
|
68
|
+
when: opts.when,
|
|
69
|
+
handler: (ctx) => {
|
|
70
|
+
const target = opts.getTarget();
|
|
71
|
+
if (!target)
|
|
72
|
+
return;
|
|
73
|
+
void readClipboardText().then((text) => {
|
|
74
|
+
if (text) {
|
|
75
|
+
target.insertText(text);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
ctx.toast.toast({ message: "Clipboard empty", level: "warning" });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
useCommand({
|
|
84
|
+
id: "paste-primary",
|
|
85
|
+
title: "Paste from selection",
|
|
86
|
+
when: opts.when,
|
|
87
|
+
handler: (ctx) => {
|
|
88
|
+
const target = opts.getTarget();
|
|
89
|
+
if (!target)
|
|
90
|
+
return;
|
|
91
|
+
void readPrimaryText().then((text) => {
|
|
92
|
+
if (text) {
|
|
93
|
+
target.insertText(text);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
ctx.toast.toast({ message: "Selection empty", level: "warning" });
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
export function useDebugConsoleCommand(opts) {
|
|
103
|
+
const renderer = useRenderer();
|
|
104
|
+
useCommand({
|
|
105
|
+
id: "toggle-debug-console",
|
|
106
|
+
title: "Toggle debug console",
|
|
107
|
+
hotkey: "ctrl+shift+j",
|
|
108
|
+
when: opts?.when,
|
|
109
|
+
handler: () => {
|
|
110
|
+
renderer.console.toggle();
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
}
|
|
63
114
|
export function useToggleLineNumbersCommand(opts) {
|
|
64
115
|
useCommand({
|
|
65
116
|
id: "toggle-line-numbers",
|
package/dist/commands.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Position } from "./navigation.js";
|
|
2
|
+
export interface UseCopyOptions {
|
|
3
|
+
getRowText: (index: number) => string;
|
|
4
|
+
cursor: Position | null;
|
|
5
|
+
selection: {
|
|
6
|
+
start: Position;
|
|
7
|
+
end: Position;
|
|
8
|
+
} | null;
|
|
9
|
+
toggledIndices: Set<number>;
|
|
10
|
+
}
|
|
11
|
+
export declare function useCopy({ getRowText, cursor, selection, toggledIndices }: UseCopyOptions): void;
|
|
12
|
+
//# sourceMappingURL=copy-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-hook.d.ts","sourceRoot":"","sources":["../src/copy-hook.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE/C,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;IACrC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAA;IACpD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAED,wBAAgB,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,cAAc,GAAG,IAAI,CAiC/F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useCommand, useSetMode } from "@tooee/commands";
|
|
2
|
+
import { copyToClipboard } from "@tooee/clipboard";
|
|
3
|
+
export function useCopy({ getRowText, cursor, selection, toggledIndices }) {
|
|
4
|
+
const setMode = useSetMode();
|
|
5
|
+
useCommand({
|
|
6
|
+
id: "select-copy",
|
|
7
|
+
title: "Copy selection",
|
|
8
|
+
hotkey: "y",
|
|
9
|
+
modes: ["select"],
|
|
10
|
+
handler: () => {
|
|
11
|
+
let text = "";
|
|
12
|
+
if (toggledIndices.size > 0) {
|
|
13
|
+
text = Array.from(toggledIndices)
|
|
14
|
+
.sort((left, right) => left - right)
|
|
15
|
+
.map((index) => getRowText(index))
|
|
16
|
+
.join("\n");
|
|
17
|
+
}
|
|
18
|
+
else if (selection) {
|
|
19
|
+
const rows = [];
|
|
20
|
+
for (let index = selection.start.line; index <= selection.end.line; index++) {
|
|
21
|
+
rows.push(getRowText(index));
|
|
22
|
+
}
|
|
23
|
+
text = rows.join("\n");
|
|
24
|
+
}
|
|
25
|
+
else if (cursor) {
|
|
26
|
+
text = getRowText(cursor.line);
|
|
27
|
+
}
|
|
28
|
+
if (text) {
|
|
29
|
+
void copyToClipboard(text);
|
|
30
|
+
}
|
|
31
|
+
setMode("cursor");
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=copy-hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-hook.js","sourceRoot":"","sources":["../src/copy-hook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUlD,MAAM,UAAU,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAkB;IACvF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,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,IAAI,GAAG,EAAE,CAAA;YAEb,IAAI,cAAc,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;qBAC9B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;qBACnC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;qBACjC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,GAAa,EAAE,CAAA;gBACzB,KAAK,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;oBAC5E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC9B,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAChC,CAAC;YAED,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,eAAe,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;YAED,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnB,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-on-select.d.ts","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"copy-on-select.d.ts","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,SA6B9B"}
|
package/dist/copy-on-select.js
CHANGED
|
@@ -9,9 +9,7 @@ export function useCopyOnSelect() {
|
|
|
9
9
|
useEffect(() => {
|
|
10
10
|
const copyOnSelect = config.view?.copyOnSelect;
|
|
11
11
|
// Default: on for Linux, off elsewhere
|
|
12
|
-
const effective = copyOnSelect === undefined
|
|
13
|
-
? platform() === "linux"
|
|
14
|
-
: copyOnSelect;
|
|
12
|
+
const effective = copyOnSelect === undefined ? platform() === "linux" : copyOnSelect;
|
|
15
13
|
if (!effective)
|
|
16
14
|
return;
|
|
17
15
|
const handler = (selection) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copy-on-select.js","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAG7B,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,YAAY,CAAA;QAE9C,uCAAuC;QACvC,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"copy-on-select.js","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAG7B,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,YAAY,CAAA;QAE9C,uCAAuC;QACvC,MAAM,SAAS,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAA;QAEpF,IAAI,CAAC,SAAS;YAAE,OAAM;QAEtB,MAAM,OAAO,GAAG,CAAC,SAAoB,EAAE,EAAE;YACvC,MAAM,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE,CAAA;YACxC,IAAI,CAAC,IAAI;gBAAE,OAAM;YAEjB,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;gBAC9B,KAAK,eAAe,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,4CAA4C;gBAC5C,KAAK,aAAa,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC,CAAA;QAED,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACjC,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAA;AAC3C,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
export { useThemeCommands, useQuitCommand, useCopyCommand, useToggleLineNumbersCommand } from "./commands.js";
|
|
2
|
-
export {
|
|
3
|
-
export type {
|
|
1
|
+
export { useThemeCommands, useQuitCommand, useCopyCommand, usePasteCommands, useToggleLineNumbersCommand, useDebugConsoleCommand, } from "./commands.js";
|
|
2
|
+
export { useNavigation } from "./navigation.js";
|
|
3
|
+
export type { UseNavigationOptions, NavigationState, Position } from "./navigation.js";
|
|
4
|
+
export { useSearch } from "./search-hook.js";
|
|
5
|
+
export type { UseSearchOptions, SearchState } from "./search-hook.js";
|
|
6
|
+
export { useCopy } from "./copy-hook.js";
|
|
7
|
+
export type { UseCopyOptions } from "./copy-hook.js";
|
|
4
8
|
export { findMatchingLines } from "./search.js";
|
|
5
9
|
export { TooeeProvider } from "./provider.js";
|
|
6
10
|
export { launchCli, guardTerminalHealth } from "./launch.js";
|
|
7
|
-
export {
|
|
8
|
-
export type { CommandPaletteState } from "./command-palette.js";
|
|
11
|
+
export { CommandPaletteProvider } from "./command-palette-provider.js";
|
|
9
12
|
export { useThemePicker } from "./theme-picker.js";
|
|
10
13
|
export type { ThemePickerState, ThemePickerEntry } from "./theme-picker.js";
|
|
11
14
|
export { OverlayProvider } from "./overlay.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
export { useThemeCommands, useQuitCommand, useCopyCommand, useToggleLineNumbersCommand } from "./commands.js";
|
|
2
|
-
export {
|
|
1
|
+
export { useThemeCommands, useQuitCommand, useCopyCommand, usePasteCommands, useToggleLineNumbersCommand, useDebugConsoleCommand, } from "./commands.js";
|
|
2
|
+
export { useNavigation } from "./navigation.js";
|
|
3
|
+
export { useSearch } from "./search-hook.js";
|
|
4
|
+
export { useCopy } from "./copy-hook.js";
|
|
3
5
|
export { findMatchingLines } from "./search.js";
|
|
4
6
|
export { TooeeProvider } from "./provider.js";
|
|
5
7
|
export { launchCli, guardTerminalHealth } from "./launch.js";
|
|
6
|
-
export {
|
|
8
|
+
export { CommandPaletteProvider } from "./command-palette-provider.js";
|
|
7
9
|
export { useThemePicker } from "./theme-picker.js";
|
|
8
10
|
export { OverlayProvider } from "./overlay.js";
|
|
9
11
|
export { useCopyOnSelect } from "./copy-on-select.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Mode } from "@tooee/commands";
|
|
2
|
+
export interface Position {
|
|
3
|
+
line: number;
|
|
4
|
+
col: number;
|
|
5
|
+
}
|
|
6
|
+
export interface UseNavigationOptions {
|
|
7
|
+
rowCount: number;
|
|
8
|
+
isSelectable?: (index: number) => boolean;
|
|
9
|
+
viewportHeight?: number;
|
|
10
|
+
multiSelect?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface NavigationState {
|
|
13
|
+
mode: Mode;
|
|
14
|
+
setMode: (mode: Mode) => void;
|
|
15
|
+
cursor: Position | null;
|
|
16
|
+
setCursor: (line: number) => void;
|
|
17
|
+
selection: {
|
|
18
|
+
start: Position;
|
|
19
|
+
end: Position;
|
|
20
|
+
} | null;
|
|
21
|
+
toggledIndices: Set<number>;
|
|
22
|
+
}
|
|
23
|
+
export declare function useNavigation({ rowCount, isSelectable, viewportHeight, multiSelect, }: UseNavigationOptions): NavigationState;
|
|
24
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmC,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE5E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAKD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IACzC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7B,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,SAAS,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAA;IACpD,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC5B;AAMD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAAkC,EAClC,cAAc,EACd,WAAmB,GACpB,EAAE,oBAAoB,GAAG,eAAe,CAmQxC"}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
|
2
|
+
import { useTerminalDimensions } from "@opentui/react";
|
|
3
|
+
import { useCommand, useMode, useSetMode } from "@tooee/commands";
|
|
4
|
+
const CURSOR_MODES = ["cursor"];
|
|
5
|
+
const SELECT_MODES = ["select"];
|
|
6
|
+
function defaultIsSelectable() {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
export function useNavigation({ rowCount, isSelectable = defaultIsSelectable, viewportHeight, multiSelect = false, }) {
|
|
10
|
+
const { height: terminalHeight } = useTerminalDimensions();
|
|
11
|
+
const effectiveViewportHeight = viewportHeight ?? Math.max(1, terminalHeight - 2);
|
|
12
|
+
const mode = useMode();
|
|
13
|
+
const setMode = useSetMode();
|
|
14
|
+
const maxIndex = Math.max(0, rowCount - 1);
|
|
15
|
+
const clampIndex = useCallback((index) => Math.max(0, Math.min(index, maxIndex)), [maxIndex]);
|
|
16
|
+
const findSelectable = useCallback((start, direction) => {
|
|
17
|
+
if (rowCount <= 0)
|
|
18
|
+
return null;
|
|
19
|
+
const initial = Math.max(0, Math.min(start, maxIndex));
|
|
20
|
+
for (let index = initial; direction === 1 ? index <= maxIndex : index >= 0; index += direction) {
|
|
21
|
+
if (isSelectable(index))
|
|
22
|
+
return index;
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
}, [rowCount, maxIndex, isSelectable]);
|
|
26
|
+
const resolveSelectable = useCallback((target, preferredDirection = 1) => {
|
|
27
|
+
if (rowCount <= 0)
|
|
28
|
+
return null;
|
|
29
|
+
const clamped = Math.max(0, Math.min(target, maxIndex));
|
|
30
|
+
if (isSelectable(clamped))
|
|
31
|
+
return clamped;
|
|
32
|
+
return preferredDirection === 1
|
|
33
|
+
? findSelectable(clamped, 1) ?? findSelectable(clamped, -1)
|
|
34
|
+
: findSelectable(clamped, -1) ?? findSelectable(clamped, 1);
|
|
35
|
+
}, [rowCount, maxIndex, isSelectable, findSelectable]);
|
|
36
|
+
const [rawCursor, setRawCursor] = useState(() => {
|
|
37
|
+
const line = resolveSelectable(0, 1);
|
|
38
|
+
return line == null ? null : { line, col: 0 };
|
|
39
|
+
});
|
|
40
|
+
// Derive valid cursor from raw cursor + constraints
|
|
41
|
+
const cursor = useMemo(() => {
|
|
42
|
+
if (rowCount <= 0)
|
|
43
|
+
return null;
|
|
44
|
+
if (!rawCursor) {
|
|
45
|
+
if (mode !== "cursor")
|
|
46
|
+
return null;
|
|
47
|
+
const line = resolveSelectable(0, 1);
|
|
48
|
+
return line == null ? null : { line, col: 0 };
|
|
49
|
+
}
|
|
50
|
+
const preferredDirection = rawCursor.line > maxIndex ? -1 : 1;
|
|
51
|
+
const resolved = resolveSelectable(rawCursor.line, preferredDirection);
|
|
52
|
+
if (resolved == null)
|
|
53
|
+
return null;
|
|
54
|
+
if (resolved === rawCursor.line)
|
|
55
|
+
return rawCursor;
|
|
56
|
+
return { line: resolved, col: 0 };
|
|
57
|
+
}, [rawCursor, rowCount, maxIndex, mode, resolveSelectable]);
|
|
58
|
+
const cursorRef = useRef(cursor);
|
|
59
|
+
cursorRef.current = cursor;
|
|
60
|
+
const [selectionAnchor, setSelectionAnchor] = useState(null);
|
|
61
|
+
const [rawToggledIndices, setRawToggledIndices] = useState(new Set());
|
|
62
|
+
// Derive valid toggled indices (filter out-of-bounds)
|
|
63
|
+
const toggledIndices = useMemo(() => {
|
|
64
|
+
if (rowCount <= 0)
|
|
65
|
+
return new Set();
|
|
66
|
+
let needsFilter = false;
|
|
67
|
+
for (const i of rawToggledIndices) {
|
|
68
|
+
if (i >= rowCount) {
|
|
69
|
+
needsFilter = true;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!needsFilter)
|
|
74
|
+
return rawToggledIndices;
|
|
75
|
+
return new Set(Array.from(rawToggledIndices).filter(i => i < rowCount));
|
|
76
|
+
}, [rawToggledIndices, rowCount]);
|
|
77
|
+
const setCursor = useCallback((line) => {
|
|
78
|
+
setRawCursor((current) => {
|
|
79
|
+
const preferredDirection = current && line < current.line ? -1 : 1;
|
|
80
|
+
const nextLine = resolveSelectable(line, preferredDirection);
|
|
81
|
+
if (nextLine == null)
|
|
82
|
+
return null;
|
|
83
|
+
if (current && nextLine === current.line)
|
|
84
|
+
return current;
|
|
85
|
+
return { line: nextLine, col: 0 };
|
|
86
|
+
});
|
|
87
|
+
}, [resolveSelectable]);
|
|
88
|
+
const moveCursor = useCallback((delta) => {
|
|
89
|
+
setRawCursor((current) => {
|
|
90
|
+
if (!current)
|
|
91
|
+
return current;
|
|
92
|
+
const target = clampIndex(current.line + delta);
|
|
93
|
+
const preferredDirection = delta < 0 ? -1 : 1;
|
|
94
|
+
const nextLine = resolveSelectable(target, preferredDirection);
|
|
95
|
+
if (nextLine == null)
|
|
96
|
+
return current;
|
|
97
|
+
if (nextLine === current.line)
|
|
98
|
+
return current;
|
|
99
|
+
return { line: nextLine, col: 0 };
|
|
100
|
+
});
|
|
101
|
+
}, [clampIndex, resolveSelectable]);
|
|
102
|
+
const jumpCursor = useCallback((target, preferredDirection) => {
|
|
103
|
+
const nextLine = resolveSelectable(target, preferredDirection);
|
|
104
|
+
setRawCursor(nextLine == null ? null : { line: nextLine, col: 0 });
|
|
105
|
+
}, [resolveSelectable]);
|
|
106
|
+
const toggleCurrent = useCallback(() => {
|
|
107
|
+
const cur = cursorRef.current;
|
|
108
|
+
if (!cur)
|
|
109
|
+
return;
|
|
110
|
+
setRawToggledIndices((prev) => {
|
|
111
|
+
const next = new Set(prev);
|
|
112
|
+
if (next.has(cur.line)) {
|
|
113
|
+
next.delete(cur.line);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
next.add(cur.line);
|
|
117
|
+
}
|
|
118
|
+
return next;
|
|
119
|
+
});
|
|
120
|
+
}, []);
|
|
121
|
+
useCommand({
|
|
122
|
+
id: "cursor-down",
|
|
123
|
+
title: "Cursor down",
|
|
124
|
+
hotkey: "j",
|
|
125
|
+
modes: CURSOR_MODES,
|
|
126
|
+
handler: () => moveCursor(1),
|
|
127
|
+
});
|
|
128
|
+
useCommand({
|
|
129
|
+
id: "cursor-up",
|
|
130
|
+
title: "Cursor up",
|
|
131
|
+
hotkey: "k",
|
|
132
|
+
modes: CURSOR_MODES,
|
|
133
|
+
handler: () => moveCursor(-1),
|
|
134
|
+
});
|
|
135
|
+
useCommand({
|
|
136
|
+
id: "cursor-half-down",
|
|
137
|
+
title: "Cursor half page down",
|
|
138
|
+
hotkey: "ctrl+d",
|
|
139
|
+
modes: CURSOR_MODES,
|
|
140
|
+
handler: () => moveCursor(Math.floor(effectiveViewportHeight / 2) || 1),
|
|
141
|
+
});
|
|
142
|
+
useCommand({
|
|
143
|
+
id: "cursor-half-up",
|
|
144
|
+
title: "Cursor half page up",
|
|
145
|
+
hotkey: "ctrl+u",
|
|
146
|
+
modes: CURSOR_MODES,
|
|
147
|
+
handler: () => moveCursor(-(Math.floor(effectiveViewportHeight / 2) || 1)),
|
|
148
|
+
});
|
|
149
|
+
useCommand({
|
|
150
|
+
id: "cursor-top",
|
|
151
|
+
title: "Cursor to top",
|
|
152
|
+
hotkey: "g g",
|
|
153
|
+
modes: CURSOR_MODES,
|
|
154
|
+
handler: () => jumpCursor(0, 1),
|
|
155
|
+
});
|
|
156
|
+
useCommand({
|
|
157
|
+
id: "cursor-bottom",
|
|
158
|
+
title: "Cursor to bottom",
|
|
159
|
+
hotkey: "shift+g",
|
|
160
|
+
modes: CURSOR_MODES,
|
|
161
|
+
handler: () => jumpCursor(maxIndex, -1),
|
|
162
|
+
});
|
|
163
|
+
useCommand({
|
|
164
|
+
id: "enter-select",
|
|
165
|
+
title: "Enter select mode",
|
|
166
|
+
hotkey: "v",
|
|
167
|
+
modes: CURSOR_MODES,
|
|
168
|
+
handler: () => {
|
|
169
|
+
setSelectionAnchor(cursorRef.current ? { ...cursorRef.current } : null);
|
|
170
|
+
setMode("select");
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
useCommand({
|
|
174
|
+
id: "cursor-toggle",
|
|
175
|
+
title: "Toggle selection",
|
|
176
|
+
hotkey: "tab",
|
|
177
|
+
modes: CURSOR_MODES,
|
|
178
|
+
when: () => multiSelect,
|
|
179
|
+
handler: toggleCurrent,
|
|
180
|
+
});
|
|
181
|
+
useCommand({
|
|
182
|
+
id: "cursor-toggle-up",
|
|
183
|
+
title: "Toggle and move up",
|
|
184
|
+
hotkey: "shift+tab",
|
|
185
|
+
modes: CURSOR_MODES,
|
|
186
|
+
when: () => multiSelect,
|
|
187
|
+
handler: () => {
|
|
188
|
+
toggleCurrent();
|
|
189
|
+
moveCursor(-1);
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
useCommand({
|
|
193
|
+
id: "select-down",
|
|
194
|
+
title: "Extend selection down",
|
|
195
|
+
hotkey: "j",
|
|
196
|
+
modes: SELECT_MODES,
|
|
197
|
+
handler: () => moveCursor(1),
|
|
198
|
+
});
|
|
199
|
+
useCommand({
|
|
200
|
+
id: "select-up",
|
|
201
|
+
title: "Extend selection up",
|
|
202
|
+
hotkey: "k",
|
|
203
|
+
modes: SELECT_MODES,
|
|
204
|
+
handler: () => moveCursor(-1),
|
|
205
|
+
});
|
|
206
|
+
useCommand({
|
|
207
|
+
id: "select-toggle",
|
|
208
|
+
title: "Toggle selection",
|
|
209
|
+
hotkey: "tab",
|
|
210
|
+
modes: SELECT_MODES,
|
|
211
|
+
when: () => multiSelect,
|
|
212
|
+
handler: toggleCurrent,
|
|
213
|
+
});
|
|
214
|
+
useCommand({
|
|
215
|
+
id: "select-cancel",
|
|
216
|
+
title: "Cancel selection",
|
|
217
|
+
hotkey: "escape",
|
|
218
|
+
modes: SELECT_MODES,
|
|
219
|
+
handler: () => {
|
|
220
|
+
setSelectionAnchor(null);
|
|
221
|
+
setMode("cursor");
|
|
222
|
+
},
|
|
223
|
+
});
|
|
224
|
+
const selection = mode === "select" && selectionAnchor && cursor
|
|
225
|
+
? {
|
|
226
|
+
start: selectionAnchor.line <= cursor.line ? selectionAnchor : cursor,
|
|
227
|
+
end: selectionAnchor.line <= cursor.line ? cursor : selectionAnchor,
|
|
228
|
+
}
|
|
229
|
+
: null;
|
|
230
|
+
return {
|
|
231
|
+
mode,
|
|
232
|
+
setMode,
|
|
233
|
+
cursor,
|
|
234
|
+
setCursor,
|
|
235
|
+
selection,
|
|
236
|
+
toggledIndices,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../src/navigation.ts"],"names":[],"mappings":"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"}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3E,OAAO,EAA6C,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3E,OAAO,EAA6C,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAM7E,OAAO,QAAQ,iBAAiB,CAAC;IAC/B,UAAU,cAAc;QACtB,KAAK,EAAE,eAAe,CAAA;KACvB;CACF;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAA;IAC7B,WAAW,CAAC,EAAE,IAAI,CAAA;CACnB;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,EACN,MAAM,EAAE,eAAe,EACvB,WAAW,GACZ,EAAE,kBAAkB,aAQpB"}
|
package/dist/provider.js
CHANGED
|
@@ -4,13 +4,15 @@ import { ThemeSwitcherProvider } from "@tooee/themes";
|
|
|
4
4
|
import { CommandProvider, useProvideCommandContext } from "@tooee/commands";
|
|
5
5
|
import { ToastProvider, useToast } from "@tooee/toasts";
|
|
6
6
|
import { OverlayProvider } from "./overlay.js";
|
|
7
|
+
import { CommandPaletteProvider } from "./command-palette-provider.js";
|
|
7
8
|
import { useCopyOnSelect } from "./copy-on-select.js";
|
|
9
|
+
import { useDebugConsoleCommand } from "./commands.js";
|
|
8
10
|
export function TooeeProvider({ children, leader, config: configOverrides, initialMode, }) {
|
|
9
11
|
return (_jsx(ConfigProvider, { overrides: configOverrides, children: _jsx(TooeeProviderInner, { leader: leader, initialMode: initialMode, children: children }) }));
|
|
10
12
|
}
|
|
11
13
|
function TooeeProviderInner({ children, leader, initialMode, }) {
|
|
12
14
|
const config = useConfig();
|
|
13
|
-
return (_jsx(ThemeSwitcherProvider, { initialTheme: config.theme?.name, initialMode: config.theme?.mode, children: _jsx(CommandProvider, { leader: leader, keymap: config.keys, initialMode: initialMode, children: _jsx(ToastProvider, { children: _jsx(ToastContextBridge, { children: _jsx(OverlayProvider, { children: children }) }) }) }) }));
|
|
15
|
+
return (_jsx(ThemeSwitcherProvider, { initialTheme: config.theme?.name, initialMode: config.theme?.mode, children: _jsx(CommandProvider, { leader: leader, keymap: config.keys, initialMode: initialMode, children: _jsx(ToastProvider, { children: _jsx(ToastContextBridge, { children: _jsx(OverlayProvider, { children: _jsx(CommandPaletteProvider, { children: children }) }) }) }) }) }));
|
|
14
16
|
}
|
|
15
17
|
function ToastContextBridge({ children }) {
|
|
16
18
|
const toastController = useToast();
|
|
@@ -18,6 +20,7 @@ function ToastContextBridge({ children }) {
|
|
|
18
20
|
toast: toastController,
|
|
19
21
|
}));
|
|
20
22
|
useCopyOnSelect();
|
|
23
|
+
useDebugConsoleCommand();
|
|
21
24
|
return _jsx(_Fragment, { children: children });
|
|
22
25
|
}
|
|
23
26
|
//# sourceMappingURL=provider.js.map
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAa,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAoB,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAa,MAAM,iBAAiB,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAwB,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAetD,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,MAAM,EACN,MAAM,EAAE,eAAe,EACvB,WAAW,GACQ;IACnB,OAAO,CACL,KAAC,cAAc,IAAC,SAAS,EAAE,eAAe,YACxC,KAAC,kBAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,YACzD,QAAQ,GACU,GACN,CAClB,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,QAAQ,EACR,MAAM,EACN,WAAW,GAKZ;IACC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;IAC1B,OAAO,CACL,KAAC,qBAAqB,IAAC,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,YACtF,KAAC,eAAe,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,YAC5E,KAAC,aAAa,cACZ,KAAC,kBAAkB,cACjB,KAAC,eAAe,cACd,KAAC,sBAAsB,cAAE,QAAQ,GAA0B,GAC3C,GACC,GACP,GACA,GACI,CACzB,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,EAAE,QAAQ,EAA2B;IAC/D,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAA;IAElC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9B,KAAK,EAAE,eAAe;KACvB,CAAC,CAAC,CAAA;IAEH,eAAe,EAAE,CAAA;IACjB,sBAAsB,EAAE,CAAA;IAExB,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface UseSearchOptions {
|
|
2
|
+
match: (query: string) => number[];
|
|
3
|
+
onJump: (index: number) => void;
|
|
4
|
+
}
|
|
5
|
+
export interface SearchState {
|
|
6
|
+
searchQuery: string;
|
|
7
|
+
searchActive: boolean;
|
|
8
|
+
setSearchQuery: (query: string) => void;
|
|
9
|
+
matchingLines: number[];
|
|
10
|
+
currentMatchIndex: number;
|
|
11
|
+
submitSearch: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function useSearch({ match, onJump }: UseSearchOptions): SearchState;
|
|
14
|
+
//# sourceMappingURL=search-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-hook.d.ts","sourceRoot":"","sources":["../src/search-hook.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAA;IAClC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB;AAMD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,gBAAgB,GAAG,WAAW,CA6H1E"}
|