termcast 1.3.32 → 1.3.34

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 (327) hide show
  1. package/dist/action-utils.d.ts.map +1 -1
  2. package/dist/action-utils.js +8 -0
  3. package/dist/action-utils.js.map +1 -1
  4. package/dist/apis/cache.d.ts +1 -2
  5. package/dist/apis/cache.d.ts.map +1 -1
  6. package/dist/apis/cache.js +138 -54
  7. package/dist/apis/cache.js.map +1 -1
  8. package/dist/apis/clipboard.d.ts.map +1 -1
  9. package/dist/apis/clipboard.js +4 -0
  10. package/dist/apis/clipboard.js.map +1 -1
  11. package/dist/apis/oauth.d.ts.map +1 -1
  12. package/dist/apis/oauth.js +31 -4
  13. package/dist/apis/oauth.js.map +1 -1
  14. package/dist/build.d.ts +0 -1
  15. package/dist/build.d.ts.map +1 -1
  16. package/dist/build.js +30 -51
  17. package/dist/build.js.map +1 -1
  18. package/dist/cli.js +31 -14
  19. package/dist/cli.js.map +1 -1
  20. package/dist/compile.d.ts.map +1 -1
  21. package/dist/compile.js +5 -1
  22. package/dist/compile.js.map +1 -1
  23. package/dist/components/actions.d.ts +14 -0
  24. package/dist/components/actions.d.ts.map +1 -1
  25. package/dist/components/actions.js +151 -59
  26. package/dist/components/actions.js.map +1 -1
  27. package/dist/components/alert.d.ts.map +1 -1
  28. package/dist/components/alert.js +6 -5
  29. package/dist/components/alert.js.map +1 -1
  30. package/dist/components/animation-tick.d.ts +1 -1
  31. package/dist/components/animation-tick.js +1 -1
  32. package/dist/components/animation-tick.js.map +1 -1
  33. package/dist/components/detail.d.ts +5 -31
  34. package/dist/components/detail.d.ts.map +1 -1
  35. package/dist/components/detail.js +36 -52
  36. package/dist/components/detail.js.map +1 -1
  37. package/dist/components/dropdown.d.ts +1 -1
  38. package/dist/components/dropdown.d.ts.map +1 -1
  39. package/dist/components/dropdown.js +50 -22
  40. package/dist/components/dropdown.js.map +1 -1
  41. package/dist/components/footer.d.ts.map +1 -1
  42. package/dist/components/footer.js +19 -18
  43. package/dist/components/footer.js.map +1 -1
  44. package/dist/components/form/checkbox.d.ts.map +1 -1
  45. package/dist/components/form/checkbox.js +12 -11
  46. package/dist/components/form/checkbox.js.map +1 -1
  47. package/dist/components/form/date-picker.d.ts.map +1 -1
  48. package/dist/components/form/date-picker.js +7 -22
  49. package/dist/components/form/date-picker.js.map +1 -1
  50. package/dist/components/form/description.d.ts +1 -1
  51. package/dist/components/form/description.d.ts.map +1 -1
  52. package/dist/components/form/description.js +6 -5
  53. package/dist/components/form/description.js.map +1 -1
  54. package/dist/components/form/dropdown.d.ts.map +1 -1
  55. package/dist/components/form/dropdown.js +53 -50
  56. package/dist/components/form/dropdown.js.map +1 -1
  57. package/dist/components/form/file-autocomplete.d.ts.map +1 -1
  58. package/dist/components/form/file-autocomplete.js +5 -4
  59. package/dist/components/form/file-autocomplete.js.map +1 -1
  60. package/dist/components/form/file-picker.d.ts.map +1 -1
  61. package/dist/components/form/file-picker.js +23 -22
  62. package/dist/components/form/file-picker.js.map +1 -1
  63. package/dist/components/form/form-end.d.ts.map +1 -1
  64. package/dist/components/form/form-end.js +6 -4
  65. package/dist/components/form/form-end.js.map +1 -1
  66. package/dist/components/form/form-field-wrapper.d.ts +15 -0
  67. package/dist/components/form/form-field-wrapper.d.ts.map +1 -0
  68. package/dist/components/form/form-field-wrapper.js +29 -0
  69. package/dist/components/form/form-field-wrapper.js.map +1 -0
  70. package/dist/components/form/index.d.ts.map +1 -1
  71. package/dist/components/form/index.js +31 -30
  72. package/dist/components/form/index.js.map +1 -1
  73. package/dist/components/form/password-field.d.ts.map +1 -1
  74. package/dist/components/form/password-field.js +7 -6
  75. package/dist/components/form/password-field.js.map +1 -1
  76. package/dist/components/form/separator.d.ts.map +1 -1
  77. package/dist/components/form/separator.js +3 -2
  78. package/dist/components/form/separator.js.map +1 -1
  79. package/dist/components/form/tagpicker.d.ts.map +1 -1
  80. package/dist/components/form/tagpicker.js +2 -1
  81. package/dist/components/form/tagpicker.js.map +1 -1
  82. package/dist/components/form/text-area.d.ts.map +1 -1
  83. package/dist/components/form/text-area.js +7 -6
  84. package/dist/components/form/text-area.js.map +1 -1
  85. package/dist/components/form/text-field.d.ts.map +1 -1
  86. package/dist/components/form/text-field.js +7 -6
  87. package/dist/components/form/text-field.js.map +1 -1
  88. package/dist/components/form/use-form-navigation.d.ts.map +1 -1
  89. package/dist/components/form/use-form-navigation.js +4 -4
  90. package/dist/components/form/use-form-navigation.js.map +1 -1
  91. package/dist/components/form/with-left-border.d.ts +15 -0
  92. package/dist/components/form/with-left-border.d.ts.map +1 -1
  93. package/dist/components/form/with-left-border.js +21 -9
  94. package/dist/components/form/with-left-border.js.map +1 -1
  95. package/dist/components/icon.d.ts +14 -0
  96. package/dist/components/icon.d.ts.map +1 -1
  97. package/dist/components/icon.js +60 -0
  98. package/dist/components/icon.js.map +1 -1
  99. package/dist/components/image.d.ts +47 -2
  100. package/dist/components/image.d.ts.map +1 -1
  101. package/dist/components/image.js +46 -7
  102. package/dist/components/image.js.map +1 -1
  103. package/dist/components/list.d.ts +5 -0
  104. package/dist/components/list.d.ts.map +1 -1
  105. package/dist/components/list.js +188 -132
  106. package/dist/components/list.js.map +1 -1
  107. package/dist/components/loading-bar.d.ts.map +1 -1
  108. package/dist/components/loading-bar.js +4 -3
  109. package/dist/components/loading-bar.js.map +1 -1
  110. package/dist/components/metadata.d.ts +70 -0
  111. package/dist/components/metadata.d.ts.map +1 -0
  112. package/dist/components/metadata.js +82 -0
  113. package/dist/components/metadata.js.map +1 -0
  114. package/dist/components/theme-picker.d.ts.map +1 -1
  115. package/dist/components/theme-picker.js +3 -2
  116. package/dist/components/theme-picker.js.map +1 -1
  117. package/dist/descendants-v2.d.ts +60 -0
  118. package/dist/descendants-v2.d.ts.map +1 -0
  119. package/dist/descendants-v2.js +144 -0
  120. package/dist/descendants-v2.js.map +1 -0
  121. package/dist/examples/actions-context.d.ts +2 -0
  122. package/dist/examples/actions-context.d.ts.map +1 -0
  123. package/dist/examples/actions-context.js +33 -0
  124. package/dist/examples/actions-context.js.map +1 -0
  125. package/dist/examples/form-basic.d.ts.map +1 -1
  126. package/dist/examples/form-basic.js +1 -1
  127. package/dist/examples/form-basic.js.map +1 -1
  128. package/dist/examples/form-dropdown.js +1 -1
  129. package/dist/examples/form-dropdown.js.map +1 -1
  130. package/dist/examples/internal/custom-action-renderables.d.ts +70 -0
  131. package/dist/examples/internal/custom-action-renderables.d.ts.map +1 -0
  132. package/dist/examples/internal/custom-action-renderables.js +163 -0
  133. package/dist/examples/internal/custom-action-renderables.js.map +1 -0
  134. package/dist/examples/internal/custom-dropdown.d.ts +99 -0
  135. package/dist/examples/internal/custom-dropdown.d.ts.map +1 -0
  136. package/dist/examples/internal/custom-dropdown.js +270 -0
  137. package/dist/examples/internal/custom-dropdown.js.map +1 -0
  138. package/dist/examples/internal/custom-renderable-form.d.ts +43 -0
  139. package/dist/examples/internal/custom-renderable-form.d.ts.map +1 -0
  140. package/dist/examples/internal/custom-renderable-form.js +284 -0
  141. package/dist/examples/internal/custom-renderable-form.js.map +1 -0
  142. package/dist/examples/internal/custom-renderable-list-default-search.d.ts +2 -0
  143. package/dist/examples/internal/custom-renderable-list-default-search.d.ts.map +1 -0
  144. package/dist/examples/internal/custom-renderable-list-default-search.js +16 -0
  145. package/dist/examples/internal/custom-renderable-list-default-search.js.map +1 -0
  146. package/dist/examples/internal/custom-renderable-list-v2-default-search.d.ts +2 -0
  147. package/dist/examples/internal/custom-renderable-list-v2-default-search.d.ts.map +1 -0
  148. package/dist/examples/internal/custom-renderable-list-v2-default-search.js +24 -0
  149. package/dist/examples/internal/custom-renderable-list-v2-default-search.js.map +1 -0
  150. package/dist/examples/internal/custom-renderable-list-v2.d.ts +189 -0
  151. package/dist/examples/internal/custom-renderable-list-v2.d.ts.map +1 -0
  152. package/dist/examples/internal/custom-renderable-list-v2.js +708 -0
  153. package/dist/examples/internal/custom-renderable-list-v2.js.map +1 -0
  154. package/dist/examples/internal/custom-renderable-list.d.ts +72 -0
  155. package/dist/examples/internal/custom-renderable-list.d.ts.map +1 -0
  156. package/dist/examples/internal/custom-renderable-list.js +544 -0
  157. package/dist/examples/internal/custom-renderable-list.js.map +1 -0
  158. package/dist/examples/internal/rhf-custom-ref.js +5 -4
  159. package/dist/examples/internal/rhf-custom-ref.js.map +1 -1
  160. package/dist/examples/internal/scrollbox-with-descendants.js +4 -2
  161. package/dist/examples/internal/scrollbox-with-descendants.js.map +1 -1
  162. package/dist/examples/list-controlled-search.d.ts +2 -0
  163. package/dist/examples/list-controlled-search.d.ts.map +1 -0
  164. package/dist/examples/list-controlled-search.js +12 -0
  165. package/dist/examples/list-controlled-search.js.map +1 -0
  166. package/dist/examples/list-detail-metadata.js +1 -1
  167. package/dist/examples/list-detail-metadata.js.map +1 -1
  168. package/dist/examples/simple-image-mask.d.ts +8 -0
  169. package/dist/examples/simple-image-mask.d.ts.map +1 -0
  170. package/dist/examples/simple-image-mask.js +12 -0
  171. package/dist/examples/simple-image-mask.js.map +1 -0
  172. package/dist/examples/toast-variations.js +1 -1
  173. package/dist/examples/toast-variations.js.map +1 -1
  174. package/dist/extensions/dev.d.ts.map +1 -1
  175. package/dist/extensions/dev.js +3 -2
  176. package/dist/extensions/dev.js.map +1 -1
  177. package/dist/extensions/react-refresh-init.d.ts.map +1 -1
  178. package/dist/extensions/react-refresh-init.js +4 -3
  179. package/dist/extensions/react-refresh-init.js.map +1 -1
  180. package/dist/index.d.ts +3 -2
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +1 -1
  183. package/dist/index.js.map +1 -1
  184. package/dist/internal/date-picker-widget.d.ts.map +1 -1
  185. package/dist/internal/date-picker-widget.js +2 -1
  186. package/dist/internal/date-picker-widget.js.map +1 -1
  187. package/dist/internal/dialog.d.ts +6 -0
  188. package/dist/internal/dialog.d.ts.map +1 -1
  189. package/dist/internal/dialog.js +59 -18
  190. package/dist/internal/dialog.js.map +1 -1
  191. package/dist/internal/navigation.d.ts.map +1 -1
  192. package/dist/internal/navigation.js +8 -1
  193. package/dist/internal/navigation.js.map +1 -1
  194. package/dist/internal/offscreen.d.ts +3 -0
  195. package/dist/internal/offscreen.d.ts.map +1 -1
  196. package/dist/internal/offscreen.js +5 -0
  197. package/dist/internal/offscreen.js.map +1 -1
  198. package/dist/internal/providers.d.ts.map +1 -1
  199. package/dist/internal/providers.js +20 -3
  200. package/dist/internal/providers.js.map +1 -1
  201. package/dist/internal/scrollbox.d.ts.map +1 -1
  202. package/dist/internal/scrollbox.js +3 -2
  203. package/dist/internal/scrollbox.js.map +1 -1
  204. package/dist/logger.d.ts.map +1 -1
  205. package/dist/logger.js +4 -0
  206. package/dist/logger.js.map +1 -1
  207. package/dist/preload.js +5 -17
  208. package/dist/preload.js.map +1 -1
  209. package/dist/state.d.ts +4 -0
  210. package/dist/state.d.ts.map +1 -1
  211. package/dist/state.js +4 -0
  212. package/dist/state.js.map +1 -1
  213. package/dist/test-border-overlay.d.ts +2 -0
  214. package/dist/test-border-overlay.d.ts.map +1 -0
  215. package/dist/test-border-overlay.js +7 -0
  216. package/dist/test-border-overlay.js.map +1 -0
  217. package/dist/test-layout-2.d.ts +2 -0
  218. package/dist/test-layout-2.d.ts.map +1 -0
  219. package/dist/test-layout-2.js +5 -0
  220. package/dist/test-layout-2.js.map +1 -0
  221. package/dist/test-layout.d.ts +2 -0
  222. package/dist/test-layout.d.ts.map +1 -0
  223. package/dist/test-layout.js +7 -0
  224. package/dist/test-layout.js.map +1 -0
  225. package/dist/theme.d.ts +1 -2
  226. package/dist/theme.d.ts.map +1 -1
  227. package/dist/theme.js +5 -9
  228. package/dist/theme.js.map +1 -1
  229. package/dist/utils/run-command.d.ts +1 -1
  230. package/dist/utils/run-command.d.ts.map +1 -1
  231. package/dist/utils/run-command.js +27 -7
  232. package/dist/utils/run-command.js.map +1 -1
  233. package/dist/utils.d.ts +1 -0
  234. package/dist/utils.d.ts.map +1 -1
  235. package/dist/utils.js +44 -23
  236. package/dist/utils.js.map +1 -1
  237. package/dist/watcher.d.ts.map +1 -1
  238. package/dist/watcher.js +24 -4
  239. package/dist/watcher.js.map +1 -1
  240. package/package.json +14 -12
  241. package/src/action-utils.tsx +10 -0
  242. package/src/apis/cache.test.ts +35 -3
  243. package/src/apis/cache.tsx +184 -59
  244. package/src/apis/clipboard.tsx +5 -0
  245. package/src/apis/oauth.tsx +33 -4
  246. package/src/build.tsx +35 -58
  247. package/src/cli.tsx +156 -134
  248. package/src/compile.tsx +6 -3
  249. package/src/compile.vitest.tsx +33 -15
  250. package/src/components/actions.tsx +230 -99
  251. package/src/components/alert.tsx +11 -10
  252. package/src/components/animation-tick.tsx +1 -1
  253. package/src/components/detail.tsx +56 -151
  254. package/src/components/dropdown.tsx +70 -36
  255. package/src/components/footer.tsx +58 -33
  256. package/src/components/form/checkbox.tsx +30 -32
  257. package/src/components/form/date-picker.tsx +27 -47
  258. package/src/components/form/description.tsx +19 -18
  259. package/src/components/form/dropdown.tsx +95 -103
  260. package/src/components/form/file-autocomplete.tsx +9 -8
  261. package/src/components/form/file-picker.tsx +46 -46
  262. package/src/components/form/form-end.tsx +6 -4
  263. package/src/components/form/index.tsx +38 -48
  264. package/src/components/form/password-field.tsx +25 -27
  265. package/src/components/form/separator.tsx +3 -2
  266. package/src/components/form/tagpicker.tsx +2 -1
  267. package/src/components/form/text-area.tsx +25 -30
  268. package/src/components/form/text-field.tsx +25 -27
  269. package/src/components/form/use-form-navigation.tsx +4 -5
  270. package/src/components/form/with-left-border.tsx +48 -10
  271. package/src/components/icon.tsx +69 -0
  272. package/src/components/image.tsx +60 -7
  273. package/src/components/list.tsx +270 -202
  274. package/src/components/loading-bar.tsx +4 -3
  275. package/src/components/metadata.tsx +217 -0
  276. package/src/components/theme-picker.tsx +3 -2
  277. package/src/examples/actions-context.tsx +63 -0
  278. package/src/examples/actions-context.vitest.tsx +110 -0
  279. package/src/examples/actions-dialog-layout.vitest.tsx +2 -1
  280. package/src/examples/file-autocomplete.vitest.tsx +15 -15
  281. package/src/examples/form-basic.tsx +12 -0
  282. package/src/examples/form-basic.vitest.tsx +74 -74
  283. package/src/examples/form-dropdown.tsx +8 -0
  284. package/src/examples/form-dropdown.vitest.tsx +364 -421
  285. package/src/examples/form-tagpicker.vitest.tsx +56 -54
  286. package/src/examples/github.vitest.tsx +252 -0
  287. package/src/examples/internal/rhf-custom-ref.tsx +16 -15
  288. package/src/examples/internal/scrollbox-with-descendants.tsx +4 -2
  289. package/src/examples/internal/simple-dialog.tsx +1 -1
  290. package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -9
  291. package/src/examples/list-controlled-search.tsx +28 -0
  292. package/src/examples/list-controlled-search.vitest.tsx +49 -0
  293. package/src/examples/list-detail-metadata.tsx +8 -5
  294. package/src/examples/list-detail-metadata.vitest.tsx +22 -22
  295. package/src/examples/list-dropdown-default.vitest.tsx +12 -12
  296. package/src/examples/list-scrollbox.vitest.tsx +52 -38
  297. package/src/examples/list-with-detail.vitest.tsx +45 -41
  298. package/src/examples/list-with-dropdown.vitest.tsx +5 -5
  299. package/src/examples/list-with-sections.vitest.tsx +65 -12
  300. package/src/examples/list-with-toast.vitest.tsx +4 -4
  301. package/src/examples/simple-file-picker.vitest.tsx +12 -12
  302. package/src/examples/simple-grid.vitest.tsx +53 -53
  303. package/src/examples/simple-image-mask.tsx +58 -0
  304. package/src/examples/simple-navigation.vitest.tsx +19 -19
  305. package/src/examples/store.vitest.tsx +1 -1
  306. package/src/examples/swift-extension.vitest.tsx +4 -2
  307. package/src/examples/synonyms.vitest.tsx +31 -9
  308. package/src/examples/toast-action.vitest.tsx +8 -8
  309. package/src/examples/toast-variations.tsx +1 -1
  310. package/src/examples/toast-variations.vitest.tsx +69 -134
  311. package/src/extensions/dev.tsx +3 -2
  312. package/src/extensions/dev.vitest.tsx +65 -28
  313. package/src/extensions/react-refresh-init.tsx +4 -3
  314. package/src/index.tsx +3 -1
  315. package/src/internal/date-picker-widget.tsx +2 -1
  316. package/src/internal/dialog.tsx +100 -28
  317. package/src/internal/navigation.tsx +8 -1
  318. package/src/internal/offscreen.tsx +10 -0
  319. package/src/internal/providers.tsx +34 -8
  320. package/src/internal/scrollbox.tsx +4 -2
  321. package/src/logger.tsx +4 -0
  322. package/src/preload.tsx +5 -17
  323. package/src/state.tsx +12 -0
  324. package/src/theme.tsx +6 -9
  325. package/src/utils/run-command.tsx +32 -8
  326. package/src/utils.tsx +58 -23
  327. package/src/watcher.tsx +26 -6
@@ -39,8 +39,8 @@ test('grid navigation and display', async () => {
39
39
  > Search items...
40
40
 
41
41
  Fruits ▲
42
- ›🍎 Apple
43
- 🍌 Banana
42
+ ›🍎 Apple
43
+ 🍌 Banana
44
44
  🍒 Cherry
45
45
 
46
46
  Animals
@@ -72,8 +72,8 @@ test('grid navigation and display', async () => {
72
72
  > Search items...
73
73
 
74
74
  Fruits ▲
75
- 🍎 Apple
76
- ›🍌 Banana
75
+ 🍎 Apple
76
+ ›🍌 Banana
77
77
  🍒 Cherry
78
78
 
79
79
  Animals
@@ -106,8 +106,8 @@ test('grid navigation and display', async () => {
106
106
  > Search items...
107
107
 
108
108
  Fruits ▲
109
- 🍎 Apple
110
- 🍌 Banana
109
+ 🍎 Apple
110
+ 🍌 Banana
111
111
  🍒 Cherry
112
112
 
113
113
  Animals
@@ -134,9 +134,9 @@ test('grid navigation and display', async () => {
134
134
  "
135
135
 
136
136
 
137
- Simple Grid Example ────────────────────────────────────────────
138
137
 
139
- > Search items...
138
+
139
+
140
140
 
141
141
  ╭────────────────────────────────────────────────────────────────╮
142
142
  │ │
@@ -149,7 +149,7 @@ test('grid navigation and display', async () => {
149
149
  │ │
150
150
  │ Settings │
151
151
  │ Change Theme... │
152
-
152
+ See Console Logs
153
153
  │ │
154
154
  │ │
155
155
  │ ↵ select ↑↓ navigate │
@@ -171,23 +171,23 @@ test('grid navigation and display', async () => {
171
171
 
172
172
  > Search items...
173
173
 
174
- ╭────────────────────────────────────────────────────────────────╮
175
- │ │
176
- │ Actions esc │
177
- │ │
178
- │ > Search actions... │
179
- │ │
180
- │ │
181
- │ Settings │
182
- │ ›Change Theme... │
183
- │ │
184
- │ │
185
- │ │
186
- │ │
187
- │ │
188
- │ ↵ select ↑↓ navigate │
189
- │ │
190
- ╰────────────────────────────────────────────────────────────────╯
174
+ Fruits ▲
175
+ 🍎 Apple █
176
+ 🍌 Banana █
177
+ 🍒 Cherry
178
+
179
+ Animals
180
+ ›🐕 Dog
181
+ 🐱 Cat
182
+ 🐰 Rabbit
183
+
184
+ Others
185
+ 🏠 House
186
+ 🚗 Car
187
+ 🚀 Rocket ▼
188
+
189
+
190
+ ↵ show details ↑↓ navigate ^k actions
191
191
 
192
192
  "
193
193
  `)
@@ -217,8 +217,8 @@ test('grid search functionality', async () => {
217
217
 
218
218
  > cat
219
219
 
220
- ›🍎 Apple
221
- 🍌 Banana
220
+ ›🍎 Apple
221
+ 🍌 Banana
222
222
  🍒 Cherry
223
223
  🐕 Dog
224
224
  🐱 Cat
@@ -230,11 +230,11 @@ test('grid search functionality', async () => {
230
230
  🌙 Moon
231
231
  ☀ Sun
232
232
 
233
-
234
-
235
233
 
236
234
  ↵ show details ↑↓ navigate ^k actions
237
235
 
236
+
237
+
238
238
  "
239
239
  `)
240
240
 
@@ -257,8 +257,8 @@ test('grid search functionality', async () => {
257
257
 
258
258
  > space
259
259
 
260
- ›🍎 Apple
261
- 🍌 Banana
260
+ ›🍎 Apple
261
+ 🍌 Banana
262
262
  🍒 Cherry
263
263
  🐕 Dog
264
264
  🐱 Cat
@@ -270,11 +270,11 @@ test('grid search functionality', async () => {
270
270
  🌙 Moon
271
271
  ☀ Sun
272
272
 
273
-
274
-
275
273
 
276
274
  ↵ show details ↑↓ navigate ^k actions
277
275
 
276
+
277
+
278
278
  "
279
279
  `)
280
280
 
@@ -295,8 +295,8 @@ test('grid search functionality', async () => {
295
295
  > Search items...
296
296
 
297
297
  Fruits ▲
298
- ›🍎 Apple
299
- 🍌 Banana
298
+ ›🍎 Apple
299
+ 🍌 Banana
300
300
  🍒 Cherry
301
301
 
302
302
  Animals
@@ -331,8 +331,8 @@ test('grid search functionality', async () => {
331
331
 
332
332
  > xyz123
333
333
 
334
- ›🍎 Apple
335
- 🍌 Banana
334
+ ›🍎 Apple
335
+ 🍌 Banana
336
336
  🍒 Cherry
337
337
  🐕 Dog
338
338
  🐱 Cat
@@ -344,11 +344,11 @@ test('grid search functionality', async () => {
344
344
  🌙 Moon
345
345
  ☀ Sun
346
346
 
347
-
348
-
349
347
 
350
348
  ↵ show details ↑↓ navigate ^k actions
351
349
 
350
+
351
+
352
352
  "
353
353
  `)
354
354
  }, 10000)
@@ -374,8 +374,8 @@ test('grid item selection and actions', async () => {
374
374
  > Search items...
375
375
 
376
376
  Fruits ▲
377
- ›🍎 Apple
378
- 🍌 Banana
377
+ ›🍎 Apple
378
+ 🍌 Banana
379
379
  🍒 Cherry
380
380
 
381
381
  Animals
@@ -407,8 +407,8 @@ test('grid item selection and actions', async () => {
407
407
  > Search items...
408
408
 
409
409
  Fruits ▲
410
- 🍎 Apple
411
- ›🍌 Banana
410
+ 🍎 Apple
411
+ ›🍌 Banana
412
412
  🍒 Cherry
413
413
 
414
414
  Animals
@@ -440,8 +440,8 @@ test('grid item selection and actions', async () => {
440
440
  > Search items...
441
441
 
442
442
  Fruits ▲
443
- 🍎 Apple
444
- ›🍌 Banana
443
+ 🍎 Apple
444
+ ›🍌 Banana
445
445
  🍒 Cherry
446
446
 
447
447
  Animals
@@ -482,8 +482,8 @@ test('grid mouse interaction', async () => {
482
482
  > Search items...
483
483
 
484
484
  Fruits ▲
485
- 🍎 Apple
486
- 🍌 Banana
485
+ 🍎 Apple
486
+ 🍌 Banana
487
487
  🍒 Cherry
488
488
 
489
489
  Animals
@@ -519,9 +519,9 @@ test('grid mouse interaction', async () => {
519
519
  "
520
520
 
521
521
 
522
- Simple Grid Example ────────────────────────────────────────────
523
522
 
524
- > Search items...
523
+
524
+
525
525
 
526
526
  ╭────────────────────────────────────────────────────────────────╮
527
527
  │ │
@@ -534,7 +534,7 @@ test('grid mouse interaction', async () => {
534
534
  │ │
535
535
  │ Settings │
536
536
  │ Change Theme... │
537
-
537
+ See Console Logs
538
538
  │ │
539
539
  │ │
540
540
  │ ↵ select ↑↓ navigate │
@@ -568,8 +568,8 @@ test('grid mouse interaction', async () => {
568
568
  > Search items...
569
569
 
570
570
  Fruits ▲
571
- ›🍎 Apple
572
- 🍌 Banana
571
+ ›🍎 Apple
572
+ 🍌 Banana
573
573
  🍒 Cherry
574
574
 
575
575
  Animals
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Example demonstrating Image.Mask usage for shaping icons/avatars
3
+ *
4
+ * Image.Mask.Circle - Makes images circular (common for avatars)
5
+ * Image.Mask.RoundedRectangle - Applies rounded corners to images
6
+ */
7
+
8
+ import { List, Image } from 'termcast'
9
+
10
+ export function SimpleImageMask() {
11
+ return (
12
+ <List>
13
+ <List.Section title="Circle Masks (Avatars)">
14
+ <List.Item
15
+ title="Alice Johnson"
16
+ subtitle="Engineering"
17
+ icon={{ source: '👩', mask: Image.Mask.Circle }}
18
+ />
19
+ <List.Item
20
+ title="Bob Smith"
21
+ subtitle="Design"
22
+ icon={{ source: '👨', mask: Image.Mask.Circle }}
23
+ />
24
+ <List.Item
25
+ title="Carol Williams"
26
+ subtitle="Product"
27
+ icon={{ source: '👩‍💼', mask: Image.Mask.Circle }}
28
+ />
29
+ </List.Section>
30
+
31
+ <List.Section title="Rounded Rectangle Masks (Apps)">
32
+ <List.Item
33
+ title="Notes App"
34
+ subtitle="Productivity"
35
+ icon={{ source: '📝', mask: Image.Mask.RoundedRectangle }}
36
+ />
37
+ <List.Item
38
+ title="Calendar"
39
+ subtitle="Utilities"
40
+ icon={{ source: '📅', mask: Image.Mask.RoundedRectangle }}
41
+ />
42
+ <List.Item
43
+ title="Settings"
44
+ subtitle="System"
45
+ icon={{ source: '⚙️', mask: Image.Mask.RoundedRectangle }}
46
+ />
47
+ </List.Section>
48
+
49
+ <List.Section title="No Mask (Default)">
50
+ <List.Item
51
+ title="Document"
52
+ subtitle="No mask applied"
53
+ icon={{ source: '📄' }}
54
+ />
55
+ </List.Section>
56
+ </List>
57
+ )
58
+ }
@@ -45,8 +45,8 @@ test('navigation between main and detail views', async () => {
45
45
 
46
46
 
47
47
 
48
- ↵ open details ↑↓ navigate ^k actions
49
48
 
49
+ ↵ open details ↑↓ navigate ^k actions
50
50
 
51
51
 
52
52
 
@@ -79,8 +79,8 @@ test('navigation between main and detail views', async () => {
79
79
 
80
80
 
81
81
 
82
- ↵ open details ↑↓ navigate ^k actions
83
82
 
83
+ ↵ open details ↑↓ navigate ^k actions
84
84
 
85
85
 
86
86
 
@@ -115,10 +115,10 @@ test('navigation between main and detail views', async () => {
115
115
 
116
116
 
117
117
 
118
- ↵ go back ↑↓ navigate ^k actions
119
118
 
120
119
 
121
120
 
121
+ ↵ go back ↑↓ navigate ^k actions
122
122
 
123
123
 
124
124
 
@@ -159,8 +159,8 @@ test('navigation between main and detail views', async () => {
159
159
 
160
160
 
161
161
 
162
- ↵ open details ↑↓ navigate ^k actions
163
162
 
163
+ ↵ open details ↑↓ navigate ^k actions
164
164
 
165
165
 
166
166
 
@@ -193,8 +193,8 @@ test('navigation between main and detail views', async () => {
193
193
 
194
194
 
195
195
 
196
- ↵ open details ↑↓ navigate ^k actions
197
196
 
197
+ ↵ open details ↑↓ navigate ^k actions
198
198
 
199
199
 
200
200
 
@@ -224,10 +224,10 @@ test('navigation between main and detail views', async () => {
224
224
 
225
225
 
226
226
 
227
- ↵ go back ↑↓ navigate ^k actions
228
227
 
229
228
 
230
229
 
230
+ ↵ go back ↑↓ navigate ^k actions
231
231
 
232
232
 
233
233
 
@@ -265,8 +265,8 @@ test('navigation between main and detail views', async () => {
265
265
 
266
266
 
267
267
 
268
- ↵ open details ↑↓ navigate ^k actions
269
268
 
269
+ ↵ open details ↑↓ navigate ^k actions
270
270
 
271
271
 
272
272
 
@@ -307,7 +307,7 @@ test('navigation with actions panel', async () => {
307
307
  │ │
308
308
  │ Settings │
309
309
  │ Change Theme... │
310
-
310
+ See Console Logs
311
311
  │ │
312
312
  │ │
313
313
  │ ↵ select ↑↓ navigate │
@@ -340,7 +340,7 @@ test('navigation with actions panel', async () => {
340
340
  │ │
341
341
  │ Settings │
342
342
  │ Change Theme... │
343
-
343
+ See Console Logs
344
344
  │ │
345
345
  │ │
346
346
  │ ↵ select ↑↓ navigate │
@@ -373,8 +373,8 @@ test('navigation with actions panel', async () => {
373
373
 
374
374
 
375
375
 
376
- ✓ Copied to Clipboard First Item
377
376
 
377
+ ✓ Copied to Clipboard First Item
378
378
 
379
379
 
380
380
 
@@ -416,10 +416,10 @@ test('navigation with actions panel', async () => {
416
416
 
417
417
 
418
418
 
419
- ↵ go back ↑↓ navigate ^k actions
420
419
 
421
420
 
422
421
 
422
+ ↵ go back ↑↓ navigate ^k actions
423
423
 
424
424
 
425
425
 
@@ -439,6 +439,7 @@ test('navigation with actions panel', async () => {
439
439
  expect(detailActionsSnapshot).toMatchInlineSnapshot(`
440
440
  "
441
441
 
442
+
442
443
  ╭────────────────────────────────────────────────────────────────╮
443
444
  │ │
444
445
  │ Actions esc │
@@ -450,7 +451,7 @@ test('navigation with actions panel', async () => {
450
451
  │ │
451
452
  │ Settings │
452
453
  │ Change Theme... │
453
-
454
+ See Console Logs
454
455
  │ │
455
456
  │ │
456
457
  │ ↵ select ↑↓ navigate │
@@ -461,7 +462,6 @@ test('navigation with actions panel', async () => {
461
462
 
462
463
 
463
464
 
464
-
465
465
  "
466
466
  `)
467
467
 
@@ -488,8 +488,8 @@ test('navigation with actions panel', async () => {
488
488
 
489
489
 
490
490
 
491
- ↵ open details ↑↓ navigate ^k actions
492
491
 
492
+ ↵ open details ↑↓ navigate ^k actions
493
493
 
494
494
 
495
495
 
@@ -530,12 +530,12 @@ test('search functionality in main and detail views', async () => {
530
530
  ›Second Item Navigate to second detail
531
531
 
532
532
 
533
- ↵ open details ↑↓ navigate ^k actions
534
533
 
535
534
 
536
535
 
537
536
 
538
537
 
538
+ ↵ open details ↑↓ navigate ^k actions
539
539
 
540
540
 
541
541
 
@@ -572,8 +572,8 @@ test('search functionality in main and detail views', async () => {
572
572
 
573
573
 
574
574
 
575
- ↵ open details ↑↓ navigate ^k actions
576
575
 
576
+ ↵ open details ↑↓ navigate ^k actions
577
577
 
578
578
 
579
579
 
@@ -610,10 +610,10 @@ test('search functionality in main and detail views', async () => {
610
610
 
611
611
 
612
612
 
613
- ↵ go back ↑↓ navigate ^k actions
614
613
 
615
614
 
616
615
 
616
+ ↵ go back ↑↓ navigate ^k actions
617
617
 
618
618
 
619
619
 
@@ -649,8 +649,8 @@ test('search functionality in main and detail views', async () => {
649
649
 
650
650
 
651
651
 
652
- ↵ go back ↑↓ navigate ^k actions
653
652
 
653
+ ↵ go back ↑↓ navigate ^k actions
654
654
 
655
655
 
656
656
 
@@ -686,8 +686,8 @@ test('search functionality in main and detail views', async () => {
686
686
 
687
687
 
688
688
 
689
- ↵ open details ↑↓ navigate ^k actions
690
689
 
690
+ ↵ open details ↑↓ navigate ^k actions
691
691
 
692
692
 
693
693
 
@@ -53,12 +53,12 @@ test('Store extension - searching for spiceblow shows Database', async () => {
53
53
  ›Spiceblow - Sql Database Management Search, update, insert and delete row
54
54
 
55
55
 
56
- ↑↓ navigate ^k actions powered by termcast
57
56
 
58
57
 
59
58
 
60
59
 
61
60
 
61
+ ↵ view details ↑↓ navigate ^k actions powered by termcast
62
62
 
63
63
 
64
64
 
@@ -120,7 +120,9 @@ test.skipIf(isLinux)('swift extension runs Swift List command and shows items',
120
120
  // Navigate down to Swift List (it's the second item)
121
121
  await session.press('down')
122
122
 
123
- // Select the Swift List command
123
+ // Run selected command via actions panel for deterministic behavior
124
+ await session.press(['ctrl', 'k'])
125
+ await session.waitIdle()
124
126
  await session.press('return')
125
127
 
126
128
  // Wait for Swift items to load and display
@@ -144,8 +146,8 @@ test.skipIf(isLinux)('swift extension runs Swift List command and shows items',
144
146
 
145
147
 
146
148
 
147
- ↑↓ navigate ^k actions
148
149
 
150
+ ↑↓ navigate ^k actions
149
151
 
150
152
 
151
153
 
@@ -1,25 +1,45 @@
1
- import { test, expect, beforeEach, afterEach, beforeAll } from 'vitest'
1
+ import { test, expect, beforeEach, afterEach, beforeAll, describe } from 'vitest'
2
2
  import { launchTerminal, Session } from 'tuistory/src'
3
3
  import { spawnSync } from 'node:child_process'
4
4
  import path from 'node:path'
5
+ import fs from 'node:fs'
5
6
 
6
7
  const extensionDir = path.resolve(__dirname, '../../extensions/synonyms')
7
8
 
8
- // Install dependencies before running tests
9
+ // The extensions folder is gitignored, so this test only runs locally
10
+ const extensionExists = fs.existsSync(extensionDir)
11
+
12
+ // Install dependencies before running tests (only if extension exists locally)
9
13
  beforeAll(() => {
10
- // Use spawnSync without shell to avoid /bin/sh issues on CI
14
+ if (!extensionExists) {
15
+ return // Extension folder doesn't exist (gitignored, not in CI)
16
+ }
17
+
18
+ // Skip if already installed
19
+ if (fs.existsSync(path.join(extensionDir, 'node_modules', '.bin'))) {
20
+ return
21
+ }
22
+
11
23
  const result = spawnSync('bun', ['install'], {
12
24
  cwd: extensionDir,
13
25
  stdio: 'inherit',
26
+ timeout: 120000,
14
27
  })
15
- if (result.status !== 0) {
16
- throw new Error(`bun install failed with exit code ${result.status}`)
28
+
29
+ if (result.status !== 0 || result.signal) {
30
+ throw new Error(
31
+ `bun install failed: status=${result.status}, signal=${result.signal}`,
32
+ )
17
33
  }
18
- }, 60000)
34
+ }, 180000)
19
35
 
20
36
  let session: Session
21
37
 
22
- beforeEach(async () => {
38
+ beforeEach(async (ctx) => {
39
+ if (!extensionExists) {
40
+ ctx.skip()
41
+ return
42
+ }
23
43
  session = await launchTerminal({
24
44
  command: 'bun',
25
45
  args: ['src/cli.tsx', 'dev', extensionDir],
@@ -33,7 +53,9 @@ afterEach(() => {
33
53
  session?.close()
34
54
  })
35
55
 
36
- test('synonyms extension shows preferences form on first launch', async () => {
56
+ // TODO: Extension behavior changed - no longer shows preferences form on first launch
57
+ // These tests are skipped until the extension is updated or tests are rewritten
58
+ test.skip('synonyms extension shows preferences form on first launch', async () => {
37
59
  // Wait for preferences form to appear (extension requires LLM provider setup)
38
60
  await session.text({
39
61
  waitFor: (text) => /LLM Provider/i.test(text),
@@ -80,7 +102,7 @@ test('synonyms extension shows preferences form on first launch', async () => {
80
102
  `)
81
103
  }, 60000)
82
104
 
83
- test('synonyms extension preferences form can be navigated', async () => {
105
+ test.skip('synonyms extension preferences form can be navigated', async () => {
84
106
  // Wait for preferences form to appear
85
107
  await session.text({
86
108
  waitFor: (text) => /LLM Provider/i.test(text),