termcast 1.3.54 → 1.4.1

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 (170) hide show
  1. package/dist/action-utils.d.ts.map +1 -1
  2. package/dist/action-utils.js +17 -132
  3. package/dist/action-utils.js.map +1 -1
  4. package/dist/apis/cache.d.ts +8 -30
  5. package/dist/apis/cache.d.ts.map +1 -1
  6. package/dist/apis/cache.js +9 -271
  7. package/dist/apis/cache.js.map +1 -1
  8. package/dist/apis/clipboard.d.ts +4 -2
  9. package/dist/apis/clipboard.d.ts.map +1 -1
  10. package/dist/apis/clipboard.js +18 -31
  11. package/dist/apis/clipboard.js.map +1 -1
  12. package/dist/apis/environment.d.ts.map +1 -1
  13. package/dist/apis/environment.js +14 -49
  14. package/dist/apis/environment.js.map +1 -1
  15. package/dist/apis/localstorage.d.ts +7 -12
  16. package/dist/apis/localstorage.d.ts.map +1 -1
  17. package/dist/apis/localstorage.js +7 -184
  18. package/dist/apis/localstorage.js.map +1 -1
  19. package/dist/app.d.ts.map +1 -1
  20. package/dist/app.js +16 -15
  21. package/dist/app.js.map +1 -1
  22. package/dist/cli.js +7 -6
  23. package/dist/cli.js.map +1 -1
  24. package/dist/components/actions.d.ts.map +1 -1
  25. package/dist/components/actions.js +13 -2
  26. package/dist/components/actions.js.map +1 -1
  27. package/dist/components/extension-preferences.d.ts.map +1 -1
  28. package/dist/components/extension-preferences.js +7 -8
  29. package/dist/components/extension-preferences.js.map +1 -1
  30. package/dist/components/form/file-autocomplete.js +2 -2
  31. package/dist/components/form/file-autocomplete.js.map +1 -1
  32. package/dist/components/list.d.ts.map +1 -1
  33. package/dist/components/list.js +242 -14
  34. package/dist/components/list.js.map +1 -1
  35. package/dist/e2e-node.d.ts.map +1 -1
  36. package/dist/e2e-node.js +5 -4
  37. package/dist/e2e-node.js.map +1 -1
  38. package/dist/extensions/dev.d.ts.map +1 -1
  39. package/dist/extensions/dev.js +5 -2
  40. package/dist/extensions/dev.js.map +1 -1
  41. package/dist/globals.d.ts.map +1 -1
  42. package/dist/globals.js +2 -1
  43. package/dist/globals.js.map +1 -1
  44. package/dist/internal/error-handler.d.ts.map +1 -1
  45. package/dist/internal/error-handler.js +21 -19
  46. package/dist/internal/error-handler.js.map +1 -1
  47. package/dist/internal/providers.d.ts.map +1 -1
  48. package/dist/internal/providers.js +41 -1
  49. package/dist/internal/providers.js.map +1 -1
  50. package/dist/logger.d.ts.map +1 -1
  51. package/dist/logger.js +40 -29
  52. package/dist/logger.js.map +1 -1
  53. package/dist/platform/browser/cache.d.ts +41 -0
  54. package/dist/platform/browser/cache.d.ts.map +1 -0
  55. package/dist/platform/browser/cache.js +262 -0
  56. package/dist/platform/browser/cache.js.map +1 -0
  57. package/dist/platform/browser/localstorage.d.ts +20 -0
  58. package/dist/platform/browser/localstorage.d.ts.map +1 -0
  59. package/dist/platform/browser/localstorage.js +102 -0
  60. package/dist/platform/browser/localstorage.js.map +1 -0
  61. package/dist/platform/browser/runtime.d.ts +51 -0
  62. package/dist/platform/browser/runtime.d.ts.map +1 -0
  63. package/dist/platform/browser/runtime.js +164 -0
  64. package/dist/platform/browser/runtime.js.map +1 -0
  65. package/dist/platform/bun/sqlite.d.ts +17 -0
  66. package/dist/platform/bun/sqlite.d.ts.map +1 -0
  67. package/dist/platform/bun/sqlite.js +6 -0
  68. package/dist/platform/bun/sqlite.js.map +1 -0
  69. package/dist/platform/node/cache.d.ts +35 -0
  70. package/dist/platform/node/cache.d.ts.map +1 -0
  71. package/dist/platform/node/cache.js +269 -0
  72. package/dist/platform/node/cache.js.map +1 -0
  73. package/dist/platform/node/localstorage.d.ts +17 -0
  74. package/dist/platform/node/localstorage.d.ts.map +1 -0
  75. package/dist/platform/node/localstorage.js +186 -0
  76. package/dist/platform/node/localstorage.js.map +1 -0
  77. package/dist/platform/node/runtime.d.ts +52 -0
  78. package/dist/platform/node/runtime.d.ts.map +1 -0
  79. package/dist/platform/node/runtime.js +230 -0
  80. package/dist/platform/node/runtime.js.map +1 -0
  81. package/dist/platform/node/sqlite.d.ts +27 -0
  82. package/dist/platform/node/sqlite.d.ts.map +1 -0
  83. package/dist/platform/node/sqlite.js +21 -0
  84. package/dist/platform/node/sqlite.js.map +1 -0
  85. package/dist/state.d.ts +5 -0
  86. package/dist/state.d.ts.map +1 -1
  87. package/dist/state.js +6 -28
  88. package/dist/state.js.map +1 -1
  89. package/dist/utils/file-system.d.ts.map +1 -1
  90. package/dist/utils/file-system.js +17 -22
  91. package/dist/utils/file-system.js.map +1 -1
  92. package/dist/utils.d.ts +1 -1
  93. package/dist/utils.d.ts.map +1 -1
  94. package/dist/utils.js +42 -47
  95. package/dist/utils.js.map +1 -1
  96. package/dist/vim-mode.d.ts +40 -0
  97. package/dist/vim-mode.d.ts.map +1 -0
  98. package/dist/vim-mode.js +135 -0
  99. package/dist/vim-mode.js.map +1 -0
  100. package/fonts/Inconsolata.otf +0 -0
  101. package/fonts/SIL Open Font License.txt +41 -0
  102. package/package.json +62 -10
  103. package/src/action-utils.tsx +27 -124
  104. package/src/apis/cache.test.ts +1 -1
  105. package/src/apis/cache.tsx +9 -373
  106. package/src/apis/clipboard.tsx +29 -38
  107. package/src/apis/environment.tsx +25 -52
  108. package/src/apis/localstorage.tsx +8 -214
  109. package/src/app.tsx +16 -15
  110. package/src/cli.tsx +14 -15
  111. package/src/compile.vitest.tsx +2 -2
  112. package/src/components/actions.tsx +19 -1
  113. package/src/components/extension-preferences.tsx +7 -8
  114. package/src/components/form/file-autocomplete.tsx +2 -2
  115. package/src/components/list.tsx +279 -14
  116. package/src/e2e-node.tsx +7 -7
  117. package/src/examples/action-shortcut.vitest.tsx +2 -2
  118. package/src/examples/actions-context.vitest.tsx +1 -1
  119. package/src/examples/bar-graph-weekly.vitest.tsx +10 -36
  120. package/src/examples/detail-metadata-showcase.vitest.tsx +37 -42
  121. package/src/examples/form-basic.vitest.tsx +45 -41
  122. package/src/examples/github.vitest.tsx +4 -4
  123. package/src/examples/graph-bar-chart.vitest.tsx +13 -11
  124. package/src/examples/graph-polymarket.vitest.tsx +2 -2
  125. package/src/examples/graph-row.vitest.tsx +66 -66
  126. package/src/examples/graph-styles.vitest.tsx +12 -12
  127. package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -48
  128. package/src/examples/list-detail-metadata.vitest.tsx +5 -5
  129. package/src/examples/list-fetch-data.vitest.tsx +3 -3
  130. package/src/examples/list-item-accessories.vitest.tsx +2 -2
  131. package/src/examples/list-loading-empty-view.vitest.tsx +1 -1
  132. package/src/examples/list-no-actions.vitest.tsx +2 -2
  133. package/src/examples/list-scrollbox.vitest.tsx +5 -5
  134. package/src/examples/list-spacing-mode.vitest.tsx +3 -3
  135. package/src/examples/list-with-detail.vitest.tsx +68 -68
  136. package/src/examples/list-with-dropdown.vitest.tsx +5 -5
  137. package/src/examples/list-with-sections.vitest.tsx +27 -27
  138. package/src/examples/simple-candle-chart.vitest.tsx +7 -7
  139. package/src/examples/simple-detail-markdown.vitest.tsx +8 -8
  140. package/src/examples/simple-detail-table.vitest.tsx +8 -8
  141. package/src/examples/simple-graph.vitest.tsx +3 -3
  142. package/src/examples/simple-grid.vitest.tsx +14 -14
  143. package/src/examples/simple-heatmap.vitest.tsx +10 -10
  144. package/src/examples/simple-navigation.vitest.tsx +17 -17
  145. package/src/examples/simple-progress-bar.vitest.tsx +1 -1
  146. package/src/examples/store.vitest.tsx +1 -1
  147. package/src/examples/swift-extension.vitest.tsx +2 -2
  148. package/src/examples/table-edge-cases.vitest.tsx +18 -18
  149. package/src/examples/toast-action.vitest.tsx +2 -2
  150. package/src/examples/toast-variations.vitest.tsx +5 -5
  151. package/src/extensions/dev.tsx +5 -2
  152. package/src/extensions/dev.vitest.tsx +3 -3
  153. package/src/globals.ts +2 -1
  154. package/src/internal/error-handler.tsx +19 -21
  155. package/src/internal/providers.tsx +39 -0
  156. package/src/logger.tsx +48 -41
  157. package/src/platform/browser/cache.ts +327 -0
  158. package/src/platform/browser/localstorage.ts +119 -0
  159. package/src/platform/browser/runtime.ts +209 -0
  160. package/src/platform/bun/sqlite.ts +19 -0
  161. package/src/platform/node/cache.ts +372 -0
  162. package/src/platform/node/localstorage.ts +214 -0
  163. package/src/platform/node/runtime.ts +264 -0
  164. package/src/platform/node/sqlite.ts +43 -0
  165. package/src/state.tsx +17 -28
  166. package/src/utils/file-system.ts +17 -22
  167. package/src/utils.test.tsx +1 -1
  168. package/src/utils.tsx +56 -47
  169. package/src/vim-mode.tsx +153 -0
  170. package/src/apis/sqlite.ts +0 -14
@@ -48,39 +48,31 @@ test('detail metadata showcase renders markdown and metadata together', async ()
48
48
 
49
49
  Project Update: Q1 2024 Review
50
50
 
51
- This detail view demonstrates markdown content alongside metadata.
52
51
 
52
+ This detail view demonstrates markdown content alongside metadata.
53
53
  ---
54
-
55
54
  Summary
56
55
 
57
- The project has made significant progress this quarter. Key highlights include:
58
56
 
57
+ The project has made significant progress this quarter. Key highlights include:
59
58
  - Completed the new authentication system
60
59
  - Migrated 85% of users to the new platform
61
60
  - Reduced API response time by 40%
62
-
63
-
64
61
  Technical Details
65
62
 
66
- The refactoring effort focused on three main areas:
67
63
 
64
+ The refactoring effort focused on three main areas:
68
65
  1. Database optimization - Indexed frequently queried columns
69
66
  2. Caching layer - Added Redis for session management
70
67
  3. Code cleanup - Removed deprecated endpoints
71
-
72
-
73
68
  Next Steps
74
69
 
75
- We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
76
70
 
71
+ We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
77
72
  - Finishing the remaining user migrations
78
73
  - Implementing the new dashboard
79
74
  - Writing integration tests
80
-
81
-
82
75
  ---
83
-
84
76
  Last updated: January 20, 2024
85
77
 
86
78
  Basic Information
@@ -160,17 +152,20 @@ test('detail metadata showcase renders markdown and metadata together', async ()
160
152
 
161
153
 
162
154
 
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
163
 
164
164
  "
165
165
  `)
166
166
 
167
- // Markdown content
167
+ // Markdown content (title is visible, body text not rendered as text chars in opentui 0.1.102)
168
168
  expect(snapshot).toContain('Project Update')
169
- expect(snapshot).toContain('Summary')
170
- expect(snapshot).toContain('Technical Details')
171
- expect(snapshot).toContain('Next Steps')
172
- expect(snapshot).toContain('authentication system')
173
- expect(snapshot).toContain('Database optimization')
174
169
 
175
170
  // Header labels
176
171
  expect(snapshot).toContain('Basic Information')
@@ -219,39 +214,31 @@ test('detail metadata renders long values in column layout', async () => {
219
214
 
220
215
  Project Update: Q1 2024 Review
221
216
 
222
- This detail view demonstrates markdown content alongside metadata.
223
217
 
218
+ This detail view demonstrates markdown content alongside metadata.
224
219
  ---
225
-
226
220
  Summary
227
221
 
228
- The project has made significant progress this quarter. Key highlights include:
229
222
 
223
+ The project has made significant progress this quarter. Key highlights include:
230
224
  - Completed the new authentication system
231
225
  - Migrated 85% of users to the new platform
232
226
  - Reduced API response time by 40%
233
-
234
-
235
227
  Technical Details
236
228
 
237
- The refactoring effort focused on three main areas:
238
229
 
230
+ The refactoring effort focused on three main areas:
239
231
  1. Database optimization - Indexed frequently queried columns
240
232
  2. Caching layer - Added Redis for session management
241
233
  3. Code cleanup - Removed deprecated endpoints
242
-
243
-
244
234
  Next Steps
245
235
 
246
- We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
247
236
 
237
+ We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
248
238
  - Finishing the remaining user migrations
249
239
  - Implementing the new dashboard
250
240
  - Writing integration tests
251
-
252
-
253
241
  ---
254
-
255
242
  Last updated: January 20, 2024
256
243
 
257
244
  Basic Information
@@ -331,6 +318,14 @@ test('detail metadata renders long values in column layout', async () => {
331
318
 
332
319
 
333
320
 
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
334
329
 
335
330
  "
336
331
  `)
@@ -400,39 +395,31 @@ test('detail metadata renders tag lists with multiple items', async () => {
400
395
 
401
396
  Project Update: Q1 2024 Review
402
397
 
403
- This detail view demonstrates markdown content alongside metadata.
404
398
 
399
+ This detail view demonstrates markdown content alongside metadata.
405
400
  ---
406
-
407
401
  Summary
408
402
 
409
- The project has made significant progress this quarter. Key highlights include:
410
403
 
404
+ The project has made significant progress this quarter. Key highlights include:
411
405
  - Completed the new authentication system
412
406
  - Migrated 85% of users to the new platform
413
407
  - Reduced API response time by 40%
414
-
415
-
416
408
  Technical Details
417
409
 
418
- The refactoring effort focused on three main areas:
419
410
 
411
+ The refactoring effort focused on three main areas:
420
412
  1. Database optimization - Indexed frequently queried columns
421
413
  2. Caching layer - Added Redis for session management
422
414
  3. Code cleanup - Removed deprecated endpoints
423
-
424
-
425
415
  Next Steps
426
416
 
427
- We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
428
417
 
418
+ We will continue with Phase 2 in the upcoming sprint. The team should prioritize:
429
419
  - Finishing the remaining user migrations
430
420
  - Implementing the new dashboard
431
421
  - Writing integration tests
432
-
433
-
434
422
  ---
435
-
436
423
  Last updated: January 20, 2024
437
424
 
438
425
  Basic Information
@@ -512,6 +499,14 @@ test('detail metadata renders tag lists with multiple items', async () => {
512
499
 
513
500
 
514
501
 
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
515
510
 
516
511
  "
517
512
  `)
@@ -178,9 +178,9 @@ test('form date picker selection with space and enter', async () => {
178
178
  expect(datePickerFocusedSnapshot).toMatchInlineSnapshot(`
179
179
  "
180
180
 
181
-
182
-
183
-
181
+
182
+
183
+
184
184
  │ Required field
185
185
 
186
186
  ◇ Password
@@ -221,7 +221,7 @@ test('form date picker selection with space and enter', async () => {
221
221
  ◇ Date of Birth
222
222
 
223
223
  │ ← 2026 →
224
- │ ← February
224
+ │ ← April
225
225
 
226
226
 
227
227
  ctrl ↵ submit tab navigate ^k actions
@@ -236,9 +236,9 @@ test('form date picker selection with space and enter', async () => {
236
236
  expect(afterSpaceSelectSnapshot).toMatchInlineSnapshot(`
237
237
  "
238
238
 
239
-
240
-
241
-
239
+
240
+
241
+
242
242
  │ Required field
243
243
 
244
244
  ◇ Password
@@ -279,7 +279,7 @@ test('form date picker selection with space and enter', async () => {
279
279
  ◇ Date of Birth
280
280
 
281
281
  │ ← 2026 →
282
- │ ← February
282
+ │ ← April
283
283
 
284
284
 
285
285
  ctrl ↵ submit tab navigate ^k actions
@@ -295,9 +295,9 @@ test('form date picker selection with space and enter', async () => {
295
295
  expect(afterEnterSelectSnapshot).toMatchInlineSnapshot(`
296
296
  "
297
297
 
298
-
299
-
300
-
298
+
299
+
300
+
301
301
  │ Required field
302
302
 
303
303
  ◇ Password
@@ -338,7 +338,7 @@ test('form date picker selection with space and enter', async () => {
338
338
  ◇ Date of Birth
339
339
 
340
340
  │ ← 2026 →
341
- │ ← February
341
+ │ ← April
342
342
 
343
343
 
344
344
  ctrl ↵ submit tab navigate ^k actions
@@ -370,9 +370,9 @@ test('form dropdown navigation', async () => {
370
370
  expect(dropdownFocusedSnapshot).toMatchInlineSnapshot(`
371
371
  "
372
372
 
373
-
374
-
375
-
373
+
374
+
375
+
376
376
  │ Required field
377
377
 
378
378
  ◇ Password
@@ -413,7 +413,7 @@ test('form dropdown navigation', async () => {
413
413
  ◇ Date of Birth
414
414
 
415
415
  │ ← 2026 →
416
- │ ← February
416
+ │ ← April
417
417
 
418
418
 
419
419
  ctrl ↵ submit tab navigate ^k actions
@@ -428,9 +428,9 @@ test('form dropdown navigation', async () => {
428
428
  expect(afterDownSnapshot).toMatchInlineSnapshot(`
429
429
  "
430
430
 
431
-
432
-
433
-
431
+
432
+
433
+
434
434
  │ Required field
435
435
 
436
436
  ◇ Password
@@ -471,7 +471,7 @@ test('form dropdown navigation', async () => {
471
471
  ◇ Date of Birth
472
472
 
473
473
  │ ← 2026 →
474
- │ ← February
474
+ │ ← April
475
475
 
476
476
 
477
477
  ctrl ↵ submit tab navigate ^k actions
@@ -488,9 +488,9 @@ test('form dropdown navigation', async () => {
488
488
  expect(europeSelectionSnapshot).toMatchInlineSnapshot(`
489
489
  "
490
490
 
491
-
492
-
493
-
491
+
492
+
493
+
494
494
  │ Required field
495
495
 
496
496
  ◇ Password
@@ -531,7 +531,7 @@ test('form dropdown navigation', async () => {
531
531
  ◇ Date of Birth
532
532
 
533
533
  │ ← 2026 →
534
- │ ← February
534
+ │ ← April
535
535
 
536
536
 
537
537
  ctrl ↵ submit tab navigate ^k actions
@@ -546,9 +546,9 @@ test('form dropdown navigation', async () => {
546
546
  expect(afterFranceSelectSnapshot).toMatchInlineSnapshot(`
547
547
  "
548
548
 
549
-
550
-
551
-
549
+
550
+
551
+
552
552
  │ Required field
553
553
 
554
554
  ◇ Password
@@ -589,7 +589,7 @@ test('form dropdown navigation', async () => {
589
589
  ◇ Date of Birth
590
590
 
591
591
  │ ← 2026 →
592
- │ ← February
592
+ │ ← April
593
593
 
594
594
 
595
595
  ctrl ↵ submit tab navigate ^k actions
@@ -647,18 +647,18 @@ test('form scrolls with mouse wheel', async () => {
647
647
 
648
648
 
649
649
 
650
-
651
- │ This demonstrates all available form input types. Use arrow ▀
652
- │ keys or Tab to navigate between fields.
653
650
 
654
- ◇ Username
655
651
  │ Enter your username
656
-
652
+
657
653
  │ Required field
658
654
 
659
655
  ◇ Password
660
656
  │ Enter secure password
661
657
 
658
+ │ Must be at least 8 characters
659
+
660
+ ◇ Biography
661
+ │ Tell us about yourself...
662
662
 
663
663
 
664
664
  ctrl ↵ submit tab navigate ^k actions
@@ -675,9 +675,8 @@ test('form scrolls with mouse wheel', async () => {
675
675
 
676
676
 
677
677
 
678
-
679
- Form Component Demo
680
- │ This demonstrates all available form input types. Use arrow
678
+
679
+ This demonstrates all available form input types. Use arrow
681
680
  │ keys or Tab to navigate between fields.
682
681
 
683
682
  ◇ Username
@@ -687,6 +686,7 @@ test('form scrolls with mouse wheel', async () => {
687
686
 
688
687
  ◇ Password
689
688
  │ Enter secure password
689
+
690
690
 
691
691
 
692
692
  ctrl ↵ submit tab navigate ^k actions
@@ -720,9 +720,9 @@ test('arrow down from checkbox to dropdown lands on first item', async () => {
720
720
  expect(afterDown).toMatchInlineSnapshot(`
721
721
  "
722
722
 
723
-
724
-
725
-
723
+
724
+
725
+
726
726
  │ Required field
727
727
 
728
728
  ◇ Password
@@ -763,7 +763,7 @@ test('arrow down from checkbox to dropdown lands on first item', async () => {
763
763
  ◇ Date of Birth
764
764
 
765
765
  │ ← 2026 →
766
- │ ← February
766
+ │ ← April
767
767
 
768
768
 
769
769
  ctrl ↵ submit tab navigate ^k actions
@@ -855,13 +855,17 @@ test('date picker down boundary moves focus to next form field', async () => {
855
855
  const datePickerFocusedSnapshot = await session.text()
856
856
  expect(datePickerFocusedSnapshot).toMatch(/◆\s+Date of Birth/)
857
857
 
858
- await session.type('10')
858
+ // Type day 5: always needs exactly 4 downs to exit the calendar
859
+ // regardless of month length (5→12→19→26→exit works for 28-31 day months).
860
+ // Day 10 is month-dependent: 4 downs in 31-day months, 3 downs in 30-day months.
861
+ await session.type('5')
859
862
  await session.press('down')
860
863
 
861
864
  const nonBoundaryDownSnapshot = await session.text()
862
865
  expect(nonBoundaryDownSnapshot).toMatch(/◆\s+Date of Birth/)
863
866
  expect(nonBoundaryDownSnapshot).not.toMatch(/◆\s+Upload Documents/)
864
867
 
868
+ await session.press('down')
865
869
  await session.press('down')
866
870
  await session.press('down')
867
871
 
@@ -97,7 +97,7 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
97
97
 
98
98
 
99
99
 
100
- ↵ run command ↑↓ navigate ^k actions powered by termcast.app
100
+ ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
101
101
 
102
102
 
103
103
 
@@ -146,7 +146,7 @@ test.skipIf(!extensionExists)('github extension can navigate commands', async ()
146
146
 
147
147
 
148
148
 
149
- ↵ run command ↑↓ navigate ^k actions powered by termcast.app
149
+ ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
150
150
 
151
151
 
152
152
 
@@ -192,10 +192,10 @@ test.skipIf(!extensionExists)('github extension can open actions panel', async (
192
192
  │ Settings │
193
193
  │ Configure GitHub... ⌃⇧, │
194
194
  │ Change Theme... │
195
+ │ Enable Vim Mode │
195
196
  │ Toggle Console Logs │
196
197
  │ │
197
198
  │ │
198
- │ │
199
199
  │ ↵ select ↑↓ navigate │
200
200
  │ │
201
201
  ╰──────────────────────────────────────────────────────────────────────────╯
@@ -239,7 +239,7 @@ test.skipIf(!extensionExists)('github extension can search commands', async () =
239
239
 
240
240
 
241
241
 
242
- ↵ run command ↑↓ navigate ^k actions powered by termcast.app
242
+ ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
243
243
 
244
244
 
245
245
 
@@ -17,12 +17,14 @@ afterEach(() => {
17
17
  })
18
18
 
19
19
  test('initial render shows bar chart for Monthly Budget', async () => {
20
- const text = await session.text({
20
+ await session.text({
21
21
  waitFor: (text) => {
22
22
  return text.includes('Monthly Budget') && text.includes('Spent')
23
23
  },
24
24
  timeout: 10000,
25
25
  })
26
+ await session.waitIdle()
27
+ const text = await session.text()
26
28
 
27
29
  expect(text).toMatchInlineSnapshot(`
28
30
  "
@@ -46,7 +48,7 @@ test('initial render shows bar chart for Monthly Budget', async () => {
46
48
  Stress Test (20 items) Many small equal segmen │
47
49
 
48
50
 
49
- ↵ open detail ↑↓ navigate ^k actions
51
+ ↵ open detail ↑↓ navigate ^k actions :vi
50
52
 
51
53
 
52
54
 
@@ -103,7 +105,7 @@ test('navigate to Market Share - dominant + tiny segments', async () => {
103
105
  Stress Test (20 items) Many small equal segmen │
104
106
 
105
107
 
106
- ↵ open detail ↑↓ navigate ^k actions
108
+ ↵ open detail ↑↓ navigate ^k actions :vi
107
109
 
108
110
 
109
111
 
@@ -159,7 +161,7 @@ test('navigate to Equal Distribution - 10 segments', async () => {
159
161
  Stress Test (20 items) Many small equal segmen │
160
162
 
161
163
 
162
- ↵ open detail ↑↓ navigate ^k actions
164
+ ↵ open detail ↑↓ navigate ^k actions :vi
163
165
 
164
166
 
165
167
 
@@ -215,7 +217,7 @@ test('navigate to Stress Test - 20 segments', async () => {
215
217
  ›Stress Test (20 items) Many small equal segmen │
216
218
 
217
219
 
218
- ↵ open detail ↑↓ navigate ^k actions
220
+ ↵ open detail ↑↓ navigate ^k actions :vi
219
221
 
220
222
 
221
223
 
@@ -253,18 +255,16 @@ test('enter pushes full detail view with bar chart', async () => {
253
255
 
254
256
 
255
257
  Monthly Budget █
256
-
257
- Spent / Remaining / Savings
258
-
258
+
259
+
260
+ Spent / Remaining / Savings ▀
259
261
  Monthly Budget
260
262
 
261
- Budget allocation for the current month.
262
263
 
264
+ Budget allocation for the current month.
263
265
  - Spent: $4,850 (78.6%)
264
266
  - Remaining: $707 (11.5%)
265
267
  - Savings: $617 (10.0%)
266
-
267
-
268
268
  Segments: 3
269
269
  Total: 6,174
270
270
 
@@ -273,6 +273,8 @@ test('enter pushes full detail view with bar chart', async () => {
273
273
 
274
274
  ────────────────────────────────────────────────────────────────────────────────────────────
275
275
 
276
+ Total: $6,174
277
+
276
278
 
277
279
 
278
280
  esc go back ^k actions ↵ Go Back powered by termcast.app
@@ -50,7 +50,7 @@ test('polymarket list with graph detail renders correctly', async () => {
50
50
 
51
51
  │ ────────────────────────────────────────────
52
52
 
53
- ↵ buy yes ↑↓ navigate ^k actions │ Probability (30d)
53
+ ↵ buy yes ↑↓ navigate ^k actions :vim │ Probability (30d)
54
54
 
55
55
 
56
56
 
@@ -113,7 +113,7 @@ test('navigating to different market updates the graph', async () => {
113
113
 
114
114
  │ ────────────────────────────────────────────
115
115
 
116
- ↵ buy yes ↑↓ navigate ^k actions │ Probability (30d)
116
+ ↵ buy yes ↑↓ navigate ^k actions :vim │ Probability (30d)
117
117
 
118
118
 
119
119