claude-code-plus-plus 0.2.1 → 0.2.3

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 (376) hide show
  1. package/dist/sidebar/app.d.ts +2 -0
  2. package/dist/sidebar/app.d.ts.map +1 -1
  3. package/dist/sidebar/app.js +30 -3
  4. package/dist/sidebar/app.js.map +1 -1
  5. package/dist/sidebar/render.d.ts +4 -0
  6. package/dist/sidebar/render.d.ts.map +1 -1
  7. package/dist/sidebar/render.js +65 -0
  8. package/dist/sidebar/render.js.map +1 -1
  9. package/dist/types.d.ts +2 -1
  10. package/dist/types.d.ts.map +1 -1
  11. package/dist/types.js.map +1 -1
  12. package/package.json +1 -1
  13. package/dist/app.d.ts +0 -52
  14. package/dist/app.d.ts.map +0 -1
  15. package/dist/app.js +0 -318
  16. package/dist/app.js.map +0 -1
  17. package/dist/core/index.d.ts +0 -14
  18. package/dist/core/index.d.ts.map +0 -1
  19. package/dist/core/index.js +0 -14
  20. package/dist/core/index.js.map +0 -1
  21. package/dist/core/session/index.d.ts +0 -7
  22. package/dist/core/session/index.d.ts.map +0 -1
  23. package/dist/core/session/index.js +0 -6
  24. package/dist/core/session/index.js.map +0 -1
  25. package/dist/core/session/session-manager.d.ts +0 -46
  26. package/dist/core/session/session-manager.d.ts.map +0 -1
  27. package/dist/core/session/session-manager.js +0 -245
  28. package/dist/core/session/session-manager.js.map +0 -1
  29. package/dist/core/session/session.d.ts +0 -44
  30. package/dist/core/session/session.d.ts.map +0 -1
  31. package/dist/core/session/session.js +0 -78
  32. package/dist/core/session/session.js.map +0 -1
  33. package/dist/core/terminal/index.d.ts +0 -7
  34. package/dist/core/terminal/index.d.ts.map +0 -1
  35. package/dist/core/terminal/index.js +0 -6
  36. package/dist/core/terminal/index.js.map +0 -1
  37. package/dist/core/terminal/terminal-manager.d.ts +0 -36
  38. package/dist/core/terminal/terminal-manager.d.ts.map +0 -1
  39. package/dist/core/terminal/terminal-manager.js +0 -182
  40. package/dist/core/terminal/terminal-manager.js.map +0 -1
  41. package/dist/core/terminal/terminal.d.ts +0 -27
  42. package/dist/core/terminal/terminal.d.ts.map +0 -1
  43. package/dist/core/terminal/terminal.js +0 -38
  44. package/dist/core/terminal/terminal.js.map +0 -1
  45. package/dist/core/workspace/index.d.ts +0 -7
  46. package/dist/core/workspace/index.d.ts.map +0 -1
  47. package/dist/core/workspace/index.js +0 -6
  48. package/dist/core/workspace/index.js.map +0 -1
  49. package/dist/core/workspace/workspace-manager.d.ts +0 -59
  50. package/dist/core/workspace/workspace-manager.d.ts.map +0 -1
  51. package/dist/core/workspace/workspace-manager.js +0 -224
  52. package/dist/core/workspace/workspace-manager.js.map +0 -1
  53. package/dist/core/workspace/workspace.d.ts +0 -56
  54. package/dist/core/workspace/workspace.d.ts.map +0 -1
  55. package/dist/core/workspace/workspace.js +0 -96
  56. package/dist/core/workspace/workspace.js.map +0 -1
  57. package/dist/core/worktree/index.d.ts +0 -7
  58. package/dist/core/worktree/index.d.ts.map +0 -1
  59. package/dist/core/worktree/index.js +0 -6
  60. package/dist/core/worktree/index.js.map +0 -1
  61. package/dist/core/worktree/worktree-manager.d.ts +0 -47
  62. package/dist/core/worktree/worktree-manager.d.ts.map +0 -1
  63. package/dist/core/worktree/worktree-manager.js +0 -170
  64. package/dist/core/worktree/worktree-manager.js.map +0 -1
  65. package/dist/core/worktree/worktree.d.ts +0 -35
  66. package/dist/core/worktree/worktree.d.ts.map +0 -1
  67. package/dist/core/worktree/worktree.js +0 -50
  68. package/dist/core/worktree/worktree.js.map +0 -1
  69. package/dist/core/worktree-manager.d.ts +0 -26
  70. package/dist/core/worktree-manager.d.ts.map +0 -1
  71. package/dist/core/worktree-manager.js +0 -177
  72. package/dist/core/worktree-manager.js.map +0 -1
  73. package/dist/events/bus.d.ts +0 -76
  74. package/dist/events/bus.d.ts.map +0 -1
  75. package/dist/events/bus.js +0 -223
  76. package/dist/events/bus.js.map +0 -1
  77. package/dist/events/handlers/index.d.ts +0 -28
  78. package/dist/events/handlers/index.d.ts.map +0 -1
  79. package/dist/events/handlers/index.js +0 -44
  80. package/dist/events/handlers/index.js.map +0 -1
  81. package/dist/events/handlers/session-events.d.ts +0 -12
  82. package/dist/events/handlers/session-events.d.ts.map +0 -1
  83. package/dist/events/handlers/session-events.js +0 -38
  84. package/dist/events/handlers/session-events.js.map +0 -1
  85. package/dist/events/handlers/terminal-events.d.ts +0 -12
  86. package/dist/events/handlers/terminal-events.d.ts.map +0 -1
  87. package/dist/events/handlers/terminal-events.js +0 -37
  88. package/dist/events/handlers/terminal-events.js.map +0 -1
  89. package/dist/events/handlers/ui-events.d.ts +0 -11
  90. package/dist/events/handlers/ui-events.d.ts.map +0 -1
  91. package/dist/events/handlers/ui-events.js +0 -202
  92. package/dist/events/handlers/ui-events.js.map +0 -1
  93. package/dist/events/index.d.ts +0 -9
  94. package/dist/events/index.d.ts.map +0 -1
  95. package/dist/events/index.js +0 -10
  96. package/dist/events/index.js.map +0 -1
  97. package/dist/multiplexer/base.d.ts +0 -73
  98. package/dist/multiplexer/base.d.ts.map +0 -1
  99. package/dist/multiplexer/base.js +0 -68
  100. package/dist/multiplexer/base.js.map +0 -1
  101. package/dist/multiplexer/factory.d.ts +0 -28
  102. package/dist/multiplexer/factory.d.ts.map +0 -1
  103. package/dist/multiplexer/factory.js +0 -72
  104. package/dist/multiplexer/factory.js.map +0 -1
  105. package/dist/multiplexer/index.d.ts +0 -14
  106. package/dist/multiplexer/index.d.ts.map +0 -1
  107. package/dist/multiplexer/index.js +0 -15
  108. package/dist/multiplexer/index.js.map +0 -1
  109. package/dist/multiplexer/tmux/index.d.ts +0 -9
  110. package/dist/multiplexer/tmux/index.d.ts.map +0 -1
  111. package/dist/multiplexer/tmux/index.js +0 -7
  112. package/dist/multiplexer/tmux/index.js.map +0 -1
  113. package/dist/multiplexer/tmux/tmux-commands.d.ts +0 -96
  114. package/dist/multiplexer/tmux/tmux-commands.d.ts.map +0 -1
  115. package/dist/multiplexer/tmux/tmux-commands.js +0 -282
  116. package/dist/multiplexer/tmux/tmux-commands.js.map +0 -1
  117. package/dist/multiplexer/tmux/tmux-config.d.ts +0 -57
  118. package/dist/multiplexer/tmux/tmux-config.d.ts.map +0 -1
  119. package/dist/multiplexer/tmux/tmux-config.js +0 -103
  120. package/dist/multiplexer/tmux/tmux-config.js.map +0 -1
  121. package/dist/multiplexer/tmux/tmux-multiplexer.d.ts +0 -94
  122. package/dist/multiplexer/tmux/tmux-multiplexer.d.ts.map +0 -1
  123. package/dist/multiplexer/tmux/tmux-multiplexer.js +0 -302
  124. package/dist/multiplexer/tmux/tmux-multiplexer.js.map +0 -1
  125. package/dist/multiplexer/windows/index.d.ts +0 -5
  126. package/dist/multiplexer/windows/index.d.ts.map +0 -1
  127. package/dist/multiplexer/windows/index.js +0 -5
  128. package/dist/multiplexer/windows/index.js.map +0 -1
  129. package/dist/multiplexer/windows/windows-multiplexer.d.ts +0 -61
  130. package/dist/multiplexer/windows/windows-multiplexer.d.ts.map +0 -1
  131. package/dist/multiplexer/windows/windows-multiplexer.js +0 -151
  132. package/dist/multiplexer/windows/windows-multiplexer.js.map +0 -1
  133. package/dist/services/claude/claude-detector.d.ts +0 -37
  134. package/dist/services/claude/claude-detector.d.ts.map +0 -1
  135. package/dist/services/claude/claude-detector.js +0 -83
  136. package/dist/services/claude/claude-detector.js.map +0 -1
  137. package/dist/services/claude/claude-service.d.ts +0 -57
  138. package/dist/services/claude/claude-service.d.ts.map +0 -1
  139. package/dist/services/claude/claude-service.js +0 -108
  140. package/dist/services/claude/claude-service.js.map +0 -1
  141. package/dist/services/claude/index.d.ts +0 -7
  142. package/dist/services/claude/index.d.ts.map +0 -1
  143. package/dist/services/claude/index.js +0 -6
  144. package/dist/services/claude/index.js.map +0 -1
  145. package/dist/services/git/branch-service.d.ts +0 -64
  146. package/dist/services/git/branch-service.d.ts.map +0 -1
  147. package/dist/services/git/branch-service.js +0 -217
  148. package/dist/services/git/branch-service.js.map +0 -1
  149. package/dist/services/git/git-service.d.ts +0 -44
  150. package/dist/services/git/git-service.d.ts.map +0 -1
  151. package/dist/services/git/git-service.js +0 -145
  152. package/dist/services/git/git-service.js.map +0 -1
  153. package/dist/services/git/index.d.ts +0 -8
  154. package/dist/services/git/index.d.ts.map +0 -1
  155. package/dist/services/git/index.js +0 -7
  156. package/dist/services/git/index.js.map +0 -1
  157. package/dist/services/git/worktree-service.d.ts +0 -61
  158. package/dist/services/git/worktree-service.d.ts.map +0 -1
  159. package/dist/services/git/worktree-service.js +0 -243
  160. package/dist/services/git/worktree-service.js.map +0 -1
  161. package/dist/services/index.d.ts +0 -12
  162. package/dist/services/index.d.ts.map +0 -1
  163. package/dist/services/index.js +0 -12
  164. package/dist/services/index.js.map +0 -1
  165. package/dist/services/process/index.d.ts +0 -8
  166. package/dist/services/process/index.d.ts.map +0 -1
  167. package/dist/services/process/index.js +0 -6
  168. package/dist/services/process/index.js.map +0 -1
  169. package/dist/services/process/process-monitor.d.ts +0 -98
  170. package/dist/services/process/process-monitor.d.ts.map +0 -1
  171. package/dist/services/process/process-monitor.js +0 -173
  172. package/dist/services/process/process-monitor.js.map +0 -1
  173. package/dist/services/process/process-spawner.d.ts +0 -55
  174. package/dist/services/process/process-spawner.d.ts.map +0 -1
  175. package/dist/services/process/process-spawner.js +0 -93
  176. package/dist/services/process/process-spawner.js.map +0 -1
  177. package/dist/sidebar.d.ts +0 -13
  178. package/dist/sidebar.d.ts.map +0 -1
  179. package/dist/sidebar.js +0 -1535
  180. package/dist/sidebar.js.map +0 -1
  181. package/dist/state/actions.d.ts +0 -49
  182. package/dist/state/actions.d.ts.map +0 -1
  183. package/dist/state/actions.js +0 -512
  184. package/dist/state/actions.js.map +0 -1
  185. package/dist/state/index.d.ts +0 -16
  186. package/dist/state/index.d.ts.map +0 -1
  187. package/dist/state/index.js +0 -28
  188. package/dist/state/index.js.map +0 -1
  189. package/dist/state/middleware/index.d.ts +0 -7
  190. package/dist/state/middleware/index.d.ts.map +0 -1
  191. package/dist/state/middleware/index.js +0 -6
  192. package/dist/state/middleware/index.js.map +0 -1
  193. package/dist/state/middleware/logger.d.ts +0 -22
  194. package/dist/state/middleware/logger.d.ts.map +0 -1
  195. package/dist/state/middleware/logger.js +0 -45
  196. package/dist/state/middleware/logger.js.map +0 -1
  197. package/dist/state/middleware/persistence.d.ts +0 -29
  198. package/dist/state/middleware/persistence.d.ts.map +0 -1
  199. package/dist/state/middleware/persistence.js +0 -71
  200. package/dist/state/middleware/persistence.js.map +0 -1
  201. package/dist/state/persistence/file-adapter.d.ts +0 -48
  202. package/dist/state/persistence/file-adapter.d.ts.map +0 -1
  203. package/dist/state/persistence/file-adapter.js +0 -96
  204. package/dist/state/persistence/file-adapter.js.map +0 -1
  205. package/dist/state/persistence/index.d.ts +0 -8
  206. package/dist/state/persistence/index.d.ts.map +0 -1
  207. package/dist/state/persistence/index.js +0 -6
  208. package/dist/state/persistence/index.js.map +0 -1
  209. package/dist/state/persistence/serializer.d.ts +0 -41
  210. package/dist/state/persistence/serializer.d.ts.map +0 -1
  211. package/dist/state/persistence/serializer.js +0 -114
  212. package/dist/state/persistence/serializer.js.map +0 -1
  213. package/dist/state/selectors.d.ts +0 -67
  214. package/dist/state/selectors.d.ts.map +0 -1
  215. package/dist/state/selectors.js +0 -177
  216. package/dist/state/selectors.js.map +0 -1
  217. package/dist/state/store.d.ts +0 -86
  218. package/dist/state/store.d.ts.map +0 -1
  219. package/dist/state/store.js +0 -161
  220. package/dist/state/store.js.map +0 -1
  221. package/dist/state/types.d.ts +0 -269
  222. package/dist/state/types.d.ts.map +0 -1
  223. package/dist/state/types.js +0 -7
  224. package/dist/state/types.js.map +0 -1
  225. package/dist/state.d.ts +0 -53
  226. package/dist/state.d.ts.map +0 -1
  227. package/dist/state.js +0 -101
  228. package/dist/state.js.map +0 -1
  229. package/dist/terminal-manager.d.ts +0 -16
  230. package/dist/terminal-manager.d.ts.map +0 -1
  231. package/dist/terminal-manager.js +0 -364
  232. package/dist/terminal-manager.js.map +0 -1
  233. package/dist/tmux.d.ts +0 -163
  234. package/dist/tmux.d.ts.map +0 -1
  235. package/dist/tmux.js +0 -360
  236. package/dist/tmux.js.map +0 -1
  237. package/dist/types/config.d.ts +0 -103
  238. package/dist/types/config.d.ts.map +0 -1
  239. package/dist/types/config.js +0 -7
  240. package/dist/types/config.js.map +0 -1
  241. package/dist/types/entities.d.ts +0 -88
  242. package/dist/types/entities.d.ts.map +0 -1
  243. package/dist/types/entities.js +0 -8
  244. package/dist/types/entities.js.map +0 -1
  245. package/dist/types/events.d.ts +0 -156
  246. package/dist/types/events.d.ts.map +0 -1
  247. package/dist/types/events.js +0 -8
  248. package/dist/types/events.js.map +0 -1
  249. package/dist/types/index.d.ts +0 -11
  250. package/dist/types/index.d.ts.map +0 -1
  251. package/dist/types/index.js +0 -8
  252. package/dist/types/index.js.map +0 -1
  253. package/dist/types/multiplexer.d.ts +0 -238
  254. package/dist/types/multiplexer.d.ts.map +0 -1
  255. package/dist/types/multiplexer.js +0 -8
  256. package/dist/types/multiplexer.js.map +0 -1
  257. package/dist/ui/components/base.d.ts +0 -155
  258. package/dist/ui/components/base.d.ts.map +0 -1
  259. package/dist/ui/components/base.js +0 -269
  260. package/dist/ui/components/base.js.map +0 -1
  261. package/dist/ui/components/index.d.ts +0 -10
  262. package/dist/ui/components/index.d.ts.map +0 -1
  263. package/dist/ui/components/index.js +0 -10
  264. package/dist/ui/components/index.js.map +0 -1
  265. package/dist/ui/components/input-field.d.ts +0 -98
  266. package/dist/ui/components/input-field.d.ts.map +0 -1
  267. package/dist/ui/components/input-field.js +0 -274
  268. package/dist/ui/components/input-field.js.map +0 -1
  269. package/dist/ui/components/list.d.ts +0 -94
  270. package/dist/ui/components/list.d.ts.map +0 -1
  271. package/dist/ui/components/list.js +0 -294
  272. package/dist/ui/components/list.js.map +0 -1
  273. package/dist/ui/components/modal.d.ts +0 -83
  274. package/dist/ui/components/modal.d.ts.map +0 -1
  275. package/dist/ui/components/modal.js +0 -249
  276. package/dist/ui/components/modal.js.map +0 -1
  277. package/dist/ui/components/tabs.d.ts +0 -97
  278. package/dist/ui/components/tabs.d.ts.map +0 -1
  279. package/dist/ui/components/tabs.js +0 -252
  280. package/dist/ui/components/tabs.js.map +0 -1
  281. package/dist/ui/components/text.d.ts +0 -60
  282. package/dist/ui/components/text.d.ts.map +0 -1
  283. package/dist/ui/components/text.js +0 -224
  284. package/dist/ui/components/text.js.map +0 -1
  285. package/dist/ui/index.d.ts +0 -12
  286. package/dist/ui/index.d.ts.map +0 -1
  287. package/dist/ui/index.js +0 -18
  288. package/dist/ui/index.js.map +0 -1
  289. package/dist/ui/input/index.d.ts +0 -8
  290. package/dist/ui/input/index.d.ts.map +0 -1
  291. package/dist/ui/input/index.js +0 -8
  292. package/dist/ui/input/index.js.map +0 -1
  293. package/dist/ui/input/input-manager.d.ts +0 -83
  294. package/dist/ui/input/input-manager.d.ts.map +0 -1
  295. package/dist/ui/input/input-manager.js +0 -200
  296. package/dist/ui/input/input-manager.js.map +0 -1
  297. package/dist/ui/input/keybindings.d.ts +0 -47
  298. package/dist/ui/input/keybindings.d.ts.map +0 -1
  299. package/dist/ui/input/keybindings.js +0 -168
  300. package/dist/ui/input/keybindings.js.map +0 -1
  301. package/dist/ui/input/keyboard.d.ts +0 -24
  302. package/dist/ui/input/keyboard.d.ts.map +0 -1
  303. package/dist/ui/input/keyboard.js +0 -230
  304. package/dist/ui/input/keyboard.js.map +0 -1
  305. package/dist/ui/input/mouse.d.ts +0 -44
  306. package/dist/ui/input/mouse.d.ts.map +0 -1
  307. package/dist/ui/input/mouse.js +0 -161
  308. package/dist/ui/input/mouse.js.map +0 -1
  309. package/dist/ui/layout/box.d.ts +0 -63
  310. package/dist/ui/layout/box.d.ts.map +0 -1
  311. package/dist/ui/layout/box.js +0 -160
  312. package/dist/ui/layout/box.js.map +0 -1
  313. package/dist/ui/layout/constraints.d.ts +0 -77
  314. package/dist/ui/layout/constraints.d.ts.map +0 -1
  315. package/dist/ui/layout/constraints.js +0 -154
  316. package/dist/ui/layout/constraints.js.map +0 -1
  317. package/dist/ui/layout/flex.d.ts +0 -59
  318. package/dist/ui/layout/flex.d.ts.map +0 -1
  319. package/dist/ui/layout/flex.js +0 -163
  320. package/dist/ui/layout/flex.js.map +0 -1
  321. package/dist/ui/layout/index.d.ts +0 -7
  322. package/dist/ui/layout/index.d.ts.map +0 -1
  323. package/dist/ui/layout/index.js +0 -7
  324. package/dist/ui/layout/index.js.map +0 -1
  325. package/dist/ui/modals/delete-modal.d.ts +0 -27
  326. package/dist/ui/modals/delete-modal.d.ts.map +0 -1
  327. package/dist/ui/modals/delete-modal.js +0 -59
  328. package/dist/ui/modals/delete-modal.js.map +0 -1
  329. package/dist/ui/modals/index.d.ts +0 -7
  330. package/dist/ui/modals/index.d.ts.map +0 -1
  331. package/dist/ui/modals/index.js +0 -7
  332. package/dist/ui/modals/index.js.map +0 -1
  333. package/dist/ui/modals/input-modal.d.ts +0 -66
  334. package/dist/ui/modals/input-modal.d.ts.map +0 -1
  335. package/dist/ui/modals/input-modal.js +0 -185
  336. package/dist/ui/modals/input-modal.js.map +0 -1
  337. package/dist/ui/modals/quit-modal.d.ts +0 -30
  338. package/dist/ui/modals/quit-modal.d.ts.map +0 -1
  339. package/dist/ui/modals/quit-modal.js +0 -65
  340. package/dist/ui/modals/quit-modal.js.map +0 -1
  341. package/dist/ui/renderer/ansi.d.ts +0 -206
  342. package/dist/ui/renderer/ansi.d.ts.map +0 -1
  343. package/dist/ui/renderer/ansi.js +0 -318
  344. package/dist/ui/renderer/ansi.js.map +0 -1
  345. package/dist/ui/renderer/canvas.d.ts +0 -126
  346. package/dist/ui/renderer/canvas.d.ts.map +0 -1
  347. package/dist/ui/renderer/canvas.js +0 -346
  348. package/dist/ui/renderer/canvas.js.map +0 -1
  349. package/dist/ui/renderer/colors.d.ts +0 -65
  350. package/dist/ui/renderer/colors.d.ts.map +0 -1
  351. package/dist/ui/renderer/colors.js +0 -260
  352. package/dist/ui/renderer/colors.js.map +0 -1
  353. package/dist/ui/renderer/index.d.ts +0 -8
  354. package/dist/ui/renderer/index.d.ts.map +0 -1
  355. package/dist/ui/renderer/index.js +0 -8
  356. package/dist/ui/renderer/index.js.map +0 -1
  357. package/dist/ui/renderer/symbols.d.ts +0 -176
  358. package/dist/ui/renderer/symbols.d.ts.map +0 -1
  359. package/dist/ui/renderer/symbols.js +0 -246
  360. package/dist/ui/renderer/symbols.js.map +0 -1
  361. package/dist/ui/views/index.d.ts +0 -7
  362. package/dist/ui/views/index.d.ts.map +0 -1
  363. package/dist/ui/views/index.js +0 -7
  364. package/dist/ui/views/index.js.map +0 -1
  365. package/dist/ui/views/sidebar-view.d.ts +0 -89
  366. package/dist/ui/views/sidebar-view.d.ts.map +0 -1
  367. package/dist/ui/views/sidebar-view.js +0 -259
  368. package/dist/ui/views/sidebar-view.js.map +0 -1
  369. package/dist/ui/views/terminal-bar-view.d.ts +0 -67
  370. package/dist/ui/views/terminal-bar-view.d.ts.map +0 -1
  371. package/dist/ui/views/terminal-bar-view.js +0 -172
  372. package/dist/ui/views/terminal-bar-view.js.map +0 -1
  373. package/dist/ui/views/welcome-view.d.ts +0 -34
  374. package/dist/ui/views/welcome-view.d.ts.map +0 -1
  375. package/dist/ui/views/welcome-view.js +0 -116
  376. package/dist/ui/views/welcome-view.js.map +0 -1
@@ -1,269 +0,0 @@
1
- /**
2
- * Base Component
3
- *
4
- * Abstract base class for all UI components.
5
- */
6
- // ============================================================================
7
- // Base Component Class
8
- // ============================================================================
9
- export class Component {
10
- id;
11
- visible = true;
12
- focused = false;
13
- disabled = false;
14
- style = {};
15
- constraints = {};
16
- bounds = { x: 0, y: 0, width: 0, height: 0 };
17
- mounted = false;
18
- constructor(props = {}) {
19
- this.id = props.id ?? generateComponentId();
20
- this.visible = props.visible ?? true;
21
- this.focused = props.focused ?? false;
22
- this.disabled = props.disabled ?? false;
23
- this.style = props.style ?? {};
24
- this.constraints = props.constraints ?? {};
25
- }
26
- // ============================================================================
27
- // Lifecycle Methods
28
- // ============================================================================
29
- /**
30
- * Called when component is added to the UI tree
31
- */
32
- mount() {
33
- this.mounted = true;
34
- this.onMount();
35
- }
36
- /**
37
- * Called when component is removed from the UI tree
38
- */
39
- unmount() {
40
- this.onUnmount();
41
- this.mounted = false;
42
- }
43
- /**
44
- * Override to perform setup on mount
45
- */
46
- onMount() { }
47
- /**
48
- * Override to perform cleanup on unmount
49
- */
50
- onUnmount() { }
51
- /**
52
- * Get the minimum size of this component
53
- */
54
- getMinSize() {
55
- return { width: 0, height: 0 };
56
- }
57
- /**
58
- * Set the bounds of this component
59
- */
60
- setBounds(bounds) {
61
- this.bounds = bounds;
62
- }
63
- /**
64
- * Get the current bounds
65
- */
66
- getBounds() {
67
- return this.bounds;
68
- }
69
- // ============================================================================
70
- // Input Handling
71
- // ============================================================================
72
- /**
73
- * Handle a keyboard event
74
- * @returns true if the event was handled
75
- */
76
- handleKey(event) {
77
- return false;
78
- }
79
- /**
80
- * Handle a mouse event
81
- * @returns true if the event was handled
82
- */
83
- handleMouse(event) {
84
- return false;
85
- }
86
- // ============================================================================
87
- // Hit Testing
88
- // ============================================================================
89
- /**
90
- * Test if a point hits this component
91
- */
92
- hitTest(x, y) {
93
- if (!this.visible)
94
- return null;
95
- if (!this.containsPoint(x, y))
96
- return null;
97
- return {
98
- component: this,
99
- x: x - this.bounds.x,
100
- y: y - this.bounds.y,
101
- };
102
- }
103
- /**
104
- * Check if a point is within this component's bounds
105
- */
106
- containsPoint(x, y) {
107
- return (x >= this.bounds.x &&
108
- x < this.bounds.x + this.bounds.width &&
109
- y >= this.bounds.y &&
110
- y < this.bounds.y + this.bounds.height);
111
- }
112
- // ============================================================================
113
- // Focus Management
114
- // ============================================================================
115
- /**
116
- * Request focus for this component
117
- */
118
- focus() {
119
- this.focused = true;
120
- this.onFocus();
121
- }
122
- /**
123
- * Remove focus from this component
124
- */
125
- blur() {
126
- this.focused = false;
127
- this.onBlur();
128
- }
129
- /**
130
- * Override to handle focus gain
131
- */
132
- onFocus() { }
133
- /**
134
- * Override to handle focus loss
135
- */
136
- onBlur() { }
137
- /**
138
- * Check if this component can receive focus
139
- */
140
- isFocusable() {
141
- return this.visible && !this.disabled;
142
- }
143
- // ============================================================================
144
- // State
145
- // ============================================================================
146
- /**
147
- * Enable the component
148
- */
149
- enable() {
150
- this.disabled = false;
151
- }
152
- /**
153
- * Disable the component
154
- */
155
- disable() {
156
- this.disabled = true;
157
- if (this.focused) {
158
- this.blur();
159
- }
160
- }
161
- /**
162
- * Show the component
163
- */
164
- show() {
165
- this.visible = true;
166
- }
167
- /**
168
- * Hide the component
169
- */
170
- hide() {
171
- this.visible = false;
172
- if (this.focused) {
173
- this.blur();
174
- }
175
- }
176
- }
177
- // ============================================================================
178
- // Container Component
179
- // ============================================================================
180
- export class ContainerComponent extends Component {
181
- children = [];
182
- /**
183
- * Add a child component
184
- */
185
- addChild(child) {
186
- this.children.push(child);
187
- if (this.mounted) {
188
- child.mount();
189
- }
190
- }
191
- /**
192
- * Remove a child component
193
- */
194
- removeChild(child) {
195
- const index = this.children.indexOf(child);
196
- if (index !== -1) {
197
- if (this.mounted) {
198
- child.unmount();
199
- }
200
- this.children.splice(index, 1);
201
- }
202
- }
203
- /**
204
- * Remove all children
205
- */
206
- clearChildren() {
207
- for (const child of this.children) {
208
- if (this.mounted) {
209
- child.unmount();
210
- }
211
- }
212
- this.children = [];
213
- }
214
- /**
215
- * Get child by ID
216
- */
217
- getChild(id) {
218
- return this.children.find((c) => c.id === id);
219
- }
220
- /**
221
- * Get all children
222
- */
223
- getChildren() {
224
- return this.children;
225
- }
226
- mount() {
227
- super.mount();
228
- for (const child of this.children) {
229
- child.mount();
230
- }
231
- }
232
- unmount() {
233
- for (const child of this.children) {
234
- child.unmount();
235
- }
236
- super.unmount();
237
- }
238
- hitTest(x, y) {
239
- if (!this.visible)
240
- return null;
241
- if (!this.containsPoint(x, y))
242
- return null;
243
- // Check children in reverse order (top to bottom)
244
- for (let i = this.children.length - 1; i >= 0; i--) {
245
- const result = this.children[i].hitTest(x, y);
246
- if (result)
247
- return result;
248
- }
249
- return {
250
- component: this,
251
- x: x - this.bounds.x,
252
- y: y - this.bounds.y,
253
- };
254
- }
255
- }
256
- // ============================================================================
257
- // Helpers
258
- // ============================================================================
259
- let componentIdCounter = 0;
260
- function generateComponentId() {
261
- return `component-${++componentIdCounter}`;
262
- }
263
- /**
264
- * Reset component ID counter (for testing)
265
- */
266
- export function resetComponentIdCounter() {
267
- componentIdCounter = 0;
268
- }
269
- //# sourceMappingURL=base.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/ui/components/base.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Components Module
3
- */
4
- export { Component, ContainerComponent, resetComponentIdCounter, type HitResult, type ComponentProps, } from './base';
5
- export { Text, createText, truncate, truncateWithEllipsis, wrapText, padText, type TextAlign, type TextProps, } from './text';
6
- export { List, createList, type ListItem, type ListProps, type ListSelectHandler, } from './list';
7
- export { Tabs, createTabs, type Tab, type TabsProps, type TabSelectHandler, type TabCloseHandler, } from './tabs';
8
- export { InputField, createInputField, type InputFieldProps, type InputChangeHandler, type InputSubmitHandler, } from './input-field';
9
- export { Modal, createModal, ConfirmModal, createConfirmModal, type ModalProps, type ModalCloseHandler, type ConfirmModalProps, type ConfirmHandler, } from './modal';
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,OAAO,EACP,KAAK,SAAS,EACd,KAAK,SAAS,GACf,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,iBAAiB,GACvB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,KAAK,GAAG,EACR,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,SAAS,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * Components Module
3
- */
4
- export { Component, ContainerComponent, resetComponentIdCounter, } from './base';
5
- export { Text, createText, truncate, truncateWithEllipsis, wrapText, padText, } from './text';
6
- export { List, createList, } from './list';
7
- export { Tabs, createTabs, } from './tabs';
8
- export { InputField, createInputField, } from './input-field';
9
- export { Modal, createModal, ConfirmModal, createConfirmModal, } from './modal';
10
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/components/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,uBAAuB,GAGxB,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,oBAAoB,EACpB,QAAQ,EACR,OAAO,GAGR,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,GAIX,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,IAAI,EACJ,UAAU,GAKX,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,UAAU,EACV,gBAAgB,GAIjB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,EACL,WAAW,EACX,YAAY,EACZ,kBAAkB,GAKnB,MAAM,SAAS,CAAC"}
@@ -1,98 +0,0 @@
1
- /**
2
- * Input Field Component
3
- *
4
- * A text input field with cursor.
5
- */
6
- import type { Canvas } from '../renderer';
7
- import type { Bounds, Size } from '../layout';
8
- import { Component, type ComponentProps } from './base';
9
- import type { KeyEvent } from '../input/keyboard';
10
- export interface InputFieldProps extends ComponentProps {
11
- value?: string;
12
- placeholder?: string;
13
- maxLength?: number;
14
- password?: boolean;
15
- }
16
- export type InputChangeHandler = (value: string) => void;
17
- export type InputSubmitHandler = (value: string) => void;
18
- export declare class InputField extends Component {
19
- private value;
20
- private placeholder;
21
- private maxLength;
22
- private password;
23
- private cursorPos;
24
- private scrollOffset;
25
- private changeHandler;
26
- private submitHandler;
27
- constructor(props?: InputFieldProps);
28
- /**
29
- * Set the input value
30
- */
31
- setValue(value: string): void;
32
- /**
33
- * Get the input value
34
- */
35
- getValue(): string;
36
- /**
37
- * Clear the input
38
- */
39
- clear(): void;
40
- /**
41
- * Set change handler
42
- */
43
- onChange(handler: InputChangeHandler): void;
44
- /**
45
- * Set submit handler
46
- */
47
- onSubmit(handler: InputSubmitHandler): void;
48
- /**
49
- * Insert text at cursor
50
- */
51
- insertText(text: string): void;
52
- /**
53
- * Delete character before cursor
54
- */
55
- deleteCharBefore(): void;
56
- /**
57
- * Delete character after cursor
58
- */
59
- deleteCharAfter(): void;
60
- /**
61
- * Delete word before cursor
62
- */
63
- deleteWordBefore(): void;
64
- /**
65
- * Move cursor left
66
- */
67
- moveCursorLeft(): void;
68
- /**
69
- * Move cursor right
70
- */
71
- moveCursorRight(): void;
72
- /**
73
- * Move cursor to start
74
- */
75
- moveCursorToStart(): void;
76
- /**
77
- * Move cursor to end
78
- */
79
- moveCursorToEnd(): void;
80
- /**
81
- * Ensure cursor is visible by adjusting scroll
82
- */
83
- private ensureCursorVisible;
84
- /**
85
- * Submit the input
86
- */
87
- submit(): void;
88
- getPreferredSize(): Size;
89
- getMinSize(): Size;
90
- render(canvas: Canvas, bounds: Bounds): void;
91
- handleKey(event: KeyEvent): boolean;
92
- isFocusable(): boolean;
93
- }
94
- /**
95
- * Create an InputField component
96
- */
97
- export declare function createInputField(props?: InputFieldProps): InputField;
98
- //# sourceMappingURL=input-field.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input-field.d.ts","sourceRoot":"","sources":["../../../src/ui/components/input-field.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAS,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACzD,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAMzD,qBAAa,UAAW,SAAQ,SAAS;IACvC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,aAAa,CAAmC;gBAE5C,KAAK,GAAE,eAAoB;IASvC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAI3C;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAI3C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa9B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAWxB;;OAEG;IACH,eAAe,IAAI,IAAI;IASvB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAgBxB;;OAEG;IACH,cAAc,IAAI,IAAI;IAOtB;;OAEG;IACH,eAAe,IAAI,IAAI;IAOvB;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAKzB;;OAEG;IACH,eAAe,IAAI,IAAI;IAKvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,MAAM,IAAI,IAAI;IAId,gBAAgB,IAAI,IAAI;IAOxB,UAAU,IAAI,IAAI;IAIlB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsDnC,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IA4CnC,WAAW,IAAI,OAAO;CAGhC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,GAAE,eAAoB,GAAG,UAAU,CAExE"}
@@ -1,274 +0,0 @@
1
- /**
2
- * Input Field Component
3
- *
4
- * A text input field with cursor.
5
- */
6
- import { getTheme } from '../renderer/colors';
7
- import { Component } from './base';
8
- // ============================================================================
9
- // InputField Component
10
- // ============================================================================
11
- export class InputField extends Component {
12
- value = '';
13
- placeholder = '';
14
- maxLength = 256;
15
- password = false;
16
- cursorPos = 0;
17
- scrollOffset = 0;
18
- changeHandler = null;
19
- submitHandler = null;
20
- constructor(props = {}) {
21
- super(props);
22
- this.value = props.value ?? '';
23
- this.placeholder = props.placeholder ?? '';
24
- this.maxLength = props.maxLength ?? 256;
25
- this.password = props.password ?? false;
26
- this.cursorPos = this.value.length;
27
- }
28
- /**
29
- * Set the input value
30
- */
31
- setValue(value) {
32
- this.value = value.substring(0, this.maxLength);
33
- this.cursorPos = Math.min(this.cursorPos, this.value.length);
34
- }
35
- /**
36
- * Get the input value
37
- */
38
- getValue() {
39
- return this.value;
40
- }
41
- /**
42
- * Clear the input
43
- */
44
- clear() {
45
- this.value = '';
46
- this.cursorPos = 0;
47
- this.scrollOffset = 0;
48
- this.changeHandler?.(this.value);
49
- }
50
- /**
51
- * Set change handler
52
- */
53
- onChange(handler) {
54
- this.changeHandler = handler;
55
- }
56
- /**
57
- * Set submit handler
58
- */
59
- onSubmit(handler) {
60
- this.submitHandler = handler;
61
- }
62
- /**
63
- * Insert text at cursor
64
- */
65
- insertText(text) {
66
- const remaining = this.maxLength - this.value.length;
67
- const toInsert = text.substring(0, remaining);
68
- this.value =
69
- this.value.substring(0, this.cursorPos) +
70
- toInsert +
71
- this.value.substring(this.cursorPos);
72
- this.cursorPos += toInsert.length;
73
- this.ensureCursorVisible();
74
- this.changeHandler?.(this.value);
75
- }
76
- /**
77
- * Delete character before cursor
78
- */
79
- deleteCharBefore() {
80
- if (this.cursorPos > 0) {
81
- this.value =
82
- this.value.substring(0, this.cursorPos - 1) +
83
- this.value.substring(this.cursorPos);
84
- this.cursorPos--;
85
- this.ensureCursorVisible();
86
- this.changeHandler?.(this.value);
87
- }
88
- }
89
- /**
90
- * Delete character after cursor
91
- */
92
- deleteCharAfter() {
93
- if (this.cursorPos < this.value.length) {
94
- this.value =
95
- this.value.substring(0, this.cursorPos) +
96
- this.value.substring(this.cursorPos + 1);
97
- this.changeHandler?.(this.value);
98
- }
99
- }
100
- /**
101
- * Delete word before cursor
102
- */
103
- deleteWordBefore() {
104
- let pos = this.cursorPos;
105
- // Skip trailing spaces
106
- while (pos > 0 && this.value[pos - 1] === ' ') {
107
- pos--;
108
- }
109
- // Skip word characters
110
- while (pos > 0 && this.value[pos - 1] !== ' ') {
111
- pos--;
112
- }
113
- this.value = this.value.substring(0, pos) + this.value.substring(this.cursorPos);
114
- this.cursorPos = pos;
115
- this.ensureCursorVisible();
116
- this.changeHandler?.(this.value);
117
- }
118
- /**
119
- * Move cursor left
120
- */
121
- moveCursorLeft() {
122
- if (this.cursorPos > 0) {
123
- this.cursorPos--;
124
- this.ensureCursorVisible();
125
- }
126
- }
127
- /**
128
- * Move cursor right
129
- */
130
- moveCursorRight() {
131
- if (this.cursorPos < this.value.length) {
132
- this.cursorPos++;
133
- this.ensureCursorVisible();
134
- }
135
- }
136
- /**
137
- * Move cursor to start
138
- */
139
- moveCursorToStart() {
140
- this.cursorPos = 0;
141
- this.scrollOffset = 0;
142
- }
143
- /**
144
- * Move cursor to end
145
- */
146
- moveCursorToEnd() {
147
- this.cursorPos = this.value.length;
148
- this.ensureCursorVisible();
149
- }
150
- /**
151
- * Ensure cursor is visible by adjusting scroll
152
- */
153
- ensureCursorVisible() {
154
- const visibleWidth = this.bounds.width - 2; // -2 for border
155
- if (visibleWidth <= 0)
156
- return;
157
- if (this.cursorPos < this.scrollOffset) {
158
- this.scrollOffset = this.cursorPos;
159
- }
160
- else if (this.cursorPos >= this.scrollOffset + visibleWidth) {
161
- this.scrollOffset = this.cursorPos - visibleWidth + 1;
162
- }
163
- }
164
- /**
165
- * Submit the input
166
- */
167
- submit() {
168
- this.submitHandler?.(this.value);
169
- }
170
- getPreferredSize() {
171
- return {
172
- width: Math.max(20, this.value.length + 4),
173
- height: 1,
174
- };
175
- }
176
- getMinSize() {
177
- return { width: 5, height: 1 };
178
- }
179
- render(canvas, bounds) {
180
- if (!this.visible || bounds.width < 3)
181
- return;
182
- const theme = getTheme();
183
- const contentWidth = bounds.width;
184
- // Determine text to display
185
- let displayValue = this.password
186
- ? '*'.repeat(this.value.length)
187
- : this.value;
188
- const showPlaceholder = displayValue.length === 0 && !this.focused;
189
- if (showPlaceholder) {
190
- displayValue = this.placeholder;
191
- }
192
- // Apply scroll offset
193
- const visibleText = displayValue.substring(this.scrollOffset, this.scrollOffset + contentWidth);
194
- // Determine style
195
- const style = this.focused
196
- ? { fg: theme.text.fg }
197
- : showPlaceholder
198
- ? { fg: theme.textMuted.fg }
199
- : { fg: theme.text.fg };
200
- // Draw background
201
- canvas.drawText(bounds.x, bounds.y, ' '.repeat(contentWidth), {
202
- bg: this.focused ? theme.inputFocus.bg : theme.inputBg.bg,
203
- });
204
- // Draw text
205
- canvas.drawText(bounds.x, bounds.y, visibleText, {
206
- ...style,
207
- bg: this.focused ? theme.inputFocus.bg : theme.inputBg.bg,
208
- });
209
- // Draw cursor if focused
210
- if (this.focused) {
211
- const cursorX = bounds.x + (this.cursorPos - this.scrollOffset);
212
- if (cursorX >= bounds.x && cursorX < bounds.x + contentWidth) {
213
- const charAtCursor = this.value[this.cursorPos] || ' ';
214
- const displayChar = this.password ? '*' : charAtCursor;
215
- canvas.setCell(cursorX, bounds.y, displayChar, {
216
- fg: theme.textInverse.fg,
217
- bg: theme.text.fg,
218
- });
219
- }
220
- }
221
- }
222
- handleKey(event) {
223
- if (!this.focused)
224
- return false;
225
- switch (event.key) {
226
- case 'enter':
227
- this.submit();
228
- return true;
229
- case 'backspace':
230
- this.deleteCharBefore();
231
- return true;
232
- case 'delete':
233
- this.deleteCharAfter();
234
- return true;
235
- case 'ctrl+w':
236
- this.deleteWordBefore();
237
- return true;
238
- case 'ctrl+u':
239
- this.clear();
240
- return true;
241
- case 'left':
242
- this.moveCursorLeft();
243
- return true;
244
- case 'right':
245
- this.moveCursorRight();
246
- return true;
247
- case 'home':
248
- case 'ctrl+a':
249
- this.moveCursorToStart();
250
- return true;
251
- case 'end':
252
- case 'ctrl+e':
253
- this.moveCursorToEnd();
254
- return true;
255
- default:
256
- // Insert printable characters
257
- if (event.key.length === 1 && !event.modifiers.ctrl && !event.modifiers.alt) {
258
- this.insertText(event.key);
259
- return true;
260
- }
261
- }
262
- return false;
263
- }
264
- isFocusable() {
265
- return this.visible && !this.disabled;
266
- }
267
- }
268
- /**
269
- * Create an InputField component
270
- */
271
- export function createInputField(props = {}) {
272
- return new InputField(props);
273
- }
274
- //# sourceMappingURL=input-field.js.map