termcast 1.3.54 → 1.4.0
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.
- package/dist/action-utils.d.ts.map +1 -1
- package/dist/action-utils.js +17 -132
- package/dist/action-utils.js.map +1 -1
- package/dist/apis/cache.d.ts +8 -30
- package/dist/apis/cache.d.ts.map +1 -1
- package/dist/apis/cache.js +9 -271
- package/dist/apis/cache.js.map +1 -1
- package/dist/apis/clipboard.d.ts +4 -2
- package/dist/apis/clipboard.d.ts.map +1 -1
- package/dist/apis/clipboard.js +18 -31
- package/dist/apis/clipboard.js.map +1 -1
- package/dist/apis/environment.d.ts.map +1 -1
- package/dist/apis/environment.js +14 -49
- package/dist/apis/environment.js.map +1 -1
- package/dist/apis/localstorage.d.ts +7 -12
- package/dist/apis/localstorage.d.ts.map +1 -1
- package/dist/apis/localstorage.js +7 -184
- package/dist/apis/localstorage.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +16 -15
- package/dist/app.js.map +1 -1
- package/dist/cli.js +7 -6
- package/dist/cli.js.map +1 -1
- package/dist/components/actions.d.ts.map +1 -1
- package/dist/components/actions.js +13 -2
- package/dist/components/actions.js.map +1 -1
- package/dist/components/extension-preferences.d.ts.map +1 -1
- package/dist/components/extension-preferences.js +7 -8
- package/dist/components/extension-preferences.js.map +1 -1
- package/dist/components/form/file-autocomplete.js +2 -2
- package/dist/components/form/file-autocomplete.js.map +1 -1
- package/dist/components/list.d.ts.map +1 -1
- package/dist/components/list.js +242 -14
- package/dist/components/list.js.map +1 -1
- package/dist/e2e-node.d.ts.map +1 -1
- package/dist/e2e-node.js +5 -4
- package/dist/e2e-node.js.map +1 -1
- package/dist/extensions/dev.d.ts.map +1 -1
- package/dist/extensions/dev.js +5 -2
- package/dist/extensions/dev.js.map +1 -1
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +2 -1
- package/dist/globals.js.map +1 -1
- package/dist/internal/error-handler.d.ts.map +1 -1
- package/dist/internal/error-handler.js +21 -19
- package/dist/internal/error-handler.js.map +1 -1
- package/dist/internal/providers.d.ts.map +1 -1
- package/dist/internal/providers.js +41 -1
- package/dist/internal/providers.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +31 -29
- package/dist/logger.js.map +1 -1
- package/dist/platform/browser/cache.d.ts +41 -0
- package/dist/platform/browser/cache.d.ts.map +1 -0
- package/dist/platform/browser/cache.js +262 -0
- package/dist/platform/browser/cache.js.map +1 -0
- package/dist/platform/browser/localstorage.d.ts +20 -0
- package/dist/platform/browser/localstorage.d.ts.map +1 -0
- package/dist/platform/browser/localstorage.js +102 -0
- package/dist/platform/browser/localstorage.js.map +1 -0
- package/dist/platform/browser/runtime.d.ts +51 -0
- package/dist/platform/browser/runtime.d.ts.map +1 -0
- package/dist/platform/browser/runtime.js +164 -0
- package/dist/platform/browser/runtime.js.map +1 -0
- package/dist/platform/bun/sqlite.d.ts +17 -0
- package/dist/platform/bun/sqlite.d.ts.map +1 -0
- package/dist/platform/bun/sqlite.js +6 -0
- package/dist/platform/bun/sqlite.js.map +1 -0
- package/dist/platform/node/cache.d.ts +35 -0
- package/dist/platform/node/cache.d.ts.map +1 -0
- package/dist/platform/node/cache.js +269 -0
- package/dist/platform/node/cache.js.map +1 -0
- package/dist/platform/node/localstorage.d.ts +17 -0
- package/dist/platform/node/localstorage.d.ts.map +1 -0
- package/dist/platform/node/localstorage.js +186 -0
- package/dist/platform/node/localstorage.js.map +1 -0
- package/dist/platform/node/runtime.d.ts +52 -0
- package/dist/platform/node/runtime.d.ts.map +1 -0
- package/dist/platform/node/runtime.js +230 -0
- package/dist/platform/node/runtime.js.map +1 -0
- package/dist/platform/node/sqlite.d.ts +27 -0
- package/dist/platform/node/sqlite.d.ts.map +1 -0
- package/dist/platform/node/sqlite.js +21 -0
- package/dist/platform/node/sqlite.js.map +1 -0
- package/dist/state.d.ts +5 -0
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +6 -28
- package/dist/state.js.map +1 -1
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +17 -22
- package/dist/utils/file-system.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +42 -47
- package/dist/utils.js.map +1 -1
- package/dist/vim-mode.d.ts +40 -0
- package/dist/vim-mode.d.ts.map +1 -0
- package/dist/vim-mode.js +135 -0
- package/dist/vim-mode.js.map +1 -0
- package/fonts/Inconsolata.otf +0 -0
- package/fonts/SIL Open Font License.txt +41 -0
- package/package.json +60 -8
- package/src/action-utils.tsx +27 -124
- package/src/apis/cache.test.ts +1 -1
- package/src/apis/cache.tsx +9 -373
- package/src/apis/clipboard.tsx +29 -38
- package/src/apis/environment.tsx +25 -52
- package/src/apis/localstorage.tsx +8 -214
- package/src/app.tsx +16 -15
- package/src/cli.tsx +14 -15
- package/src/compile.vitest.tsx +2 -2
- package/src/components/actions.tsx +19 -1
- package/src/components/extension-preferences.tsx +7 -8
- package/src/components/form/file-autocomplete.tsx +2 -2
- package/src/components/list.tsx +279 -14
- package/src/e2e-node.tsx +7 -7
- package/src/examples/action-shortcut.vitest.tsx +2 -2
- package/src/examples/actions-context.vitest.tsx +1 -1
- package/src/examples/bar-graph-weekly.vitest.tsx +10 -36
- package/src/examples/detail-metadata-showcase.vitest.tsx +36 -36
- package/src/examples/form-basic.vitest.tsx +21 -17
- package/src/examples/github.vitest.tsx +4 -4
- package/src/examples/graph-bar-chart.vitest.tsx +13 -11
- package/src/examples/graph-polymarket.vitest.tsx +2 -2
- package/src/examples/graph-row.vitest.tsx +66 -66
- package/src/examples/graph-styles.vitest.tsx +12 -12
- package/src/examples/internal/simple-scrollbox.vitest.tsx +14 -48
- package/src/examples/list-detail-metadata.vitest.tsx +5 -5
- package/src/examples/list-fetch-data.vitest.tsx +3 -3
- package/src/examples/list-item-accessories.vitest.tsx +2 -2
- package/src/examples/list-loading-empty-view.vitest.tsx +1 -1
- package/src/examples/list-no-actions.vitest.tsx +2 -2
- package/src/examples/list-scrollbox.vitest.tsx +5 -5
- package/src/examples/list-spacing-mode.vitest.tsx +3 -3
- package/src/examples/list-with-detail.vitest.tsx +68 -68
- package/src/examples/list-with-dropdown.vitest.tsx +5 -5
- package/src/examples/list-with-sections.vitest.tsx +27 -27
- package/src/examples/simple-candle-chart.vitest.tsx +7 -7
- package/src/examples/simple-detail-markdown.vitest.tsx +8 -8
- package/src/examples/simple-detail-table.vitest.tsx +8 -8
- package/src/examples/simple-graph.vitest.tsx +3 -3
- package/src/examples/simple-grid.vitest.tsx +14 -14
- package/src/examples/simple-heatmap.vitest.tsx +1 -1
- package/src/examples/simple-navigation.vitest.tsx +17 -17
- package/src/examples/simple-progress-bar.vitest.tsx +1 -1
- package/src/examples/store.vitest.tsx +1 -1
- package/src/examples/swift-extension.vitest.tsx +2 -2
- package/src/examples/table-edge-cases.vitest.tsx +18 -18
- package/src/examples/toast-action.vitest.tsx +2 -2
- package/src/extensions/dev.tsx +5 -2
- package/src/extensions/dev.vitest.tsx +3 -3
- package/src/globals.ts +2 -1
- package/src/internal/error-handler.tsx +19 -21
- package/src/internal/providers.tsx +39 -0
- package/src/logger.tsx +38 -41
- package/src/platform/browser/cache.ts +327 -0
- package/src/platform/browser/localstorage.ts +119 -0
- package/src/platform/browser/runtime.ts +209 -0
- package/src/platform/bun/sqlite.ts +19 -0
- package/src/platform/node/cache.ts +372 -0
- package/src/platform/node/localstorage.ts +214 -0
- package/src/platform/node/runtime.ts +264 -0
- package/src/platform/node/sqlite.ts +43 -0
- package/src/state.tsx +17 -28
- package/src/utils/file-system.ts +17 -22
- package/src/utils.test.tsx +1 -1
- package/src/utils.tsx +56 -47
- package/src/vim-mode.tsx +153 -0
- package/src/apis/sqlite.ts +0 -14
|
@@ -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
|
-
│ ←
|
|
224
|
+
│ ← April →
|
|
225
225
|
|
|
226
226
|
|
|
227
227
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -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
|
-
│ ←
|
|
282
|
+
│ ← April →
|
|
283
283
|
|
|
284
284
|
|
|
285
285
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -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
|
-
│ ←
|
|
341
|
+
│ ← April →
|
|
342
342
|
|
|
343
343
|
|
|
344
344
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -413,7 +413,7 @@ test('form dropdown navigation', async () => {
|
|
|
413
413
|
◇ Date of Birth
|
|
414
414
|
│
|
|
415
415
|
│ ← 2026 →
|
|
416
|
-
│ ←
|
|
416
|
+
│ ← April →
|
|
417
417
|
|
|
418
418
|
|
|
419
419
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -471,7 +471,7 @@ test('form dropdown navigation', async () => {
|
|
|
471
471
|
◇ Date of Birth
|
|
472
472
|
│
|
|
473
473
|
│ ← 2026 →
|
|
474
|
-
│ ←
|
|
474
|
+
│ ← April →
|
|
475
475
|
|
|
476
476
|
|
|
477
477
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -531,7 +531,7 @@ test('form dropdown navigation', async () => {
|
|
|
531
531
|
◇ Date of Birth
|
|
532
532
|
│
|
|
533
533
|
│ ← 2026 →
|
|
534
|
-
│ ←
|
|
534
|
+
│ ← April →
|
|
535
535
|
|
|
536
536
|
|
|
537
537
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -589,7 +589,7 @@ test('form dropdown navigation', async () => {
|
|
|
589
589
|
◇ Date of Birth
|
|
590
590
|
│
|
|
591
591
|
│ ← 2026 →
|
|
592
|
-
│ ←
|
|
592
|
+
│ ← April →
|
|
593
593
|
|
|
594
594
|
|
|
595
595
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -648,17 +648,17 @@ test('form scrolls with mouse wheel', async () => {
|
|
|
648
648
|
|
|
649
649
|
|
|
650
650
|
|
|
651
|
-
│ This demonstrates all available form input types. Use arrow ▀
|
|
652
|
-
│ keys or Tab to navigate between fields.
|
|
653
|
-
│
|
|
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
|
|
@@ -676,9 +676,7 @@ test('form scrolls with mouse wheel', async () => {
|
|
|
676
676
|
|
|
677
677
|
|
|
678
678
|
|
|
679
|
-
|
|
680
|
-
│ This demonstrates all available form input types. Use arrow
|
|
681
|
-
│ keys or Tab to navigate between fields.
|
|
679
|
+
│ keys or Tab to navigate between fields. ▄
|
|
682
680
|
│
|
|
683
681
|
◇ Username
|
|
684
682
|
│ Enter your username
|
|
@@ -687,6 +685,8 @@ test('form scrolls with mouse wheel', async () => {
|
|
|
687
685
|
│
|
|
688
686
|
◇ Password
|
|
689
687
|
│ Enter secure password
|
|
688
|
+
│
|
|
689
|
+
│ Must be at least 8 characters
|
|
690
690
|
|
|
691
691
|
|
|
692
692
|
ctrl ↵ submit tab navigate ^k actions
|
|
@@ -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
|
-
│ ←
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
116
|
+
↵ buy yes ↑↓ navigate ^k actions :vim │ Probability (30d)
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
|
|
@@ -32,28 +32,28 @@ test('side detail shows two graphs in a row', async () => {
|
|
|
32
32
|
|
|
33
33
|
> Search...
|
|
34
34
|
|
|
35
|
-
›CPU vs Memory Area + Filled side by side │
|
|
36
|
-
Disk I/O Read vs Write operations │
|
|
37
|
-
Revenue vs Expenses Striped comparison │
|
|
38
|
-
Weather Station Temperature + Humidity │
|
|
39
|
-
Mixed Variants Area left, Striped right │
|
|
40
|
-
Sparse Data (Zeros) Filled vs Striped with zer │
|
|
41
|
-
│
|
|
42
|
-
│
|
|
43
|
-
│
|
|
44
|
-
│
|
|
45
|
-
│
|
|
46
|
-
│ │
|
|
47
|
-
│
|
|
48
|
-
│
|
|
49
|
-
│
|
|
50
|
-
│
|
|
35
|
+
›CPU vs Memory Area + Filled side by side │ ▲
|
|
36
|
+
Disk I/O Read vs Write operations │ █
|
|
37
|
+
Revenue vs Expenses Striped comparison │ █
|
|
38
|
+
Weather Station Temperature + Humidity │ █
|
|
39
|
+
Mixed Variants Area left, Striped right │ █
|
|
40
|
+
Sparse Data (Zeros) Filled vs Striped with zer │ █
|
|
41
|
+
│ █
|
|
42
|
+
│ █
|
|
43
|
+
│ 100│ ⡀ 100│ █
|
|
44
|
+
│ │ ⡄ ⣼⣷⡀ │ ▖▖▌▌ █
|
|
45
|
+
│ 67│ ⣸⣿⡄ ⣸⣿⣿⣧ 67│ ▖▖▌▌▌▌▌▌▌ █
|
|
46
|
+
│ │ ⣼⣶⣿⣿⣷⡀ ⢰⣿⣿⣿⣿⣧ │ ▖▖▌▌▌▌▌▌▌▌▌▌▌▌
|
|
47
|
+
│ │ ⢸⣿⣿⣿⣿⣿⣷⣀⣿⣿⣿⣿⣿⣿⣇ │▖▖▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
48
|
+
│ 33│⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ 33│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
49
|
+
│ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
50
|
+
│ 0│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 0│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
51
|
+
│ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
|
|
51
52
|
│
|
|
52
|
-
│
|
|
53
|
+
│ ───────────────────────────────────────────
|
|
53
54
|
│
|
|
54
55
|
│ CPU Peak: 90%
|
|
55
|
-
|
|
56
|
-
↵ open detail ↑↓ navigate ^k actions │ Mem Peak: 86%
|
|
56
|
+
↵ open detail ↑↓ navigate ^k actions :vi │ ▼
|
|
57
57
|
|
|
58
58
|
"
|
|
59
59
|
`)
|
|
@@ -88,10 +88,11 @@ test('enter pushes full detail with two graphs', async () => {
|
|
|
88
88
|
█
|
|
89
89
|
CPU vs Memory ▀
|
|
90
90
|
|
|
91
|
-
Area + Filled side by side
|
|
92
91
|
|
|
92
|
+
Area + Filled side by side
|
|
93
93
|
CPU vs Memory
|
|
94
94
|
|
|
95
|
+
|
|
95
96
|
Area chart (left) shows CPU with high variance.
|
|
96
97
|
Filled chart (right) shows memory steadily climbing.
|
|
97
98
|
|
|
@@ -106,7 +107,6 @@ test('enter pushes full detail with two graphs', async () => {
|
|
|
106
107
|
│⣀⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
107
108
|
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
108
109
|
│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
109
|
-
0│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 0│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
110
110
|
|
|
111
111
|
|
|
112
112
|
esc go back ^k actions ↵ Go Back powered by termcast.app
|
|
@@ -151,28 +151,28 @@ test('esc returns from detail to list', async () => {
|
|
|
151
151
|
|
|
152
152
|
> Search...
|
|
153
153
|
|
|
154
|
-
›CPU vs Memory Area + Filled side by side │ CPU vs Memory
|
|
155
|
-
Disk I/O Read vs Write operations │
|
|
156
|
-
Revenue vs Expenses Striped comparison │
|
|
157
|
-
Weather Station Temperature + Humidity │
|
|
158
|
-
Mixed Variants Area left, Striped right │
|
|
159
|
-
Sparse Data (Zeros) Filled vs Striped with zer │
|
|
160
|
-
│
|
|
161
|
-
│
|
|
162
|
-
│
|
|
163
|
-
│
|
|
164
|
-
│
|
|
165
|
-
│ │
|
|
166
|
-
│
|
|
167
|
-
│
|
|
168
|
-
│
|
|
169
|
-
│
|
|
154
|
+
›CPU vs Memory Area + Filled side by side │ CPU vs Memory ▲
|
|
155
|
+
Disk I/O Read vs Write operations │ █
|
|
156
|
+
Revenue vs Expenses Striped comparison │ █
|
|
157
|
+
Weather Station Temperature + Humidity │ Area chart (left) shows CPU with high █
|
|
158
|
+
Mixed Variants Area left, Striped right │ variance. █
|
|
159
|
+
Sparse Data (Zeros) Filled vs Striped with zer │ Filled chart (right) shows memory steadily █
|
|
160
|
+
│ climbing. █
|
|
161
|
+
│ █
|
|
162
|
+
│ 100│ ⡀ 100│ █
|
|
163
|
+
│ │ ⡄ ⣼⣷⡀ │ ▖▖▌▌ █
|
|
164
|
+
│ 67│ ⣸⣿⡄ ⣸⣿⣿⣧ 67│ ▖▖▌▌▌▌▌▌▌ █
|
|
165
|
+
│ │ ⣼⣶⣿⣿⣷⡀ ⢰⣿⣿⣿⣿⣧ │ ▖▖▌▌▌▌▌▌▌▌▌▌▌▌
|
|
166
|
+
│ │ ⢸⣿⣿⣿⣿⣿⣷⣀⣿⣿⣿⣿⣿⣿⣇ │▖▖▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
167
|
+
│ 33│⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ 33│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
168
|
+
│ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
169
|
+
│ 0│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 0│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
|
|
170
|
+
│ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
|
|
170
171
|
│
|
|
171
|
-
│
|
|
172
|
+
│ ───────────────────────────────────────────
|
|
172
173
|
│
|
|
173
174
|
│ CPU Peak: 90%
|
|
174
|
-
|
|
175
|
-
↵ open detail ↑↓ navigate ^k actions │ Mem Peak: 86%
|
|
175
|
+
↵ open detail ↑↓ navigate ^k actions :vi │ ▼
|
|
176
176
|
|
|
177
177
|
"
|
|
178
178
|
`)
|
|
@@ -208,28 +208,28 @@ test('sparse data with zeros shows baseline', async () => {
|
|
|
208
208
|
|
|
209
209
|
> Search...
|
|
210
210
|
|
|
211
|
-
CPU vs Memory Area + Filled side by side │ Sparse Data
|
|
212
|
-
Disk I/O Read vs Write operations │
|
|
213
|
-
Revenue vs Expenses Striped comparison │
|
|
214
|
-
Weather Station Temperature + Humidity │
|
|
215
|
-
Mixed Variants Area left, Striped right │
|
|
216
|
-
›Sparse Data (Zeros) Filled vs Striped with zer │
|
|
217
|
-
│
|
|
218
|
-
│
|
|
219
|
-
│
|
|
220
|
-
│
|
|
221
|
-
│ │
|
|
222
|
-
│ │ ▌▌
|
|
223
|
-
│
|
|
224
|
-
│
|
|
225
|
-
│
|
|
226
|
-
│
|
|
211
|
+
CPU vs Memory Area + Filled side by side │ Sparse Data ▲
|
|
212
|
+
Disk I/O Read vs Write operations │ █
|
|
213
|
+
Revenue vs Expenses Striped comparison │ █
|
|
214
|
+
Weather Station Temperature + Humidity │ Data with many zero values should show a █
|
|
215
|
+
Mixed Variants Area left, Striped right │ thin █
|
|
216
|
+
›Sparse Data (Zeros) Filled vs Striped with zer │ baseline line so bars are visible even at █
|
|
217
|
+
│ zero. █
|
|
218
|
+
│ █
|
|
219
|
+
│ 100│ ▖ 100│ ▖ █
|
|
220
|
+
│ │ ▖ ▖▌ │ ▖ ▖▌ █
|
|
221
|
+
│ 67│ ▌ ▌▌ 67│ ▌ ▌▌ █
|
|
222
|
+
│ │ ▌▌ ▖▌ ▌▌ │ ▌▌ ▖▌ ▌▌
|
|
223
|
+
│ │ ▌▌ ▌▌ ▌▌▖ │ ▌▌ ▌▌ ▌▌▖
|
|
224
|
+
│ 33│ ▖ ▌▌▌ ▌▌▖ ▌▌▌ 33│ ▖ ▌▌▌ ▌▌▖ ▌▌▌
|
|
225
|
+
│ │ ▌▌▌▌▌▌▌▌▌▌ ▌▌▌ │ ▌▌▌▌▌▌▌▌▌▌ ▌▌▌
|
|
226
|
+
│ 0│▖▌▌▌▌▌▌▌▌▌▌▌▖▌▌▌▖ 0│▖▌▌▌▌▌▌▌▌▌▌▌▖▌▌▌▖
|
|
227
|
+
│ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
|
|
227
228
|
│
|
|
228
|
-
│
|
|
229
|
+
│ ───────────────────────────────────────────
|
|
229
230
|
│
|
|
230
231
|
│ Zeros: 12 of 20
|
|
231
|
-
|
|
232
|
-
↵ open detail ↑↓ navigate ^k actions │ Peak: 90
|
|
232
|
+
↵ open detail ↑↓ navigate ^k actions :vi │ ▼
|
|
233
233
|
|
|
234
234
|
"
|
|
235
235
|
`)
|
|
@@ -266,12 +266,11 @@ test('navigate to striped pair', async () => {
|
|
|
266
266
|
|
|
267
267
|
CPU vs Memory Area + Filled side by side │ Revenue vs Expenses ▲
|
|
268
268
|
Disk I/O Read vs Write operations │ █
|
|
269
|
-
›Revenue vs Expenses Striped comparison │
|
|
270
|
-
Weather Station Temperature + Humidity │
|
|
271
|
-
Mixed Variants Area left, Striped right │
|
|
272
|
-
Sparse Data (Zeros) Filled vs Striped with zer │ - Revenue: $10k to
|
|
273
|
-
│ - Expenses: $8k to
|
|
274
|
-
│
|
|
269
|
+
›Revenue vs Expenses Striped comparison │ █
|
|
270
|
+
Weather Station Temperature + Humidity │ Revenue growing faster than expenses. █
|
|
271
|
+
Mixed Variants Area left, Striped right │ Profit margin widening over the year. █
|
|
272
|
+
Sparse Data (Zeros) Filled vs Striped with zer │ - Revenue: $10k** to **$75k █
|
|
273
|
+
│ - Expenses: $8k** to **$45k
|
|
275
274
|
│
|
|
276
275
|
│ 78│ ▖ 47│ ▖
|
|
277
276
|
│ │ ▖▌▌▌ │ ▖▖▌▌▌
|
|
@@ -285,7 +284,8 @@ test('navigate to striped pair', async () => {
|
|
|
285
284
|
│
|
|
286
285
|
│ ───────────────────────────────────────────
|
|
287
286
|
│
|
|
288
|
-
|
|
287
|
+
│ Revenue: $75k
|
|
288
|
+
↵ open detail ↑↓ navigate ^k actions :vi │ ▼
|
|
289
289
|
|
|
290
290
|
"
|
|
291
291
|
`)
|
|
@@ -86,9 +86,9 @@ test('filled style renders block characters', async () => {
|
|
|
86
86
|
|
|
87
87
|
Area - Stock Price Orange braille do │ Revenue Growth ▲
|
|
88
88
|
Area - Multi Series CPU + Memory ove │ █
|
|
89
|
-
Area - Waves Purple + Magenta sine/c │
|
|
90
|
-
Area - Blue Revenue Single series, a │ $
|
|
91
|
-
›Filled - Red Revenue Solid block gro │
|
|
89
|
+
Area - Waves Purple + Magenta sine/c │
|
|
90
|
+
Area - Blue Revenue Single series, a │ Quarterly revenue from $10k** to
|
|
91
|
+
›Filled - Red Revenue Solid block gro │ **$75k.
|
|
92
92
|
Filled - Green Temp Daily temperatur │ Q1: $10k → Q2: $25k (+150%)
|
|
93
93
|
Filled - Yellow CPU High contrast on │ Q2: $25k → Q3: $50k (+100%)
|
|
94
94
|
Filled - Magenta Waves Smooth curve │ Q3: $50k → Q4: $75k (+50%)
|
|
@@ -188,20 +188,20 @@ test('markdown + metadata detail view in list', async () => {
|
|
|
188
188
|
|
|
189
189
|
Area - Stock Price Orange braille do │ System Metrics ▲
|
|
190
190
|
›Area - Multi Series CPU + Memory ove │ ▀
|
|
191
|
-
Area - Waves Purple + Magenta sine/c │
|
|
192
|
-
Area - Blue Revenue Single series, a │
|
|
193
|
-
Filled - Red Revenue Solid block gro │
|
|
191
|
+
Area - Waves Purple + Magenta sine/c │
|
|
192
|
+
Area - Blue Revenue Single series, a │ CPU usage (blue) vs memory usage (
|
|
193
|
+
Filled - Red Revenue Solid block gro │ green) over 24 hours.
|
|
194
194
|
Filled - Green Temp Daily temperatur │ - Peak CPU at 90% around 15h
|
|
195
195
|
Filled - Yellow CPU High contrast on │ - Memory steadily climbing to 86%
|
|
196
196
|
Filled - Magenta Waves Smooth curve │ - CPU has high variance, memory
|
|
197
197
|
Striped - Purple/Orange Warm alterna │ is monotonic
|
|
198
198
|
Striped - Blue/Red High contrast str │
|
|
199
|
-
Striped - Theme Default primary + ac │
|
|
200
|
-
Striped - Green/Yellow Nature-inspir │
|
|
201
|
-
Striped - Red/Magenta Warm gradient │
|
|
202
|
-
│ 75│ ⢀⣴⣧ ⢀⣰⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿
|
|
199
|
+
Striped - Theme Default primary + ac │ 100│
|
|
200
|
+
Striped - Green/Yellow Nature-inspir │ │ ⣠⣶⣧ ⣀⣠⣤⣶
|
|
201
|
+
Striped - Red/Magenta Warm gradient │ 75│ ⢀⣴⣧ ⢀⣰⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿
|
|
203
202
|
│ │ ⢀⣾⣿⣿⣧⢀⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
|
|
204
|
-
|
|
203
|
+
│ │ ⢀⣾⣶⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
|
|
204
|
+
↵ open detail ↑↓ navigate ^k act │ 50│⣀⣀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ ▼
|
|
205
205
|
|
|
206
206
|
"
|
|
207
207
|
`)
|
|
@@ -236,8 +236,8 @@ test('enter pushes full detail view with graph', async () => {
|
|
|
236
236
|
|
|
237
237
|
Area - Stock Price
|
|
238
238
|
|
|
239
|
-
Orange braille dots
|
|
240
239
|
|
|
240
|
+
Orange braille dots
|
|
241
241
|
Variant: area
|
|
242
242
|
Data points: 20
|
|
243
243
|
|
|
@@ -5,6 +5,8 @@ test('simple scrollbox navigation and scrolling', async () => {
|
|
|
5
5
|
const session = await launchTerminal({
|
|
6
6
|
command: 'bun',
|
|
7
7
|
args: ['src/examples/internal/simple-scrollbox.tsx'],
|
|
8
|
+
cols: 80,
|
|
9
|
+
rows: 20,
|
|
8
10
|
})
|
|
9
11
|
|
|
10
12
|
// Wait for initial render with Item 1 visible
|
|
@@ -23,34 +25,18 @@ test('simple scrollbox navigation and scrolling', async () => {
|
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
Simple ScrollBox Demo
|
|
26
|
-
|
|
27
|
-
Item 1 - This is content for item number 1. Lorem ipsum dolor sit amet,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
Item 2 - This is content for item number 2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
Item 3 - This is content for item number 3. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Item 4 - This is content for item number 4. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
Item 5 - This is content for item number 5. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
44
|
-
|
|
45
|
-
|
|
28
|
+
▀
|
|
29
|
+
Item 1 - This is content for item number 1. Lorem ipsum dolor sit amet,
|
|
30
|
+
consectetur adipiscing elit.
|
|
46
31
|
|
|
47
|
-
Item 6 - This is content for item number 6. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
48
32
|
|
|
49
33
|
|
|
34
|
+
Item 2 - This is content for item number 2. Lorem ipsum dolor sit amet,
|
|
35
|
+
consectetur adipiscing elit.
|
|
50
36
|
|
|
51
|
-
Item 7 - This is content for item number 7. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
52
37
|
|
|
53
38
|
|
|
39
|
+
Item 3 - This is content for item number 3. Lorem ipsum dolor sit amet,
|
|
54
40
|
|
|
55
41
|
Use mouse scroll or arrow keys | Press [q] to quit
|
|
56
42
|
|
|
@@ -71,34 +57,18 @@ test('simple scrollbox navigation and scrolling', async () => {
|
|
|
71
57
|
|
|
72
58
|
|
|
73
59
|
Simple ScrollBox Demo
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
Item 2 - This is content for item number 2. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
Item 3 - This is content for item number 3. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Item 4 - This is content for item number 4. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
Item 5 - This is content for item number 5. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
Item 6 - This is content for item number 6. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
60
|
+
▄
|
|
61
|
+
Item 2 - This is content for item number 2. Lorem ipsum dolor sit amet,
|
|
62
|
+
consectetur adipiscing elit.
|
|
95
63
|
|
|
96
64
|
|
|
97
65
|
|
|
98
|
-
Item
|
|
66
|
+
Item 3 - This is content for item number 3. Lorem ipsum dolor sit amet,
|
|
67
|
+
consectetur adipiscing elit.
|
|
99
68
|
|
|
100
69
|
|
|
101
70
|
|
|
71
|
+
Item 4 - This is content for item number 4. Lorem ipsum dolor sit amet,
|
|
102
72
|
|
|
103
73
|
Use mouse scroll or arrow keys | Press [q] to quit
|
|
104
74
|
|
|
@@ -131,10 +101,6 @@ test('simple scrollbox navigation and scrolling', async () => {
|
|
|
131
101
|
|
|
132
102
|
|
|
133
103
|
Item 3 - This is content for item number 3. Lorem ipsum dolor sit amet,
|
|
134
|
-
consectetur adipiscing elit.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
104
|
|
|
139
105
|
Use mouse scroll or arrow keys | Press [q] to quit
|
|
140
106
|
|