termcast 1.5.0 → 1.7.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.
Files changed (106) hide show
  1. package/dist/build.d.ts.map +1 -1
  2. package/dist/build.js +22 -5
  3. package/dist/build.js.map +1 -1
  4. package/dist/compile.d.ts.map +1 -1
  5. package/dist/compile.js +7 -1
  6. package/dist/compile.js.map +1 -1
  7. package/dist/components/bar-chart.d.ts.map +1 -1
  8. package/dist/components/bar-chart.js +14 -3
  9. package/dist/components/bar-chart.js.map +1 -1
  10. package/dist/components/bar-graph.d.ts +4 -4
  11. package/dist/components/bar-graph.d.ts.map +1 -1
  12. package/dist/components/bar-graph.js +23 -5
  13. package/dist/components/bar-graph.js.map +1 -1
  14. package/dist/components/candle-chart.d.ts +15 -0
  15. package/dist/components/candle-chart.d.ts.map +1 -1
  16. package/dist/components/candle-chart.js +41 -3
  17. package/dist/components/candle-chart.js.map +1 -1
  18. package/dist/components/chart-tooltip.d.ts +83 -0
  19. package/dist/components/chart-tooltip.d.ts.map +1 -0
  20. package/dist/components/chart-tooltip.js +127 -0
  21. package/dist/components/chart-tooltip.js.map +1 -0
  22. package/dist/components/dotted-line-graph.d.ts +11 -0
  23. package/dist/components/dotted-line-graph.d.ts.map +1 -1
  24. package/dist/components/dotted-line-graph.js +43 -2
  25. package/dist/components/dotted-line-graph.js.map +1 -1
  26. package/dist/components/graph.d.ts +11 -0
  27. package/dist/components/graph.d.ts.map +1 -1
  28. package/dist/components/graph.js +53 -4
  29. package/dist/components/graph.js.map +1 -1
  30. package/dist/components/horizontal-bar-graph.d.ts.map +1 -1
  31. package/dist/components/horizontal-bar-graph.js +16 -5
  32. package/dist/components/horizontal-bar-graph.js.map +1 -1
  33. package/dist/components/list.d.ts +7 -0
  34. package/dist/components/list.d.ts.map +1 -1
  35. package/dist/components/list.js +75 -14
  36. package/dist/components/list.js.map +1 -1
  37. package/dist/examples/chart-tooltips.d.ts +2 -0
  38. package/dist/examples/chart-tooltips.d.ts.map +1 -0
  39. package/dist/examples/chart-tooltips.js +16 -0
  40. package/dist/examples/chart-tooltips.js.map +1 -0
  41. package/dist/examples/list-detail-height-ratchet.d.ts +2 -0
  42. package/dist/examples/list-detail-height-ratchet.d.ts.map +1 -0
  43. package/dist/examples/list-detail-height-ratchet.js +26 -0
  44. package/dist/examples/list-detail-height-ratchet.js.map +1 -0
  45. package/dist/extensions/dev.d.ts.map +1 -1
  46. package/dist/extensions/dev.js +1 -0
  47. package/dist/extensions/dev.js.map +1 -1
  48. package/dist/globals.js +8 -0
  49. package/dist/globals.js.map +1 -1
  50. package/dist/package-json.d.ts +2 -0
  51. package/dist/package-json.d.ts.map +1 -1
  52. package/dist/package-json.js +20 -17
  53. package/dist/package-json.js.map +1 -1
  54. package/dist/profiler.d.ts +2 -0
  55. package/dist/profiler.d.ts.map +1 -0
  56. package/dist/profiler.js +390 -0
  57. package/dist/profiler.js.map +1 -0
  58. package/package.json +14 -15
  59. package/src/build.tsx +27 -5
  60. package/src/cli.tsx +0 -0
  61. package/src/compile.tsx +9 -1
  62. package/src/compile.vitest.tsx +8 -8
  63. package/src/components/bar-chart.tsx +23 -3
  64. package/src/components/bar-graph.tsx +32 -13
  65. package/src/components/candle-chart.tsx +63 -16
  66. package/src/components/chart-tooltip.tsx +191 -0
  67. package/src/components/dotted-line-graph.tsx +49 -3
  68. package/src/components/graph.tsx +76 -18
  69. package/src/components/horizontal-bar-graph.tsx +24 -4
  70. package/src/components/list.tsx +93 -20
  71. package/src/examples/action-shortcut.vitest.tsx +4 -4
  72. package/src/examples/actions-context.vitest.tsx +2 -2
  73. package/src/examples/bar-graph-weekly.vitest.tsx +97 -97
  74. package/src/examples/chart-tooltips.tsx +54 -0
  75. package/src/examples/form-basic.vitest.tsx +8 -8
  76. package/src/examples/github.vitest.tsx +19 -28
  77. package/src/examples/graph-bar-chart.vitest.tsx +40 -40
  78. package/src/examples/graph-polymarket.vitest.tsx +24 -24
  79. package/src/examples/graph-row.vitest.tsx +8 -8
  80. package/src/examples/graph-styles.vitest.tsx +65 -65
  81. package/src/examples/horizontal-bar-graph-weekly.vitest.tsx +52 -52
  82. package/src/examples/list-detail-height-ratchet.tsx +48 -0
  83. package/src/examples/list-detail-height-ratchet.vitest.tsx +161 -0
  84. package/src/examples/list-detail-metadata.vitest.tsx +49 -49
  85. package/src/examples/list-dropdown-default.vitest.tsx +27 -27
  86. package/src/examples/list-fetch-data.vitest.tsx +3 -3
  87. package/src/examples/list-item-accessories.vitest.tsx +2 -2
  88. package/src/examples/list-loading-empty-view.vitest.tsx +1 -1
  89. package/src/examples/list-no-actions.vitest.tsx +3 -3
  90. package/src/examples/list-scrollbox.vitest.tsx +6 -6
  91. package/src/examples/list-spacing-mode.vitest.tsx +3 -3
  92. package/src/examples/list-with-detail.vitest.tsx +11 -11
  93. package/src/examples/list-with-dropdown.vitest.tsx +7 -7
  94. package/src/examples/list-with-sections.vitest.tsx +32 -32
  95. package/src/examples/list-with-toast.vitest.tsx +4 -4
  96. package/src/examples/simple-candle-chart.vitest.tsx +63 -61
  97. package/src/examples/simple-grid.vitest.tsx +13 -13
  98. package/src/examples/simple-navigation.vitest.tsx +25 -25
  99. package/src/examples/simple-progress-bar.vitest.tsx +8 -8
  100. package/src/examples/swift-extension.vitest.tsx +3 -3
  101. package/src/examples/toast-action.vitest.tsx +4 -4
  102. package/src/extensions/dev.tsx +2 -1
  103. package/src/extensions/dev.vitest.tsx +17 -17
  104. package/src/globals.ts +9 -0
  105. package/src/package-json.tsx +24 -23
  106. package/src/profiler.tsx +487 -0
@@ -0,0 +1,54 @@
1
+ // Example: Chart tooltip showcase. Hover over any bar, segment, or data point
2
+ // to see an absolute-positioned tooltip showing the label and value.
3
+ // Demonstrates tooltips on BarGraph, Graph, BarChart, and HorizontalBarGraph.
4
+
5
+ import React from 'react'
6
+ import { Detail, BarGraph, Graph, BarChart, HorizontalBarGraph, Row } from 'termcast'
7
+ import { renderWithProviders } from '../utils'
8
+
9
+ const days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
10
+ const values1 = [40, 30, 25, 15, 50, 40]
11
+ const values2 = [20, 25, 10, 10, 25, 20]
12
+
13
+ function ChartTooltipsExample() {
14
+ return (
15
+ <Detail
16
+ navigationTitle="Chart Tooltips"
17
+ markdown={[
18
+ '# Chart Tooltips',
19
+ '',
20
+ 'Hover over any chart element to see a tooltip with the data label and value.',
21
+ 'Works on BarGraph, Graph, BarChart, and HorizontalBarGraph.',
22
+ ].join('\n')}
23
+ metadata={
24
+ <Detail.Metadata>
25
+ <Detail.Metadata.Label title="BarGraph (vertical stacked)" />
26
+ <BarGraph height={10} labels={days}>
27
+ <BarGraph.Series data={values1} title="Direct" />
28
+ <BarGraph.Series data={values2} title="Referral" />
29
+ </BarGraph>
30
+ <Detail.Metadata.Separator />
31
+ <Detail.Metadata.Label title="Graph (line chart)" />
32
+ <Graph height={8} xLabels={days}>
33
+ <Graph.Line data={values1} title="Traffic" />
34
+ </Graph>
35
+ <Detail.Metadata.Separator />
36
+ <Detail.Metadata.Label title="BarChart (horizontal segments)" />
37
+ <BarChart>
38
+ <BarChart.Segment value={60} label="Spent" />
39
+ <BarChart.Segment value={25} label="Remaining" />
40
+ <BarChart.Segment value={15} label="Reserved" />
41
+ </BarChart>
42
+ <Detail.Metadata.Separator />
43
+ <Detail.Metadata.Label title="HorizontalBarGraph (stacked rows)" />
44
+ <HorizontalBarGraph labels={days.slice(0, 4)}>
45
+ <HorizontalBarGraph.Series data={[40, 30, 25, 15]} title="Organic" />
46
+ <HorizontalBarGraph.Series data={[20, 25, 10, 10]} title="Paid" />
47
+ </HorizontalBarGraph>
48
+ </Detail.Metadata>
49
+ }
50
+ />
51
+ )
52
+ }
53
+
54
+ void renderWithProviders(<ChartTooltipsExample />)
@@ -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
- │ ← May
224
+ │ ← June
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
- │ ← May
282
+ │ ← June
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
- │ ← May
341
+ │ ← June
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
- │ ← May
416
+ │ ← June
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
- │ ← May
474
+ │ ← June
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
- │ ← May
534
+ │ ← June
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
- │ ← May
592
+ │ ← June
593
593
 
594
594
 
595
595
  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
- │ ← May
766
+ │ ← June
767
767
 
768
768
 
769
769
  ctrl ↵ submit tab navigate ^k actions
@@ -54,22 +54,13 @@ afterEach(() => {
54
54
  })
55
55
 
56
56
  test.skipIf(!extensionExists)('github extension shows command list on launch', async () => {
57
- // Wait for command list to appear (extension has multiple commands)
58
- // Don't match "Commands" alone - it falsely matches "Building 18 commands..." build log
59
57
  const initialView = await session.text({
60
- waitFor: (text) => /My Pu.*uest|Search .*sitories/i.test(text),
61
- timeout: 30000,
62
- })
63
-
64
- // Wait for the full command list to render.
65
- // The list can paint the first item before all descendants are registered.
66
- await session.text({
67
- waitFor: (text) => text.includes('My Pu...uest') && text.includes('Search ...sitories'),
58
+ waitFor: (text) => text.includes('My Pul...quests') && text.includes('Search Repositorie'),
68
59
  timeout: 30000,
69
60
  })
70
61
 
71
- expect(initialView).toContain('My Pu...uest')
72
- expect(initialView).toContain('Search ...sitories')
62
+ expect(initialView).toContain('My Pul...quests')
63
+ expect(initialView).toContain('Search Repositorie')
73
64
  expect(initialView).toMatchInlineSnapshot(`
74
65
  "
75
66
 
@@ -79,25 +70,25 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
79
70
  > Search commands...
80
71
 
81
72
  Commands
82
- ›My Pu...uest List pull requests you cre...d in, or were mentioned in. view
83
- Search ...RequestsSearch recent pull reque...lly in all repositories. view
84
- Create ...RequestCreate a pull request in...your GitHub repositories. view
73
+ ›My Pul...questsList pull requests you cr... in, or were mentioned in. view
74
+ Search Pull Request Search recent pull requ...ly in all repositories. view
75
+ Create Pull Reques Create a pull request i...our GitHub repositories. view
85
76
  My IssuesList issues created by you, ...ned to you or mentioning you. view
86
77
  Search Issues Search recent issues globally in all repositories. view
87
78
  Create Issue Create an issue in one of your GitHub repositories. view
88
79
  Create Branch Create a branch in one of your GitHub repositories view
89
- Search ...sitoriesSearch in your public or...te repositories by name. view
80
+ Search Repositorie Search in your public o...te repositories by name. view
90
81
  My Latest Repositories List your repositories by latest updated view
91
82
  My Starred Repositories List repositories you have starred view
92
83
  Workflow Runs Manage workflow runs for a selected GitHub repository. view
93
- Noti...ionsList inbox notifications fr...es or a selected repository. view
94
- Search ...ussionsSearch recent Discussion...bally in all repositories view
84
+ Notification List inbox notifications f...s or a selected repository. view
85
+ Search DiscussionsSearch recent Discussion...ally in all repositories view
95
86
  My Discussions Show your Discussions view
96
87
  My Projects Show your Projects view
97
88
 
98
89
 
99
90
 
100
- ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
91
+ ↵ run command ↑↓ navigate ^k actions powered by termcast.app
101
92
 
102
93
 
103
94
 
@@ -108,7 +99,7 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
108
99
  test.skipIf(!extensionExists)('github extension can navigate commands', async () => {
109
100
  // Wait for command list
110
101
  await session.text({
111
- waitFor: (text) => text.includes('My Pu...uest') && text.includes('Search ...sitories'),
102
+ waitFor: (text) => text.includes('My Pul...quests') && text.includes('Search Repositorie'),
112
103
  timeout: 30000,
113
104
  })
114
105
 
@@ -128,25 +119,25 @@ test.skipIf(!extensionExists)('github extension can navigate commands', async ()
128
119
  > Search commands...
129
120
 
130
121
  Commands
131
- My Pu...uest List pull requests you cre...d in, or were mentioned in. view
132
- Search ...RequestsSearch recent pull reque...lly in all repositories. view
133
- ›Create ...RequestCreate a pull request in...your GitHub repositories. view
122
+ My Pul...questsList pull requests you cr... in, or were mentioned in. view
123
+ Search Pull Request Search recent pull requ...ly in all repositories. view
124
+ ›Create Pull Reques Create a pull request i...our GitHub repositories. view
134
125
  My IssuesList issues created by you, ...ned to you or mentioning you. view
135
126
  Search Issues Search recent issues globally in all repositories. view
136
127
  Create Issue Create an issue in one of your GitHub repositories. view
137
128
  Create Branch Create a branch in one of your GitHub repositories view
138
- Search ...sitoriesSearch in your public or...te repositories by name. view
129
+ Search Repositorie Search in your public o...te repositories by name. view
139
130
  My Latest Repositories List your repositories by latest updated view
140
131
  My Starred Repositories List repositories you have starred view
141
132
  Workflow Runs Manage workflow runs for a selected GitHub repository. view
142
- Noti...ionsList inbox notifications fr...es or a selected repository. view
143
- Search ...ussionsSearch recent Discussion...bally in all repositories view
133
+ Notification List inbox notifications f...s or a selected repository. view
134
+ Search DiscussionsSearch recent Discussion...ally in all repositories view
144
135
  My Discussions Show your Discussions view
145
136
  My Projects Show your Projects view
146
137
 
147
138
 
148
139
 
149
- ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
140
+ ↵ run command ↑↓ navigate ^k actions powered by termcast.app
150
141
 
151
142
 
152
143
 
@@ -239,11 +230,11 @@ test.skipIf(!extensionExists)('github extension can search commands', async () =
239
230
 
240
231
 
241
232
 
242
- ↵ run command ↑↓ navigate ^k actions :vim powered by termcast.app
243
233
 
244
234
 
245
235
 
246
236
 
237
+ ↵ run command ↑↓ navigate ^k actions powered by termcast.app
247
238
 
248
239
 
249
240
 
@@ -36,7 +36,7 @@ test('initial render shows bar chart for Monthly Budget', async () => {
36
36
 
37
37
  ›Monthly Budget Spent / Remaining / Savings │ ┌Spent: 78.6%┐
38
38
  Disk Usage System / Apps / Media / Free │
39
- Inves...tfolioStocks / Bonds...o / Real Estate │
39
+ Investm...ortfoli Stocks / Bon.../ Real Estate │
40
40
  CPU Time User / System / IO Wait / Idle │ ────────────────────────────────────────────
41
41
  Revenue by Product 6 product lines │
42
42
  A/B Test Split Control vs Variant (50/50) │ Total: $6,174
@@ -45,17 +45,17 @@ test('initial render shows bar chart for Monthly Budget', async () => {
45
45
  Equal Distribution 10 equal segments │
46
46
  Custom Colors Explicit color per segment │ Saved: 10.0%
47
47
  Needs vs Wants 50/30/20 budget rule │
48
- Stress Test (20 items Many small...al segments │
48
+ Stress Test (20 items)Many small...al segments │
49
49
 
50
50
 
51
- ↵ open detail ↑↓ navigate ^k actions :vi
52
-
53
-
54
-
55
-
56
-
57
-
58
-
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ ↵ open detail ↑↓ navigate ^k actions │
59
59
 
60
60
  "
61
61
  `)
@@ -93,7 +93,7 @@ test('navigate to Market Share - dominant + tiny segments', async () => {
93
93
 
94
94
  Monthly Budget Spent / Remaining / Savings │ ┌Leader: 85.0%┐
95
95
  Disk Usage System / Apps / Media / Free │
96
- Inves...tfolioStocks / Bonds...o / Real Estate │
96
+ Investm...ortfoli Stocks / Bon.../ Real Estate │
97
97
  CPU Time User / System / IO Wait / Idle │ ────────────────────────────────────────────
98
98
  Revenue by Product 6 product lines │
99
99
  A/B Test Split Control vs Variant (50/50) │ HHI: 7,264 (monopoly)
@@ -102,17 +102,17 @@ test('navigate to Market Share - dominant + tiny segments', async () => {
102
102
  Equal Distribution 10 equal segments │
103
103
  Custom Colors Explicit color per segment │ Visible: Tiny ones hidden
104
104
  Needs vs Wants 50/30/20 budget rule │
105
- Stress Test (20 items Many small...al segments │
105
+ Stress Test (20 items)Many small...al segments │
106
106
 
107
107
 
108
- ↵ open detail ↑↓ navigate ^k actions :vi
109
-
110
-
111
-
112
-
113
-
114
-
115
-
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+ ↵ open detail ↑↓ navigate ^k actions │
116
116
 
117
117
  "
118
118
  `)
@@ -149,7 +149,7 @@ test('navigate to Equal Distribution - 10 segments', async () => {
149
149
 
150
150
  Monthly Budget Spent / Remaining / Savings │
151
151
  Disk Usage System / Apps / Media / Free │
152
- Inves...tfolioStocks / Bonds...o / Real Estate │ ────────────────────────────────────────────
152
+ Investm...ortfoli Stocks / Bon.../ Real Estate │ ────────────────────────────────────────────
153
153
  CPU Time User / System / IO Wait / Idle │
154
154
  Revenue by Product 6 product lines │ Segments: 10
155
155
  A/B Test Split Control vs Variant (50/50) │
@@ -158,17 +158,17 @@ test('navigate to Equal Distribution - 10 segments', async () => {
158
158
  ›Equal Distribution 10 equal segments │
159
159
  Custom Colors Explicit color per segment │
160
160
  Needs vs Wants 50/30/20 budget rule │
161
- Stress Test (20 items Many small...al segments │
161
+ Stress Test (20 items)Many small...al segments │
162
162
 
163
163
 
164
- ↵ open detail ↑↓ navigate ^k actions :vi
165
-
166
-
167
-
168
-
169
-
170
-
171
-
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+ ↵ open detail ↑↓ navigate ^k actions │
172
172
 
173
173
  "
174
174
  `)
@@ -205,7 +205,7 @@ test('navigate to Stress Test - 20 segments', async () => {
205
205
 
206
206
  Monthly Budget Spent / Remaining / Savings │
207
207
  Disk Usage System / Apps / Media / Free │
208
- Inves...tfolioStocks / Bonds...o / Real Estate │ ────────────────────────────────────────────
208
+ Investm...ortfoli Stocks / Bon.../ Real Estate │ ────────────────────────────────────────────
209
209
  CPU Time User / System / IO Wait / Idle │
210
210
  Revenue by Product 6 product lines │ Segments: 20
211
211
  A/B Test Split Control vs Variant (50/50) │
@@ -214,17 +214,17 @@ test('navigate to Stress Test - 20 segments', async () => {
214
214
  Equal Distribution 10 equal segments │
215
215
  Custom Colors Explicit color per segment │
216
216
  Needs vs Wants 50/30/20 budget rule │
217
- ›Stress Test (20 items Many small...al segments │
217
+ ›Stress Test (20 items)Many small...al segments │
218
218
 
219
219
 
220
- ↵ open detail ↑↓ navigate ^k actions :vi
221
-
222
-
223
-
224
-
225
-
226
-
227
-
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+ ↵ open detail ↑↓ navigate ^k actions │
228
228
 
229
229
  "
230
230
  `)
@@ -33,14 +33,14 @@ test('polymarket list with graph detail renders correctly', async () => {
33
33
  > Search markets...
34
34
 
35
35
  Trending Markets │ 100%│
36
- ›Bitcoin above $100k by EOY Crypto │ │ ⣠⣀
37
- ETH above $5k by Q2 2026 Crypto │ │ ⢠⣀ ⢀⣴⣷⡀ ⣰⣿⣿⣷⣀⣤⣴⣦⢀⣴
38
- Fed cuts rates below 4% Economics │ │⣠⣴⡀ ⢀ ⢠⣿⣿⣷⡀ ⣀⣤⣀⣀⣾⣿⣿⣿⣶⣴⣿⣿⣶⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
39
- S&P 500 reaches 6,000 Markets │ 50%│⣿⣿⣷⣄⢀⣴⣿⣿⣾⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
40
- Presidential pardon for SBF Politics │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
41
- AGI announced by major lab Tech │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
42
- Solana flips Ethereum market cap Crypto │ 0%│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
43
- US enters recession in 2026 Economics │ 30d 20d 10d Now
36
+ ›Bitcoin above $100k by EOY Crypto 72% │ │ ⣠⣀
37
+ ETH above $5k by Q2 2026 Crypto 38% │ │ ⢠⣀ ⢀⣴⣷⡀ ⣰⣿⣿⣷⣀⣤⣴⣦⢀⣴
38
+ Fed cuts rates below 4% Economics 61% │ │⣠⣴⡀ ⢀ ⢠⣿⣿⣷⡀ ⣀⣤⣀⣀⣾⣿⣿⣿⣶⣴⣿⣿⣶⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
39
+ S&P 500 reaches 6,000 Markets 55% │ 50%│⣿⣿⣷⣄⢀⣴⣿⣿⣾⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
40
+ Presidential pardon for SBF Politics 8% │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
41
+ AGI announced by major lab Tech 12% │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
42
+ Solana flips Ethereum market cap Crypto 18% │ 0%│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
43
+ US enters recession in 2026 Economics 28% │ 30d 20d 10d Now
44
44
 
45
45
  │ Odds: 72% Yes
46
46
 
@@ -50,10 +50,10 @@ test('polymarket list with graph detail renders correctly', async () => {
50
50
 
51
51
  │ ────────────────────────────────────────────
52
52
 
53
- ↵ buy yes ↑↓ navigate ^k actions :vim │ Probability (30d)
54
-
55
-
56
-
53
+ │ Probability (30d)
54
+
55
+
56
+ ↵ buy yes ↑↓ navigate ^k actions │
57
57
 
58
58
  "
59
59
  `)
@@ -96,14 +96,14 @@ test('navigating to different market updates the graph', async () => {
96
96
  > Search markets...
97
97
 
98
98
  Trending Markets │ 100%│
99
- Bitcoin above $100k by EOY Crypto │ │
100
- ›ETH above $5k by Q2 2026 Crypto │ │ ⣀
101
- Fed cuts rates below 4% Economics │ │⣿⣿⣆ ⢀⡀ ⣀⣾⣶⣄ ⢀⣤⣦ ⢀⡀
102
- S&P 500 reaches 6,000 Markets │ 50%│⣿⣿⣿⣷⣴⣾⣿⣿⣿⣿⣿⣿⣿⣦⣤⣶⣷⣦⣤⣿⣿⣿⣷⣤⣀⣤⣤⣀⢀⣴⣿⣿⣧ ⣀⣀⡀ ⢀
103
- Presidential pardon for SBF Politics │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣴⣿
104
- AGI announced by major lab Tech │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
105
- Solana flips Ethereum market cap Crypto │ 0%│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
106
- US enters recession in 2026 Economics │ 30d 20d 10d Now
99
+ Bitcoin above $100k by EOY Crypto 72% │ │
100
+ ›ETH above $5k by Q2 2026 Crypto 38% │ │ ⣀
101
+ Fed cuts rates below 4% Economics 61% │ │⣿⣿⣆ ⢀⡀ ⣀⣾⣶⣄ ⢀⣤⣦ ⢀⡀
102
+ S&P 500 reaches 6,000 Markets 55% │ 50%│⣿⣿⣿⣷⣴⣾⣿⣿⣿⣿⣿⣿⣿⣦⣤⣶⣷⣦⣤⣿⣿⣿⣷⣤⣀⣤⣤⣀⢀⣴⣿⣿⣧ ⣀⣀⡀ ⢀
103
+ Presidential pardon for SBF Politics 8% │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣴⣿
104
+ AGI announced by major lab Tech 12% │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
105
+ Solana flips Ethereum market cap Crypto 18% │ 0%│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
106
+ US enters recession in 2026 Economics 28% │ 30d 20d 10d Now
107
107
 
108
108
  │ Odds: 38% Yes
109
109
 
@@ -113,10 +113,10 @@ test('navigating to different market updates the graph', async () => {
113
113
 
114
114
  │ ────────────────────────────────────────────
115
115
 
116
- ↵ buy yes ↑↓ navigate ^k actions :vim │ Probability (30d)
117
-
118
-
119
-
116
+ │ Probability (30d)
117
+
118
+
119
+ ↵ buy yes ↑↓ navigate ^k actions │
120
120
 
121
121
  "
122
122
  `)
@@ -37,7 +37,7 @@ test('side detail shows two graphs in a row', async () => {
37
37
  Revenue vs Expenses Striped comparison │ █
38
38
  Weather Station Temperature + Humidity │ Area chart (left) shows CPU with high █
39
39
  Mixed Variants Area left, Striped right │ variance. █
40
- Sparse ...(Zeros Filled vs Str...h zero values │ Filled chart (right) shows memory steadily █
40
+ Sparse ... (Zeros)Filled vs St...h zero values │ Filled chart (right) shows memory steadily █
41
41
  │ climbing. █
42
42
  │ █
43
43
  │ 100│ ⡀ 100│ █
@@ -53,7 +53,7 @@ test('side detail shows two graphs in a row', async () => {
53
53
  │ ───────────────────────────────────────────
54
54
 
55
55
  │ CPU Peak: 90%
56
- ↵ open detail ↑↓ navigate ^k actions :vi │ ▼
56
+ ↵ open detail ↑↓ navigate ^k actions │ ▼
57
57
 
58
58
  "
59
59
  `)
@@ -156,7 +156,7 @@ test('esc returns from detail to list', async () => {
156
156
  Revenue vs Expenses Striped comparison │ █
157
157
  Weather Station Temperature + Humidity │ Area chart (left) shows CPU with high █
158
158
  Mixed Variants Area left, Striped right │ variance. █
159
- Sparse ...(Zeros Filled vs Str...h zero values │ Filled chart (right) shows memory steadily █
159
+ Sparse ... (Zeros)Filled vs St...h zero values │ Filled chart (right) shows memory steadily █
160
160
  │ climbing. █
161
161
  │ █
162
162
  │ 100│ ⡀ 100│ █
@@ -172,7 +172,7 @@ test('esc returns from detail to list', async () => {
172
172
  │ ───────────────────────────────────────────
173
173
 
174
174
  │ CPU Peak: 90%
175
- ↵ open detail ↑↓ navigate ^k actions :vi │ ▼
175
+ ↵ open detail ↑↓ navigate ^k actions │ ▼
176
176
 
177
177
  "
178
178
  `)
@@ -213,7 +213,7 @@ test('sparse data with zeros shows baseline', async () => {
213
213
  Revenue vs Expenses Striped comparison │ █
214
214
  Weather Station Temperature + Humidity │ Data with many zero values should show a █
215
215
  Mixed Variants Area left, Striped right │ thin █
216
- ›Sparse ...(Zeros Filled vs Str...h zero values │ baseline line so bars are visible even at █
216
+ ›Sparse ... (Zeros)Filled vs St...h zero values │ baseline line so bars are visible even at █
217
217
  │ zero. █
218
218
  │ █
219
219
  │ 100│ ▖ 100│ ▖ █
@@ -229,7 +229,7 @@ test('sparse data with zeros shows baseline', async () => {
229
229
  │ ───────────────────────────────────────────
230
230
 
231
231
  │ Zeros: 12 of 20
232
- ↵ open detail ↑↓ navigate ^k actions :vi │ ▼
232
+ ↵ open detail ↑↓ navigate ^k actions │ ▼
233
233
 
234
234
  "
235
235
  `)
@@ -269,7 +269,7 @@ test('navigate to striped pair', async () => {
269
269
  ›Revenue vs Expenses Striped comparison │ █
270
270
  Weather Station Temperature + Humidity │ Revenue growing faster than expenses. █
271
271
  Mixed Variants Area left, Striped right │ Profit margin widening over the year. █
272
- Sparse ...(Zeros Filled vs Str...h zero values │ - Revenue: $10k** to **$75k █
272
+ Sparse ... (Zeros)Filled vs St...h zero values │ - Revenue: $10k** to **$75k █
273
273
  │ - Expenses: $8k** to **$45k
274
274
 
275
275
  │ 78│ ▖ 47│ ▖
@@ -285,7 +285,7 @@ test('navigate to striped pair', async () => {
285
285
  │ ───────────────────────────────────────────
286
286
 
287
287
  │ Revenue: $75k
288
- ↵ open detail ↑↓ navigate ^k actions :vi │ ▼
288
+ ↵ open detail ↑↓ navigate ^k actions │ ▼
289
289
 
290
290
  "
291
291
  `)