termcast 1.3.9 → 1.3.16

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 (559) hide show
  1. package/dist/action-utils.js +1 -1
  2. package/dist/action-utils.js.map +1 -1
  3. package/dist/apis/ai.js +1 -1
  4. package/dist/apis/ai.js.map +1 -1
  5. package/dist/apis/clipboard.js +2 -2
  6. package/dist/apis/clipboard.js.map +1 -1
  7. package/dist/apis/hud.d.ts +2 -2
  8. package/dist/apis/hud.d.ts.map +1 -1
  9. package/dist/apis/hud.js +5 -5
  10. package/dist/apis/hud.js.map +1 -1
  11. package/dist/apis/oauth.d.ts +1 -1
  12. package/dist/apis/oauth.d.ts.map +1 -1
  13. package/dist/apis/oauth.js +8 -8
  14. package/dist/apis/oauth.js.map +1 -1
  15. package/dist/apis/preferences.js +4 -4
  16. package/dist/apis/preferences.js.map +1 -1
  17. package/dist/apis/toast.d.ts +1 -5
  18. package/dist/apis/toast.d.ts.map +1 -1
  19. package/dist/apis/toast.js +26 -20
  20. package/dist/apis/toast.js.map +1 -1
  21. package/dist/build.d.ts +2 -0
  22. package/dist/build.d.ts.map +1 -1
  23. package/dist/build.js +9 -8
  24. package/dist/build.js.map +1 -1
  25. package/dist/cli.js +44 -2
  26. package/dist/cli.js.map +1 -1
  27. package/dist/colors.d.ts +8 -1
  28. package/dist/colors.d.ts.map +1 -1
  29. package/dist/colors.js +12 -0
  30. package/dist/colors.js.map +1 -1
  31. package/dist/compile.d.ts +30 -0
  32. package/dist/compile.d.ts.map +1 -0
  33. package/dist/compile.js +156 -0
  34. package/dist/compile.js.map +1 -0
  35. package/dist/components/actions.d.ts +2 -1
  36. package/dist/components/actions.d.ts.map +1 -1
  37. package/dist/components/actions.js +11 -8
  38. package/dist/components/actions.js.map +1 -1
  39. package/dist/components/alert.js +4 -4
  40. package/dist/components/alert.js.map +1 -1
  41. package/dist/components/command-arguments.d.ts +9 -0
  42. package/dist/components/command-arguments.d.ts.map +1 -0
  43. package/dist/components/command-arguments.js +21 -0
  44. package/dist/components/command-arguments.js.map +1 -0
  45. package/dist/components/detail.d.ts +3 -3
  46. package/dist/components/detail.d.ts.map +1 -1
  47. package/dist/components/detail.js +20 -42
  48. package/dist/components/detail.js.map +1 -1
  49. package/dist/components/dropdown.d.ts +2 -1
  50. package/dist/components/dropdown.d.ts.map +1 -1
  51. package/dist/components/dropdown.js +81 -25
  52. package/dist/components/dropdown.js.map +1 -1
  53. package/dist/components/extension-preferences.d.ts.map +1 -1
  54. package/dist/components/extension-preferences.js +23 -33
  55. package/dist/components/extension-preferences.js.map +1 -1
  56. package/dist/components/form/checkbox.d.ts.map +1 -1
  57. package/dist/components/form/checkbox.js +11 -4
  58. package/dist/components/form/checkbox.js.map +1 -1
  59. package/dist/components/form/date-picker.d.ts.map +1 -1
  60. package/dist/components/form/date-picker.js +18 -31
  61. package/dist/components/form/date-picker.js.map +1 -1
  62. package/dist/components/form/description.d.ts +2 -0
  63. package/dist/components/form/description.d.ts.map +1 -1
  64. package/dist/components/form/description.js +21 -3
  65. package/dist/components/form/description.js.map +1 -1
  66. package/dist/components/form/dropdown.d.ts.map +1 -1
  67. package/dist/components/form/dropdown.js +17 -32
  68. package/dist/components/form/dropdown.js.map +1 -1
  69. package/dist/components/form/file-autocomplete.d.ts +7 -4
  70. package/dist/components/form/file-autocomplete.d.ts.map +1 -1
  71. package/dist/components/form/file-autocomplete.js +56 -48
  72. package/dist/components/form/file-autocomplete.js.map +1 -1
  73. package/dist/components/form/file-picker.d.ts +5 -0
  74. package/dist/components/form/file-picker.d.ts.map +1 -1
  75. package/dist/components/form/file-picker.js +48 -51
  76. package/dist/components/form/file-picker.js.map +1 -1
  77. package/dist/components/form/form-end.js +1 -1
  78. package/dist/components/form/form-end.js.map +1 -1
  79. package/dist/components/form/form-ref.d.ts +43 -0
  80. package/dist/components/form/form-ref.d.ts.map +1 -0
  81. package/dist/components/form/form-ref.js +53 -0
  82. package/dist/components/form/form-ref.js.map +1 -0
  83. package/dist/components/form/index.d.ts +16 -0
  84. package/dist/components/form/index.d.ts.map +1 -1
  85. package/dist/components/form/index.js +90 -27
  86. package/dist/components/form/index.js.map +1 -1
  87. package/dist/components/form/password-field.d.ts.map +1 -1
  88. package/dist/components/form/password-field.js +33 -17
  89. package/dist/components/form/password-field.js.map +1 -1
  90. package/dist/components/form/separator.js +1 -1
  91. package/dist/components/form/separator.js.map +1 -1
  92. package/dist/components/form/tagpicker.d.ts +1 -1
  93. package/dist/components/form/tagpicker.d.ts.map +1 -1
  94. package/dist/components/form/text-area.d.ts.map +1 -1
  95. package/dist/components/form/text-area.js +33 -16
  96. package/dist/components/form/text-area.js.map +1 -1
  97. package/dist/components/form/text-field.d.ts.map +1 -1
  98. package/dist/components/form/text-field.js +38 -18
  99. package/dist/components/form/text-field.js.map +1 -1
  100. package/dist/components/form/use-form-navigation.d.ts +4 -0
  101. package/dist/components/form/use-form-navigation.d.ts.map +1 -1
  102. package/dist/components/form/use-form-navigation.js +35 -18
  103. package/dist/components/form/use-form-navigation.js.map +1 -1
  104. package/dist/components/form/with-left-border.d.ts.map +1 -1
  105. package/dist/components/form/with-left-border.js +3 -3
  106. package/dist/components/form/with-left-border.js.map +1 -1
  107. package/dist/components/icon.d.ts +3 -1
  108. package/dist/components/icon.d.ts.map +1 -1
  109. package/dist/components/icon.js +494 -469
  110. package/dist/components/icon.js.map +1 -1
  111. package/dist/components/image.js +1 -1
  112. package/dist/components/image.js.map +1 -1
  113. package/dist/components/list.d.ts +12 -8
  114. package/dist/components/list.d.ts.map +1 -1
  115. package/dist/components/list.js +172 -40
  116. package/dist/components/list.js.map +1 -1
  117. package/dist/components/loading-bar.js +2 -2
  118. package/dist/components/loading-bar.js.map +1 -1
  119. package/dist/components/menubar-extra.d.ts +1 -1
  120. package/dist/components/menubar-extra.d.ts.map +1 -1
  121. package/dist/components/menubar-extra.js +2 -2
  122. package/dist/components/menubar-extra.js.map +1 -1
  123. package/dist/descendants.d.ts.map +1 -1
  124. package/dist/descendants.js +8 -5
  125. package/dist/descendants.js.map +1 -1
  126. package/dist/e2e-node.d.ts +2 -0
  127. package/dist/e2e-node.d.ts.map +1 -1
  128. package/dist/e2e-node.js +14 -0
  129. package/dist/e2e-node.js.map +1 -1
  130. package/dist/examples/action-show-in-finder.js +3 -3
  131. package/dist/examples/action-show-in-finder.js.map +1 -1
  132. package/dist/examples/environment-test.js +4 -4
  133. package/dist/examples/environment-test.js.map +1 -1
  134. package/dist/examples/error-boundary.js +5 -5
  135. package/dist/examples/error-boundary.js.map +1 -1
  136. package/dist/examples/form-basic.d.ts.map +1 -1
  137. package/dist/examples/form-basic.js +6 -6
  138. package/dist/examples/form-basic.js.map +1 -1
  139. package/dist/examples/form-dropdown.js +3 -3
  140. package/dist/examples/form-dropdown.js.map +1 -1
  141. package/dist/examples/form-scroll.d.ts +2 -0
  142. package/dist/examples/form-scroll.d.ts.map +1 -0
  143. package/dist/examples/form-scroll.js +8 -0
  144. package/dist/examples/form-scroll.js.map +1 -0
  145. package/dist/examples/form-tagpicker.js +3 -3
  146. package/dist/examples/form-tagpicker.js.map +1 -1
  147. package/dist/examples/internal/descendants-filtering.js +10 -5
  148. package/dist/examples/internal/descendants-filtering.js.map +1 -1
  149. package/dist/examples/internal/descendants.js +13 -6
  150. package/dist/examples/internal/descendants.js.map +1 -1
  151. package/dist/examples/internal/rhf-custom-ref.d.ts +2 -0
  152. package/dist/examples/internal/rhf-custom-ref.d.ts.map +1 -0
  153. package/dist/examples/internal/rhf-custom-ref.js +67 -0
  154. package/dist/examples/internal/rhf-custom-ref.js.map +1 -0
  155. package/dist/examples/internal/scrollbox-demo.js +4 -8
  156. package/dist/examples/internal/scrollbox-demo.js.map +1 -1
  157. package/dist/examples/internal/scrollbox-with-descendants.d.ts +2 -0
  158. package/dist/examples/internal/scrollbox-with-descendants.d.ts.map +1 -0
  159. package/dist/examples/internal/scrollbox-with-descendants.js +63 -0
  160. package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -0
  161. package/dist/examples/internal/simple-dialog.js +7 -7
  162. package/dist/examples/internal/simple-dialog.js.map +1 -1
  163. package/dist/examples/internal/simple-scrollbox.d.ts +2 -0
  164. package/dist/examples/internal/simple-scrollbox.d.ts.map +1 -0
  165. package/dist/examples/internal/simple-scrollbox.js +25 -0
  166. package/dist/examples/internal/simple-scrollbox.js.map +1 -0
  167. package/dist/examples/internal/text-stacking.js +4 -2
  168. package/dist/examples/internal/text-stacking.js.map +1 -1
  169. package/dist/examples/list-dropdown-default.js +3 -3
  170. package/dist/examples/list-dropdown-default.js.map +1 -1
  171. package/dist/examples/list-fetch-data.js +3 -3
  172. package/dist/examples/list-fetch-data.js.map +1 -1
  173. package/dist/examples/list-scrollbox.d.ts +2 -0
  174. package/dist/examples/list-scrollbox.d.ts.map +1 -0
  175. package/dist/examples/list-scrollbox.js +29 -0
  176. package/dist/examples/list-scrollbox.js.map +1 -0
  177. package/dist/examples/list-with-detail.js +2 -2
  178. package/dist/examples/list-with-detail.js.map +1 -1
  179. package/dist/examples/list-with-dropdown.js +2 -2
  180. package/dist/examples/list-with-dropdown.js.map +1 -1
  181. package/dist/examples/list-with-sections.js +6 -6
  182. package/dist/examples/list-with-sections.js.map +1 -1
  183. package/dist/examples/miscellaneous.js +14 -14
  184. package/dist/examples/miscellaneous.js.map +1 -1
  185. package/dist/examples/nested-navigation.js +9 -7
  186. package/dist/examples/nested-navigation.js.map +1 -1
  187. package/dist/examples/preferences-test.js +4 -4
  188. package/dist/examples/preferences-test.js.map +1 -1
  189. package/dist/examples/simple-dropdown.js +4 -4
  190. package/dist/examples/simple-dropdown.js.map +1 -1
  191. package/dist/examples/simple-file-picker.js +3 -3
  192. package/dist/examples/simple-file-picker.js.map +1 -1
  193. package/dist/examples/simple-grid.js +2 -2
  194. package/dist/examples/simple-grid.js.map +1 -1
  195. package/dist/examples/simple-hud.js +4 -4
  196. package/dist/examples/simple-hud.js.map +1 -1
  197. package/dist/examples/simple-list-search.js +21 -5
  198. package/dist/examples/simple-list-search.js.map +1 -1
  199. package/dist/examples/simple-list.js +4 -4
  200. package/dist/examples/simple-list.js.map +1 -1
  201. package/dist/examples/simple-navigation.js +9 -7
  202. package/dist/examples/simple-navigation.js.map +1 -1
  203. package/dist/examples/store.js +1 -1
  204. package/dist/examples/store.js.map +1 -1
  205. package/dist/examples/submodule-diff.d.ts +2 -0
  206. package/dist/examples/submodule-diff.d.ts.map +1 -0
  207. package/dist/examples/submodule-diff.js +99 -0
  208. package/dist/examples/submodule-diff.js.map +1 -0
  209. package/dist/examples/tanstack-demo.js +3 -3
  210. package/dist/examples/tanstack-demo.js.map +1 -1
  211. package/dist/examples/use-promise-demo.js +3 -3
  212. package/dist/examples/use-promise-demo.js.map +1 -1
  213. package/dist/extensions/dev.d.ts +8 -0
  214. package/dist/extensions/dev.d.ts.map +1 -1
  215. package/dist/extensions/dev.js +60 -35
  216. package/dist/extensions/dev.js.map +1 -1
  217. package/dist/extensions/home.d.ts.map +1 -1
  218. package/dist/extensions/home.js +22 -97
  219. package/dist/extensions/home.js.map +1 -1
  220. package/dist/extensions/store.js +2 -2
  221. package/dist/extensions/store.js.map +1 -1
  222. package/dist/globals.js +1 -1
  223. package/dist/globals.js.map +1 -1
  224. package/dist/hooks/index.d.ts +1 -1
  225. package/dist/hooks/index.d.ts.map +1 -1
  226. package/dist/hooks/index.js +1 -1
  227. package/dist/hooks/index.js.map +1 -1
  228. package/dist/hooks/use-action-panel.js +1 -1
  229. package/dist/hooks/use-action-panel.js.map +1 -1
  230. package/dist/hooks/use-unstable-ai.js +1 -1
  231. package/dist/hooks/use-unstable-ai.js.map +1 -1
  232. package/dist/index.d.ts +57 -55
  233. package/dist/index.d.ts.map +1 -1
  234. package/dist/index.js +42 -38
  235. package/dist/index.js.map +1 -1
  236. package/dist/internal/date-picker-widget.d.ts.map +1 -1
  237. package/dist/internal/date-picker-widget.js +56 -48
  238. package/dist/internal/date-picker-widget.js.map +1 -1
  239. package/dist/internal/dialog.d.ts +3 -3
  240. package/dist/internal/dialog.d.ts.map +1 -1
  241. package/dist/internal/dialog.js +10 -10
  242. package/dist/internal/dialog.js.map +1 -1
  243. package/dist/internal/error-handler.js +2 -2
  244. package/dist/internal/error-handler.js.map +1 -1
  245. package/dist/internal/focus-context.d.ts +1 -1
  246. package/dist/internal/focus-context.d.ts.map +1 -1
  247. package/dist/internal/navigation.d.ts +1 -1
  248. package/dist/internal/navigation.d.ts.map +1 -1
  249. package/dist/internal/navigation.js +2 -2
  250. package/dist/internal/navigation.js.map +1 -1
  251. package/dist/internal/providers.d.ts +2 -2
  252. package/dist/internal/providers.d.ts.map +1 -1
  253. package/dist/internal/providers.js +9 -9
  254. package/dist/internal/providers.js.map +1 -1
  255. package/dist/internal/scrollbox.d.ts +12 -0
  256. package/dist/internal/scrollbox.d.ts.map +1 -0
  257. package/dist/internal/scrollbox.js +34 -0
  258. package/dist/internal/scrollbox.js.map +1 -0
  259. package/dist/preload.js +1 -1
  260. package/dist/preload.js.map +1 -1
  261. package/dist/release.d.ts +11 -0
  262. package/dist/release.d.ts.map +1 -0
  263. package/dist/release.js +113 -0
  264. package/dist/release.js.map +1 -0
  265. package/dist/state.d.ts +1 -0
  266. package/dist/state.d.ts.map +1 -1
  267. package/dist/state.js +1 -0
  268. package/dist/state.js.map +1 -1
  269. package/dist/theme.d.ts +11 -8
  270. package/dist/theme.d.ts.map +1 -1
  271. package/dist/theme.js +31 -8
  272. package/dist/theme.js.map +1 -1
  273. package/dist/utils/run-command.d.ts +22 -0
  274. package/dist/utils/run-command.d.ts.map +1 -0
  275. package/dist/utils/run-command.js +127 -0
  276. package/dist/utils/run-command.js.map +1 -0
  277. package/dist/utils.d.ts +1 -1
  278. package/dist/utils.d.ts.map +1 -1
  279. package/dist/utils.js +6 -4
  280. package/dist/utils.js.map +1 -1
  281. package/package.json +13 -8
  282. package/src/apis/toast.tsx +38 -17
  283. package/src/build.tsx +5 -3
  284. package/src/cli.tsx +46 -0
  285. package/src/colors.tsx +22 -1
  286. package/src/compile.tsx +219 -0
  287. package/src/components/actions.tsx +7 -1
  288. package/src/components/command-arguments.tsx +81 -0
  289. package/src/components/detail.tsx +26 -58
  290. package/src/components/dropdown.tsx +108 -23
  291. package/src/components/extension-preferences.tsx +55 -35
  292. package/src/components/form/checkbox.tsx +13 -5
  293. package/src/components/form/date-picker.tsx +24 -29
  294. package/src/components/form/description.tsx +35 -7
  295. package/src/components/form/dropdown.tsx +16 -30
  296. package/src/components/form/file-autocomplete.tsx +87 -77
  297. package/src/components/form/file-picker.tsx +69 -57
  298. package/src/components/form/form-ref.tsx +68 -0
  299. package/src/components/form/index.tsx +152 -41
  300. package/src/components/form/password-field.tsx +35 -22
  301. package/src/components/form/text-area.tsx +78 -58
  302. package/src/components/form/text-field.tsx +82 -61
  303. package/src/components/form/use-form-navigation.tsx +43 -23
  304. package/src/components/form/with-left-border.tsx +2 -1
  305. package/src/components/icon.tsx +497 -469
  306. package/src/components/list.tsx +279 -112
  307. package/src/components/loading-bar.tsx +1 -1
  308. package/src/descendants.tsx +15 -5
  309. package/src/e2e-node.tsx +16 -0
  310. package/src/examples/action-show-in-finder.tsx +1 -1
  311. package/src/examples/environment-test.tsx +1 -1
  312. package/src/examples/error-boundary.tsx +1 -1
  313. package/src/examples/file-autocomplete.vitest.tsx +245 -0
  314. package/src/examples/form-basic.tsx +12 -12
  315. package/src/examples/form-basic.vitest.tsx +297 -671
  316. package/src/examples/form-dropdown.tsx +1 -1
  317. package/src/examples/form-dropdown.vitest.tsx +353 -221
  318. package/src/examples/form-scroll.tsx +56 -0
  319. package/src/examples/form-scroll.vitest.tsx +228 -0
  320. package/src/examples/form-tagpicker.tsx +1 -1
  321. package/src/examples/form-tagpicker.vitest.tsx +438 -193
  322. package/src/examples/internal/descendants-filtering.tsx +13 -5
  323. package/src/examples/internal/descendants.tsx +17 -5
  324. package/src/examples/internal/rhf-custom-ref.tsx +152 -0
  325. package/src/examples/internal/scrollbox-demo.tsx +15 -7
  326. package/src/examples/internal/scrollbox-with-descendants.tsx +94 -0
  327. package/src/examples/internal/simple-dialog.tsx +1 -1
  328. package/src/examples/internal/simple-scrollbox.tsx +58 -0
  329. package/src/examples/internal/simple-scrollbox.vitest.tsx +104 -0
  330. package/src/examples/internal/text-stacking.tsx +4 -2
  331. package/src/examples/list-dropdown-default.tsx +1 -1
  332. package/src/examples/list-dropdown-default.vitest.tsx +136 -71
  333. package/src/examples/list-fetch-data.tsx +1 -1
  334. package/src/examples/list-fetch-data.vitest.tsx +42 -33
  335. package/src/examples/list-scrollbox.tsx +46 -0
  336. package/src/examples/list-scrollbox.vitest.tsx +103 -0
  337. package/src/examples/list-with-detail.tsx +1 -1
  338. package/src/examples/list-with-detail.vitest.tsx +290 -294
  339. package/src/examples/list-with-dropdown.tsx +1 -1
  340. package/src/examples/list-with-dropdown.vitest.tsx +190 -150
  341. package/src/examples/list-with-sections.tsx +12 -1
  342. package/src/examples/list-with-sections.vitest.tsx +390 -218
  343. package/src/examples/miscellaneous.tsx +1 -1
  344. package/src/examples/nested-navigation.tsx +7 -5
  345. package/src/examples/preferences-test.tsx +1 -1
  346. package/src/examples/simple-dropdown.tsx +1 -1
  347. package/src/examples/simple-file-picker.tsx +1 -1
  348. package/src/examples/simple-file-picker.vitest.tsx +533 -127
  349. package/src/examples/simple-grid.tsx +1 -1
  350. package/src/examples/simple-grid.vitest.tsx +258 -234
  351. package/src/examples/simple-hud.tsx +1 -1
  352. package/src/examples/simple-list-search.tsx +42 -1
  353. package/src/examples/simple-list.tsx +1 -1
  354. package/src/examples/simple-navigation.tsx +7 -5
  355. package/src/examples/simple-navigation.vitest.tsx +434 -238
  356. package/src/examples/store.tsx +1 -1
  357. package/src/examples/store.vitest.tsx +31 -14
  358. package/src/examples/submodule-diff.tsx +153 -0
  359. package/src/examples/tanstack-demo.tsx +1 -1
  360. package/src/examples/use-promise-demo.tsx +1 -1
  361. package/src/extensions/dev.tsx +76 -38
  362. package/src/extensions/dev.vitest.tsx +220 -0
  363. package/src/extensions/home.tsx +20 -121
  364. package/src/globals.ts +1 -1
  365. package/src/index.tsx +12 -25
  366. package/src/internal/date-picker-widget.tsx +56 -46
  367. package/src/internal/dialog.tsx +6 -6
  368. package/src/internal/providers.tsx +1 -1
  369. package/src/internal/scrollbox.tsx +63 -0
  370. package/src/release.tsx +159 -0
  371. package/src/state.tsx +2 -0
  372. package/src/store-api/search.test.tsx +4 -13
  373. package/src/theme.tsx +33 -8
  374. package/src/utils/run-command.tsx +204 -0
  375. package/src/utils.tsx +6 -4
  376. package/dist/ai.d.ts +0 -104
  377. package/dist/ai.d.ts.map +0 -1
  378. package/dist/ai.js +0 -135
  379. package/dist/ai.js.map +0 -1
  380. package/dist/apis/cache.test.d.ts +0 -2
  381. package/dist/apis/cache.test.d.ts.map +0 -1
  382. package/dist/apis/cache.test.js +0 -246
  383. package/dist/apis/cache.test.js.map +0 -1
  384. package/dist/apis/localstorage.test.d.ts +0 -2
  385. package/dist/apis/localstorage.test.d.ts.map +0 -1
  386. package/dist/apis/localstorage.test.js +0 -131
  387. package/dist/apis/localstorage.test.js.map +0 -1
  388. package/dist/apis/toast.test.d.ts +0 -2
  389. package/dist/apis/toast.test.d.ts.map +0 -1
  390. package/dist/apis/toast.test.js +0 -67
  391. package/dist/apis/toast.test.js.map +0 -1
  392. package/dist/build.test.d.ts +0 -2
  393. package/dist/build.test.d.ts.map +0 -1
  394. package/dist/build.test.js +0 -73
  395. package/dist/build.test.js.map +0 -1
  396. package/dist/cache.d.ts +0 -32
  397. package/dist/cache.d.ts.map +0 -1
  398. package/dist/cache.js +0 -205
  399. package/dist/cache.js.map +0 -1
  400. package/dist/cache.test.d.ts +0 -2
  401. package/dist/cache.test.d.ts.map +0 -1
  402. package/dist/cache.test.js +0 -246
  403. package/dist/cache.test.js.map +0 -1
  404. package/dist/clipboard.d.ts +0 -36
  405. package/dist/clipboard.d.ts.map +0 -1
  406. package/dist/clipboard.js +0 -154
  407. package/dist/clipboard.js.map +0 -1
  408. package/dist/components/form/form-type-only.d.ts +0 -174
  409. package/dist/components/form/form-type-only.d.ts.map +0 -1
  410. package/dist/components/form/form-type-only.js +0 -2
  411. package/dist/components/form/form-type-only.js.map +0 -1
  412. package/dist/components/form/use-form-handling.d.ts +0 -4
  413. package/dist/components/form/use-form-handling.d.ts.map +0 -1
  414. package/dist/components/form/use-form-handling.js +0 -37
  415. package/dist/components/form/use-form-handling.js.map +0 -1
  416. package/dist/dev-ui.d.ts +0 -7
  417. package/dist/dev-ui.d.ts.map +0 -1
  418. package/dist/dev-ui.js +0 -118
  419. package/dist/dev-ui.js.map +0 -1
  420. package/dist/environment.d.ts +0 -63
  421. package/dist/environment.d.ts.map +0 -1
  422. package/dist/environment.js +0 -189
  423. package/dist/environment.js.map +0 -1
  424. package/dist/examples/datepicker.d.ts +0 -2
  425. package/dist/examples/datepicker.d.ts.map +0 -1
  426. package/dist/examples/datepicker.js +0 -344
  427. package/dist/examples/datepicker.js.map +0 -1
  428. package/dist/examples/form-basic-arrow-keys.vitest.d.ts +0 -2
  429. package/dist/examples/form-basic-arrow-keys.vitest.d.ts.map +0 -1
  430. package/dist/examples/form-basic-arrow-keys.vitest.js +0 -46
  431. package/dist/examples/form-basic-arrow-keys.vitest.js.map +0 -1
  432. package/dist/examples/form-basic.vitest.d.ts +0 -2
  433. package/dist/examples/form-basic.vitest.d.ts.map +0 -1
  434. package/dist/examples/form-basic.vitest.js +0 -995
  435. package/dist/examples/form-basic.vitest.js.map +0 -1
  436. package/dist/examples/form-dropdown-with-sections.d.ts +0 -2
  437. package/dist/examples/form-dropdown-with-sections.d.ts.map +0 -1
  438. package/dist/examples/form-dropdown-with-sections.js +0 -13
  439. package/dist/examples/form-dropdown-with-sections.js.map +0 -1
  440. package/dist/examples/form-dropdown-with-sections.vitest.d.ts +0 -2
  441. package/dist/examples/form-dropdown-with-sections.vitest.d.ts.map +0 -1
  442. package/dist/examples/form-dropdown-with-sections.vitest.js +0 -75
  443. package/dist/examples/form-dropdown-with-sections.vitest.js.map +0 -1
  444. package/dist/examples/form-dropdown.vitest.d.ts +0 -2
  445. package/dist/examples/form-dropdown.vitest.d.ts.map +0 -1
  446. package/dist/examples/form-dropdown.vitest.js +0 -722
  447. package/dist/examples/form-dropdown.vitest.js.map +0 -1
  448. package/dist/examples/form-multiselect-dropdown.d.ts +0 -2
  449. package/dist/examples/form-multiselect-dropdown.d.ts.map +0 -1
  450. package/dist/examples/form-multiselect-dropdown.js +0 -13
  451. package/dist/examples/form-multiselect-dropdown.js.map +0 -1
  452. package/dist/examples/form-tagpicker.vitest.d.ts +0 -2
  453. package/dist/examples/form-tagpicker.vitest.d.ts.map +0 -1
  454. package/dist/examples/form-tagpicker.vitest.js +0 -491
  455. package/dist/examples/form-tagpicker.vitest.js.map +0 -1
  456. package/dist/examples/internal/nested-boxes.d.ts +0 -2
  457. package/dist/examples/internal/nested-boxes.d.ts.map +0 -1
  458. package/dist/examples/internal/nested-boxes.js +0 -7
  459. package/dist/examples/internal/nested-boxes.js.map +0 -1
  460. package/dist/examples/internal/unicode-square-repro.d.ts +0 -2
  461. package/dist/examples/internal/unicode-square-repro.d.ts.map +0 -1
  462. package/dist/examples/internal/unicode-square-repro.js +0 -7
  463. package/dist/examples/internal/unicode-square-repro.js.map +0 -1
  464. package/dist/examples/list-dropdown-default.vitest.d.ts +0 -2
  465. package/dist/examples/list-dropdown-default.vitest.d.ts.map +0 -1
  466. package/dist/examples/list-dropdown-default.vitest.js +0 -164
  467. package/dist/examples/list-dropdown-default.vitest.js.map +0 -1
  468. package/dist/examples/list-fetch-data.vitest.d.ts +0 -2
  469. package/dist/examples/list-fetch-data.vitest.d.ts.map +0 -1
  470. package/dist/examples/list-fetch-data.vitest.js +0 -103
  471. package/dist/examples/list-fetch-data.vitest.js.map +0 -1
  472. package/dist/examples/list-filter-navigation.d.ts +0 -2
  473. package/dist/examples/list-filter-navigation.d.ts.map +0 -1
  474. package/dist/examples/list-filter-navigation.js +0 -8
  475. package/dist/examples/list-filter-navigation.js.map +0 -1
  476. package/dist/examples/list-with-detail.vitest.d.ts +0 -2
  477. package/dist/examples/list-with-detail.vitest.d.ts.map +0 -1
  478. package/dist/examples/list-with-detail.vitest.js +0 -438
  479. package/dist/examples/list-with-detail.vitest.js.map +0 -1
  480. package/dist/examples/list-with-dropdown.vitest.d.ts +0 -2
  481. package/dist/examples/list-with-dropdown.vitest.d.ts.map +0 -1
  482. package/dist/examples/list-with-dropdown.vitest.js +0 -297
  483. package/dist/examples/list-with-dropdown.vitest.js.map +0 -1
  484. package/dist/examples/list-with-sections.vitest.d.ts +0 -2
  485. package/dist/examples/list-with-sections.vitest.d.ts.map +0 -1
  486. package/dist/examples/list-with-sections.vitest.js +0 -441
  487. package/dist/examples/list-with-sections.vitest.js.map +0 -1
  488. package/dist/examples/simple-file-picker.vitest.d.ts +0 -2
  489. package/dist/examples/simple-file-picker.vitest.d.ts.map +0 -1
  490. package/dist/examples/simple-file-picker.vitest.js +0 -277
  491. package/dist/examples/simple-file-picker.vitest.js.map +0 -1
  492. package/dist/examples/simple-grid.vitest.d.ts +0 -2
  493. package/dist/examples/simple-grid.vitest.d.ts.map +0 -1
  494. package/dist/examples/simple-grid.vitest.js +0 -498
  495. package/dist/examples/simple-grid.vitest.js.map +0 -1
  496. package/dist/examples/simple-navigation.vitest.d.ts +0 -2
  497. package/dist/examples/simple-navigation.vitest.d.ts.map +0 -1
  498. package/dist/examples/simple-navigation.vitest.js +0 -522
  499. package/dist/examples/simple-navigation.vitest.js.map +0 -1
  500. package/dist/examples/store.vitest.d.ts +0 -2
  501. package/dist/examples/store.vitest.d.ts.map +0 -1
  502. package/dist/examples/store.vitest.js +0 -52
  503. package/dist/examples/store.vitest.js.map +0 -1
  504. package/dist/home-command.d.ts +0 -8
  505. package/dist/home-command.d.ts.map +0 -1
  506. package/dist/home-command.js +0 -181
  507. package/dist/home-command.js.map +0 -1
  508. package/dist/hooks/hooks.test.d.ts +0 -2
  509. package/dist/hooks/hooks.test.d.ts.map +0 -1
  510. package/dist/hooks/hooks.test.js +0 -37
  511. package/dist/hooks/hooks.test.js.map +0 -1
  512. package/dist/hover-repro.d.ts +0 -2
  513. package/dist/hover-repro.d.ts.map +0 -1
  514. package/dist/hover-repro.js +0 -20
  515. package/dist/hover-repro.js.map +0 -1
  516. package/dist/localstorage.d.ts +0 -13
  517. package/dist/localstorage.d.ts.map +0 -1
  518. package/dist/localstorage.js +0 -190
  519. package/dist/localstorage.js.map +0 -1
  520. package/dist/localstorage.test.d.ts +0 -2
  521. package/dist/localstorage.test.d.ts.map +0 -1
  522. package/dist/localstorage.test.js +0 -131
  523. package/dist/localstorage.test.js.map +0 -1
  524. package/dist/oauth.d.ts +0 -142
  525. package/dist/oauth.d.ts.map +0 -1
  526. package/dist/oauth.js +0 -551
  527. package/dist/oauth.js.map +0 -1
  528. package/dist/preferences.d.ts +0 -23
  529. package/dist/preferences.d.ts.map +0 -1
  530. package/dist/preferences.js +0 -105
  531. package/dist/preferences.js.map +0 -1
  532. package/dist/store-api/download.test.d.ts +0 -2
  533. package/dist/store-api/download.test.d.ts.map +0 -1
  534. package/dist/store-api/download.test.js +0 -36
  535. package/dist/store-api/download.test.js.map +0 -1
  536. package/dist/store-api/extension.test.d.ts +0 -2
  537. package/dist/store-api/extension.test.d.ts.map +0 -1
  538. package/dist/store-api/extension.test.js +0 -22
  539. package/dist/store-api/extension.test.js.map +0 -1
  540. package/dist/store-api/search.test.d.ts +0 -2
  541. package/dist/store-api/search.test.d.ts.map +0 -1
  542. package/dist/store-api/search.test.js +0 -45
  543. package/dist/store-api/search.test.js.map +0 -1
  544. package/dist/store.d.ts +0 -21
  545. package/dist/store.d.ts.map +0 -1
  546. package/dist/store.js +0 -84
  547. package/dist/store.js.map +0 -1
  548. package/dist/toast.d.ts +0 -44
  549. package/dist/toast.d.ts.map +0 -1
  550. package/dist/toast.js +0 -221
  551. package/dist/toast.js.map +0 -1
  552. package/dist/utils.test.d.ts +0 -2
  553. package/dist/utils.test.d.ts.map +0 -1
  554. package/dist/utils.test.js +0 -152
  555. package/dist/utils.test.js.map +0 -1
  556. package/dist/window.d.ts +0 -12
  557. package/dist/window.d.ts.map +0 -1
  558. package/dist/window.js +0 -48
  559. package/dist/window.js.map +0 -1
@@ -1,306 +1,712 @@
1
1
  import { test, expect, afterEach, beforeEach } from 'vitest'
2
- import { NodeTuiDriver } from 'termcast/src/e2e-node'
2
+ import { launchTerminal, Session } from 'tuistory/src'
3
3
 
4
- let driver: NodeTuiDriver
4
+ let session: Session
5
5
 
6
- beforeEach(() => {
7
- driver = new NodeTuiDriver('bun', ['src/examples/simple-file-picker.tsx'], {
6
+ beforeEach(async () => {
7
+ session = await launchTerminal({
8
+ command: 'bun',
9
+ args: ['src/examples/simple-file-picker.tsx'],
8
10
  cols: 70,
9
11
  rows: 50,
10
12
  })
11
13
  })
12
14
 
13
15
  afterEach(() => {
14
- driver?.dispose()
16
+ session?.close()
15
17
  })
16
18
 
17
19
  test('file picker with autocomplete', async () => {
18
- await driver.text({
20
+ const initialSnapshot = await session.text({
19
21
  waitFor: (text) => {
20
- // wait for form to show up
21
- return /Your Name/i.test(text)
22
+ return (
23
+ /Your Name/i.test(text) &&
24
+ text.includes('Select Files') &&
25
+ text.includes('Select Folder') &&
26
+ text.includes('submit')
27
+ )
22
28
  },
23
29
  })
24
-
25
- const initialSnapshot = await driver.text()
26
30
  expect(initialSnapshot).toMatchInlineSnapshot(`
27
31
  "
28
32
 
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
29
46
  ◆ Your Name
30
- John Doe
47
+ John Doe
48
+
31
49
  ◇ Select Files
32
50
  │ Enter file path...
51
+
33
52
  │ Choose one or more files to upload
34
53
 
35
54
  ◇ Select Folder
36
55
  │ Enter file path...
56
+
37
57
  │ Choose a folder for output
38
58
 
39
59
  ◇ Select Single File
40
60
  │ Enter file path...
61
+
41
62
  │ Choose exactly one file
42
63
 
43
64
 
44
65
 
45
66
 
46
- ↵ submit ↑↓ navigate ^k actions"
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ ctrl ↵ submit ↑↓ navigate ^k actions"
47
80
  `)
48
81
 
49
82
  // Tab to navigate to file picker field
50
- await driver.keys.tab()
51
- await driver.keys.tab()
83
+ await session.press('tab')
84
+ await session.press('tab')
52
85
 
53
86
  // Type "src" to trigger autocomplete
54
- await driver.keys.type('src')
55
-
56
- // Wait for autocomplete to appear
57
- await new Promise((resolve) => setTimeout(resolve, 200))
87
+ await session.type('src')
58
88
 
59
- const autocompleteSnapshot = await driver.text()
89
+ const autocompleteSnapshot = await session.text({
90
+ waitFor: (text) => text.includes('📁 src'),
91
+ })
60
92
  expect(autocompleteSnapshot).toMatchInlineSnapshot(`
61
93
  "
62
94
 
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
63
108
  ◇ Your Name
64
109
  │ John Doe
110
+
65
111
  ◇ Select Files
66
112
  │ Enter file path...
67
- Choose one or more files to upload
68
-
69
- Select Folder
70
- src
71
- ┌─────────────────────────────────────────────────────────────┐
72
- │ │ 📁a src │
73
- Select─Single─File────────────────────────────────────────────┘
113
+ ┌────────────────────────────────────────────────────────────┐
114
+ │ 📁 src │
115
+ ↑↓ navigate ⏎ open folder → select folder esc close │
116
+ └────────────────────────────────────────────────────────────┘
117
+ src
118
+
119
+ Choose a folder for output
120
+
121
+ ◇ Select Single File
74
122
  │ Enter file path...
123
+
75
124
  │ Choose exactly one file
76
125
 
77
126
 
78
127
 
79
128
 
80
- ↵ submit ↑↓ navigate ^k actions"
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+ ctrl ↵ submit ↑↓ navigate ^k actions"
81
142
  `)
82
143
 
83
144
  // Navigate down in autocomplete
84
- await driver.keys.down()
145
+ await session.press('down')
85
146
 
86
- const afterDownSnapshot = await driver.text()
147
+ const afterDownSnapshot = await session.text({
148
+ waitFor: (text) => text.includes('📁 src'),
149
+ })
87
150
  expect(afterDownSnapshot).toMatchInlineSnapshot(`
88
151
  "
89
152
 
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
90
166
  ◇ Your Name
91
167
  │ John Doe
168
+
92
169
  ◇ Select Files
93
170
  │ Enter file path...
94
- Choose one or more files to upload
95
-
96
- Select Folder
97
- src
98
- ┌─────────────────────────────────────────────────────────────┐
99
- │ │ 📁a src │
100
- Select─Single─File────────────────────────────────────────────┘
171
+ ┌────────────────────────────────────────────────────────────┐
172
+ │ 📁 src │
173
+ ↑↓ navigate ⏎ open folder → select folder esc close │
174
+ └────────────────────────────────────────────────────────────┘
175
+ src
176
+
177
+ Choose a folder for output
178
+
179
+ ◇ Select Single File
101
180
  │ Enter file path...
181
+
102
182
  │ Choose exactly one file
103
183
 
104
184
 
105
185
 
106
186
 
107
- ↵ submit ↑↓ navigate ^k actions"
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+ ctrl ↵ submit ↑↓ navigate ^k actions"
108
200
  `)
109
201
 
110
202
  // Select item with Enter
111
- await driver.keys.enter()
203
+ await session.press('enter')
112
204
 
113
- const afterSelectSnapshot = await driver.text()
205
+ const afterSelectSnapshot = await session.text({
206
+ waitFor: (text) => text.includes('src/') && text.includes('📁 apis'),
207
+ })
114
208
  expect(afterSelectSnapshot).toMatchInlineSnapshot(`
115
209
  "
116
210
 
117
- ◇ Your Name
118
- │ John Doe
119
- ◇ Select Files
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+ ┌────────────────────────────────────────────────────────────┐
223
+ │ 📁 apis │
224
+ ◇ │ 📁 components │
225
+ │ │ 📁 examples │
226
+ │ │ 📁 extensions │
227
+ ◇ │ 📁 hooks │
228
+ │ │ 📁 internal │
229
+ │ │ 📁 store-api │
230
+ │ │ 📁 utils │
231
+ │ │ ↑↓ navigate ⏎ open folder → select folder esc close │
232
+ ◆ └────────────────────────────────────────────────────────────┘
233
+ ┃ src/
234
+
235
+ ┃ Choose a folder for output
236
+
237
+ ◇ Select Single File
120
238
  │ Enter file path...
121
- │ Choose one or more files to upload
122
239
 
123
- Select Folder
124
- src/
125
- │ ┌─────────────────────────────────────────────────────────────┐
126
- │ │ 📁a apis │
127
- ◇ SelectoSingletFile │
128
- │ Enterefilelpath... │
129
- │ Choosexexactlysone file │
130
- │ │ hooks │
131
- └ │ 📁 internal │
132
- │ 📁 store-api │
133
- │ utils │
134
- ↵ submitcti↑↓-navigatex──^k─actions─────────────────────────────┘
135
- 📄 build.test.tsx"
240
+ Choose exactly one file
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+ ctrl ↵ submit ↑↓ navigate ^k actions"
136
258
  `)
137
259
 
138
260
  // Clear and test absolute path
139
- await driver.keys.backspace()
140
- await driver.keys.backspace()
141
- await driver.keys.backspace()
142
- await driver.keys.type('/tmp')
143
-
144
- await new Promise((resolve) => setTimeout(resolve, 200))
261
+ await session.press('backspace')
262
+ await session.press('backspace')
263
+ await session.press('backspace')
264
+ await session.type('/tmp')
145
265
 
146
- const absolutePathSnapshot = await driver.text()
266
+ const absolutePathSnapshot = await session.text({
267
+ waitFor: (text) => text.includes('/tmp'),
268
+ })
147
269
  expect(absolutePathSnapshot).toMatchInlineSnapshot(`
148
270
  "
149
271
 
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
150
285
  ◇ Your Name
151
286
  │ John Doe
287
+
152
288
  ◇ Select Files
153
289
  │ Enter file path...
290
+
154
291
  │ Choose one or more files to upload
155
292
 
156
293
  ◆ Select Folder
157
- /tmp/
158
- │ ┌─────────────────────────────────────────────────────────────┐
159
- 📁 bunx-501-@alignui │
160
- ◇ SelectuSingle-Fileeya │
161
- Enterbfile5path...elcontextprotocol │
162
- Chooseuexactly@onecfile │
163
- │ bunx-501-npkill@latest │
164
- 📁 com.apple.launchd.D0VRoDoOHk │
165
- 📁 com.apple.launchd.i00Yz9AggD │
166
- node-compile-cache │
167
- ↵ submitode↑↓inavigate───^k─actions─────────────────────────────┘
168
- 📁 powerlog"
169
- `)
294
+ s/tmp
295
+
296
+ Choose a folder for output
297
+
298
+ Select Single File
299
+ Enter file path...
300
+
301
+ Choose exactly one file
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
170
314
 
171
- // Test ~ home directory expansion
172
- await driver.keys.backspace()
173
- await driver.keys.backspace()
174
- await driver.keys.backspace()
175
- await driver.keys.backspace()
176
- await driver.keys.type('~/')
177
315
 
178
- await new Promise((resolve) => setTimeout(resolve, 200))
179
316
 
180
- const homeDirectorySnapshot = await driver.text()
317
+
318
+ ctrl ↵ submit ↑↓ navigate ^k actions"
319
+ `)
320
+
321
+ // Test ~ home directory expansion
322
+ await session.press('backspace')
323
+ await session.press('backspace')
324
+ await session.press('backspace')
325
+ await session.press('backspace')
326
+ await session.type('~/')
327
+
328
+ const homeDirectorySnapshot = await session.text({
329
+ waitFor: (text) => text.includes('~/'),
330
+ })
181
331
  expect(homeDirectorySnapshot).toMatchInlineSnapshot(`
182
332
  "
183
333
 
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
184
347
  ◇ Your Name
185
348
  │ John Doe
349
+
186
350
  ◇ Select Files
187
351
  │ Enter file path...
352
+
188
353
  │ Choose one or more files to upload
189
354
 
190
355
  ◆ Select Folder
191
- ~//
192
- │ ┌─────────────────────────────────────────────────────────────┐
193
- 📁a Applications │
194
- ◇ SelectwSingle File │
195
- Entercfileepath... │
196
- Chooseoexactly_one_filee │
197
- │ conductor │
198
- 📁 Desktop │
199
- 📁 Documents │
200
- Downloads │
201
- ↵ submityad↑↓pnavigate───^k─actions─────────────────────────────┘
202
- 📁 example-pnpm-pubcket"
356
+ s~/
357
+
358
+ Choose a folder for output
359
+
360
+ Select Single File
361
+ Enter file path...
362
+
363
+ Choose exactly one file
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+ ctrl ↵ submit ↑↓ navigate ^k actions"
203
381
  `)
204
382
  }, 15000)
205
383
 
206
384
  test('file picker keyboard navigation', async () => {
207
- await driver.text({
385
+ await session.text({
208
386
  waitFor: (text) => {
209
387
  return /Your Name/i.test(text)
210
388
  },
211
389
  })
212
390
 
213
391
  // Tab to file picker
214
- await driver.keys.tab()
215
- await driver.keys.tab()
392
+ await session.press('tab')
393
+ await session.press('tab')
216
394
 
217
395
  // Type to trigger autocomplete
218
- await driver.keys.type('.')
219
-
220
- await new Promise((resolve) => setTimeout(resolve, 200))
396
+ await session.type('.')
221
397
 
222
- const withDotSnapshot = await driver.text()
398
+ const withDotSnapshot = await session.text({
399
+ waitFor: (text) => text.includes('📁 .termcast-bundle'),
400
+ })
223
401
  expect(withDotSnapshot).toMatchInlineSnapshot(`
224
402
  "
225
403
 
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
226
417
  ◇ Your Name
227
418
  │ John Doe
419
+
228
420
  ◇ Select Files
229
421
  │ Enter file path...
230
- Choose one or more files to upload
422
+ ┌────────────────────────────────────────────────────────────┐
423
+ │ │ 📁 .termcast-bundle │
424
+ │ │ ↑↓ navigate ⏎ open folder → select folder esc close │
425
+ ◆ └────────────────────────────────────────────────────────────┘
426
+ ┃ .
427
+
428
+ ┃ Choose a folder for output
429
+
430
+ ◇ Select Single File
431
+ │ Enter file path...
231
432
 
232
- ◆ Select Folder
233
- │ .
234
- │ ┌─────────────────────────────────────────────────────────────┐
235
- │ │ 📁 .termcast-bundle │
236
- ◇ SelectgSinglerFile │
237
- │ Enter─file─path...────────────────────────────────────────────┘
238
433
  │ Choose exactly one file
239
434
 
240
435
 
241
436
 
242
437
 
243
- ↵ submit ↑↓ navigate ^k actions"
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+ ctrl ↵ submit ↑↓ navigate ^k actions"
244
451
  `)
245
452
 
246
453
  // Test escape key to close autocomplete
247
- await driver.keys.escape()
454
+ await session.press('esc')
248
455
 
249
- const afterEscapeSnapshot = await driver.text()
456
+ const afterEscapeSnapshot = await session.text({
457
+ waitFor: (text) => text.includes('Select Folder') && !text.includes('📁 .termcast-bundle'),
458
+ })
250
459
  expect(afterEscapeSnapshot).toMatchInlineSnapshot(`
251
460
  "
252
461
 
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
253
475
  ◇ Your Name
254
476
  │ John Doe
477
+
255
478
  ◇ Select Files
256
479
  │ Enter file path...
480
+
257
481
  │ Choose one or more files to upload
258
482
 
259
483
  ◆ Select Folder
260
- .
261
- │ Choose a folder for output
262
-
484
+ .
485
+
486
+ ┃ Choose a folder for output
487
+
263
488
  ◇ Select Single File
264
489
  │ Enter file path...
490
+
265
491
  │ Choose exactly one file
266
492
 
267
493
 
268
494
 
269
495
 
270
- ↵ submit ↑↓ navigate ^k actions"
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+ ctrl ↵ submit ↑↓ navigate ^k actions"
271
509
  `)
272
510
 
273
511
  // Type again and navigate with arrows
274
- await driver.keys.type('s')
512
+ await session.type('s')
275
513
 
276
- await new Promise((resolve) => setTimeout(resolve, 200))
514
+ await session.text({
515
+ waitFor: (text) => text.includes('.s'),
516
+ })
277
517
 
278
518
  // Navigate down multiple times
279
- await driver.keys.down()
280
- await driver.keys.down()
281
- await driver.keys.up()
519
+ await session.press('down')
520
+ await session.press('down')
521
+ await session.press('up')
282
522
 
283
- const afterNavigationSnapshot = await driver.text()
523
+ const afterNavigationSnapshot = await session.text({
524
+ waitFor: (text) => text.includes('.s') && text.includes('Select Folder'),
525
+ })
284
526
  expect(afterNavigationSnapshot).toMatchInlineSnapshot(`
285
527
  "
286
528
 
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
287
542
  ◇ Your Name
288
543
  │ John Doe
544
+
289
545
  ◇ Select Files
290
546
  │ Enter file path...
547
+
291
548
  │ Choose one or more files to upload
292
549
 
293
550
  ◆ Select Folder
294
- .s
295
- │ Choose a folder for output
296
-
551
+ .s
552
+
553
+ ┃ Choose a folder for output
554
+
297
555
  ◇ Select Single File
298
556
  │ Enter file path...
557
+
299
558
  │ Choose exactly one file
300
559
 
301
560
 
302
561
 
303
562
 
304
- ↵ submit ↑↓ navigate ^k actions"
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+ ctrl ↵ submit ↑↓ navigate ^k actions"
305
576
  `)
306
577
  }, 10000)
578
+
579
+ test('right arrow selects item and left arrow removes last selection', async () => {
580
+ await session.text({
581
+ waitFor: (text) => {
582
+ return /Your Name/i.test(text)
583
+ },
584
+ })
585
+
586
+ // Tab to file picker
587
+ await session.press('tab')
588
+ await session.press('tab')
589
+
590
+ // Type to trigger autocomplete
591
+ await session.type('src')
592
+
593
+ await session.text({
594
+ waitFor: (text) => text.includes('📁 src'),
595
+ })
596
+
597
+ // Use right arrow to select folder (instead of tab)
598
+ await session.press('right')
599
+
600
+ const afterRightArrowSnapshot = await session.text({
601
+ waitFor: (text) => text.includes('Selected files:') && text.includes('• src'),
602
+ })
603
+ expect(afterRightArrowSnapshot).toMatchInlineSnapshot(`
604
+ "
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+ ◇ Your Name
619
+ │ John Doe
620
+
621
+ ◇ Select Files
622
+ │ Enter file path...
623
+
624
+ │ Choose one or more files to upload
625
+
626
+ ◆ Select Folder
627
+ ┃ Enter file path...
628
+
629
+ ┃ Selected files:
630
+ ┃ • src
631
+
632
+ ┃ Choose a folder for output
633
+
634
+ ◇ Select Single File
635
+ │ Enter file path...
636
+
637
+ │ Choose exactly one file
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+ ctrl ↵ submit ↑↓ navigate ^k actions"
653
+ `)
654
+
655
+ // Use left arrow to remove the selection (input should be empty)
656
+ await session.press('left')
657
+
658
+ const afterLeftArrowSnapshot = await session.text({
659
+ waitFor: (text) => !text.includes('Selected files:'),
660
+ })
661
+ expect(afterLeftArrowSnapshot).toMatchInlineSnapshot(`
662
+ "
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+ ◇ Your Name
678
+ │ John Doe
679
+
680
+ ◇ Select Files
681
+ │ Enter file path...
682
+
683
+ │ Choose one or more files to upload
684
+
685
+ ◆ Select Folder
686
+ ┃ Enter file path...
687
+
688
+ ┃ Choose a folder for output
689
+
690
+ ◇ Select Single File
691
+ │ Enter file path...
692
+
693
+ │ Choose exactly one file
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+ ctrl ↵ submit ↑↓ navigate ^k actions"
711
+ `)
712
+ }, 15000)