@tooee/shell 0.1.5 → 0.1.7

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.
@@ -15,4 +15,9 @@ export declare function useCopyCommand(opts: {
15
15
  getText: () => string | undefined;
16
16
  when?: CommandWhen;
17
17
  }): void;
18
+ export declare function useToggleLineNumbersCommand(opts: {
19
+ showLineNumbers: boolean;
20
+ onToggle: () => void;
21
+ when?: CommandWhen;
22
+ }): void;
18
23
  //# sourceMappingURL=commands.d.ts.map
@@ -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;AAC9D,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,CAcA;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,QAa7F"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAGA,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"}
package/dist/commands.js CHANGED
@@ -1,9 +1,20 @@
1
+ import { useEffect, useRef } from "react";
1
2
  import { useRenderer } from "@opentui/react";
2
3
  import { copyToClipboard } from "@tooee/clipboard";
3
4
  import { useCommand } from "@tooee/commands";
5
+ import { useToast } from "@tooee/toasts";
4
6
  import { useThemePicker } from "./theme-picker.js";
5
7
  export function useThemeCommands(opts) {
6
8
  const picker = useThemePicker();
9
+ const { toast } = useToast();
10
+ // Toast when theme changes (after picker closes)
11
+ const prevTheme = useRef(picker.currentTheme);
12
+ useEffect(() => {
13
+ if (prevTheme.current !== picker.currentTheme && !picker.isOpen) {
14
+ toast({ message: `Theme: ${picker.currentTheme}`, level: "info", id: "theme-changed" });
15
+ }
16
+ prevTheme.current = picker.currentTheme;
17
+ }, [picker.currentTheme, picker.isOpen, toast]);
7
18
  useCommand({
8
19
  id: "cycle-theme",
9
20
  title: "Choose theme",
@@ -38,12 +49,33 @@ export function useCopyCommand(opts) {
38
49
  title: "Copy to clipboard",
39
50
  hotkey: "y",
40
51
  when: opts.when,
41
- handler: () => {
52
+ handler: (ctx) => {
42
53
  const text = opts.getText();
43
54
  if (text) {
44
55
  void copyToClipboard(text);
56
+ ctx.toast.toast({ message: "Copied to clipboard", level: "success" });
57
+ }
58
+ else {
59
+ ctx.toast.toast({ message: "Nothing to copy", level: "warning" });
45
60
  }
46
61
  },
47
62
  });
48
63
  }
64
+ export function useToggleLineNumbersCommand(opts) {
65
+ useCommand({
66
+ id: "toggle-line-numbers",
67
+ title: "Toggle line numbers",
68
+ hotkey: "shift+l",
69
+ when: opts.when,
70
+ handler: (ctx) => {
71
+ opts.onToggle();
72
+ const next = !opts.showLineNumbers;
73
+ ctx.toast.toast({
74
+ message: `Line numbers: ${next ? "on" : "off"}`,
75
+ level: "info",
76
+ id: "line-numbers-toggled",
77
+ });
78
+ },
79
+ });
80
+ }
49
81
  //# sourceMappingURL=commands.js.map
@@ -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;AAClD,OAAO,EAAE,UAAU,EAAoB,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAyB,MAAM,mBAAmB,CAAA;AAEzE,MAAM,UAAU,gBAAgB,CAAC,IAA6B;IAI5D,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAE/B,UAAU,CAAC;QACT,EAAE,EAAE,aAAa;QACjB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,CAAC,IAAI,EAAE,CAAA;QACf,CAAC;KACF,CAAC,CAAA;IAEF,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAI9B;IACC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAE9B,UAAU,CAAC;QACT,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG;QAC3B,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,OAAO,EAAE,GAAG,EAAE;YACZ,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,EAAE,CAAA;YACf,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA+D;IAC5F,UAAU,CAAC;QACT,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,mBAAmB;QAC1B,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;YAC3B,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,eAAe,CAAC,IAAI,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function useCopyOnSelect(): void;
2
+ //# sourceMappingURL=copy-on-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-on-select.d.ts","sourceRoot":"","sources":["../src/copy-on-select.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,SAgC9B"}
@@ -0,0 +1,35 @@
1
+ import { useEffect } from "react";
2
+ import { useRenderer } from "@opentui/react";
3
+ import { copyToClipboard, copyToPrimary } from "@tooee/clipboard";
4
+ import { useConfig } from "@tooee/config";
5
+ import { platform } from "os";
6
+ export function useCopyOnSelect() {
7
+ const renderer = useRenderer();
8
+ const config = useConfig();
9
+ useEffect(() => {
10
+ const copyOnSelect = config.view?.copyOnSelect;
11
+ // Default: on for Linux, off elsewhere
12
+ const effective = copyOnSelect === undefined
13
+ ? platform() === "linux"
14
+ : copyOnSelect;
15
+ if (!effective)
16
+ return;
17
+ const handler = (selection) => {
18
+ const text = selection.getSelectedText();
19
+ if (!text)
20
+ return;
21
+ if (effective === "clipboard") {
22
+ void copyToClipboard(text);
23
+ }
24
+ else {
25
+ // true or "primary" → use primary selection
26
+ void copyToPrimary(text);
27
+ }
28
+ };
29
+ renderer.on("selection", handler);
30
+ return () => {
31
+ renderer.off("selection", handler);
32
+ };
33
+ }, [renderer, config.view?.copyOnSelect]);
34
+ }
35
+ //# sourceMappingURL=copy-on-select.js.map
@@ -0,0 +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"}
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
- export { useThemeCommands, useQuitCommand, useCopyCommand } from "./commands.js";
1
+ export { useThemeCommands, useQuitCommand, useCopyCommand, useToggleLineNumbersCommand } from "./commands.js";
2
2
  export { useModalNavigationCommands } from "./modal.js";
3
3
  export type { ModalNavigationState, ModalNavigationOptions, Position } from "./modal.js";
4
4
  export { findMatchingLines } from "./search.js";
5
5
  export { TooeeProvider } from "./provider.js";
6
- export { launchCli } from "./launch.js";
6
+ export { launchCli, guardTerminalHealth } from "./launch.js";
7
7
  export { useCommandPalette } from "./command-palette.js";
8
8
  export type { CommandPaletteState } from "./command-palette.js";
9
9
  export { useThemePicker } from "./theme-picker.js";
10
10
  export type { ThemePickerState, ThemePickerEntry } from "./theme-picker.js";
11
11
  export { OverlayProvider } from "./overlay.js";
12
+ export { useCopyOnSelect } from "./copy-on-select.js";
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -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,MAAM,eAAe,CAAA;AAChF,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,MAAM,aAAa,CAAA;AACvC,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"}
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"}
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
- export { useThemeCommands, useQuitCommand, useCopyCommand } from "./commands.js";
1
+ export { useThemeCommands, useQuitCommand, useCopyCommand, useToggleLineNumbersCommand } from "./commands.js";
2
2
  export { useModalNavigationCommands } from "./modal.js";
3
3
  export { findMatchingLines } from "./search.js";
4
4
  export { TooeeProvider } from "./provider.js";
5
- export { launchCli } from "./launch.js";
5
+ export { launchCli, guardTerminalHealth } from "./launch.js";
6
6
  export { useCommandPalette } from "./command-palette.js";
7
7
  export { useThemePicker } from "./theme-picker.js";
8
8
  export { OverlayProvider } from "./overlay.js";
9
+ export { useCopyOnSelect } from "./copy-on-select.js";
9
10
  //# sourceMappingURL=index.js.map
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,MAAM,eAAe,CAAA;AAChF,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,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
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"}
package/dist/launch.d.ts CHANGED
@@ -1,4 +1,14 @@
1
1
  import type { ReactNode } from "react";
2
+ import { type CliRenderer } from "@opentui/core";
3
+ /**
4
+ * Exit the process when the terminal dies.
5
+ *
6
+ * When a terminal closes while a TUI is running, the PTY slave FDs go
7
+ * stale and OpenTUI's render loop busy-spins at 100% CPU. Listening for
8
+ * stdin end/close catches this immediately — Bun fires these events even
9
+ * in raw mode.
10
+ */
11
+ export declare function guardTerminalHealth(renderer: CliRenderer): void;
2
12
  export declare function launchCli(node: ReactNode, opts?: {
3
13
  useAlternateScreen?: boolean;
4
14
  exitOnCtrlC?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,wBAAsB,SAAS,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAA;AAInE;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAiB/D;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,SAAS,EACf,IAAI,CAAC,EAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CASf"}
package/dist/launch.js CHANGED
@@ -2,11 +2,38 @@ import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
2
  import { createCliRenderer } from "@opentui/core";
3
3
  import { createRoot } from "@opentui/react";
4
4
  import { TooeeProvider } from "./provider.js";
5
+ /**
6
+ * Exit the process when the terminal dies.
7
+ *
8
+ * When a terminal closes while a TUI is running, the PTY slave FDs go
9
+ * stale and OpenTUI's render loop busy-spins at 100% CPU. Listening for
10
+ * stdin end/close catches this immediately — Bun fires these events even
11
+ * in raw mode.
12
+ */
13
+ export function guardTerminalHealth(renderer) {
14
+ let exiting = false;
15
+ const exit = () => {
16
+ if (exiting)
17
+ return;
18
+ exiting = true;
19
+ try {
20
+ renderer.destroy();
21
+ }
22
+ catch {
23
+ // PTY is dead — destroy may throw
24
+ }
25
+ process.exit(0);
26
+ };
27
+ const stdin = renderer.stdin ?? process.stdin;
28
+ stdin.on("end", exit);
29
+ stdin.on("close", exit);
30
+ }
5
31
  export async function launchCli(node, opts) {
6
32
  const renderer = await createCliRenderer({
7
33
  useAlternateScreen: opts?.useAlternateScreen ?? true,
8
34
  exitOnCtrlC: opts?.exitOnCtrlC ?? true,
9
35
  });
36
+ guardTerminalHealth(renderer);
10
37
  createRoot(renderer).render(_jsx(TooeeProvider, { children: node }));
11
38
  }
12
39
  //# sourceMappingURL=launch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAe,EACf,IAA8D;IAE9D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,IAAI;QACpD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;KACvC,CAAC,CAAA;IACF,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAC,aAAa,cAAE,IAAI,GAAiB,CAAC,CAAA;AACpE,CAAC"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAE7C;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAqB;IACvD,IAAI,OAAO,GAAG,KAAK,CAAA;IAEnB,MAAM,IAAI,GAAG,GAAG,EAAE;QAChB,IAAI,OAAO;YAAE,OAAM;QACnB,OAAO,GAAG,IAAI,CAAA;QACd,IAAI,CAAC;YACH,QAAQ,CAAC,OAAO,EAAE,CAAA;QACpB,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAA;IAC7C,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAe,EACf,IAA8D;IAE9D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC;QACvC,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,IAAI,IAAI;QACpD,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;KACvC,CAAC,CAAA;IAEF,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAE7B,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAC,aAAa,cAAE,IAAI,GAAiB,CAAC,CAAA;AACpE,CAAC"}
package/dist/modal.d.ts CHANGED
@@ -6,7 +6,6 @@ export interface Position {
6
6
  export interface ModalNavigationState {
7
7
  mode: Mode;
8
8
  setMode: (mode: Mode) => void;
9
- scrollOffset: number;
10
9
  cursor: Position | null;
11
10
  selection: {
12
11
  start: Position;
@@ -1 +1 @@
1
- {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../src/modal.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAK5E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,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;IAC3B,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;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,mIAAmI;IACnI,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,sBAAsB,GAAG,oBAAoB,CAkd7F"}
1
+ {"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../src/modal.ts"],"names":[],"mappings":"AACA,OAAO,EAAmC,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAK5E,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC7B,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;IAC3B,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;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,mIAAmI;IACnI,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,sBAAsB,GAAG,oBAAoB,CA4Z7F"}
package/dist/modal.js CHANGED
@@ -8,7 +8,6 @@ export function useModalNavigationCommands(opts) {
8
8
  const { totalLines, viewportHeight = terminalHeight - 2, getText, blockCount, blockLineMap, searchLineOffset = 0, multiSelect = false, } = opts;
9
9
  const mode = useMode();
10
10
  const setMode = useSetMode();
11
- const [scrollOffset, setScrollOffset] = useState(0);
12
11
  const [cursor, setCursor] = useState(null);
13
12
  const [selectionAnchor, setSelectionAnchor] = useState(null);
14
13
  const [toggledIndices, setToggledIndices] = useState(new Set());
@@ -37,12 +36,6 @@ export function useModalNavigationCommands(opts) {
37
36
  if (matches.length > 0) {
38
37
  // Auto-jump to first match
39
38
  const line = matches[0];
40
- setScrollOffset((offset) => {
41
- if (line < offset || line >= offset + viewportHeight) {
42
- return Math.max(0, Math.min(line, Math.max(0, totalLines - viewportHeight)));
43
- }
44
- return offset;
45
- });
46
39
  if (mode === "cursor" || mode === "select") {
47
40
  setCursor((c) => (c ? { line, col: 0 } : c));
48
41
  }
@@ -50,10 +43,6 @@ export function useModalNavigationCommands(opts) {
50
43
  }, [searchQuery, searchActive]); // eslint-disable-line react-hooks/exhaustive-deps
51
44
  const isBlockMode = blockCount != null;
52
45
  const cursorMax = isBlockMode ? Math.max(0, blockCount - 1) : Math.max(0, totalLines - 1);
53
- const maxScroll = Math.max(0, totalLines - viewportHeight);
54
- const maxLine = Math.max(0, totalLines - 1);
55
- const clampScroll = useCallback((value) => Math.max(0, Math.min(value, maxScroll)), [maxScroll]);
56
- const _clampLine = useCallback((value) => Math.max(0, Math.min(value, maxLine)), [maxLine]);
57
46
  const clampCursor = useCallback((value) => Math.max(0, Math.min(value, cursorMax)), [cursorMax]);
58
47
  useEffect(() => {
59
48
  setToggledIndices((prev) => {
@@ -63,44 +52,34 @@ export function useModalNavigationCommands(opts) {
63
52
  return new Set(filtered);
64
53
  });
65
54
  }, [cursorMax]);
66
- // When entering cursor mode, initialize cursor
55
+ // When entering cursor mode, initialize cursor if not already set
67
56
  const prevMode = useRef(null);
68
57
  useEffect(() => {
69
58
  if (mode === "cursor" && prevMode.current !== "cursor" && prevMode.current !== "select") {
70
- // If there's an active search match, start cursor there; otherwise start at scroll position
71
- const matches = matchingLinesRef.current;
72
- if (matches.length > 0) {
73
- const matchLine = matches[currentMatchIndex] ?? matches[0];
74
- // In block mode, convert search line to block index using offset
75
- if (isBlockMode) {
76
- const blockIndex = Math.max(0, matchLine - searchLineOffset);
77
- setCursor({ line: Math.min(blockIndex, cursorMax), col: 0 });
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 };
78
73
  }
79
- else {
80
- setCursor({ line: matchLine, col: 0 });
81
- }
82
- }
83
- else {
84
- // No search match - start at top (block 0) or scroll position
85
- setCursor({ line: isBlockMode ? 0 : scrollOffset, col: 0 });
86
- }
74
+ // No search match - start at top
75
+ return { line: 0, col: 0 };
76
+ });
87
77
  }
88
78
  if (mode === "select" && prevMode.current === "cursor" && cursor) {
89
79
  setSelectionAnchor({ ...cursor });
90
80
  }
91
81
  prevMode.current = mode;
92
82
  }, [mode]); // eslint-disable-line react-hooks/exhaustive-deps
93
- // Scroll to keep cursor visible
94
- const scrollToCursor = useCallback((cursorIndex) => {
95
- const line = isBlockMode && blockLineMap ? (blockLineMap[cursorIndex] ?? 0) : cursorIndex;
96
- setScrollOffset((offset) => {
97
- if (line < offset)
98
- return line;
99
- if (line >= offset + viewportHeight)
100
- return clampScroll(line - viewportHeight + 1);
101
- return offset;
102
- });
103
- }, [viewportHeight, clampScroll, isBlockMode, blockLineMap]);
104
83
  // === CURSOR MODE ===
105
84
  useCommand({
106
85
  id: "cursor-down",
@@ -111,9 +90,7 @@ export function useModalNavigationCommands(opts) {
111
90
  setCursor((c) => {
112
91
  if (!c)
113
92
  return c;
114
- const next = clampCursor(c.line + 1);
115
- scrollToCursor(next);
116
- return { line: next, col: 0 };
93
+ return { line: clampCursor(c.line + 1), col: 0 };
117
94
  });
118
95
  },
119
96
  });
@@ -162,9 +139,7 @@ export function useModalNavigationCommands(opts) {
162
139
  setCursor((c) => {
163
140
  if (!c)
164
141
  return c;
165
- const next = clampCursor(c.line - 1);
166
- scrollToCursor(next);
167
- return { line: next, col: 0 };
142
+ return { line: clampCursor(c.line - 1), col: 0 };
168
143
  });
169
144
  },
170
145
  });
@@ -177,9 +152,7 @@ export function useModalNavigationCommands(opts) {
177
152
  setCursor((c) => {
178
153
  if (!c)
179
154
  return c;
180
- const next = clampCursor(c.line - 1);
181
- scrollToCursor(next);
182
- return { line: next, col: 0 };
155
+ return { line: clampCursor(c.line - 1), col: 0 };
183
156
  });
184
157
  },
185
158
  });
@@ -193,9 +166,7 @@ export function useModalNavigationCommands(opts) {
193
166
  if (!c)
194
167
  return c;
195
168
  const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2);
196
- const next = clampCursor(c.line + step);
197
- scrollToCursor(next);
198
- return { line: next, col: 0 };
169
+ return { line: clampCursor(c.line + step), col: 0 };
199
170
  });
200
171
  },
201
172
  });
@@ -209,9 +180,7 @@ export function useModalNavigationCommands(opts) {
209
180
  if (!c)
210
181
  return c;
211
182
  const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2);
212
- const next = clampCursor(c.line - step);
213
- scrollToCursor(next);
214
- return { line: next, col: 0 };
183
+ return { line: clampCursor(c.line - step), col: 0 };
215
184
  });
216
185
  },
217
186
  });
@@ -222,7 +191,6 @@ export function useModalNavigationCommands(opts) {
222
191
  modes: ["cursor"],
223
192
  handler: () => {
224
193
  setCursor({ line: 0, col: 0 });
225
- setScrollOffset(0);
226
194
  },
227
195
  });
228
196
  useCommand({
@@ -232,13 +200,6 @@ export function useModalNavigationCommands(opts) {
232
200
  modes: ["cursor"],
233
201
  handler: () => {
234
202
  setCursor({ line: cursorMax, col: 0 });
235
- if (isBlockMode && blockLineMap) {
236
- const line = blockLineMap[cursorMax] ?? 0;
237
- setScrollOffset(clampScroll(line));
238
- }
239
- else {
240
- setScrollOffset(maxScroll);
241
- }
242
203
  },
243
204
  });
244
205
  useCommand({
@@ -267,7 +228,6 @@ export function useModalNavigationCommands(opts) {
267
228
  const next = (idx + 1) % matches.length;
268
229
  const line = matches[next];
269
230
  setCursor({ line, col: 0 });
270
- scrollToCursor(line);
271
231
  return next;
272
232
  });
273
233
  },
@@ -286,7 +246,6 @@ export function useModalNavigationCommands(opts) {
286
246
  const next = (idx - 1 + matches.length) % matches.length;
287
247
  const line = matches[next];
288
248
  setCursor({ line, col: 0 });
289
- scrollToCursor(line);
290
249
  return next;
291
250
  });
292
251
  },
@@ -301,9 +260,7 @@ export function useModalNavigationCommands(opts) {
301
260
  setCursor((c) => {
302
261
  if (!c)
303
262
  return c;
304
- const next = clampCursor(c.line + 1);
305
- scrollToCursor(next);
306
- return { line: next, col: 0 };
263
+ return { line: clampCursor(c.line + 1), col: 0 };
307
264
  });
308
265
  },
309
266
  });
@@ -316,9 +273,7 @@ export function useModalNavigationCommands(opts) {
316
273
  setCursor((c) => {
317
274
  if (!c)
318
275
  return c;
319
- const next = clampCursor(c.line - 1);
320
- scrollToCursor(next);
321
- return { line: next, col: 0 };
276
+ return { line: clampCursor(c.line - 1), col: 0 };
322
277
  });
323
278
  },
324
279
  });
@@ -425,7 +380,6 @@ export function useModalNavigationCommands(opts) {
425
380
  return {
426
381
  mode,
427
382
  setMode,
428
- scrollOffset,
429
383
  cursor,
430
384
  selection,
431
385
  toggledIndices,
package/dist/modal.js.map CHANGED
@@ -1 +1 @@
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;AAiC/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,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IACnD,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,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,IAAI,IAAI,GAAG,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;oBACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;gBAC9E,CAAC;gBACD,OAAO,MAAM,CAAA;YACf,CAAC,CAAC,CAAA;YACF,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;IACzF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,CAAA;IAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAA;IAE3C,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,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EACxD,CAAC,OAAO,CAAC,CACV,CAAA;IAED,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,+CAA+C;IAC/C,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,4FAA4F;YAC5F,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAA;YACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;gBAC1D,iEAAiE;gBACjE,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,gBAAgB,CAAC,CAAA;oBAC5D,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBAC9D,CAAC;qBAAM,CAAC;oBACN,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;gBACxC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,8DAA8D;gBAC9D,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7D,CAAC;QACH,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,gCAAgC;IAChC,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,WAAmB,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,WAAW,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;QACzF,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE;YACzB,IAAI,IAAI,GAAG,MAAM;gBAAE,OAAO,IAAI,CAAA;YAC9B,IAAI,IAAI,IAAI,MAAM,GAAG,cAAc;gBAAE,OAAO,WAAW,CAAC,IAAI,GAAG,cAAc,GAAG,CAAC,CAAC,CAAA;YAClF,OAAO,MAAM,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CACzD,CAAA;IAED,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;gBACpC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;gBACpC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;gBACpC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;gBACvC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;gBACvC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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;YAC9B,eAAe,CAAC,CAAC,CAAC,CAAA;QACpB,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;YACtC,IAAI,WAAW,IAAI,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;gBACzC,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAA;YACpC,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC,SAAS,CAAC,CAAA;YAC5B,CAAC;QACH,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,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,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,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;gBACpC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAA;gBACpC,cAAc,CAAC,IAAI,CAAC,CAAA;gBACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAA;YAC/B,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,YAAY;QACZ,MAAM;QACN,SAAS;QACT,cAAc;QACd,WAAW;QACX,YAAY;QACZ,cAAc;QACd,aAAa;QACb,iBAAiB;QACjB,YAAY;KACb,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,12 @@
1
1
  import type { ReactNode } from "react";
2
2
  import { type TooeeConfig } from "@tooee/config";
3
3
  import { type Mode } from "@tooee/commands";
4
+ import { type ToastController } from "@tooee/toasts";
5
+ declare module "@tooee/commands" {
6
+ interface CommandContext {
7
+ toast: ToastController;
8
+ }
9
+ }
4
10
  export interface TooeeProviderProps {
5
11
  children: ReactNode;
6
12
  leader?: string;
@@ -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,EAAmB,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAG5D,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;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"}
package/dist/provider.js CHANGED
@@ -1,13 +1,23 @@
1
- import { jsx as _jsx } from "@opentui/react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
2
2
  import { ConfigProvider, useConfig } from "@tooee/config";
3
3
  import { ThemeSwitcherProvider } from "@tooee/themes";
4
- import { CommandProvider } from "@tooee/commands";
4
+ import { CommandProvider, useProvideCommandContext } from "@tooee/commands";
5
+ import { ToastProvider, useToast } from "@tooee/toasts";
5
6
  import { OverlayProvider } from "./overlay.js";
7
+ import { useCopyOnSelect } from "./copy-on-select.js";
6
8
  export function TooeeProvider({ children, leader, config: configOverrides, initialMode, }) {
7
9
  return (_jsx(ConfigProvider, { overrides: configOverrides, children: _jsx(TooeeProviderInner, { leader: leader, initialMode: initialMode, children: children }) }));
8
10
  }
9
11
  function TooeeProviderInner({ children, leader, initialMode, }) {
10
12
  const config = useConfig();
11
- return (_jsx(ThemeSwitcherProvider, { initialTheme: config.theme?.name, initialMode: config.theme?.mode, children: _jsx(CommandProvider, { leader: leader, keymap: config.keys, initialMode: initialMode, children: _jsx(OverlayProvider, { children: children }) }) }));
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 }) }) }) }) }));
14
+ }
15
+ function ToastContextBridge({ children }) {
16
+ const toastController = useToast();
17
+ useProvideCommandContext(() => ({
18
+ toast: toastController,
19
+ }));
20
+ useCopyOnSelect();
21
+ return _jsx(_Fragment, { children: children });
12
22
  }
13
23
  //# 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,EAAa,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAS9C,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,eAAe,cAAE,QAAQ,GAAmB,GAC7B,GACI,CACzB,CAAA;AACH,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,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tooee/shell",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Composition layer wiring Tooee apps together",
5
5
  "license": "MIT",
6
6
  "author": "Gareth Andrew",
@@ -34,13 +34,14 @@
34
34
  "typecheck": "tsc --noEmit"
35
35
  },
36
36
  "dependencies": {
37
- "@tooee/commands": "0.1.5",
38
- "@tooee/config": "0.1.5",
39
- "@tooee/clipboard": "0.1.5",
40
- "@tooee/layout": "0.1.5",
41
- "@tooee/overlays": "0.1.5",
42
- "@tooee/renderers": "0.1.5",
43
- "@tooee/themes": "0.1.5"
37
+ "@tooee/commands": "0.1.7",
38
+ "@tooee/config": "0.1.7",
39
+ "@tooee/clipboard": "0.1.7",
40
+ "@tooee/toasts": "0.1.7",
41
+ "@tooee/layout": "0.1.7",
42
+ "@tooee/overlays": "0.1.7",
43
+ "@tooee/renderers": "0.1.7",
44
+ "@tooee/themes": "0.1.7"
44
45
  },
45
46
  "devDependencies": {
46
47
  "@opentui/core": "^0.1.67",
package/src/commands.ts CHANGED
@@ -1,6 +1,8 @@
1
+ import { useEffect, useRef } from "react"
1
2
  import { useRenderer } from "@opentui/react"
2
3
  import { copyToClipboard } from "@tooee/clipboard"
3
4
  import { useCommand, type CommandWhen } from "@tooee/commands"
5
+ import { useToast } from "@tooee/toasts"
4
6
  import { useThemePicker, type ThemePickerState } from "./theme-picker.js"
5
7
 
6
8
  export function useThemeCommands(opts?: { when?: CommandWhen }): {
@@ -8,6 +10,16 @@ export function useThemeCommands(opts?: { when?: CommandWhen }): {
8
10
  picker: ThemePickerState
9
11
  } {
10
12
  const picker = useThemePicker()
13
+ const { toast } = useToast()
14
+
15
+ // Toast when theme changes (after picker closes)
16
+ const prevTheme = useRef(picker.currentTheme)
17
+ useEffect(() => {
18
+ if (prevTheme.current !== picker.currentTheme && !picker.isOpen) {
19
+ toast({ message: `Theme: ${picker.currentTheme}`, level: "info", id: "theme-changed" })
20
+ }
21
+ prevTheme.current = picker.currentTheme
22
+ }, [picker.currentTheme, picker.isOpen, toast])
11
23
 
12
24
  useCommand({
13
25
  id: "cycle-theme",
@@ -50,11 +62,36 @@ export function useCopyCommand(opts: { getText: () => string | undefined; when?:
50
62
  title: "Copy to clipboard",
51
63
  hotkey: "y",
52
64
  when: opts.when,
53
- handler: () => {
65
+ handler: (ctx) => {
54
66
  const text = opts.getText()
55
67
  if (text) {
56
68
  void copyToClipboard(text)
69
+ ctx.toast.toast({ message: "Copied to clipboard", level: "success" })
70
+ } else {
71
+ ctx.toast.toast({ message: "Nothing to copy", level: "warning" })
57
72
  }
58
73
  },
59
74
  })
60
75
  }
76
+
77
+ export function useToggleLineNumbersCommand(opts: {
78
+ showLineNumbers: boolean
79
+ onToggle: () => void
80
+ when?: CommandWhen
81
+ }) {
82
+ useCommand({
83
+ id: "toggle-line-numbers",
84
+ title: "Toggle line numbers",
85
+ hotkey: "shift+l",
86
+ when: opts.when,
87
+ handler: (ctx) => {
88
+ opts.onToggle()
89
+ const next = !opts.showLineNumbers
90
+ ctx.toast.toast({
91
+ message: `Line numbers: ${next ? "on" : "off"}`,
92
+ level: "info",
93
+ id: "line-numbers-toggled",
94
+ })
95
+ },
96
+ })
97
+ }
@@ -0,0 +1,40 @@
1
+ import { useEffect } from "react"
2
+ import { useRenderer } from "@opentui/react"
3
+ import { copyToClipboard, copyToPrimary } from "@tooee/clipboard"
4
+ import { useConfig } from "@tooee/config"
5
+ import { platform } from "os"
6
+ import type { Selection } from "@opentui/core"
7
+
8
+ export function useCopyOnSelect() {
9
+ const renderer = useRenderer()
10
+ const config = useConfig()
11
+
12
+ useEffect(() => {
13
+ const copyOnSelect = config.view?.copyOnSelect
14
+
15
+ // Default: on for Linux, off elsewhere
16
+ const effective =
17
+ copyOnSelect === undefined
18
+ ? platform() === "linux"
19
+ : copyOnSelect
20
+
21
+ if (!effective) return
22
+
23
+ const handler = (selection: Selection) => {
24
+ const text = selection.getSelectedText()
25
+ if (!text) return
26
+
27
+ if (effective === "clipboard") {
28
+ void copyToClipboard(text)
29
+ } else {
30
+ // true or "primary" → use primary selection
31
+ void copyToPrimary(text)
32
+ }
33
+ }
34
+
35
+ renderer.on("selection", handler)
36
+ return () => {
37
+ renderer.off("selection", handler)
38
+ }
39
+ }, [renderer, config.view?.copyOnSelect])
40
+ }
package/src/index.ts CHANGED
@@ -1,11 +1,12 @@
1
- export { useThemeCommands, useQuitCommand, useCopyCommand } from "./commands.js"
1
+ export { useThemeCommands, useQuitCommand, useCopyCommand, useToggleLineNumbersCommand } from "./commands.js"
2
2
  export { useModalNavigationCommands } from "./modal.js"
3
3
  export type { ModalNavigationState, ModalNavigationOptions, Position } from "./modal.js"
4
4
  export { findMatchingLines } from "./search.js"
5
5
  export { TooeeProvider } from "./provider.js"
6
- export { launchCli } from "./launch.js"
6
+ export { launchCli, guardTerminalHealth } from "./launch.js"
7
7
  export { useCommandPalette } from "./command-palette.js"
8
8
  export type { CommandPaletteState } from "./command-palette.js"
9
9
  export { useThemePicker } from "./theme-picker.js"
10
10
  export type { ThemePickerState, ThemePickerEntry } from "./theme-picker.js"
11
11
  export { OverlayProvider } from "./overlay.js"
12
+ export { useCopyOnSelect } from "./copy-on-select.js"
package/src/launch.tsx CHANGED
@@ -1,8 +1,35 @@
1
1
  import type { ReactNode } from "react"
2
- import { createCliRenderer } from "@opentui/core"
2
+ import { createCliRenderer, type CliRenderer } from "@opentui/core"
3
3
  import { createRoot } from "@opentui/react"
4
4
  import { TooeeProvider } from "./provider.js"
5
5
 
6
+ /**
7
+ * Exit the process when the terminal dies.
8
+ *
9
+ * When a terminal closes while a TUI is running, the PTY slave FDs go
10
+ * stale and OpenTUI's render loop busy-spins at 100% CPU. Listening for
11
+ * stdin end/close catches this immediately — Bun fires these events even
12
+ * in raw mode.
13
+ */
14
+ export function guardTerminalHealth(renderer: CliRenderer): void {
15
+ let exiting = false
16
+
17
+ const exit = () => {
18
+ if (exiting) return
19
+ exiting = true
20
+ try {
21
+ renderer.destroy()
22
+ } catch {
23
+ // PTY is dead — destroy may throw
24
+ }
25
+ process.exit(0)
26
+ }
27
+
28
+ const stdin = renderer.stdin ?? process.stdin
29
+ stdin.on("end", exit)
30
+ stdin.on("close", exit)
31
+ }
32
+
6
33
  export async function launchCli(
7
34
  node: ReactNode,
8
35
  opts?: { useAlternateScreen?: boolean; exitOnCtrlC?: boolean },
@@ -11,5 +38,8 @@ export async function launchCli(
11
38
  useAlternateScreen: opts?.useAlternateScreen ?? true,
12
39
  exitOnCtrlC: opts?.exitOnCtrlC ?? true,
13
40
  })
41
+
42
+ guardTerminalHealth(renderer)
43
+
14
44
  createRoot(renderer).render(<TooeeProvider>{node}</TooeeProvider>)
15
45
  }
package/src/modal.ts CHANGED
@@ -12,7 +12,6 @@ export interface Position {
12
12
  export interface ModalNavigationState {
13
13
  mode: Mode
14
14
  setMode: (mode: Mode) => void
15
- scrollOffset: number
16
15
  cursor: Position | null
17
16
  selection: { start: Position; end: Position } | null
18
17
  toggledIndices: Set<number>
@@ -49,7 +48,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
49
48
  const mode = useMode()
50
49
  const setMode = useSetMode()
51
50
 
52
- const [scrollOffset, setScrollOffset] = useState(0)
53
51
  const [cursor, setCursor] = useState<Position | null>(null)
54
52
  const [selectionAnchor, setSelectionAnchor] = useState<Position | null>(null)
55
53
  const [toggledIndices, setToggledIndices] = useState<Set<number>>(new Set())
@@ -79,12 +77,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
79
77
  if (matches.length > 0) {
80
78
  // Auto-jump to first match
81
79
  const line = matches[0]
82
- setScrollOffset((offset) => {
83
- if (line < offset || line >= offset + viewportHeight) {
84
- return Math.max(0, Math.min(line, Math.max(0, totalLines - viewportHeight)))
85
- }
86
- return offset
87
- })
88
80
  if (mode === "cursor" || mode === "select") {
89
81
  setCursor((c) => (c ? { line, col: 0 } : c))
90
82
  }
@@ -93,18 +85,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
93
85
 
94
86
  const isBlockMode = blockCount != null
95
87
  const cursorMax = isBlockMode ? Math.max(0, blockCount - 1) : Math.max(0, totalLines - 1)
96
- const maxScroll = Math.max(0, totalLines - viewportHeight)
97
- const maxLine = Math.max(0, totalLines - 1)
98
-
99
- const clampScroll = useCallback(
100
- (value: number) => Math.max(0, Math.min(value, maxScroll)),
101
- [maxScroll],
102
- )
103
-
104
- const _clampLine = useCallback(
105
- (value: number) => Math.max(0, Math.min(value, maxLine)),
106
- [maxLine],
107
- )
108
88
 
109
89
  const clampCursor = useCallback(
110
90
  (value: number) => Math.max(0, Math.min(value, cursorMax)),
@@ -119,25 +99,27 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
119
99
  })
120
100
  }, [cursorMax])
121
101
 
122
- // When entering cursor mode, initialize cursor
102
+ // When entering cursor mode, initialize cursor if not already set
123
103
  const prevMode = useRef<Mode | null>(null)
124
104
  useEffect(() => {
125
105
  if (mode === "cursor" && prevMode.current !== "cursor" && prevMode.current !== "select") {
126
- // If there's an active search match, start cursor there; otherwise start at scroll position
127
- const matches = matchingLinesRef.current
128
- if (matches.length > 0) {
129
- const matchLine = matches[currentMatchIndex] ?? matches[0]
130
- // In block mode, convert search line to block index using offset
131
- if (isBlockMode) {
132
- const blockIndex = Math.max(0, matchLine - searchLineOffset)
133
- setCursor({ line: Math.min(blockIndex, cursorMax), col: 0 })
134
- } else {
135
- setCursor({ line: matchLine, col: 0 })
106
+ setCursor((existing) => {
107
+ // If cursor already exists (e.g. set by a command via palette), preserve it
108
+ if (existing) return existing
109
+ // If there's an active search match, start cursor there; otherwise start at scroll position
110
+ const matches = matchingLinesRef.current
111
+ if (matches.length > 0) {
112
+ const matchLine = matches[currentMatchIndex] ?? matches[0]
113
+ // In block mode, convert search line to block index using offset
114
+ if (isBlockMode) {
115
+ const blockIndex = Math.max(0, matchLine - searchLineOffset)
116
+ return { line: Math.min(blockIndex, cursorMax), col: 0 }
117
+ }
118
+ return { line: matchLine, col: 0 }
136
119
  }
137
- } else {
138
- // No search match - start at top (block 0) or scroll position
139
- setCursor({ line: isBlockMode ? 0 : scrollOffset, col: 0 })
140
- }
120
+ // No search match - start at top
121
+ return { line: 0, col: 0 }
122
+ })
141
123
  }
142
124
  if (mode === "select" && prevMode.current === "cursor" && cursor) {
143
125
  setSelectionAnchor({ ...cursor })
@@ -145,19 +127,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
145
127
  prevMode.current = mode
146
128
  }, [mode]) // eslint-disable-line react-hooks/exhaustive-deps
147
129
 
148
- // Scroll to keep cursor visible
149
- const scrollToCursor = useCallback(
150
- (cursorIndex: number) => {
151
- const line = isBlockMode && blockLineMap ? (blockLineMap[cursorIndex] ?? 0) : cursorIndex
152
- setScrollOffset((offset) => {
153
- if (line < offset) return line
154
- if (line >= offset + viewportHeight) return clampScroll(line - viewportHeight + 1)
155
- return offset
156
- })
157
- },
158
- [viewportHeight, clampScroll, isBlockMode, blockLineMap],
159
- )
160
-
161
130
  // === CURSOR MODE ===
162
131
 
163
132
  useCommand({
@@ -168,9 +137,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
168
137
  handler: () => {
169
138
  setCursor((c) => {
170
139
  if (!c) return c
171
- const next = clampCursor(c.line + 1)
172
- scrollToCursor(next)
173
- return { line: next, col: 0 }
140
+ return { line: clampCursor(c.line + 1), col: 0 }
174
141
  })
175
142
  },
176
143
  })
@@ -216,9 +183,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
216
183
  })
217
184
  setCursor((c) => {
218
185
  if (!c) return c
219
- const next = clampCursor(c.line - 1)
220
- scrollToCursor(next)
221
- return { line: next, col: 0 }
186
+ return { line: clampCursor(c.line - 1), col: 0 }
222
187
  })
223
188
  },
224
189
  })
@@ -231,9 +196,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
231
196
  handler: () => {
232
197
  setCursor((c) => {
233
198
  if (!c) return c
234
- const next = clampCursor(c.line - 1)
235
- scrollToCursor(next)
236
- return { line: next, col: 0 }
199
+ return { line: clampCursor(c.line - 1), col: 0 }
237
200
  })
238
201
  },
239
202
  })
@@ -247,9 +210,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
247
210
  setCursor((c) => {
248
211
  if (!c) return c
249
212
  const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2)
250
- const next = clampCursor(c.line + step)
251
- scrollToCursor(next)
252
- return { line: next, col: 0 }
213
+ return { line: clampCursor(c.line + step), col: 0 }
253
214
  })
254
215
  },
255
216
  })
@@ -263,9 +224,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
263
224
  setCursor((c) => {
264
225
  if (!c) return c
265
226
  const step = isBlockMode ? Math.floor(cursorMax / 4) || 1 : Math.floor(viewportHeight / 2)
266
- const next = clampCursor(c.line - step)
267
- scrollToCursor(next)
268
- return { line: next, col: 0 }
227
+ return { line: clampCursor(c.line - step), col: 0 }
269
228
  })
270
229
  },
271
230
  })
@@ -277,7 +236,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
277
236
  modes: ["cursor"],
278
237
  handler: () => {
279
238
  setCursor({ line: 0, col: 0 })
280
- setScrollOffset(0)
281
239
  },
282
240
  })
283
241
 
@@ -288,12 +246,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
288
246
  modes: ["cursor"],
289
247
  handler: () => {
290
248
  setCursor({ line: cursorMax, col: 0 })
291
- if (isBlockMode && blockLineMap) {
292
- const line = blockLineMap[cursorMax] ?? 0
293
- setScrollOffset(clampScroll(line))
294
- } else {
295
- setScrollOffset(maxScroll)
296
- }
297
249
  },
298
250
  })
299
251
 
@@ -323,7 +275,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
323
275
  const next = (idx + 1) % matches.length
324
276
  const line = matches[next]
325
277
  setCursor({ line, col: 0 })
326
- scrollToCursor(line)
327
278
  return next
328
279
  })
329
280
  },
@@ -342,7 +293,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
342
293
  const next = (idx - 1 + matches.length) % matches.length
343
294
  const line = matches[next]
344
295
  setCursor({ line, col: 0 })
345
- scrollToCursor(line)
346
296
  return next
347
297
  })
348
298
  },
@@ -358,9 +308,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
358
308
  handler: () => {
359
309
  setCursor((c) => {
360
310
  if (!c) return c
361
- const next = clampCursor(c.line + 1)
362
- scrollToCursor(next)
363
- return { line: next, col: 0 }
311
+ return { line: clampCursor(c.line + 1), col: 0 }
364
312
  })
365
313
  },
366
314
  })
@@ -373,9 +321,7 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
373
321
  handler: () => {
374
322
  setCursor((c) => {
375
323
  if (!c) return c
376
- const next = clampCursor(c.line - 1)
377
- scrollToCursor(next)
378
- return { line: next, col: 0 }
324
+ return { line: clampCursor(c.line - 1), col: 0 }
379
325
  })
380
326
  },
381
327
  })
@@ -490,7 +436,6 @@ export function useModalNavigationCommands(opts: ModalNavigationOptions): ModalN
490
436
  return {
491
437
  mode,
492
438
  setMode,
493
- scrollOffset,
494
439
  cursor,
495
440
  selection,
496
441
  toggledIndices,
package/src/provider.tsx CHANGED
@@ -1,8 +1,16 @@
1
1
  import type { ReactNode } from "react"
2
2
  import { ConfigProvider, useConfig, type TooeeConfig } from "@tooee/config"
3
3
  import { ThemeSwitcherProvider } from "@tooee/themes"
4
- import { CommandProvider, type Mode } from "@tooee/commands"
4
+ import { CommandProvider, useProvideCommandContext, type Mode } from "@tooee/commands"
5
+ import { ToastProvider, useToast, type ToastController } from "@tooee/toasts"
5
6
  import { OverlayProvider } from "./overlay.js"
7
+ import { useCopyOnSelect } from "./copy-on-select.js"
8
+
9
+ declare module "@tooee/commands" {
10
+ interface CommandContext {
11
+ toast: ToastController
12
+ }
13
+ }
6
14
 
7
15
  export interface TooeeProviderProps {
8
16
  children: ReactNode
@@ -39,8 +47,24 @@ function TooeeProviderInner({
39
47
  return (
40
48
  <ThemeSwitcherProvider initialTheme={config.theme?.name} initialMode={config.theme?.mode}>
41
49
  <CommandProvider leader={leader} keymap={config.keys} initialMode={initialMode}>
42
- <OverlayProvider>{children}</OverlayProvider>
50
+ <ToastProvider>
51
+ <ToastContextBridge>
52
+ <OverlayProvider>{children}</OverlayProvider>
53
+ </ToastContextBridge>
54
+ </ToastProvider>
43
55
  </CommandProvider>
44
56
  </ThemeSwitcherProvider>
45
57
  )
46
58
  }
59
+
60
+ function ToastContextBridge({ children }: { children: ReactNode }) {
61
+ const toastController = useToast()
62
+
63
+ useProvideCommandContext(() => ({
64
+ toast: toastController,
65
+ }))
66
+
67
+ useCopyOnSelect()
68
+
69
+ return <>{children}</>
70
+ }