@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.
Files changed (49) 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 +52 -1
  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/package.json +20 -20
  32. package/src/command-palette-provider.tsx +39 -0
  33. package/src/commands.ts +55 -1
  34. package/src/copy-hook.ts +45 -0
  35. package/src/copy-on-select.ts +1 -4
  36. package/src/index.ts +15 -5
  37. package/src/navigation.ts +297 -0
  38. package/src/provider.tsx +6 -1
  39. package/src/search-hook.ts +147 -0
  40. package/dist/command-palette.d.ts +0 -9
  41. package/dist/command-palette.d.ts.map +0 -1
  42. package/dist/command-palette.js +0 -51
  43. package/dist/command-palette.js.map +0 -1
  44. package/dist/modal.d.ts +0 -33
  45. package/dist/modal.d.ts.map +0 -1
  46. package/dist/modal.js +0 -395
  47. package/dist/modal.js.map +0 -1
  48. package/src/command-palette.ts +0 -73
  49. package/src/modal.ts +0 -454
@@ -0,0 +1,5 @@
1
+ import { type ReactNode } from "react";
2
+ export declare function CommandPaletteProvider({ children }: {
3
+ children: ReactNode;
4
+ }): ReactNode;
5
+ //# sourceMappingURL=command-palette-provider.d.ts.map
@@ -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"}
@@ -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;
@@ -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",
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
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,SAgC9B"}
1
+ {"version":3,"file":"copy-on-select.d.ts","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,SA6B9B"}
@@ -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,GACb,YAAY,KAAK,SAAS;YACxB,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO;YACxB,CAAC,CAAC,YAAY,CAAA;QAElB,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"}
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 { useModalNavigationCommands } from "./modal.js";
3
- export type { ModalNavigationState, ModalNavigationOptions, Position } from "./modal.js";
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 { useCommandPalette } from "./command-palette.js";
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";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AACvD,YAAY,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACxF,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,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,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"}
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 { useModalNavigationCommands } from "./modal.js";
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 { useCommandPalette } from "./command-palette.js";
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,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAEvD,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,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
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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"}
@@ -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;AAI7E,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"}
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
@@ -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;AAerD,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,cAAE,QAAQ,GAAmB,GAC1B,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;IAEjB,OAAO,4BAAG,QAAQ,GAAI,CAAA;AACxB,CAAC"}
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"}