@poping/yome 0.0.3 → 0.0.4

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 (126) hide show
  1. package/README.md +5 -7
  2. package/README.zh-CN.md +5 -7
  3. package/bin/yome-calwatch +0 -0
  4. package/dist/context.js +6 -3
  5. package/dist/context.js.map +1 -1
  6. package/dist/daemon/calendarPermission.d.ts +10 -0
  7. package/dist/daemon/calendarPermission.js +68 -0
  8. package/dist/daemon/calendarPermission.js.map +1 -0
  9. package/dist/daemon/cronCli.d.ts +19 -0
  10. package/dist/daemon/cronCli.js +403 -0
  11. package/dist/daemon/cronCli.js.map +1 -0
  12. package/dist/daemon/envHint.d.ts +5 -0
  13. package/dist/daemon/envHint.js +139 -0
  14. package/dist/daemon/envHint.js.map +1 -0
  15. package/dist/daemon/humanCron.d.ts +1 -0
  16. package/dist/daemon/humanCron.js +72 -0
  17. package/dist/daemon/humanCron.js.map +1 -0
  18. package/dist/daemon/humanOnce.d.ts +1 -0
  19. package/dist/daemon/humanOnce.js +54 -0
  20. package/dist/daemon/humanOnce.js.map +1 -0
  21. package/dist/daemon/index.d.ts +5 -0
  22. package/dist/daemon/index.js +168 -0
  23. package/dist/daemon/index.js.map +1 -0
  24. package/dist/daemon/launchd.d.ts +7 -0
  25. package/dist/daemon/launchd.js +93 -0
  26. package/dist/daemon/launchd.js.map +1 -0
  27. package/dist/daemon/log.d.ts +17 -0
  28. package/dist/daemon/log.js +57 -0
  29. package/dist/daemon/log.js.map +1 -0
  30. package/dist/daemon/paths.d.ts +11 -0
  31. package/dist/daemon/paths.js +27 -0
  32. package/dist/daemon/paths.js.map +1 -0
  33. package/dist/daemon/runTaskEntry.d.ts +1 -0
  34. package/dist/daemon/runTaskEntry.js +67 -0
  35. package/dist/daemon/runTaskEntry.js.map +1 -0
  36. package/dist/daemon/runner.d.ts +21 -0
  37. package/dist/daemon/runner.js +175 -0
  38. package/dist/daemon/runner.js.map +1 -0
  39. package/dist/daemon/scheduler.d.ts +5 -0
  40. package/dist/daemon/scheduler.js +162 -0
  41. package/dist/daemon/scheduler.js.map +1 -0
  42. package/dist/daemon/taskStore.d.ts +62 -0
  43. package/dist/daemon/taskStore.js +88 -0
  44. package/dist/daemon/taskStore.js.map +1 -0
  45. package/dist/daemon/triggers/calendar.d.ts +8 -0
  46. package/dist/daemon/triggers/calendar.js +248 -0
  47. package/dist/daemon/triggers/calendar.js.map +1 -0
  48. package/dist/daemon/triggers/childRunner.d.ts +14 -0
  49. package/dist/daemon/triggers/childRunner.js +111 -0
  50. package/dist/daemon/triggers/childRunner.js.map +1 -0
  51. package/dist/daemon/triggers/cron.d.ts +14 -0
  52. package/dist/daemon/triggers/cron.js +91 -0
  53. package/dist/daemon/triggers/cron.js.map +1 -0
  54. package/dist/daemon/triggers/file.d.ts +7 -0
  55. package/dist/daemon/triggers/file.js +123 -0
  56. package/dist/daemon/triggers/file.js.map +1 -0
  57. package/dist/daemon/triggers/once.d.ts +10 -0
  58. package/dist/daemon/triggers/once.js +80 -0
  59. package/dist/daemon/triggers/once.js.map +1 -0
  60. package/dist/index.js +96 -9
  61. package/dist/index.js.map +1 -1
  62. package/dist/skills/runner/dispatcher.d.ts +74 -3
  63. package/dist/skills/runner/dispatcher.js +258 -48
  64. package/dist/skills/runner/dispatcher.js.map +1 -1
  65. package/dist/skills/runner/dispatcher.test.d.ts +1 -0
  66. package/dist/skills/runner/dispatcher.test.js +141 -0
  67. package/dist/skills/runner/dispatcher.test.js.map +1 -0
  68. package/dist/skills/runner/kernel.js +0 -1
  69. package/dist/skills/runner/kernel.js.map +1 -1
  70. package/dist/skills/runner/nodeBackend.d.ts +32 -0
  71. package/dist/skills/runner/nodeBackend.js +147 -0
  72. package/dist/skills/runner/nodeBackend.js.map +1 -0
  73. package/dist/state/todos.d.ts +12 -0
  74. package/dist/state/todos.js +32 -0
  75. package/dist/state/todos.js.map +1 -0
  76. package/dist/tools/askUser.d.ts +20 -0
  77. package/dist/tools/askUser.js +126 -0
  78. package/dist/tools/askUser.js.map +1 -0
  79. package/dist/tools/bash.js +13 -19
  80. package/dist/tools/bash.js.map +1 -1
  81. package/dist/tools/index.d.ts +2 -0
  82. package/dist/tools/index.js +18 -5
  83. package/dist/tools/index.js.map +1 -1
  84. package/dist/tools/todoWrite.d.ts +2 -0
  85. package/dist/tools/todoWrite.js +141 -0
  86. package/dist/tools/todoWrite.js.map +1 -0
  87. package/dist/tools/yome.d.ts +2 -0
  88. package/dist/tools/yome.js +87 -0
  89. package/dist/tools/yome.js.map +1 -0
  90. package/dist/ui/App.js +52 -3
  91. package/dist/ui/App.js.map +1 -1
  92. package/dist/ui/AskUserPrompt.d.ts +7 -0
  93. package/dist/ui/AskUserPrompt.js +78 -0
  94. package/dist/ui/AskUserPrompt.js.map +1 -0
  95. package/dist/ui/InputBar.js +20 -34
  96. package/dist/ui/InputBar.js.map +1 -1
  97. package/dist/ui/MessageList.d.ts +8 -0
  98. package/dist/ui/MessageList.js +2 -2
  99. package/dist/ui/MessageList.js.map +1 -1
  100. package/dist/ui/MultilineTextInput.d.ts +31 -0
  101. package/dist/ui/MultilineTextInput.js +393 -0
  102. package/dist/ui/MultilineTextInput.js.map +1 -0
  103. package/dist/ui/MultilineTextInput.test.d.ts +1 -0
  104. package/dist/ui/MultilineTextInput.test.js +30 -0
  105. package/dist/ui/MultilineTextInput.test.js.map +1 -0
  106. package/dist/ui/TodoPanel.d.ts +7 -0
  107. package/dist/ui/TodoPanel.js +36 -0
  108. package/dist/ui/TodoPanel.js.map +1 -0
  109. package/dist/yomeSkills/cli.d.ts +8 -0
  110. package/dist/yomeSkills/cli.js +155 -8
  111. package/dist/yomeSkills/cli.js.map +1 -1
  112. package/dist/yomeSkills/deprecate.d.ts +29 -0
  113. package/dist/yomeSkills/deprecate.js +99 -0
  114. package/dist/yomeSkills/deprecate.js.map +1 -0
  115. package/dist/yomeSkills/installFromHubTarball.d.ts +26 -0
  116. package/dist/yomeSkills/installFromHubTarball.js +161 -0
  117. package/dist/yomeSkills/installFromHubTarball.js.map +1 -0
  118. package/dist/yomeSkills/installGithub.d.ts +7 -0
  119. package/dist/yomeSkills/installGithub.js +42 -21
  120. package/dist/yomeSkills/installGithub.js.map +1 -1
  121. package/dist/yomeSkills/invoke.js +50 -18
  122. package/dist/yomeSkills/invoke.js.map +1 -1
  123. package/dist/yomeSkills/publish.d.ts +2 -0
  124. package/dist/yomeSkills/publish.js +6 -1
  125. package/dist/yomeSkills/publish.js.map +1 -1
  126. package/package.json +10 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AskUserPrompt.js","sourceRoot":"","sources":["../../src/ui/AskUserPrompt.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState, useMemo, useCallback, useRef } from 'react';
3
- import { Box, Text, useInput } from 'ink';
4
- import TextInput from 'ink-text-input';
2
+ import { useState, useMemo, useCallback, useEffect } from 'react';
3
+ import { Box, Text, useStdout } from 'ink';
4
+ import { MultilineTextInput } from './MultilineTextInput.js';
5
5
  const MAX_VISIBLE = 5;
6
6
  function getPermissionLabel(mode) {
7
7
  switch (mode) {
@@ -19,54 +19,38 @@ function getPermissionLabel(mode) {
19
19
  }
20
20
  export function InputBar({ value, onChange, onSubmit, model, loopName, slashCommands = [], permissionMode = 'default', imageCount = 0 }) {
21
21
  const [cursor, setCursor] = useState(0);
22
- const suppressNextChange = useRef(false);
22
+ const { stdout } = useStdout();
23
23
  const filtered = useMemo(() => {
24
24
  if (!value.startsWith('/'))
25
25
  return [];
26
26
  const query = value.slice(1).toLowerCase();
27
27
  return slashCommands.filter((c) => c.name.toLowerCase().startsWith(query));
28
28
  }, [value, slashCommands]);
29
- const showSuggestions = filtered.length > 0 && value.startsWith('/') && !value.includes(' ');
30
- useMemo(() => {
29
+ const showSuggestions = filtered.length > 0 && value.startsWith('/') && !/\s/.test(value.slice(1));
30
+ useEffect(() => {
31
31
  setCursor(0);
32
32
  }, [filtered.length]);
33
- const handleChange = useCallback((v) => {
34
- if (suppressNextChange.current) {
35
- suppressNextChange.current = false;
36
- return;
37
- }
38
- onChange(v);
39
- }, [onChange]);
40
- const handleSubmit = useCallback((v) => {
33
+ const handleAcceptSuggestion = useCallback((submit) => {
41
34
  if (showSuggestions && filtered[cursor]) {
42
35
  const selected = '/' + filtered[cursor].name;
43
36
  onChange(selected);
44
- onSubmit(selected);
45
- }
46
- else {
47
- onSubmit(v);
37
+ if (submit)
38
+ onSubmit(selected);
39
+ return selected;
48
40
  }
41
+ return null;
49
42
  }, [showSuggestions, filtered, cursor, onChange, onSubmit]);
50
- useInput((input, key) => {
51
- // Suppress Ctrl+V so ink-text-input doesn't insert 'v'
52
- if (key.ctrl && input === 'v') {
53
- suppressNextChange.current = true;
54
- return;
55
- }
43
+ const handleNavigateSuggestion = useCallback((direction) => {
56
44
  if (!showSuggestions)
57
- return;
58
- if (key.upArrow) {
45
+ return false;
46
+ if (direction === 'up') {
59
47
  setCursor((prev) => (prev > 0 ? prev - 1 : filtered.length - 1));
60
48
  }
61
- else if (key.downArrow) {
49
+ else {
62
50
  setCursor((prev) => (prev < filtered.length - 1 ? prev + 1 : 0));
63
51
  }
64
- else if (key.tab) {
65
- if (filtered[cursor]) {
66
- onChange('/' + filtered[cursor].name);
67
- }
68
- }
69
- });
52
+ return true;
53
+ }, [showSuggestions, filtered.length]);
70
54
  const maxNameLen = showSuggestions
71
55
  ? Math.max(...filtered.map((c) => c.name.length))
72
56
  : 0;
@@ -86,7 +70,9 @@ export function InputBar({ value, onChange, onSubmit, model, loopName, slashComm
86
70
  const hasScrollUp = visibleStart > 0;
87
71
  const hasScrollDown = visibleStart + MAX_VISIBLE < filtered.length;
88
72
  const perm = getPermissionLabel(permissionMode);
89
- return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsx(Text, { color: perm.color, children: perm.text }), _jsx(Text, { dimColor: true, children: model || 'qwen-plus' })] }), imageCount > 0 && (_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: "#E87B35", bold: true, children: `\u{1F4CE} ${imageCount} image${imageCount > 1 ? 's' : ''} attached` }), _jsx(Text, { dimColor: true, children: " (press Enter to send)" })] })), _jsxs(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, children: [_jsx(Text, { color: "#E87B35", children: `> ` }), _jsx(TextInput, { value: value, onChange: handleChange, onSubmit: handleSubmit, placeholder: "" })] }), showSuggestions && (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 0, children: [hasScrollUp && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", '↑', " more"] }) })), visibleItems.map((item, vi) => {
73
+ const terminalColumns = stdout.columns ?? process.stdout.columns ?? 80;
74
+ const inputColumns = Math.max(10, terminalColumns - 8);
75
+ return (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { paddingX: 1, justifyContent: "space-between", children: [_jsx(Text, { color: perm.color, children: perm.text }), _jsx(Text, { dimColor: true, children: model || 'qwen-plus' })] }), imageCount > 0 && (_jsxs(Box, { paddingX: 1, children: [_jsx(Text, { color: "#E87B35", bold: true, children: `\u{1F4CE} ${imageCount} image${imageCount > 1 ? 's' : ''} attached` }), _jsx(Text, { dimColor: true, children: " (press Enter to send)" })] })), _jsx(Box, { borderStyle: "round", borderColor: "gray", paddingX: 1, width: "100%", children: _jsx(MultilineTextInput, { value: value, onChange: onChange, onSubmit: onSubmit, columns: inputColumns, prompt: "> ", promptColor: "#E87B35", onNavigateSuggestion: handleNavigateSuggestion, onAcceptSuggestion: handleAcceptSuggestion }) }), showSuggestions && (_jsxs(Box, { flexDirection: "column", paddingX: 1, marginTop: 0, children: [hasScrollUp && (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", '↑', " more"] }) })), visibleItems.map((item, vi) => {
90
76
  const realIdx = visibleStart + vi;
91
77
  const isFocused = realIdx === cursor;
92
78
  const padded = ('/' + item.name).padEnd(maxNameLen + 3);
@@ -1 +1 @@
1
- {"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../src/ui/InputBar.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC1C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAmBvC,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,SAAS,kBAAkB,CAAC,IAAoB;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,mBAAmB;YACtB,gEAAgE;YAChE,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACrE,KAAK,aAAa;YAChB,iDAAiD;YACjD,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1E,KAAK,SAAS,CAAC;QACf;YACE,uDAAuD;YACvD,OAAO,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC/E,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,EAAE,EAAE,cAAc,GAAG,SAAS,EAAE,UAAU,GAAG,CAAC,EAAiB;IACpJ,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3C,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3B,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7F,OAAO,CAAC,GAAG,EAAE;QACX,SAAS,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAEtB,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,EAAE;QAC7C,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;YACnC,OAAO;QACT,CAAC;QACD,QAAQ,CAAC,CAAC,CAAC,CAAC;IACd,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,EAAE;QAC7C,IAAI,eAAe,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC;YAC9C,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnB,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE5D,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,uDAAuD;QACvD,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC9B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe;YAAE,OAAO;QAC7B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAChB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACzB,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAE,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,eAAe;QAChC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC,CAAC;IAEN,mDAAmD;IACnD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,QAAQ,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC;QAC1B,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC,MAAM;YAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9B,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;IAEnE,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAEhD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,SAAS,EAAE,CAAC,aACtC,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAC,eAAe,aAC9C,KAAC,IAAI,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,YAAG,IAAI,CAAC,IAAI,GAAQ,EAC3C,KAAC,IAAI,IAAC,QAAQ,kBAAE,KAAK,IAAI,WAAW,GAAQ,IACxC,EACL,UAAU,GAAG,CAAC,IAAI,CACjB,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,aACd,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,EAAC,IAAI,kBAAE,aAAa,UAAU,SAAS,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,GAAQ,EACxG,KAAC,IAAI,IAAC,QAAQ,6CAA8B,IACxC,CACP,EACD,MAAC,GAAG,IAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,QAAQ,EAAE,CAAC,aACrD,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,YAAE,IAAI,GAAQ,EACnC,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAC,EAAE,GACd,IACE,EACL,eAAe,IAAI,CAClB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,aAClD,WAAW,IAAI,CACd,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,QAAQ,yBAAI,GAAG,aAAa,GAC9B,CACP,EACA,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;wBAC7B,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;wBAClC,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC;wBACrC,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;wBACxD,OAAO,CACL,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,YAAG,MAAM,GAAQ,EACtG,KAAC,IAAI,IAAC,QAAQ,EAAE,CAAC,SAAS,YAAG,IAAI,CAAC,WAAW,GAAQ,KAF7C,IAAI,CAAC,IAAI,CAGb,CACP,CAAC;oBACJ,CAAC,CAAC,EACD,aAAa,IAAI,CAChB,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,QAAQ,yBAAI,GAAG,aAAa,GAC9B,CACP,IACG,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"InputBar.js","sourceRoot":"","sources":["../../src/ui/InputBar.tsx"],"names":[],"mappings":"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"}
@@ -15,6 +15,14 @@ interface MessageListProps {
15
15
  messages: Message[];
16
16
  streamText: string;
17
17
  isRunning: boolean;
18
+ /**
19
+ * Bumped by App.tsx whenever the conversation is reset (e.g. `/new` or
20
+ * session restore). We forward it onto Ink's <Static> via the `key` prop
21
+ * below — Ink's Static buffer is append-only and never drops items
22
+ * already committed to scrollback, so without remounting the user would
23
+ * still see the previous chat after typing /new.
24
+ */
25
+ resetEpoch?: number;
18
26
  }
19
27
  export declare const MessageList: React.NamedExoticComponent<MessageListProps>;
20
28
  export {};
@@ -98,7 +98,7 @@ function partitionMessages(messages) {
98
98
  }
99
99
  return { staticMsgs, liveMsgs };
100
100
  }
101
- export const MessageList = React.memo(function MessageList({ messages, streamText, isRunning }) {
101
+ export const MessageList = React.memo(function MessageList({ messages, streamText, isRunning, resetEpoch = 0 }) {
102
102
  const { staticMsgs, liveMsgs } = partitionMessages(messages);
103
103
  // Banner is item #0 of the Static stream, so Ink commits it to the
104
104
  // terminal once at boot — right after the user's `yome` command line
@@ -110,6 +110,6 @@ export const MessageList = React.memo(function MessageList({ messages, streamTex
110
110
  return _jsx(Banner, {}, "banner");
111
111
  }
112
112
  return (_jsx(MessageItem, { msg: item }, item.id ?? `m-${item.content.slice(0, 16)}`));
113
- } }), liveMsgs.map((msg) => (_jsx(MessageItem, { msg: msg }, msg.id ?? `live-${msg.toolName}`))), streamText && (_jsx(Box, { marginTop: 1, marginLeft: 2, flexShrink: 1, flexDirection: "column", children: _jsx(Markdown, { children: streamText }) })), isRunning && !streamText && liveMsgs.length === 0 && (_jsxs(Box, { marginTop: 1, marginLeft: 2, children: [_jsx(Spinner, {}), _jsx(Text, { dimColor: true, children: ' Thinking\u2026' })] }))] }));
113
+ } }, `static-${resetEpoch}`), liveMsgs.map((msg) => (_jsx(MessageItem, { msg: msg }, msg.id ?? `live-${msg.toolName}`))), streamText && (_jsx(Box, { marginTop: 1, marginLeft: 2, flexShrink: 1, flexDirection: "column", children: _jsx(Markdown, { children: streamText }) })), isRunning && !streamText && liveMsgs.length === 0 && (_jsxs(Box, { marginTop: 1, marginLeft: 2, children: [_jsx(Spinner, {}), _jsx(Text, { dimColor: true, children: ' Thinking\u2026' })] }))] }));
114
114
  });
115
115
  //# sourceMappingURL=MessageList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageList.js","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface VisualLine {
2
+ text: string;
3
+ startOffset: number;
4
+ endOffset: number;
5
+ }
6
+ interface InputLayout {
7
+ columns: number;
8
+ lines: VisualLine[];
9
+ }
10
+ interface CursorPosition {
11
+ lineIndex: number;
12
+ column: number;
13
+ }
14
+ interface MultilineTextInputProps {
15
+ value: string;
16
+ onChange: (value: string) => void;
17
+ onSubmit: (value: string) => void;
18
+ columns: number;
19
+ focus?: boolean;
20
+ prompt?: string;
21
+ promptColor?: string;
22
+ maxVisibleLines?: number;
23
+ onNavigateSuggestion?: (direction: 'up' | 'down') => boolean;
24
+ onAcceptSuggestion?: (submit: boolean) => string | null;
25
+ }
26
+ export declare function stringWidth(text: string): number;
27
+ export declare function buildInputLayout(value: string, columns: number): InputLayout;
28
+ export declare function getCursorPosition(layout: InputLayout, cursorOffset: number): CursorPosition;
29
+ export declare function moveCursorVertically(value: string, cursorOffset: number, columns: number, direction: 'up' | 'down', preferredColumn?: number | null): number;
30
+ export declare function MultilineTextInput({ value, onChange, onSubmit, columns, focus, prompt, promptColor, maxVisibleLines, onNavigateSuggestion, onAcceptSuggestion, }: MultilineTextInputProps): import("react/jsx-runtime").JSX.Element;
31
+ export {};
@@ -0,0 +1,393 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState } from 'react';
3
+ import { Box, Text, useInput } from 'ink';
4
+ const DEFAULT_MAX_VISIBLE_LINES = 8;
5
+ let graphemeSegmenter;
6
+ function getSegmenter() {
7
+ if (graphemeSegmenter !== undefined)
8
+ return graphemeSegmenter;
9
+ const Segmenter = Intl.Segmenter;
10
+ graphemeSegmenter = Segmenter ? new Segmenter(undefined, { granularity: 'grapheme' }) : null;
11
+ return graphemeSegmenter;
12
+ }
13
+ function graphemes(text) {
14
+ const segmenter = getSegmenter();
15
+ if (segmenter) {
16
+ return Array.from(segmenter.segment(text), (item) => ({
17
+ segment: item.segment,
18
+ index: item.index,
19
+ end: item.index + item.segment.length,
20
+ width: stringWidth(item.segment),
21
+ }));
22
+ }
23
+ const result = [];
24
+ let index = 0;
25
+ for (const segment of Array.from(text)) {
26
+ result.push({ segment, index, end: index + segment.length, width: stringWidth(segment) });
27
+ index += segment.length;
28
+ }
29
+ return result;
30
+ }
31
+ function isZeroWidthCodePoint(codePoint) {
32
+ return (codePoint <= 0x1f ||
33
+ (codePoint >= 0x7f && codePoint <= 0x9f) ||
34
+ (codePoint >= 0x0300 && codePoint <= 0x036f) ||
35
+ (codePoint >= 0x1ab0 && codePoint <= 0x1aff) ||
36
+ (codePoint >= 0x1dc0 && codePoint <= 0x1dff) ||
37
+ (codePoint >= 0x20d0 && codePoint <= 0x20ff) ||
38
+ (codePoint >= 0xfe00 && codePoint <= 0xfe0f) ||
39
+ (codePoint >= 0xe0100 && codePoint <= 0xe01ef) ||
40
+ codePoint === 0x200b ||
41
+ codePoint === 0x200c ||
42
+ codePoint === 0x200d ||
43
+ codePoint === 0xfeff);
44
+ }
45
+ function isWideCodePoint(codePoint) {
46
+ return ((codePoint >= 0x1100 && codePoint <= 0x115f) ||
47
+ codePoint === 0x2329 ||
48
+ codePoint === 0x232a ||
49
+ (codePoint >= 0x2e80 && codePoint <= 0xa4cf) ||
50
+ (codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
51
+ (codePoint >= 0xf900 && codePoint <= 0xfaff) ||
52
+ (codePoint >= 0xfe10 && codePoint <= 0xfe19) ||
53
+ (codePoint >= 0xfe30 && codePoint <= 0xfe6f) ||
54
+ (codePoint >= 0xff00 && codePoint <= 0xff60) ||
55
+ (codePoint >= 0xffe0 && codePoint <= 0xffe6));
56
+ }
57
+ function isEmojiCodePoint(codePoint) {
58
+ return ((codePoint >= 0x1f000 && codePoint <= 0x1faff) ||
59
+ (codePoint >= 0x2600 && codePoint <= 0x27bf));
60
+ }
61
+ export function stringWidth(text) {
62
+ const segmenter = getSegmenter();
63
+ if (segmenter) {
64
+ let width = 0;
65
+ for (const item of segmenter.segment(text)) {
66
+ width += graphemeWidth(item.segment);
67
+ }
68
+ return width;
69
+ }
70
+ let width = 0;
71
+ for (const segment of Array.from(text)) {
72
+ width += graphemeWidth(segment);
73
+ }
74
+ return width;
75
+ }
76
+ function graphemeWidth(segment) {
77
+ let width = 0;
78
+ for (const char of Array.from(segment)) {
79
+ const codePoint = char.codePointAt(0);
80
+ if (codePoint === undefined || isZeroWidthCodePoint(codePoint))
81
+ continue;
82
+ if (isEmojiCodePoint(codePoint))
83
+ return 2;
84
+ width += isWideCodePoint(codePoint) ? 2 : 1;
85
+ }
86
+ return width;
87
+ }
88
+ export function buildInputLayout(value, columns) {
89
+ const safeColumns = Math.max(1, Math.floor(columns));
90
+ const lines = [];
91
+ const logicalLines = value.split('\n');
92
+ let offset = 0;
93
+ for (let i = 0; i < logicalLines.length; i++) {
94
+ const logicalLine = logicalLines[i] ?? '';
95
+ lines.push(...wrapLogicalLine(logicalLine, offset, safeColumns));
96
+ offset += logicalLine.length;
97
+ if (i < logicalLines.length - 1)
98
+ offset += 1;
99
+ }
100
+ if (lines.length === 0)
101
+ lines.push({ text: '', startOffset: 0, endOffset: 0 });
102
+ return { columns: safeColumns, lines };
103
+ }
104
+ function wrapLogicalLine(text, startOffset, columns) {
105
+ if (text.length === 0)
106
+ return [{ text: '', startOffset, endOffset: startOffset }];
107
+ const lines = [];
108
+ let lineText = '';
109
+ let lineWidth = 0;
110
+ let lineStart = startOffset;
111
+ for (const item of graphemes(text)) {
112
+ const absoluteStart = startOffset + item.index;
113
+ const absoluteEnd = startOffset + item.end;
114
+ if (lineText.length > 0 && lineWidth + item.width > columns) {
115
+ lines.push({ text: lineText, startOffset: lineStart, endOffset: absoluteStart });
116
+ lineText = '';
117
+ lineWidth = 0;
118
+ lineStart = absoluteStart;
119
+ }
120
+ lineText += item.segment;
121
+ lineWidth += item.width;
122
+ if (lineWidth === columns && absoluteEnd < startOffset + text.length) {
123
+ lines.push({ text: lineText, startOffset: lineStart, endOffset: absoluteEnd });
124
+ lineText = '';
125
+ lineWidth = 0;
126
+ lineStart = absoluteEnd;
127
+ }
128
+ }
129
+ if (lineText.length > 0) {
130
+ lines.push({ text: lineText, startOffset: lineStart, endOffset: startOffset + text.length });
131
+ }
132
+ return lines;
133
+ }
134
+ export function getCursorPosition(layout, cursorOffset) {
135
+ const lineIndex = getLineIndexForOffset(layout, cursorOffset);
136
+ const line = layout.lines[lineIndex];
137
+ const localEnd = Math.max(0, Math.min(cursorOffset, line.endOffset) - line.startOffset);
138
+ return {
139
+ lineIndex,
140
+ column: stringWidth(line.text.slice(0, localEnd)),
141
+ };
142
+ }
143
+ function getLineIndexForOffset(layout, cursorOffset) {
144
+ let lineIndex = 0;
145
+ for (let i = 0; i < layout.lines.length; i++) {
146
+ if (layout.lines[i].startOffset <= cursorOffset)
147
+ lineIndex = i;
148
+ else
149
+ break;
150
+ }
151
+ return Math.max(0, Math.min(lineIndex, layout.lines.length - 1));
152
+ }
153
+ function getOffsetForColumn(line, column) {
154
+ if (column <= 0)
155
+ return line.startOffset;
156
+ let width = 0;
157
+ for (const item of graphemes(line.text)) {
158
+ const nextWidth = width + item.width;
159
+ if (nextWidth > column)
160
+ return line.startOffset + item.index;
161
+ width = nextWidth;
162
+ }
163
+ return line.endOffset;
164
+ }
165
+ export function moveCursorVertically(value, cursorOffset, columns, direction, preferredColumn) {
166
+ const layout = buildInputLayout(value, columns);
167
+ const position = getCursorPosition(layout, cursorOffset);
168
+ const nextLineIndex = direction === 'up' ? position.lineIndex - 1 : position.lineIndex + 1;
169
+ if (nextLineIndex < 0 || nextLineIndex >= layout.lines.length)
170
+ return cursorOffset;
171
+ return getOffsetForColumn(layout.lines[nextLineIndex], preferredColumn ?? position.column);
172
+ }
173
+ function previousGraphemeOffset(value, cursorOffset) {
174
+ for (const item of graphemes(value)) {
175
+ if (item.end >= cursorOffset)
176
+ return item.index;
177
+ }
178
+ return 0;
179
+ }
180
+ function nextGraphemeOffset(value, cursorOffset) {
181
+ for (const item of graphemes(value)) {
182
+ if (item.index >= cursorOffset)
183
+ return item.end;
184
+ if (item.index < cursorOffset && item.end > cursorOffset)
185
+ return item.end;
186
+ }
187
+ return value.length;
188
+ }
189
+ function previousWordOffset(value, cursorOffset) {
190
+ let offset = cursorOffset;
191
+ while (offset > 0 && /\s/.test(value.slice(previousGraphemeOffset(value, offset), offset))) {
192
+ offset = previousGraphemeOffset(value, offset);
193
+ }
194
+ while (offset > 0 && !/\s/.test(value.slice(previousGraphemeOffset(value, offset), offset))) {
195
+ offset = previousGraphemeOffset(value, offset);
196
+ }
197
+ return offset;
198
+ }
199
+ function nextWordOffset(value, cursorOffset) {
200
+ let offset = cursorOffset;
201
+ while (offset < value.length && !/\s/.test(value.slice(offset, nextGraphemeOffset(value, offset)))) {
202
+ offset = nextGraphemeOffset(value, offset);
203
+ }
204
+ while (offset < value.length && /\s/.test(value.slice(offset, nextGraphemeOffset(value, offset)))) {
205
+ offset = nextGraphemeOffset(value, offset);
206
+ }
207
+ return offset;
208
+ }
209
+ function normalizeTypedInput(input) {
210
+ return input
211
+ .replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, '')
212
+ .replace(/\r\n/g, '\n')
213
+ .replace(/\r/g, '\n');
214
+ }
215
+ function clampOffset(value, offset) {
216
+ return Math.max(0, Math.min(offset, value.length));
217
+ }
218
+ function splitLineAtCursor(line, cursorOffset) {
219
+ const localOffset = clampOffset(line.text, cursorOffset - line.startOffset);
220
+ if (localOffset >= line.text.length) {
221
+ return { before: line.text, cursor: ' ', after: '' };
222
+ }
223
+ for (const item of graphemes(line.text)) {
224
+ if (item.index === localOffset) {
225
+ return {
226
+ before: line.text.slice(0, item.index),
227
+ cursor: item.segment,
228
+ after: line.text.slice(item.end),
229
+ };
230
+ }
231
+ if (item.index > localOffset) {
232
+ return {
233
+ before: line.text.slice(0, item.index),
234
+ cursor: item.segment,
235
+ after: line.text.slice(item.end),
236
+ };
237
+ }
238
+ }
239
+ return { before: line.text, cursor: ' ', after: '' };
240
+ }
241
+ function getVisibleWindow(lineCount, cursorLineIndex, maxVisibleLines) {
242
+ if (lineCount <= maxVisibleLines)
243
+ return { start: 0, end: lineCount };
244
+ const half = Math.floor(maxVisibleLines / 2);
245
+ let start = cursorLineIndex - half;
246
+ if (start < 0)
247
+ start = 0;
248
+ if (start + maxVisibleLines > lineCount)
249
+ start = lineCount - maxVisibleLines;
250
+ return { start, end: start + maxVisibleLines };
251
+ }
252
+ export function MultilineTextInput({ value, onChange, onSubmit, columns, focus = true, prompt = '> ', promptColor = '#E87B35', maxVisibleLines = DEFAULT_MAX_VISIBLE_LINES, onNavigateSuggestion, onAcceptSuggestion, }) {
253
+ const [cursorOffset, setCursorOffset] = useState(value.length);
254
+ const preferredColumn = useRef(null);
255
+ const layout = useMemo(() => buildInputLayout(value, columns), [columns, value]);
256
+ const cursorPosition = useMemo(() => getCursorPosition(layout, cursorOffset), [cursorOffset, layout]);
257
+ useEffect(() => {
258
+ setCursorOffset((offset) => clampOffset(value, offset));
259
+ }, [value]);
260
+ const commitValue = (nextValue, nextOffset) => {
261
+ preferredColumn.current = null;
262
+ setCursorOffset(clampOffset(nextValue, nextOffset));
263
+ onChange(nextValue);
264
+ };
265
+ const setOffset = (nextOffset, keepPreferredColumn = false) => {
266
+ if (!keepPreferredColumn)
267
+ preferredColumn.current = null;
268
+ setCursorOffset(clampOffset(value, nextOffset));
269
+ };
270
+ const insertText = (text) => {
271
+ if (!text)
272
+ return;
273
+ const nextValue = value.slice(0, cursorOffset) + text + value.slice(cursorOffset);
274
+ commitValue(nextValue, cursorOffset + text.length);
275
+ };
276
+ const replaceBeforeCursor = (deleteCount, text) => {
277
+ const start = Math.max(0, cursorOffset - deleteCount);
278
+ const nextValue = value.slice(0, start) + text + value.slice(cursorOffset);
279
+ commitValue(nextValue, start + text.length);
280
+ };
281
+ const handleVerticalMove = (direction) => {
282
+ const handledBySuggestions = onNavigateSuggestion?.(direction) ?? false;
283
+ if (handledBySuggestions)
284
+ return;
285
+ const desiredColumn = preferredColumn.current ?? cursorPosition.column;
286
+ const nextOffset = moveCursorVertically(value, cursorOffset, columns, direction, desiredColumn);
287
+ preferredColumn.current = desiredColumn;
288
+ setOffset(nextOffset, true);
289
+ };
290
+ useInput((input, key) => {
291
+ if (key.ctrl && (input === 'c' || input === 'v'))
292
+ return;
293
+ if (key.shift && key.tab)
294
+ return;
295
+ if (key.upArrow) {
296
+ handleVerticalMove('up');
297
+ return;
298
+ }
299
+ if (key.downArrow) {
300
+ handleVerticalMove('down');
301
+ return;
302
+ }
303
+ if (key.tab) {
304
+ const accepted = onAcceptSuggestion?.(false);
305
+ if (accepted !== null && accepted !== undefined)
306
+ setOffset(accepted.length);
307
+ return;
308
+ }
309
+ if (key.return) {
310
+ const accepted = onAcceptSuggestion?.(true);
311
+ if (accepted !== null && accepted !== undefined) {
312
+ setOffset(accepted.length);
313
+ return;
314
+ }
315
+ if (key.shift || key.meta) {
316
+ insertText('\n');
317
+ return;
318
+ }
319
+ if (cursorOffset > 0 && value[cursorOffset - 1] === '\\') {
320
+ replaceBeforeCursor(1, '\n');
321
+ return;
322
+ }
323
+ onSubmit(value);
324
+ return;
325
+ }
326
+ if (key.leftArrow) {
327
+ setOffset(key.ctrl || key.meta ? previousWordOffset(value, cursorOffset) : previousGraphemeOffset(value, cursorOffset));
328
+ return;
329
+ }
330
+ if (key.rightArrow) {
331
+ setOffset(key.ctrl || key.meta ? nextWordOffset(value, cursorOffset) : nextGraphemeOffset(value, cursorOffset));
332
+ return;
333
+ }
334
+ if (key.backspace) {
335
+ if (cursorOffset === 0)
336
+ return;
337
+ const previousOffset = previousGraphemeOffset(value, cursorOffset);
338
+ const nextValue = value.slice(0, previousOffset) + value.slice(cursorOffset);
339
+ commitValue(nextValue, previousOffset);
340
+ return;
341
+ }
342
+ if (key.delete || (key.ctrl && input === 'd')) {
343
+ if (cursorOffset >= value.length)
344
+ return;
345
+ const nextOffset = nextGraphemeOffset(value, cursorOffset);
346
+ const nextValue = value.slice(0, cursorOffset) + value.slice(nextOffset);
347
+ commitValue(nextValue, cursorOffset);
348
+ return;
349
+ }
350
+ if (key.ctrl && input === 'a') {
351
+ setOffset(layout.lines[cursorPosition.lineIndex].startOffset);
352
+ return;
353
+ }
354
+ if (key.ctrl && input === 'e') {
355
+ setOffset(layout.lines[cursorPosition.lineIndex].endOffset);
356
+ return;
357
+ }
358
+ if (key.ctrl && input === 'u') {
359
+ const lineStart = layout.lines[cursorPosition.lineIndex].startOffset;
360
+ const nextValue = value.slice(0, lineStart) + value.slice(cursorOffset);
361
+ commitValue(nextValue, lineStart);
362
+ return;
363
+ }
364
+ if (key.ctrl && input === 'k') {
365
+ const lineEnd = layout.lines[cursorPosition.lineIndex].endOffset;
366
+ const nextValue = value.slice(0, cursorOffset) + value.slice(lineEnd);
367
+ commitValue(nextValue, cursorOffset);
368
+ return;
369
+ }
370
+ if (input === '\x1b[H' || input === '\x1b[1~') {
371
+ setOffset(layout.lines[cursorPosition.lineIndex].startOffset);
372
+ return;
373
+ }
374
+ if (input === '\x1b[F' || input === '\x1b[4~') {
375
+ setOffset(layout.lines[cursorPosition.lineIndex].endOffset);
376
+ return;
377
+ }
378
+ if (key.escape || key.pageDown || key.pageUp)
379
+ return;
380
+ insertText(normalizeTypedInput(input));
381
+ }, { isActive: focus });
382
+ const visibleWindow = getVisibleWindow(layout.lines.length, cursorPosition.lineIndex, Math.max(1, maxVisibleLines));
383
+ const visibleLines = layout.lines.slice(visibleWindow.start, visibleWindow.end);
384
+ const promptPadding = ' '.repeat(prompt.length);
385
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", children: [visibleWindow.start > 0 && (_jsxs(Box, { children: [_jsx(Text, { children: promptPadding }), _jsx(Text, { dimColor: true, children: "..." })] })), visibleLines.map((line, index) => {
386
+ const realIndex = visibleWindow.start + index;
387
+ const hasCursor = realIndex === cursorPosition.lineIndex;
388
+ const prefix = realIndex === 0 ? prompt : promptPadding;
389
+ const split = hasCursor ? splitLineAtCursor(line, cursorOffset) : null;
390
+ return (_jsxs(Box, { children: [_jsx(Text, { color: promptColor, children: prefix }), split ? (_jsxs(_Fragment, { children: [_jsx(Text, { wrap: "truncate-end", children: split.before }), _jsx(Text, { inverse: true, children: split.cursor }), _jsx(Text, { wrap: "truncate-end", children: split.after })] })) : (_jsx(Text, { wrap: "truncate-end", children: line.text.length > 0 ? line.text : ' ' }))] }, `${line.startOffset}-${line.endOffset}-${realIndex}`));
391
+ }), visibleWindow.end < layout.lines.length && (_jsxs(Box, { children: [_jsx(Text, { children: promptPadding }), _jsx(Text, { dimColor: true, children: "..." })] }))] }));
392
+ }
393
+ //# sourceMappingURL=MultilineTextInput.js.map