termcast 1.3.21 → 1.3.24

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 (412) hide show
  1. package/dist/ai.d.ts +104 -0
  2. package/dist/ai.d.ts.map +1 -0
  3. package/dist/ai.js +135 -0
  4. package/dist/ai.js.map +1 -0
  5. package/dist/apis/browser-extension.d.ts +18 -0
  6. package/dist/apis/browser-extension.d.ts.map +1 -0
  7. package/dist/apis/browser-extension.js +14 -0
  8. package/dist/apis/browser-extension.js.map +1 -0
  9. package/dist/apis/localstorage.d.ts.map +1 -1
  10. package/dist/apis/localstorage.js +4 -7
  11. package/dist/apis/localstorage.js.map +1 -1
  12. package/dist/apis/oauth.d.ts.map +1 -1
  13. package/dist/apis/oauth.js +5 -1
  14. package/dist/apis/oauth.js.map +1 -1
  15. package/dist/apis/preferences.d.ts.map +1 -1
  16. package/dist/apis/preferences.js +38 -19
  17. package/dist/apis/preferences.js.map +1 -1
  18. package/dist/build.d.ts.map +1 -1
  19. package/dist/build.js +2 -1
  20. package/dist/build.js.map +1 -1
  21. package/dist/cache.d.ts +32 -0
  22. package/dist/cache.d.ts.map +1 -0
  23. package/dist/cache.js +205 -0
  24. package/dist/cache.js.map +1 -0
  25. package/dist/cli.d.ts.map +1 -1
  26. package/dist/cli.js +67 -31
  27. package/dist/cli.js.map +1 -1
  28. package/dist/clipboard.d.ts +36 -0
  29. package/dist/clipboard.d.ts.map +1 -0
  30. package/dist/clipboard.js +154 -0
  31. package/dist/clipboard.js.map +1 -0
  32. package/dist/compile.d.ts.map +1 -1
  33. package/dist/compile.js +22 -5
  34. package/dist/compile.js.map +1 -1
  35. package/dist/components/actions.d.ts.map +1 -1
  36. package/dist/components/actions.js +56 -30
  37. package/dist/components/actions.js.map +1 -1
  38. package/dist/components/detail.d.ts.map +1 -1
  39. package/dist/components/detail.js +4 -0
  40. package/dist/components/detail.js.map +1 -1
  41. package/dist/components/dropdown.d.ts.map +1 -1
  42. package/dist/components/dropdown.js +38 -15
  43. package/dist/components/dropdown.js.map +1 -1
  44. package/dist/components/extension-preferences.d.ts.map +1 -1
  45. package/dist/components/extension-preferences.js +40 -13
  46. package/dist/components/extension-preferences.js.map +1 -1
  47. package/dist/components/form/checkbox.d.ts.map +1 -1
  48. package/dist/components/form/checkbox.js +5 -3
  49. package/dist/components/form/checkbox.js.map +1 -1
  50. package/dist/components/form/date-picker.d.ts.map +1 -1
  51. package/dist/components/form/date-picker.js +5 -3
  52. package/dist/components/form/date-picker.js.map +1 -1
  53. package/dist/components/form/description.d.ts.map +1 -1
  54. package/dist/components/form/description.js +2 -2
  55. package/dist/components/form/description.js.map +1 -1
  56. package/dist/components/form/dropdown.d.ts.map +1 -1
  57. package/dist/components/form/dropdown.js +84 -80
  58. package/dist/components/form/dropdown.js.map +1 -1
  59. package/dist/components/form/file-autocomplete.d.ts +3 -6
  60. package/dist/components/form/file-autocomplete.d.ts.map +1 -1
  61. package/dist/components/form/file-autocomplete.js +61 -66
  62. package/dist/components/form/file-autocomplete.js.map +1 -1
  63. package/dist/components/form/file-picker.d.ts.map +1 -1
  64. package/dist/components/form/file-picker.js +33 -30
  65. package/dist/components/form/file-picker.js.map +1 -1
  66. package/dist/components/form/form-end.d.ts.map +1 -1
  67. package/dist/components/form/form-end.js +21 -1
  68. package/dist/components/form/form-end.js.map +1 -1
  69. package/dist/components/form/form-type-only.d.ts +174 -0
  70. package/dist/components/form/form-type-only.d.ts.map +1 -0
  71. package/dist/components/form/form-type-only.js +2 -0
  72. package/dist/components/form/form-type-only.js.map +1 -0
  73. package/dist/components/form/index.d.ts +3 -1
  74. package/dist/components/form/index.d.ts.map +1 -1
  75. package/dist/components/form/index.js +100 -28
  76. package/dist/components/form/index.js.map +1 -1
  77. package/dist/components/form/password-field.d.ts.map +1 -1
  78. package/dist/components/form/password-field.js +5 -3
  79. package/dist/components/form/password-field.js.map +1 -1
  80. package/dist/components/form/text-area.d.ts.map +1 -1
  81. package/dist/components/form/text-area.js +5 -3
  82. package/dist/components/form/text-area.js.map +1 -1
  83. package/dist/components/form/text-field.d.ts.map +1 -1
  84. package/dist/components/form/text-field.js +6 -4
  85. package/dist/components/form/text-field.js.map +1 -1
  86. package/dist/components/form/types.d.ts +5 -0
  87. package/dist/components/form/types.d.ts.map +1 -1
  88. package/dist/components/form/use-form-handling.d.ts +4 -0
  89. package/dist/components/form/use-form-handling.d.ts.map +1 -0
  90. package/dist/components/form/use-form-handling.js +37 -0
  91. package/dist/components/form/use-form-handling.js.map +1 -0
  92. package/dist/components/form/with-left-border.d.ts +2 -1
  93. package/dist/components/form/with-left-border.d.ts.map +1 -1
  94. package/dist/components/form/with-left-border.js +27 -3
  95. package/dist/components/form/with-left-border.js.map +1 -1
  96. package/dist/components/icon.d.ts +1 -0
  97. package/dist/components/icon.d.ts.map +1 -1
  98. package/dist/components/icon.js +24 -8
  99. package/dist/components/icon.js.map +1 -1
  100. package/dist/components/list.d.ts +2 -2
  101. package/dist/components/list.d.ts.map +1 -1
  102. package/dist/components/list.js +140 -62
  103. package/dist/components/list.js.map +1 -1
  104. package/dist/components/loading-bar.d.ts.map +1 -1
  105. package/dist/components/loading-bar.js +2 -2
  106. package/dist/components/loading-bar.js.map +1 -1
  107. package/dist/components/loading-text.d.ts +8 -0
  108. package/dist/components/loading-text.d.ts.map +1 -0
  109. package/dist/components/loading-text.js +58 -0
  110. package/dist/components/loading-text.js.map +1 -0
  111. package/dist/descendants.js +1 -1
  112. package/dist/descendants.js.map +1 -1
  113. package/dist/dev-ui.d.ts +7 -0
  114. package/dist/dev-ui.d.ts.map +1 -0
  115. package/dist/dev-ui.js +118 -0
  116. package/dist/dev-ui.js.map +1 -0
  117. package/dist/environment.d.ts +63 -0
  118. package/dist/environment.d.ts.map +1 -0
  119. package/dist/environment.js +189 -0
  120. package/dist/environment.js.map +1 -0
  121. package/dist/examples/datepicker.d.ts +2 -0
  122. package/dist/examples/datepicker.d.ts.map +1 -0
  123. package/dist/examples/datepicker.js +344 -0
  124. package/dist/examples/datepicker.js.map +1 -0
  125. package/dist/examples/file-autocomplete.vitest.d.ts +2 -0
  126. package/dist/examples/file-autocomplete.vitest.d.ts.map +1 -0
  127. package/dist/examples/file-autocomplete.vitest.js +223 -0
  128. package/dist/examples/file-autocomplete.vitest.js.map +1 -0
  129. package/dist/examples/form-basic-arrow-keys.vitest.d.ts +2 -0
  130. package/dist/examples/form-basic-arrow-keys.vitest.d.ts.map +1 -0
  131. package/dist/examples/form-basic-arrow-keys.vitest.js +46 -0
  132. package/dist/examples/form-basic-arrow-keys.vitest.js.map +1 -0
  133. package/dist/examples/form-basic.vitest.d.ts +2 -0
  134. package/dist/examples/form-basic.vitest.d.ts.map +1 -0
  135. package/dist/examples/form-basic.vitest.js +630 -0
  136. package/dist/examples/form-basic.vitest.js.map +1 -0
  137. package/dist/examples/form-dropdown-with-sections.d.ts +2 -0
  138. package/dist/examples/form-dropdown-with-sections.d.ts.map +1 -0
  139. package/dist/examples/form-dropdown-with-sections.js +13 -0
  140. package/dist/examples/form-dropdown-with-sections.js.map +1 -0
  141. package/dist/examples/form-dropdown-with-sections.vitest.d.ts +2 -0
  142. package/dist/examples/form-dropdown-with-sections.vitest.d.ts.map +1 -0
  143. package/dist/examples/form-dropdown-with-sections.vitest.js +75 -0
  144. package/dist/examples/form-dropdown-with-sections.vitest.js.map +1 -0
  145. package/dist/examples/form-dropdown.vitest.d.ts +2 -0
  146. package/dist/examples/form-dropdown.vitest.d.ts.map +1 -0
  147. package/dist/examples/form-dropdown.vitest.js +854 -0
  148. package/dist/examples/form-dropdown.vitest.js.map +1 -0
  149. package/dist/examples/form-multiselect-dropdown.d.ts +2 -0
  150. package/dist/examples/form-multiselect-dropdown.d.ts.map +1 -0
  151. package/dist/examples/form-multiselect-dropdown.js +13 -0
  152. package/dist/examples/form-multiselect-dropdown.js.map +1 -0
  153. package/dist/examples/form-scroll.d.ts.map +1 -1
  154. package/dist/examples/form-scroll.js +7 -1
  155. package/dist/examples/form-scroll.js.map +1 -1
  156. package/dist/examples/form-scroll.vitest.d.ts +2 -0
  157. package/dist/examples/form-scroll.vitest.d.ts.map +1 -0
  158. package/dist/examples/form-scroll.vitest.js +211 -0
  159. package/dist/examples/form-scroll.vitest.js.map +1 -0
  160. package/dist/examples/form-tagpicker.vitest.d.ts +2 -0
  161. package/dist/examples/form-tagpicker.vitest.d.ts.map +1 -0
  162. package/dist/examples/form-tagpicker.vitest.js +736 -0
  163. package/dist/examples/form-tagpicker.vitest.js.map +1 -0
  164. package/dist/examples/internal/descendants-filtering.js +1 -1
  165. package/dist/examples/internal/descendants-filtering.js.map +1 -1
  166. package/dist/examples/internal/descendants.js +1 -1
  167. package/dist/examples/internal/descendants.js.map +1 -1
  168. package/dist/examples/internal/nested-boxes.d.ts +2 -0
  169. package/dist/examples/internal/nested-boxes.d.ts.map +1 -0
  170. package/dist/examples/internal/nested-boxes.js +7 -0
  171. package/dist/examples/internal/nested-boxes.js.map +1 -0
  172. package/dist/examples/internal/rhf-custom-ref.js +2 -2
  173. package/dist/examples/internal/rhf-custom-ref.js.map +1 -1
  174. package/dist/examples/internal/scrollbox-demo.js +3 -22
  175. package/dist/examples/internal/scrollbox-demo.js.map +1 -1
  176. package/dist/examples/internal/scrollbox-descendants.d.ts +2 -0
  177. package/dist/examples/internal/scrollbox-descendants.d.ts.map +1 -0
  178. package/dist/examples/internal/scrollbox-descendants.js +83 -0
  179. package/dist/examples/internal/scrollbox-descendants.js.map +1 -0
  180. package/dist/examples/internal/scrollbox-with-descendants.js +4 -8
  181. package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -1
  182. package/dist/examples/internal/simple-scrollbox.vitest.d.ts +2 -0
  183. package/dist/examples/internal/simple-scrollbox.vitest.d.ts.map +1 -0
  184. package/dist/examples/internal/simple-scrollbox.vitest.js +96 -0
  185. package/dist/examples/internal/simple-scrollbox.vitest.js.map +1 -0
  186. package/dist/examples/internal/unicode-square-repro.d.ts +2 -0
  187. package/dist/examples/internal/unicode-square-repro.d.ts.map +1 -0
  188. package/dist/examples/internal/unicode-square-repro.js +7 -0
  189. package/dist/examples/internal/unicode-square-repro.js.map +1 -0
  190. package/dist/examples/list-detail-metadata.d.ts +2 -0
  191. package/dist/examples/list-detail-metadata.d.ts.map +1 -0
  192. package/dist/examples/list-detail-metadata.js +8 -0
  193. package/dist/examples/list-detail-metadata.js.map +1 -0
  194. package/dist/examples/list-dropdown-default.vitest.d.ts +2 -0
  195. package/dist/examples/list-dropdown-default.vitest.d.ts.map +1 -0
  196. package/dist/examples/list-dropdown-default.vitest.js +234 -0
  197. package/dist/examples/list-dropdown-default.vitest.js.map +1 -0
  198. package/dist/examples/list-fetch-data.vitest.d.ts +2 -0
  199. package/dist/examples/list-fetch-data.vitest.d.ts.map +1 -0
  200. package/dist/examples/list-fetch-data.vitest.js +111 -0
  201. package/dist/examples/list-fetch-data.vitest.js.map +1 -0
  202. package/dist/examples/list-filter-navigation.d.ts +2 -0
  203. package/dist/examples/list-filter-navigation.d.ts.map +1 -0
  204. package/dist/examples/list-filter-navigation.js +8 -0
  205. package/dist/examples/list-filter-navigation.js.map +1 -0
  206. package/dist/examples/list-scrollbox.vitest.d.ts +2 -0
  207. package/dist/examples/list-scrollbox.vitest.d.ts.map +1 -0
  208. package/dist/examples/list-scrollbox.vitest.js +93 -0
  209. package/dist/examples/list-scrollbox.vitest.js.map +1 -0
  210. package/dist/examples/list-with-detail-long.d.ts +2 -0
  211. package/dist/examples/list-with-detail-long.d.ts.map +1 -0
  212. package/dist/examples/list-with-detail-long.js +53 -0
  213. package/dist/examples/list-with-detail-long.js.map +1 -0
  214. package/dist/examples/list-with-detail.vitest.d.ts +2 -0
  215. package/dist/examples/list-with-detail.vitest.d.ts.map +1 -0
  216. package/dist/examples/list-with-detail.vitest.js +434 -0
  217. package/dist/examples/list-with-detail.vitest.js.map +1 -0
  218. package/dist/examples/list-with-dropdown.vitest.d.ts +2 -0
  219. package/dist/examples/list-with-dropdown.vitest.d.ts.map +1 -0
  220. package/dist/examples/list-with-dropdown.vitest.js +337 -0
  221. package/dist/examples/list-with-dropdown.vitest.js.map +1 -0
  222. package/dist/examples/list-with-sections.js +5 -1
  223. package/dist/examples/list-with-sections.js.map +1 -1
  224. package/dist/examples/list-with-sections.vitest.d.ts +2 -0
  225. package/dist/examples/list-with-sections.vitest.d.ts.map +1 -0
  226. package/dist/examples/list-with-sections.vitest.js +601 -0
  227. package/dist/examples/list-with-sections.vitest.js.map +1 -0
  228. package/dist/examples/scrollbox-vertical-centering.d.ts +6 -0
  229. package/dist/examples/scrollbox-vertical-centering.d.ts.map +1 -0
  230. package/dist/examples/scrollbox-vertical-centering.js +17 -0
  231. package/dist/examples/scrollbox-vertical-centering.js.map +1 -0
  232. package/dist/examples/simple-file-picker.vitest.d.ts +2 -0
  233. package/dist/examples/simple-file-picker.vitest.d.ts.map +1 -0
  234. package/dist/examples/simple-file-picker.vitest.js +678 -0
  235. package/dist/examples/simple-file-picker.vitest.js.map +1 -0
  236. package/dist/examples/simple-grid.vitest.d.ts +2 -0
  237. package/dist/examples/simple-grid.vitest.d.ts.map +1 -0
  238. package/dist/examples/simple-grid.vitest.js +521 -0
  239. package/dist/examples/simple-grid.vitest.js.map +1 -0
  240. package/dist/examples/simple-navigation.js +10 -4
  241. package/dist/examples/simple-navigation.js.map +1 -1
  242. package/dist/examples/simple-navigation.vitest.d.ts +2 -0
  243. package/dist/examples/simple-navigation.vitest.d.ts.map +1 -0
  244. package/dist/examples/simple-navigation.vitest.js +718 -0
  245. package/dist/examples/simple-navigation.vitest.js.map +1 -0
  246. package/dist/examples/store.vitest.d.ts +2 -0
  247. package/dist/examples/store.vitest.d.ts.map +1 -0
  248. package/dist/examples/store.vitest.js +69 -0
  249. package/dist/examples/store.vitest.js.map +1 -0
  250. package/dist/extensions/dev.d.ts +4 -2
  251. package/dist/extensions/dev.d.ts.map +1 -1
  252. package/dist/extensions/dev.js +61 -10
  253. package/dist/extensions/dev.js.map +1 -1
  254. package/dist/extensions/dev.vitest.d.ts +2 -0
  255. package/dist/extensions/dev.vitest.d.ts.map +1 -0
  256. package/dist/extensions/dev.vitest.js +197 -0
  257. package/dist/extensions/dev.vitest.js.map +1 -0
  258. package/dist/extensions/home.d.ts.map +1 -1
  259. package/dist/extensions/home.js +3 -0
  260. package/dist/extensions/home.js.map +1 -1
  261. package/dist/home-command.d.ts +8 -0
  262. package/dist/home-command.d.ts.map +1 -0
  263. package/dist/home-command.js +181 -0
  264. package/dist/home-command.js.map +1 -0
  265. package/dist/hover-repro.d.ts +2 -0
  266. package/dist/hover-repro.d.ts.map +1 -0
  267. package/dist/hover-repro.js +20 -0
  268. package/dist/hover-repro.js.map +1 -0
  269. package/dist/index.d.ts +1 -0
  270. package/dist/index.d.ts.map +1 -1
  271. package/dist/index.js +2 -0
  272. package/dist/index.js.map +1 -1
  273. package/dist/internal/dialog.d.ts +1 -0
  274. package/dist/internal/dialog.d.ts.map +1 -1
  275. package/dist/internal/dialog.js +27 -18
  276. package/dist/internal/dialog.js.map +1 -1
  277. package/dist/internal/navigation.d.ts +9 -1
  278. package/dist/internal/navigation.d.ts.map +1 -1
  279. package/dist/internal/navigation.js +5 -5
  280. package/dist/internal/navigation.js.map +1 -1
  281. package/dist/internal/offscreen.d.ts +6 -0
  282. package/dist/internal/offscreen.d.ts.map +1 -0
  283. package/dist/internal/offscreen.js +10 -0
  284. package/dist/internal/offscreen.js.map +1 -0
  285. package/dist/internal/providers.d.ts.map +1 -1
  286. package/dist/internal/providers.js +2 -2
  287. package/dist/internal/providers.js.map +1 -1
  288. package/dist/internal/scrollbox.d.ts +1 -10
  289. package/dist/internal/scrollbox.d.ts.map +1 -1
  290. package/dist/internal/scrollbox.js +2 -1
  291. package/dist/internal/scrollbox.js.map +1 -1
  292. package/dist/localstorage.d.ts +13 -0
  293. package/dist/localstorage.d.ts.map +1 -0
  294. package/dist/localstorage.js +190 -0
  295. package/dist/localstorage.js.map +1 -0
  296. package/dist/oauth.d.ts +142 -0
  297. package/dist/oauth.d.ts.map +1 -0
  298. package/dist/oauth.js +551 -0
  299. package/dist/oauth.js.map +1 -0
  300. package/dist/preferences.d.ts +23 -0
  301. package/dist/preferences.d.ts.map +1 -0
  302. package/dist/preferences.js +105 -0
  303. package/dist/preferences.js.map +1 -0
  304. package/dist/state.d.ts +2 -0
  305. package/dist/state.d.ts.map +1 -1
  306. package/dist/state.js +3 -0
  307. package/dist/state.js.map +1 -1
  308. package/dist/store.d.ts +21 -0
  309. package/dist/store.d.ts.map +1 -0
  310. package/dist/store.js +84 -0
  311. package/dist/store.js.map +1 -0
  312. package/dist/swift-loader.d.ts +3 -0
  313. package/dist/swift-loader.d.ts.map +1 -0
  314. package/dist/swift-loader.js +193 -0
  315. package/dist/swift-loader.js.map +1 -0
  316. package/dist/swift-runtime.d.ts +2 -0
  317. package/dist/swift-runtime.d.ts.map +1 -0
  318. package/dist/swift-runtime.js +27 -0
  319. package/dist/swift-runtime.js.map +1 -0
  320. package/dist/toast.d.ts +44 -0
  321. package/dist/toast.d.ts.map +1 -0
  322. package/dist/toast.js +221 -0
  323. package/dist/toast.js.map +1 -0
  324. package/dist/utils/file-system.d.ts +9 -0
  325. package/dist/utils/file-system.d.ts.map +1 -1
  326. package/dist/utils/file-system.js +49 -0
  327. package/dist/utils/file-system.js.map +1 -1
  328. package/dist/utils/run-command.d.ts +25 -1
  329. package/dist/utils/run-command.d.ts.map +1 -1
  330. package/dist/utils/run-command.js +47 -4
  331. package/dist/utils/run-command.js.map +1 -1
  332. package/dist/window.d.ts +12 -0
  333. package/dist/window.d.ts.map +1 -0
  334. package/dist/window.js +48 -0
  335. package/dist/window.js.map +1 -0
  336. package/package.json +12 -10
  337. package/src/apis/browser-extension.tsx +29 -0
  338. package/src/apis/localstorage.test.ts +14 -6
  339. package/src/apis/localstorage.tsx +8 -5
  340. package/src/apis/oauth.tsx +5 -1
  341. package/src/apis/preferences.tsx +48 -22
  342. package/src/build.test.tsx +52 -0
  343. package/src/build.tsx +2 -1
  344. package/src/cli.tsx +78 -37
  345. package/src/compile.tsx +22 -5
  346. package/src/components/actions.tsx +94 -32
  347. package/src/components/detail.tsx +4 -0
  348. package/src/components/dropdown.tsx +47 -14
  349. package/src/components/extension-preferences.tsx +44 -16
  350. package/src/components/form/checkbox.tsx +12 -6
  351. package/src/components/form/date-picker.tsx +12 -6
  352. package/src/components/form/description.tsx +7 -2
  353. package/src/components/form/dropdown.tsx +131 -119
  354. package/src/components/form/file-autocomplete.tsx +90 -108
  355. package/src/components/form/file-picker.tsx +54 -43
  356. package/src/components/form/form-end.tsx +23 -2
  357. package/src/components/form/index.tsx +152 -34
  358. package/src/components/form/password-field.tsx +12 -6
  359. package/src/components/form/text-area.tsx +13 -6
  360. package/src/components/form/text-field.tsx +13 -6
  361. package/src/components/form/types.tsx +6 -0
  362. package/src/components/form/with-left-border.tsx +41 -8
  363. package/src/components/icon.tsx +27 -8
  364. package/src/components/list.tsx +193 -74
  365. package/src/components/loading-bar.tsx +3 -2
  366. package/src/components/loading-text.tsx +79 -0
  367. package/src/descendants.tsx +1 -0
  368. package/src/examples/file-autocomplete.vitest.tsx +130 -125
  369. package/src/examples/form-basic.vitest.tsx +376 -176
  370. package/src/examples/form-dropdown.vitest.tsx +126 -126
  371. package/src/examples/form-scroll.tsx +2 -0
  372. package/src/examples/form-scroll.vitest.tsx +58 -58
  373. package/src/examples/form-tagpicker.vitest.tsx +99 -99
  374. package/src/examples/internal/descendants-filtering.tsx +1 -0
  375. package/src/examples/internal/descendants.tsx +1 -0
  376. package/src/examples/internal/rhf-custom-ref.tsx +2 -0
  377. package/src/examples/internal/scrollbox-demo.tsx +3 -27
  378. package/src/examples/internal/scrollbox-with-descendants.tsx +4 -7
  379. package/src/examples/internal/simple-scrollbox.vitest.tsx +7 -5
  380. package/src/examples/list-detail-metadata.tsx +49 -0
  381. package/src/examples/list-detail-metadata.vitest.tsx +88 -0
  382. package/src/examples/list-dropdown-default.vitest.tsx +51 -51
  383. package/src/examples/list-fetch-data.vitest.tsx +4 -4
  384. package/src/examples/list-scrollbox.vitest.tsx +73 -14
  385. package/src/examples/list-with-detail-long.tsx +70 -0
  386. package/src/examples/list-with-detail.vitest.tsx +198 -92
  387. package/src/examples/list-with-dropdown.vitest.tsx +53 -53
  388. package/src/examples/list-with-sections.tsx +1 -0
  389. package/src/examples/list-with-sections.vitest.tsx +213 -89
  390. package/src/examples/list-with-toast.vitest.tsx +4 -4
  391. package/src/examples/simple-file-picker.vitest.tsx +61 -471
  392. package/src/examples/simple-grid.vitest.tsx +238 -233
  393. package/src/examples/simple-navigation.tsx +15 -7
  394. package/src/examples/simple-navigation.vitest.tsx +121 -210
  395. package/src/examples/store.vitest.tsx +1 -1
  396. package/src/examples/swift-extension.vitest.tsx +148 -0
  397. package/src/examples/synonyms.vitest.tsx +159 -0
  398. package/src/extensions/dev.tsx +74 -7
  399. package/src/extensions/dev.vitest.tsx +97 -31
  400. package/src/extensions/home.tsx +6 -0
  401. package/src/index.tsx +3 -0
  402. package/src/internal/dialog.tsx +43 -30
  403. package/src/internal/navigation.tsx +3 -1
  404. package/src/internal/offscreen.tsx +15 -0
  405. package/src/internal/providers.tsx +4 -2
  406. package/src/internal/scrollbox.tsx +4 -8
  407. package/src/keyboard.test.tsx +69 -0
  408. package/src/state.tsx +7 -0
  409. package/src/swift-loader.tsx +239 -0
  410. package/src/swift-runtime.tsx +36 -0
  411. package/src/utils/file-system.ts +61 -0
  412. package/src/utils/run-command.tsx +75 -6
@@ -0,0 +1,58 @@
1
+ import { jsx as _jsx } from "@opentui/react/jsx-runtime";
2
+ import { useState, useEffect, useRef } from 'react';
3
+ import { colord } from 'colord';
4
+ /**
5
+ * Generate wave colors based on base color
6
+ * Creates a gradient from base color to a lighter version and back
7
+ * Uses a shorter wave (12 chars) compared to LoadingBar
8
+ */
9
+ function generateWaveColors(baseColor) {
10
+ const base = colord(baseColor);
11
+ // Shorter wave for text - lighten factors from 0 to 0.5 and back
12
+ const steps = [0, 10, 20, 30, 40, 50, 40, 30, 20, 10, 0, 0];
13
+ return steps.map((percent) => base.lighten(percent / 100).toHex());
14
+ }
15
+ export function LoadingText(props) {
16
+ const { children, isLoading = false, color = '#FFC000' } = props;
17
+ const [position, setPosition] = useState(0);
18
+ const intervalRef = useRef(null);
19
+ const characters = children.split('');
20
+ const waveColors = generateWaveColors(color);
21
+ const waveWidth = waveColors.length;
22
+ // Add padding at the end to create a delay before the next loop
23
+ const endPadding = 10;
24
+ const totalLength = characters.length + waveWidth + endPadding;
25
+ useEffect(() => {
26
+ if (isLoading) {
27
+ intervalRef.current = setInterval(() => {
28
+ setPosition((prev) => (prev + 1) % totalLength);
29
+ }, 30);
30
+ }
31
+ else {
32
+ if (intervalRef.current) {
33
+ clearInterval(intervalRef.current);
34
+ intervalRef.current = null;
35
+ }
36
+ setPosition(0);
37
+ }
38
+ return () => {
39
+ if (intervalRef.current) {
40
+ clearInterval(intervalRef.current);
41
+ }
42
+ };
43
+ }, [isLoading, totalLength]);
44
+ const getCharacterColor = (index) => {
45
+ if (!isLoading) {
46
+ return color;
47
+ }
48
+ const distance = position - index;
49
+ // If character is within the wave (behind the current position)
50
+ if (distance >= 0 && distance < waveWidth) {
51
+ return waveColors[distance];
52
+ }
53
+ // Default to base color for characters outside the wave
54
+ return color;
55
+ };
56
+ return (_jsx("box", { flexDirection: "row", children: characters.map((char, index) => (_jsx("text", { fg: getCharacterColor(index), flexShrink: 0, children: char }, index))) }));
57
+ }
58
+ //# sourceMappingURL=loading-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-text.js","sourceRoot":"","sources":["../../src/components/loading-text.tsx"],"names":[],"mappings":"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"}
@@ -65,7 +65,7 @@ const MenuExample = () => {
65
65
  .map(([, item]) => item.index);
66
66
  setFilteredIndexes(filtered);
67
67
  };
68
- return (_jsx(DescendantsProvider, { value: context, children: _jsx(FilteredIndexesContext.Provider, { value: filteredIndexes, children: _jsxs("box", { children: [_jsx("textarea", { ref: inputRef, height: 1, keyBindings: [
68
+ return (_jsx(DescendantsProvider, { value: context, children: _jsx(FilteredIndexesContext.Provider, { value: filteredIndexes, children: _jsxs("box", { children: [_jsx("textarea", { ref: inputRef, height: 1, wrapMode: 'none', keyBindings: [
69
69
  { name: 'return', action: 'submit' },
70
70
  { name: 'linefeed', action: 'submit' },
71
71
  ], onContentChange: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"descendants.js","sourceRoot":"","sources":["../src/descendants.tsx"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,EAAE;AACF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAE9D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAE3C,SAAS,CAAC,CAAA;IAEZ,SAAS,mBAAmB,CAAC,KAG5B;QACC,kDAAkD;QAClD,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;QAEnB,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,CAAC,KAAK,YAC3C,KAAK,CAAC,QAAQ,GACY,CAC9B,CAAA;IACH,CAAC;IAED,MAAM,cAAc,GAAG,GAA6B,EAAE;QACpD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAS,CAAC,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAmB,EAAE,CAAC,CAAA;QAE9C,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,OAAO,GAAG,CAAC,CAAA;YACxB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;QAClB,CAAC,CAAA;QAED,MAAM,aAAa,GAAG,CAAC,EAAU,EAAE,KAAS,EAAE,EAAE;YAC9C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClB,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;oBAChB,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE;iBAC9B,CAAA;YACH,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAA;YAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAA;QAC9B,CAAC,CAAA;QAED,0BAA0B;QAC1B,mBAAmB;QACnB,cAAc;QACd,MAAM;QACN,SAAS;QAET,6EAA6E;QAC7E,qEAAqE;QACrE,2FAA2F;QAC3F,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;IACtC,CAAC,CAAA;IAED;;OAEG;IACH,SAAS,aAAa,CAAC,KAAS;QAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;QACnD,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/D,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAS,CAAC,CAAC,CAAC,CAAA;QAEpD,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;YACzB,+CAA+C;YAC/C,oDAAoD;YACpD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA;AAC/D,CAAC;AAED,UAAU;AACV,MAAM,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,GAC1D,iBAAiB,EAEb,CAAA;AAEN,MAAM,sBAAsB,GAAG,KAAK,CAAC,aAAa,CAAW,EAAE,CAAC,CAAA;AAEhE,MAAM,WAAW,GAAG,GAAG,EAAE;IACvB,MAAM,OAAO,GAAG,cAAc,EAAE,CAAA;IAChC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAW,EAAE,CAAC,CAAA;IAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAqB,IAAI,CAAC,CAAA;IAEvD,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACjD,MAAM,QAAQ,GAAG,KAAK;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CACnB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAC/D;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC,CAAA;IAED,OAAO,CACL,KAAC,mBAAmB,IAAC,KAAK,EAAE,OAAO,YACjC,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,YACrD,0BACE,mBACE,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,CAAC,EACT,WAAW,EAAE;4BACX,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;4BACpC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;yBACvC,EACD,eAAe,EAAE,GAAG,EAAE;4BACpB,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CAAA;wBACjD,CAAC,EACD,WAAW,EAAC,WAAW,GACvB,EACF,KAAC,IAAI,IAAC,KAAK,EAAC,YAAY,GAAG,EAC3B,KAAC,IAAI,IAAC,KAAK,EAAC,aAAa,GAAG,EAC5B,KAAC,IAAI,IAAC,KAAK,EAAC,YAAY,GAAG,IACvB,GAC0B,GACd,CACvB,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAqB,EAAE,EAAE;IAC5C,MAAM,EAAE,KAAK,EAAE,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;IAC1C,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAA;IAEhE,mDAAmD;IACnD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,yBAAO,KAAK,GAAQ,CAAA;AAC7B,CAAC,CAAA"}
1
+ {"version":3,"file":"descendants.js","sourceRoot":"","sources":["../src/descendants.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function startDevMode({ extensionPath, }: {
2
+ extensionPath: string;
3
+ }): Promise<void>;
4
+ export declare function triggerRebuild({ extensionPath, }: {
5
+ extensionPath: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=dev-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ui.d.ts","sourceRoot":"","sources":["../src/dev-ui.tsx"],"names":[],"mappings":"AAmIA,wBAAsB,YAAY,CAAC,EACjC,aAAa,GACd,EAAE;IACD,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB;AAED,wBAAsB,cAAc,CAAC,EACnC,aAAa,GACd,EAAE;IACD,aAAa,EAAE,MAAM,CAAA;CACtB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4BhB"}
package/dist/dev-ui.js ADDED
@@ -0,0 +1,118 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { render } from '@opentui/react';
5
+ import { List, useStore } from '@termcast/cli';
6
+ import { Action, ActionPanel } from '@termcast/cli';
7
+ import { useNavigation } from '@termcast/cli/src/internal/navigation';
8
+ import { Providers } from '@termcast/cli/src/internal/providers';
9
+ import { showToast, Toast } from '@termcast/cli/src/toast';
10
+ import { Icon } from '@termcast/cli';
11
+ import { getCommandsWithFiles } from './package-json';
12
+ import { buildExtensionCommands } from './build';
13
+ function ExtensionCommandsList({ extensionPath, commands, }) {
14
+ const { push } = useNavigation();
15
+ const packageJson = getCommandsWithFiles({
16
+ packageJsonPath: path.join(extensionPath, 'package.json'),
17
+ }).packageJson;
18
+ const handleCommandSelect = async (command) => {
19
+ try {
20
+ if (!command.bundledPath) {
21
+ await showToast({
22
+ style: Toast.Style.Failure,
23
+ title: 'Command not built',
24
+ message: `Command ${command.name} was not built successfully`,
25
+ });
26
+ return;
27
+ }
28
+ const state = useStore.getState();
29
+ const devRebuildCount = state.devRebuildCount;
30
+ // Set the current command in state
31
+ useStore.setState({ currentCommandName: command.name });
32
+ const module = await import(`${command.bundledPath}?rebuild=${devRebuildCount}`);
33
+ const Component = module.default;
34
+ if (!Component) {
35
+ await showToast({
36
+ style: Toast.Style.Failure,
37
+ title: 'No default export',
38
+ message: `Command file ${command.name} has no default export`,
39
+ });
40
+ return;
41
+ }
42
+ push(_jsx(Component, {}));
43
+ }
44
+ catch (error) {
45
+ await showToast({
46
+ style: Toast.Style.Failure,
47
+ title: 'Failed to load command',
48
+ message: error.message ? error.message : error,
49
+ });
50
+ }
51
+ };
52
+ return (_jsxs(List, { navigationTitle: packageJson.title || 'Extension Commands', searchBarPlaceholder: 'Search commands...', children: [_jsx(List.Section, { title: 'Commands', children: commands.map((command) => (_jsx(List.Item, { id: command.name, title: command.title, subtitle: command.description, icon: command.icon ? Icon[command.icon] : undefined, accessories: [
53
+ { text: command.mode },
54
+ ...(command.bundledPath
55
+ ? []
56
+ : [
57
+ {
58
+ text: 'Not built',
59
+ tooltip: 'Command was not built successfully',
60
+ },
61
+ ]),
62
+ ], keywords: command.keywords, actions: _jsxs(ActionPanel, { children: [_jsx(Action, { title: 'Run Command', onAction: () => {
63
+ handleCommandSelect(command);
64
+ } }), _jsx(Action.CopyToClipboard, { content: command.filePath, title: 'Copy File Path' }), _jsx(Action.CopyToClipboard, { content: JSON.stringify(command, null, 2), title: 'Copy Command Info' })] }) }, command.name))) }), commands.length === 0 && (_jsx(List.Section, { title: 'No Commands', children: _jsx(List.Item, { title: 'No commands found', subtitle: 'Check your package.json for command definitions' }) }))] }));
65
+ }
66
+ export async function startDevMode({ extensionPath, }) {
67
+ const resolvedPath = path.resolve(extensionPath);
68
+ if (!fs.existsSync(resolvedPath)) {
69
+ throw new Error(`Extension path does not exist: ${resolvedPath}`);
70
+ }
71
+ const packageJsonPath = path.join(resolvedPath, 'package.json');
72
+ if (!fs.existsSync(packageJsonPath)) {
73
+ throw new Error(`No package.json found at: ${packageJsonPath}`);
74
+ }
75
+ // Parse the package.json to get extension metadata
76
+ const { packageJson } = getCommandsWithFiles({ packageJsonPath });
77
+ // Build and set initial devElement
78
+ const { commands } = await buildExtensionCommands({
79
+ extensionPath: resolvedPath,
80
+ });
81
+ // Reset state and set extension information
82
+ useStore.setState({
83
+ ...useStore.getInitialState(),
84
+ extensionPath: resolvedPath,
85
+ extensionPackageJson: packageJson,
86
+ devElement: (_jsx(ExtensionCommandsList, { extensionPath: resolvedPath, commands: commands })),
87
+ devRebuildCount: 1,
88
+ });
89
+ function App() {
90
+ const devElement = useStore((state) => state.devElement);
91
+ const devRebuildCount = useStore((state) => state.devRebuildCount);
92
+ return _jsx(Providers, { children: devElement }, String(devRebuildCount));
93
+ }
94
+ await render(_jsx(App, {}));
95
+ }
96
+ export async function triggerRebuild({ extensionPath, }) {
97
+ try {
98
+ const { commands } = await buildExtensionCommands({ extensionPath });
99
+ // Re-parse package.json in case it changed
100
+ const packageJsonPath = path.join(extensionPath, 'package.json');
101
+ const { packageJson } = getCommandsWithFiles({ packageJsonPath });
102
+ // Update the devElement with new commands and increment rebuild count
103
+ const state = useStore.getState();
104
+ useStore.setState({
105
+ extensionPackageJson: packageJson,
106
+ devElement: (_jsx(ExtensionCommandsList, { extensionPath: extensionPath, commands: commands })),
107
+ devRebuildCount: state.devRebuildCount + 1,
108
+ });
109
+ }
110
+ catch (error) {
111
+ await showToast({
112
+ style: Toast.Style.Failure,
113
+ title: 'Rebuild failed',
114
+ message: error.message,
115
+ });
116
+ }
117
+ }
118
+ //# sourceMappingURL=dev-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-ui.js","sourceRoot":"","sources":["../src/dev-ui.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Environment API - Provides access to environment information and context
3
+ *
4
+ * Raycast Docs: https://developers.raycast.com/api-reference/environment
5
+ *
6
+ * The environment object provides information about the command's runtime context,
7
+ * including theme settings, development mode, launch type, and paths. LaunchType enum
8
+ * indicates whether the command was triggered by user action or background process.
9
+ *
10
+ * Key features:
11
+ * - Access to appearance/theme (dark/light)
12
+ * - Extension and command metadata
13
+ * - Launch context (user-initiated vs background)
14
+ * - Support and assets paths for file storage
15
+ * - System integration (selected Finder items, selected text)
16
+ */
17
+ export interface Environment {
18
+ appearance: 'dark' | 'light';
19
+ assetsPath: string;
20
+ commandMode: 'view' | 'no-view' | 'menu-bar';
21
+ commandName: string;
22
+ extensionName: string;
23
+ isDevelopment: boolean;
24
+ launchType: LaunchType;
25
+ ownerOrAuthorName: string;
26
+ raycastVersion: string;
27
+ supportPath: string;
28
+ textSize: 'medium' | 'large';
29
+ canAccess(api: any): boolean;
30
+ theme: 'dark' | 'light';
31
+ }
32
+ export declare enum LaunchType {
33
+ UserInitiated = "userInitiated",
34
+ Background = "background"
35
+ }
36
+ export interface LaunchProps<T extends Record<string, any> = Record<string, any>> {
37
+ arguments: T;
38
+ fallbackText?: string;
39
+ launchContext?: {
40
+ [key: string]: any;
41
+ };
42
+ }
43
+ declare class EnvironmentImpl implements Environment {
44
+ constructor();
45
+ get appearance(): 'dark' | 'light';
46
+ get assetsPath(): string;
47
+ get commandMode(): 'view' | 'no-view' | 'menu-bar';
48
+ get commandName(): string;
49
+ get extensionName(): string;
50
+ get isDevelopment(): boolean;
51
+ get launchType(): LaunchType;
52
+ get ownerOrAuthorName(): string;
53
+ get raycastVersion(): string;
54
+ get supportPath(): string;
55
+ get textSize(): 'medium' | 'large';
56
+ get theme(): 'dark' | 'light';
57
+ canAccess(api: any): boolean;
58
+ }
59
+ export declare const environment: EnvironmentImpl;
60
+ export declare function getSelectedFinderItems(): Promise<string[]>;
61
+ export declare function getSelectedText(): Promise<string>;
62
+ export {};
63
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAA;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,OAAO,CAAA;IACtB,UAAU,EAAE,UAAU,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC5B,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAA;IAC5B,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CACxB;AAED,oBAAY,UAAU;IACpB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAEnD,SAAS,EAAE,CAAC,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;CACvC;AAED,cAAM,eAAgB,YAAW,WAAW;;IAM1C,IAAI,UAAU,IAAI,MAAM,GAAG,OAAO,CAcjC;IAED,IAAI,UAAU,IAAI,MAAM,CAOvB;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,GAAG,UAAU,CAWjD;IAED,IAAI,WAAW,IAAI,MAAM,CAMxB;IAED,IAAI,aAAa,IAAI,MAAM,CAS1B;IAED,IAAI,aAAa,IAAI,OAAO,CAI3B;IAED,IAAI,UAAU,IAAI,UAAU,CAG3B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAU9B;IAED,IAAI,cAAc,IAAI,MAAM,CAG3B;IAED,IAAI,WAAW,IAAI,MAAM,CAexB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAGjC;IAGD,IAAI,KAAK,IAAI,MAAM,GAAG,OAAO,CAE5B;IAED,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;CAK7B;AAED,eAAO,MAAM,WAAW,iBAAwB,CAAA;AAEhD,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA6BhE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CA4BvD"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Environment API - Provides access to environment information and context
3
+ *
4
+ * Raycast Docs: https://developers.raycast.com/api-reference/environment
5
+ *
6
+ * The environment object provides information about the command's runtime context,
7
+ * including theme settings, development mode, launch type, and paths. LaunchType enum
8
+ * indicates whether the command was triggered by user action or background process.
9
+ *
10
+ * Key features:
11
+ * - Access to appearance/theme (dark/light)
12
+ * - Extension and command metadata
13
+ * - Launch context (user-initiated vs background)
14
+ * - Support and assets paths for file storage
15
+ * - System integration (selected Finder items, selected text)
16
+ */
17
+ import os from 'node:os';
18
+ import path from 'node:path';
19
+ import fs from 'node:fs';
20
+ import { execSync } from 'node:child_process';
21
+ import { useStore } from './state';
22
+ export var LaunchType;
23
+ (function (LaunchType) {
24
+ LaunchType["UserInitiated"] = "userInitiated";
25
+ LaunchType["Background"] = "background";
26
+ })(LaunchType || (LaunchType = {}));
27
+ class EnvironmentImpl {
28
+ constructor() {
29
+ // Bind all methods to this instance
30
+ this.canAccess = this.canAccess.bind(this);
31
+ }
32
+ get appearance() {
33
+ // Try to detect system theme on macOS
34
+ if (process.platform === 'darwin') {
35
+ try {
36
+ const result = execSync('defaults read -g AppleInterfaceStyle 2>/dev/null', { encoding: 'utf8' });
37
+ return result.includes('Dark') ? 'dark' : 'light';
38
+ }
39
+ catch {
40
+ return 'light';
41
+ }
42
+ }
43
+ return 'light';
44
+ }
45
+ get assetsPath() {
46
+ const state = useStore.getState();
47
+ if (state.extensionPath) {
48
+ return path.join(state.extensionPath, 'assets');
49
+ }
50
+ // TODO: Fallback for non-dev mode extensions
51
+ return path.join(os.homedir(), '.termcast', 'assets');
52
+ }
53
+ get commandMode() {
54
+ const state = useStore.getState();
55
+ if (state.currentCommandName && state.extensionPackageJson?.commands) {
56
+ const command = state.extensionPackageJson.commands.find((cmd) => cmd.name === state.currentCommandName);
57
+ if (command) {
58
+ return command.mode;
59
+ }
60
+ }
61
+ return 'view';
62
+ }
63
+ get commandName() {
64
+ const state = useStore.getState();
65
+ if (state.currentCommandName) {
66
+ return state.currentCommandName;
67
+ }
68
+ return '';
69
+ }
70
+ get extensionName() {
71
+ const state = useStore.getState();
72
+ if (state.extensionPackageJson?.name) {
73
+ return state.extensionPackageJson.name;
74
+ }
75
+ if (state.extensionPath) {
76
+ return path.basename(state.extensionPath);
77
+ }
78
+ return '';
79
+ }
80
+ get isDevelopment() {
81
+ const state = useStore.getState();
82
+ // We're in development mode if devElement is set
83
+ return state.devElement !== null;
84
+ }
85
+ get launchType() {
86
+ // TODO: Support background commands when implemented
87
+ return LaunchType.UserInitiated;
88
+ }
89
+ get ownerOrAuthorName() {
90
+ const state = useStore.getState();
91
+ const pkg = state.extensionPackageJson;
92
+ if (pkg?.author) {
93
+ return pkg.author;
94
+ }
95
+ if (pkg?.owner) {
96
+ return pkg.owner;
97
+ }
98
+ return '';
99
+ }
100
+ get raycastVersion() {
101
+ // Return a version that indicates termcast compatibility
102
+ return '1.0.0-termcast';
103
+ }
104
+ get supportPath() {
105
+ // Create a support directory in the user's data directory
106
+ const baseDir = path.join(os.homedir(), '.termcast', 'support', this.extensionName);
107
+ // Ensure the directory exists
108
+ if (!fs.existsSync(baseDir)) {
109
+ fs.mkdirSync(baseDir, { recursive: true });
110
+ }
111
+ return baseDir;
112
+ }
113
+ get textSize() {
114
+ // TODO: Make this configurable via preferences
115
+ return 'medium';
116
+ }
117
+ // Alias for appearance to match Raycast API
118
+ get theme() {
119
+ return this.appearance;
120
+ }
121
+ canAccess(api) {
122
+ // In termcast, all APIs are accessible
123
+ // This method exists for Raycast compatibility
124
+ return true;
125
+ }
126
+ }
127
+ export const environment = new EnvironmentImpl();
128
+ export async function getSelectedFinderItems() {
129
+ // TODO: Improve cross-platform support
130
+ // Currently only works on macOS using AppleScript
131
+ // Should add support for:
132
+ // 1. Windows Explorer selection (via PowerShell or COM)
133
+ // 2. Linux file managers (Nautilus, Dolphin, etc.)
134
+ if (process.platform === 'darwin') {
135
+ try {
136
+ // Use AppleScript to get selected Finder items
137
+ const script = `
138
+ tell application "Finder"
139
+ set theSelection to selection
140
+ set thePaths to {}
141
+ repeat with theItem in theSelection
142
+ set end of thePaths to POSIX path of (theItem as alias)
143
+ end repeat
144
+ return thePaths
145
+ end tell
146
+ `;
147
+ const result = execSync(`osascript -e '${script}'`, {
148
+ encoding: 'utf8',
149
+ });
150
+ return result.trim().split(', ').filter(Boolean);
151
+ }
152
+ catch {
153
+ return [];
154
+ }
155
+ }
156
+ // TODO: Implement for other platforms
157
+ return [];
158
+ }
159
+ export async function getSelectedText() {
160
+ // TODO: Improve implementation and cross-platform support
161
+ // Current implementation has issues:
162
+ // 1. Modifies the clipboard (should preserve original content)
163
+ // 2. Uses delay which may not be reliable
164
+ // 3. Only works on macOS
165
+ // Should add support for Windows and Linux
166
+ if (process.platform === 'darwin') {
167
+ try {
168
+ // TODO: Save and restore clipboard contents to avoid side effects
169
+ // Use AppleScript to get selected text from frontmost application
170
+ const script = `
171
+ tell application "System Events"
172
+ keystroke "c" using command down
173
+ delay 0.1
174
+ return (the clipboard)
175
+ end tell
176
+ `;
177
+ const result = execSync(`osascript -e '${script}'`, {
178
+ encoding: 'utf8',
179
+ });
180
+ return result.trim();
181
+ }
182
+ catch {
183
+ return '';
184
+ }
185
+ }
186
+ // TODO: Implement for Windows (via PowerShell) and Linux (xclip/xsel)
187
+ return '';
188
+ }
189
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=datepicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datepicker.d.ts","sourceRoot":"","sources":["../../src/examples/datepicker.tsx"],"names":[],"mappings":""}