@townco/ui 0.1.8 → 0.1.9

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 (217) hide show
  1. package/dist/core/hooks/index.d.ts.map +1 -0
  2. package/dist/core/hooks/index.js.map +1 -0
  3. package/dist/core/hooks/use-chat-input.d.ts +17 -17
  4. package/dist/core/hooks/use-chat-input.d.ts.map +1 -0
  5. package/dist/core/hooks/use-chat-input.js +64 -55
  6. package/dist/core/hooks/use-chat-input.js.map +1 -0
  7. package/dist/core/hooks/use-chat-messages.d.ts +11 -11
  8. package/dist/core/hooks/use-chat-messages.d.ts.map +1 -0
  9. package/dist/core/hooks/use-chat-messages.js +121 -114
  10. package/dist/core/hooks/use-chat-messages.js.map +1 -0
  11. package/dist/core/hooks/use-chat-session.d.ts +5 -5
  12. package/dist/core/hooks/use-chat-session.d.ts.map +1 -0
  13. package/dist/core/hooks/use-chat-session.js +78 -80
  14. package/dist/core/hooks/use-chat-session.js.map +1 -0
  15. package/dist/core/index.d.ts.map +1 -0
  16. package/dist/core/index.js.map +1 -0
  17. package/dist/core/schemas/chat.d.ts +83 -56
  18. package/dist/core/schemas/chat.d.ts.map +1 -0
  19. package/dist/core/schemas/chat.js +27 -25
  20. package/dist/core/schemas/chat.js.map +1 -0
  21. package/dist/core/schemas/index.d.ts.map +1 -0
  22. package/dist/core/schemas/index.js.map +1 -0
  23. package/dist/core/store/chat-store.d.ts +28 -22
  24. package/dist/core/store/chat-store.d.ts.map +1 -0
  25. package/dist/core/store/chat-store.js +59 -50
  26. package/dist/core/store/chat-store.js.map +1 -0
  27. package/dist/gui/components/Button.d.ts +23 -7
  28. package/dist/gui/components/Button.d.ts.map +1 -0
  29. package/dist/gui/components/Button.js +40 -27
  30. package/dist/gui/components/Button.js.map +1 -0
  31. package/dist/gui/components/Card.d.ts +26 -7
  32. package/dist/gui/components/Card.d.ts.map +1 -0
  33. package/dist/gui/components/Card.js +54 -8
  34. package/dist/gui/components/Card.js.map +1 -0
  35. package/dist/gui/components/ChatInput.d.ts.map +1 -0
  36. package/dist/gui/components/ChatInput.js.map +1 -0
  37. package/dist/gui/components/ChatInterface.d.ts +12 -0
  38. package/dist/gui/components/ChatInterface.d.ts.map +1 -0
  39. package/dist/gui/components/ChatInterface.js +204 -0
  40. package/dist/gui/components/ChatInterface.js.map +1 -0
  41. package/dist/gui/components/ChatPreview.d.ts +12 -0
  42. package/dist/gui/components/ChatPreview.d.ts.map +1 -0
  43. package/dist/gui/components/ChatPreview.js +214 -0
  44. package/dist/gui/components/ChatPreview.js.map +1 -0
  45. package/dist/gui/components/ChatSecondaryPanel.d.ts +14 -11
  46. package/dist/gui/components/ChatSecondaryPanel.d.ts.map +1 -0
  47. package/dist/gui/components/ChatSecondaryPanel.js +115 -38
  48. package/dist/gui/components/ChatSecondaryPanel.js.map +1 -0
  49. package/dist/gui/components/ChatStatus.d.ts +4 -2
  50. package/dist/gui/components/ChatStatus.d.ts.map +1 -0
  51. package/dist/gui/components/ChatStatus.js +45 -34
  52. package/dist/gui/components/ChatStatus.js.map +1 -0
  53. package/dist/gui/components/ChatView.d.ts +8 -0
  54. package/dist/gui/components/ChatView.d.ts.map +1 -0
  55. package/dist/gui/components/ChatView.js +42 -0
  56. package/dist/gui/components/ChatView.js.map +1 -0
  57. package/dist/gui/components/ConfigPanel.d.ts +20 -0
  58. package/dist/gui/components/ConfigPanel.d.ts.map +1 -0
  59. package/dist/gui/components/ConfigPanel.js +225 -0
  60. package/dist/gui/components/ConfigPanel.js.map +1 -0
  61. package/dist/gui/components/Conversation.d.ts +17 -14
  62. package/dist/gui/components/Conversation.d.ts.map +1 -0
  63. package/dist/gui/components/Conversation.js +143 -83
  64. package/dist/gui/components/Conversation.js.map +1 -0
  65. package/dist/gui/components/Dialog.d.ts +57 -11
  66. package/dist/gui/components/Dialog.d.ts.map +1 -0
  67. package/dist/gui/components/Dialog.js +84 -8
  68. package/dist/gui/components/Dialog.js.map +1 -0
  69. package/dist/gui/components/HeightTransition.d.ts +12 -7
  70. package/dist/gui/components/HeightTransition.d.ts.map +1 -0
  71. package/dist/gui/components/HeightTransition.js +88 -77
  72. package/dist/gui/components/HeightTransition.js.map +1 -0
  73. package/dist/gui/components/Input.d.ts +13 -6
  74. package/dist/gui/components/Input.d.ts.map +1 -0
  75. package/dist/gui/components/Input.js +27 -16
  76. package/dist/gui/components/Input.js.map +1 -0
  77. package/dist/gui/components/InputBox.d.ts +21 -0
  78. package/dist/gui/components/InputBox.d.ts.map +1 -0
  79. package/dist/gui/components/InputBox.js +90 -0
  80. package/dist/gui/components/InputBox.js.map +1 -0
  81. package/dist/gui/components/Label.d.ts +7 -1
  82. package/dist/gui/components/Label.d.ts.map +1 -0
  83. package/dist/gui/components/Label.js +12 -2
  84. package/dist/gui/components/Label.js.map +1 -0
  85. package/dist/gui/components/MarkdownRenderer.d.ts +6 -4
  86. package/dist/gui/components/MarkdownRenderer.d.ts.map +1 -0
  87. package/dist/gui/components/MarkdownRenderer.js +178 -81
  88. package/dist/gui/components/MarkdownRenderer.js.map +1 -0
  89. package/dist/gui/components/Message.d.ts.map +1 -0
  90. package/dist/gui/components/Message.js.map +1 -0
  91. package/dist/gui/components/MessageContent.d.ts +29 -22
  92. package/dist/gui/components/MessageContent.d.ts.map +1 -0
  93. package/dist/gui/components/MessageContent.js.map +1 -0
  94. package/dist/gui/components/MessageList.d.ts.map +1 -0
  95. package/dist/gui/components/MessageList.js.map +1 -0
  96. package/dist/gui/components/PlaygroundLayout.d.ts +14 -0
  97. package/dist/gui/components/PlaygroundLayout.d.ts.map +1 -0
  98. package/dist/gui/components/PlaygroundLayout.js +49 -0
  99. package/dist/gui/components/PlaygroundLayout.js.map +1 -0
  100. package/dist/gui/components/Reasoning.d.ts +30 -24
  101. package/dist/gui/components/Reasoning.d.ts.map +1 -0
  102. package/dist/gui/components/Reasoning.js +187 -60
  103. package/dist/gui/components/Reasoning.js.map +1 -0
  104. package/dist/gui/components/Response.d.ts +11 -9
  105. package/dist/gui/components/Response.d.ts.map +1 -0
  106. package/dist/gui/components/Response.js +229 -90
  107. package/dist/gui/components/Response.js.map +1 -0
  108. package/dist/gui/components/Select.d.ts +69 -10
  109. package/dist/gui/components/Select.d.ts.map +1 -0
  110. package/dist/gui/components/Select.js +118 -12
  111. package/dist/gui/components/Select.js.map +1 -0
  112. package/dist/gui/components/StatusBar.d.ts +12 -0
  113. package/dist/gui/components/StatusBar.d.ts.map +1 -0
  114. package/dist/gui/components/StatusBar.js +58 -0
  115. package/dist/gui/components/StatusBar.js.map +1 -0
  116. package/dist/gui/components/Tabs.d.ts +24 -4
  117. package/dist/gui/components/Tabs.d.ts.map +1 -0
  118. package/dist/gui/components/Tabs.js +32 -4
  119. package/dist/gui/components/Tabs.js.map +1 -0
  120. package/dist/gui/components/Task.d.ts +28 -24
  121. package/dist/gui/components/Task.d.ts.map +1 -0
  122. package/dist/gui/components/Task.js +164 -31
  123. package/dist/gui/components/Task.js.map +1 -0
  124. package/dist/gui/components/Textarea.d.ts +15 -7
  125. package/dist/gui/components/Textarea.d.ts.map +1 -0
  126. package/dist/gui/components/Textarea.js +63 -46
  127. package/dist/gui/components/Textarea.js.map +1 -0
  128. package/dist/gui/components/ThinkingBlock.d.ts +20 -10
  129. package/dist/gui/components/ThinkingBlock.d.ts.map +1 -0
  130. package/dist/gui/components/ThinkingBlock.js +134 -35
  131. package/dist/gui/components/ThinkingBlock.js.map +1 -0
  132. package/dist/gui/components/TodoList.d.ts +12 -10
  133. package/dist/gui/components/TodoList.d.ts.map +1 -0
  134. package/dist/gui/components/TodoList.js +22 -7
  135. package/dist/gui/components/TodoList.js.map +1 -0
  136. package/dist/gui/components/TodoListItem.d.ts +9 -6
  137. package/dist/gui/components/TodoListItem.d.ts.map +1 -0
  138. package/dist/gui/components/TodoListItem.js +18 -4
  139. package/dist/gui/components/TodoListItem.js.map +1 -0
  140. package/dist/gui/components/index.d.ts.map +1 -0
  141. package/dist/gui/components/index.js.map +1 -0
  142. package/dist/gui/index.d.ts.map +1 -0
  143. package/dist/gui/index.js.map +1 -0
  144. package/dist/gui/lib/utils.d.ts.map +1 -0
  145. package/dist/gui/lib/utils.js +1 -1
  146. package/dist/gui/lib/utils.js.map +1 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/index.test.js +0 -1
  150. package/dist/sdk/client/acp-client.d.ts +88 -76
  151. package/dist/sdk/client/acp-client.d.ts.map +1 -0
  152. package/dist/sdk/client/acp-client.js +215 -217
  153. package/dist/sdk/client/acp-client.js.map +1 -0
  154. package/dist/sdk/client/index.d.ts.map +1 -0
  155. package/dist/sdk/client/index.js.map +1 -0
  156. package/dist/sdk/index.d.ts.map +1 -0
  157. package/dist/sdk/index.js.map +1 -0
  158. package/dist/sdk/schemas/agent.d.ts +111 -64
  159. package/dist/sdk/schemas/agent.d.ts.map +1 -0
  160. package/dist/sdk/schemas/agent.js +24 -24
  161. package/dist/sdk/schemas/agent.js.map +1 -0
  162. package/dist/sdk/schemas/index.d.ts.map +1 -0
  163. package/dist/sdk/schemas/index.js.map +1 -0
  164. package/dist/sdk/schemas/message.d.ts +245 -147
  165. package/dist/sdk/schemas/message.d.ts.map +1 -0
  166. package/dist/sdk/schemas/message.js +40 -40
  167. package/dist/sdk/schemas/message.js.map +1 -0
  168. package/dist/sdk/schemas/session.d.ts +219 -135
  169. package/dist/sdk/schemas/session.d.ts.map +1 -0
  170. package/dist/sdk/schemas/session.js +27 -27
  171. package/dist/sdk/schemas/session.js.map +1 -0
  172. package/dist/sdk/transports/http.d.ts +55 -55
  173. package/dist/sdk/transports/http.d.ts.map +1 -0
  174. package/dist/sdk/transports/http.js +472 -469
  175. package/dist/sdk/transports/http.js.map +1 -0
  176. package/dist/sdk/transports/index.d.ts.map +1 -0
  177. package/dist/sdk/transports/index.js.map +1 -0
  178. package/dist/sdk/transports/stdio.d.ts +20 -20
  179. package/dist/sdk/transports/stdio.d.ts.map +1 -0
  180. package/dist/sdk/transports/stdio.js.map +1 -0
  181. package/dist/sdk/transports/types.d.ts +42 -42
  182. package/dist/sdk/transports/types.d.ts.map +1 -0
  183. package/dist/sdk/transports/types.js.map +1 -0
  184. package/dist/sdk/transports/websocket.d.ts +12 -12
  185. package/dist/sdk/transports/websocket.d.ts.map +1 -0
  186. package/dist/sdk/transports/websocket.js +52 -46
  187. package/dist/sdk/transports/websocket.js.map +1 -0
  188. package/dist/tui/components/ChatView.d.ts +4 -2
  189. package/dist/tui/components/ChatView.d.ts.map +1 -0
  190. package/dist/tui/components/ChatView.js +51 -18
  191. package/dist/tui/components/ChatView.js.map +1 -0
  192. package/dist/tui/components/GameOfLife.d.ts.map +1 -0
  193. package/dist/tui/components/GameOfLife.js +64 -35
  194. package/dist/tui/components/GameOfLife.js.map +1 -0
  195. package/dist/tui/components/InputBox.d.ts +18 -11
  196. package/dist/tui/components/InputBox.d.ts.map +1 -0
  197. package/dist/tui/components/InputBox.js +70 -10
  198. package/dist/tui/components/InputBox.js.map +1 -0
  199. package/dist/tui/components/MessageList.d.ts +4 -2
  200. package/dist/tui/components/MessageList.d.ts.map +1 -0
  201. package/dist/tui/components/MessageList.js +37 -10
  202. package/dist/tui/components/MessageList.js.map +1 -0
  203. package/dist/tui/components/ReadlineInput.d.ts +12 -6
  204. package/dist/tui/components/ReadlineInput.d.ts.map +1 -0
  205. package/dist/tui/components/ReadlineInput.js +252 -237
  206. package/dist/tui/components/ReadlineInput.js.map +1 -0
  207. package/dist/tui/components/SingleSelect.d.ts +15 -9
  208. package/dist/tui/components/SingleSelect.js +84 -43
  209. package/dist/tui/components/StatusBar.d.ts +11 -6
  210. package/dist/tui/components/StatusBar.d.ts.map +1 -0
  211. package/dist/tui/components/StatusBar.js +102 -67
  212. package/dist/tui/components/StatusBar.js.map +1 -0
  213. package/dist/tui/components/index.d.ts.map +1 -0
  214. package/dist/tui/components/index.js.map +1 -0
  215. package/dist/tui/index.d.ts.map +1 -0
  216. package/dist/tui/index.js.map +1 -0
  217. package/package.json +2 -2
@@ -1,46 +1,87 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
1
  import { Box, Text, useInput } from "ink";
3
2
  import { useState } from "react";
4
- export function SingleSelect({ options, selected: _selected, onChange, onSubmit, onCancel, }) {
5
- const [focusedIndex, setFocusedIndex] = useState(0);
6
- const totalItems = options.length;
7
- useInput((input, key) => {
8
- // Handle Escape: Cancel
9
- if (key.escape) {
10
- onCancel?.();
11
- return;
12
- }
13
- // Handle Enter: Select option and submit immediately
14
- if (key.return) {
15
- const currentOption = options[focusedIndex];
16
- if (currentOption) {
17
- onChange(currentOption.value);
18
- onSubmit(currentOption.value);
19
- }
20
- return;
21
- }
22
- // Handle Arrow Up: Move focus up
23
- if (key.upArrow) {
24
- setFocusedIndex((prev) => (prev > 0 ? prev - 1 : totalItems - 1));
25
- return;
26
- }
27
- // Handle Arrow Down: Move focus down
28
- if (key.downArrow) {
29
- setFocusedIndex((prev) => (prev < totalItems - 1 ? prev + 1 : 0));
30
- return;
31
- }
32
- // Handle Spacebar: Select option and submit immediately
33
- if (input === " ") {
34
- const currentOption = options[focusedIndex];
35
- if (currentOption) {
36
- onChange(currentOption.value);
37
- onSubmit(currentOption.value);
38
- }
39
- return;
40
- }
41
- });
42
- return (_jsxs(Box, { flexDirection: "column", children: [options.map((option, index) => {
43
- const isFocused = index === focusedIndex;
44
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { children: _jsxs(Text, { inverse: isFocused, children: [isFocused ? ">" : " ", " ", option.label] }) }), option.description && (_jsx(Box, { paddingLeft: 2, children: _jsx(Text, { dimColor: true, children: option.description }) }))] }, option.value));
45
- }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u2191/\u2193: Navigate \u2022 Space/Enter: Select and continue \u2022 Esc: Cancel" }) })] }));
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ export function SingleSelect({
5
+ options,
6
+ selected: _selected,
7
+ onChange,
8
+ onSubmit,
9
+ onCancel,
10
+ }) {
11
+ const [focusedIndex, setFocusedIndex] = useState(0);
12
+ const totalItems = options.length;
13
+ useInput((input, key) => {
14
+ // Handle Escape: Cancel
15
+ if (key.escape) {
16
+ onCancel?.();
17
+ return;
18
+ }
19
+ // Handle Enter: Select option and submit immediately
20
+ if (key.return) {
21
+ const currentOption = options[focusedIndex];
22
+ if (currentOption) {
23
+ onChange(currentOption.value);
24
+ onSubmit(currentOption.value);
25
+ }
26
+ return;
27
+ }
28
+ // Handle Arrow Up: Move focus up
29
+ if (key.upArrow) {
30
+ setFocusedIndex((prev) => (prev > 0 ? prev - 1 : totalItems - 1));
31
+ return;
32
+ }
33
+ // Handle Arrow Down: Move focus down
34
+ if (key.downArrow) {
35
+ setFocusedIndex((prev) => (prev < totalItems - 1 ? prev + 1 : 0));
36
+ return;
37
+ }
38
+ // Handle Spacebar: Select option and submit immediately
39
+ if (input === " ") {
40
+ const currentOption = options[focusedIndex];
41
+ if (currentOption) {
42
+ onChange(currentOption.value);
43
+ onSubmit(currentOption.value);
44
+ }
45
+ return;
46
+ }
47
+ });
48
+ return _jsxs(Box, {
49
+ flexDirection: "column",
50
+ children: [
51
+ options.map((option, index) => {
52
+ const isFocused = index === focusedIndex;
53
+ return _jsxs(
54
+ Box,
55
+ {
56
+ flexDirection: "column",
57
+ children: [
58
+ _jsx(Box, {
59
+ children: _jsxs(Text, {
60
+ inverse: isFocused,
61
+ children: [isFocused ? ">" : " ", " ", option.label],
62
+ }),
63
+ }),
64
+ option.description &&
65
+ _jsx(Box, {
66
+ paddingLeft: 2,
67
+ children: _jsx(Text, {
68
+ dimColor: true,
69
+ children: option.description,
70
+ }),
71
+ }),
72
+ ],
73
+ },
74
+ option.value,
75
+ );
76
+ }),
77
+ _jsx(Box, {
78
+ marginTop: 1,
79
+ children: _jsx(Text, {
80
+ dimColor: true,
81
+ children:
82
+ "\u2191/\u2193: Navigate \u2022 Space/Enter: Select and continue \u2022 Esc: Cancel",
83
+ }),
84
+ }),
85
+ ],
86
+ });
46
87
  }
@@ -1,9 +1,14 @@
1
1
  import type { ConnectionStatus } from "../../core/index.js";
2
2
  export interface StatusBarProps {
3
- connectionStatus: ConnectionStatus;
4
- sessionId: string | null;
5
- isStreaming: boolean;
6
- streamingStartTime: number | null;
7
- hasStreamingContent: boolean;
3
+ connectionStatus: ConnectionStatus;
4
+ sessionId: string | null;
5
+ isStreaming: boolean;
6
+ streamingStartTime: number | null;
7
+ hasStreamingContent: boolean;
8
8
  }
9
- export declare function StatusBar({ connectionStatus, isStreaming, streamingStartTime, hasStreamingContent, }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function StatusBar({
10
+ connectionStatus,
11
+ isStreaming,
12
+ streamingStartTime,
13
+ hasStreamingContent,
14
+ }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAoFD,wBAAgB,SAAS,CAAC,EACxB,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,mBAAmB,GACpB,EAAE,cAAc,2CA0BhB"}
@@ -1,82 +1,117 @@
1
- import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
1
  import { Box, Text } from "ink";
3
2
  import { useEffect, useState } from "react";
3
+ import {
4
+ Fragment as _Fragment,
5
+ jsx as _jsx,
6
+ jsxs as _jsxs,
7
+ } from "react/jsx-runtime";
8
+
4
9
  // Synonyms of "thinking" in multiple languages
5
10
  const THINKING_WORDS = [
6
- "Thinking", // English
7
- "Pensando", // Spanish/Portuguese
8
- "Pensant", // French
9
- "Denkend", // German
10
- "Pensando", // Italian
11
- "考えている", // Japanese (kangaeteiru)
12
- "생각 중", // Korean (saenggak jung)
13
- "思考中", // Chinese (sīkǎo zhōng)
14
- "Размышляя", // Russian (razmyshlyaya)
15
- "Düşünüyor", // Turkish
16
- "Myślący", // Polish
17
- "Tänkande", // Swedish
18
- "Pensando", // Dutch
19
- "Ajatellen", // Finnish
20
- "Σκεπτόμενος", // Greek (skeptomenos)
21
- "חושב", // Hebrew (choshev)
22
- "सोच रहा है", // Hindi (soch raha hai)
23
- "Berpikir", // Indonesian
11
+ "Thinking", // English
12
+ "Pensando", // Spanish/Portuguese
13
+ "Pensant", // French
14
+ "Denkend", // German
15
+ "Pensando", // Italian
16
+ "考えている", // Japanese (kangaeteiru)
17
+ "생각 중", // Korean (saenggak jung)
18
+ "思考中", // Chinese (sīkǎo zhōng)
19
+ "Размышляя", // Russian (razmyshlyaya)
20
+ "Düşünüyor", // Turkish
21
+ "Myślący", // Polish
22
+ "Tänkande", // Swedish
23
+ "Pensando", // Dutch
24
+ "Ajatellen", // Finnish
25
+ "Σκεπτόμενος", // Greek (skeptomenos)
26
+ "חושב", // Hebrew (choshev)
27
+ "सोच रहा है", // Hindi (soch raha hai)
28
+ "Berpikir", // Indonesian
24
29
  ];
25
30
  // Animated dot patterns for bouncing/jumping effect
26
31
  // Using regular dots (.) and middle dots (·) to create height illusion
27
32
  const DOT_ANIMATIONS = [
28
- "...", // All dots down
29
- "·..", // First dot up
30
- ".·.", // Middle dot up
31
- "..·", // Last dot up
32
- ".·.", // Middle dot up
33
- "·..", // First dot up
33
+ "...", // All dots down
34
+ "·..", // First dot up
35
+ ".·.", // Middle dot up
36
+ "..·", // Last dot up
37
+ ".·.", // Middle dot up
38
+ "·..", // First dot up
34
39
  ];
35
40
  /**
36
41
  * Component that displays elapsed time for waiting/streaming
37
42
  */
38
43
  function WaitingElapsedTime({ startTime }) {
39
- const [elapsed, setElapsed] = useState(0);
40
- const [thinkingWord, setThinkingWord] = useState(() => THINKING_WORDS[Math.floor(Math.random() * THINKING_WORDS.length)]);
41
- const [dotIndex, setDotIndex] = useState(0);
42
- useEffect(() => {
43
- // Update elapsed time every 100ms for smooth updates
44
- const interval = setInterval(() => {
45
- const now = Date.now();
46
- const elapsedMs = now - startTime;
47
- setElapsed(elapsedMs);
48
- }, 100);
49
- return () => clearInterval(interval);
50
- }, [startTime]);
51
- useEffect(() => {
52
- // Change to random thinking word every 1.5 seconds
53
- const wordInterval = setInterval(() => {
54
- const randomIndex = Math.floor(Math.random() * THINKING_WORDS.length);
55
- setThinkingWord(THINKING_WORDS[randomIndex]);
56
- }, 1500);
57
- return () => clearInterval(wordInterval);
58
- }, []);
59
- useEffect(() => {
60
- // Animate dots every 100ms for bouncing effect
61
- const dotInterval = setInterval(() => {
62
- setDotIndex((prev) => (prev + 1) % DOT_ANIMATIONS.length);
63
- }, 100);
64
- return () => clearInterval(dotInterval);
65
- }, []);
66
- // Format elapsed time as seconds with 1 decimal place
67
- const seconds = (elapsed / 1000).toFixed(1);
68
- const animatedDots = DOT_ANIMATIONS[dotIndex];
69
- return (_jsxs(Text, { color: "red", children: [thinkingWord, animatedDots, " ", seconds, "s"] }));
44
+ const [elapsed, setElapsed] = useState(0);
45
+ const [thinkingWord, setThinkingWord] = useState(
46
+ () => THINKING_WORDS[Math.floor(Math.random() * THINKING_WORDS.length)],
47
+ );
48
+ const [dotIndex, setDotIndex] = useState(0);
49
+ useEffect(() => {
50
+ // Update elapsed time every 100ms for smooth updates
51
+ const interval = setInterval(() => {
52
+ const now = Date.now();
53
+ const elapsedMs = now - startTime;
54
+ setElapsed(elapsedMs);
55
+ }, 100);
56
+ return () => clearInterval(interval);
57
+ }, [startTime]);
58
+ useEffect(() => {
59
+ // Change to random thinking word every 1.5 seconds
60
+ const wordInterval = setInterval(() => {
61
+ const randomIndex = Math.floor(Math.random() * THINKING_WORDS.length);
62
+ setThinkingWord(THINKING_WORDS[randomIndex]);
63
+ }, 1500);
64
+ return () => clearInterval(wordInterval);
65
+ }, []);
66
+ useEffect(() => {
67
+ // Animate dots every 100ms for bouncing effect
68
+ const dotInterval = setInterval(() => {
69
+ setDotIndex((prev) => (prev + 1) % DOT_ANIMATIONS.length);
70
+ }, 100);
71
+ return () => clearInterval(dotInterval);
72
+ }, []);
73
+ // Format elapsed time as seconds with 1 decimal place
74
+ const seconds = (elapsed / 1000).toFixed(1);
75
+ const animatedDots = DOT_ANIMATIONS[dotIndex];
76
+ return _jsxs(Text, {
77
+ color: "red",
78
+ children: [thinkingWord, animatedDots, " ", seconds, "s"],
79
+ });
70
80
  }
71
- export function StatusBar({ connectionStatus, isStreaming, streamingStartTime, hasStreamingContent, }) {
72
- const statusColor = connectionStatus === "connected"
73
- ? "green"
74
- : connectionStatus === "connecting"
75
- ? "yellow"
76
- : connectionStatus === "error"
77
- ? "red"
78
- : "gray";
79
- // Only show waiting indicator when streaming but haven't received content yet
80
- const showWaiting = isStreaming && streamingStartTime && !hasStreamingContent;
81
- return (_jsxs(Box, { flexDirection: "row", gap: 2, paddingY: 1, children: [_jsxs(Text, { children: ["Status: ", _jsx(Text, { color: statusColor, children: connectionStatus })] }), showWaiting && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsx(WaitingElapsedTime, { startTime: streamingStartTime })] }))] }));
81
+ export function StatusBar({
82
+ connectionStatus,
83
+ isStreaming,
84
+ streamingStartTime,
85
+ hasStreamingContent,
86
+ }) {
87
+ const statusColor =
88
+ connectionStatus === "connected"
89
+ ? "green"
90
+ : connectionStatus === "connecting"
91
+ ? "yellow"
92
+ : connectionStatus === "error"
93
+ ? "red"
94
+ : "gray";
95
+ // Only show waiting indicator when streaming but haven't received content yet
96
+ const showWaiting = isStreaming && streamingStartTime && !hasStreamingContent;
97
+ return _jsxs(Box, {
98
+ flexDirection: "row",
99
+ gap: 2,
100
+ paddingY: 1,
101
+ children: [
102
+ _jsxs(Text, {
103
+ children: [
104
+ "Status: ",
105
+ _jsx(Text, { color: statusColor, children: connectionStatus }),
106
+ ],
107
+ }),
108
+ showWaiting &&
109
+ _jsxs(_Fragment, {
110
+ children: [
111
+ _jsx(Text, { children: " " }),
112
+ _jsx(WaitingElapsedTime, { startTime: streamingStartTime }),
113
+ ],
114
+ }),
115
+ ],
116
+ });
82
117
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../../../src/tui/components/StatusBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@townco/ui",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "devDependencies": {
61
61
  "@tailwindcss/postcss": "^4.1.17",
62
- "@townco/tsconfig": "0.1.5",
62
+ "@townco/tsconfig": "0.1.6",
63
63
  "@types/node": "^24.10.0",
64
64
  "@types/react": "^19.2.2",
65
65
  "ink": "^6.4.0",