termcast 1.4.0 → 1.5.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 (144) hide show
  1. package/dist/build.d.ts.map +1 -1
  2. package/dist/build.js +8 -7
  3. package/dist/build.js.map +1 -1
  4. package/dist/cli.js +0 -40
  5. package/dist/cli.js.map +1 -1
  6. package/dist/components/bar-graph.d.ts +23 -8
  7. package/dist/components/bar-graph.d.ts.map +1 -1
  8. package/dist/components/bar-graph.js +84 -40
  9. package/dist/components/bar-graph.js.map +1 -1
  10. package/dist/components/dotted-line-graph.d.ts +86 -0
  11. package/dist/components/dotted-line-graph.d.ts.map +1 -0
  12. package/dist/components/dotted-line-graph.js +260 -0
  13. package/dist/components/dotted-line-graph.js.map +1 -0
  14. package/dist/components/extension-preferences.d.ts.map +1 -1
  15. package/dist/components/extension-preferences.js +1 -10
  16. package/dist/components/extension-preferences.js.map +1 -1
  17. package/dist/components/graph.d.ts.map +1 -1
  18. package/dist/components/graph.js +7 -1
  19. package/dist/components/graph.js.map +1 -1
  20. package/dist/components/histogram.d.ts +42 -0
  21. package/dist/components/histogram.d.ts.map +1 -0
  22. package/dist/components/histogram.js +115 -0
  23. package/dist/components/histogram.js.map +1 -0
  24. package/dist/components/horizontal-bar-graph.d.ts +47 -0
  25. package/dist/components/horizontal-bar-graph.d.ts.map +1 -0
  26. package/dist/components/horizontal-bar-graph.js +137 -0
  27. package/dist/components/horizontal-bar-graph.js.map +1 -0
  28. package/dist/components/list.d.ts +2 -0
  29. package/dist/components/list.d.ts.map +1 -1
  30. package/dist/components/list.js +10 -10
  31. package/dist/components/list.js.map +1 -1
  32. package/dist/examples/bar-graph-weekly.js +2 -2
  33. package/dist/examples/bar-graph-weekly.js.map +1 -1
  34. package/dist/examples/charts-showcase-barchart.d.ts +2 -0
  35. package/dist/examples/charts-showcase-barchart.d.ts.map +1 -0
  36. package/dist/examples/charts-showcase-barchart.js +10 -0
  37. package/dist/examples/charts-showcase-barchart.js.map +1 -0
  38. package/dist/examples/charts-showcase-bargraph.d.ts +2 -0
  39. package/dist/examples/charts-showcase-bargraph.d.ts.map +1 -0
  40. package/dist/examples/charts-showcase-bargraph.js +60 -0
  41. package/dist/examples/charts-showcase-bargraph.js.map +1 -0
  42. package/dist/examples/charts-showcase-candle.d.ts +2 -0
  43. package/dist/examples/charts-showcase-candle.d.ts.map +1 -0
  44. package/dist/examples/charts-showcase-candle.js +30 -0
  45. package/dist/examples/charts-showcase-candle.js.map +1 -0
  46. package/dist/examples/charts-showcase-graph.d.ts +2 -0
  47. package/dist/examples/charts-showcase-graph.d.ts.map +1 -0
  48. package/dist/examples/charts-showcase-graph.js +33 -0
  49. package/dist/examples/charts-showcase-graph.js.map +1 -0
  50. package/dist/examples/charts-showcase-heatmap.d.ts +2 -0
  51. package/dist/examples/charts-showcase-heatmap.d.ts.map +1 -0
  52. package/dist/examples/charts-showcase-heatmap.js +36 -0
  53. package/dist/examples/charts-showcase-heatmap.js.map +1 -0
  54. package/dist/examples/charts-showcase-mixed.d.ts +2 -0
  55. package/dist/examples/charts-showcase-mixed.d.ts.map +1 -0
  56. package/dist/examples/charts-showcase-mixed.js +30 -0
  57. package/dist/examples/charts-showcase-mixed.js.map +1 -0
  58. package/dist/examples/charts-showcase-progress.d.ts +2 -0
  59. package/dist/examples/charts-showcase-progress.d.ts.map +1 -0
  60. package/dist/examples/charts-showcase-progress.js +10 -0
  61. package/dist/examples/charts-showcase-progress.js.map +1 -0
  62. package/dist/examples/graph-multi-series.js +1 -1
  63. package/dist/examples/graph-multi-series.js.map +1 -1
  64. package/dist/examples/horizontal-bar-graph-weekly.d.ts +2 -0
  65. package/dist/examples/horizontal-bar-graph-weekly.d.ts.map +1 -0
  66. package/dist/examples/horizontal-bar-graph-weekly.js +67 -0
  67. package/dist/examples/horizontal-bar-graph-weekly.js.map +1 -0
  68. package/dist/examples/simple-dotted-line-graph.d.ts +2 -0
  69. package/dist/examples/simple-dotted-line-graph.d.ts.map +1 -0
  70. package/dist/examples/simple-dotted-line-graph.js +39 -0
  71. package/dist/examples/simple-dotted-line-graph.js.map +1 -0
  72. package/dist/examples/simple-histogram.d.ts +2 -0
  73. package/dist/examples/simple-histogram.d.ts.map +1 -0
  74. package/dist/examples/simple-histogram.js +47 -0
  75. package/dist/examples/simple-histogram.js.map +1 -0
  76. package/dist/index.d.ts +6 -0
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +6 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/logger.d.ts.map +1 -1
  81. package/dist/logger.js +15 -6
  82. package/dist/logger.js.map +1 -1
  83. package/dist/platform/node/sqlite.d.ts +6 -5
  84. package/dist/platform/node/sqlite.d.ts.map +1 -1
  85. package/dist/platform/node/sqlite.js +30 -14
  86. package/dist/platform/node/sqlite.js.map +1 -1
  87. package/dist/theme.d.ts.map +1 -1
  88. package/dist/theme.js +11 -9
  89. package/dist/theme.js.map +1 -1
  90. package/dist/utils/run-command.d.ts.map +1 -1
  91. package/dist/utils/run-command.js +8 -19
  92. package/dist/utils/run-command.js.map +1 -1
  93. package/dist/utils.d.ts +1 -19
  94. package/dist/utils.d.ts.map +1 -1
  95. package/dist/utils.js +1 -100
  96. package/dist/utils.js.map +1 -1
  97. package/package.json +14 -16
  98. package/src/build.tsx +11 -10
  99. package/src/cli.tsx +3 -40
  100. package/src/compile.vitest.tsx +3 -3
  101. package/src/components/bar-graph.tsx +217 -111
  102. package/src/components/dotted-line-graph.tsx +407 -0
  103. package/src/components/extension-preferences.tsx +2 -12
  104. package/src/components/graph.tsx +5 -1
  105. package/src/components/histogram.tsx +228 -0
  106. package/src/components/horizontal-bar-graph.tsx +279 -0
  107. package/src/components/list.tsx +20 -15
  108. package/src/examples/action-shortcut.vitest.tsx +17 -17
  109. package/src/examples/bar-graph-weekly.tsx +2 -2
  110. package/src/examples/bar-graph-weekly.vitest.tsx +63 -62
  111. package/src/examples/charts-showcase-bargraph.tsx +103 -0
  112. package/src/examples/detail-metadata-showcase.vitest.tsx +13 -18
  113. package/src/examples/form-basic.vitest.tsx +35 -35
  114. package/src/examples/form-dropdown.vitest.tsx +11 -11
  115. package/src/examples/form-scroll.vitest.tsx +1 -1
  116. package/src/examples/form-tagpicker.vitest.tsx +11 -11
  117. package/src/examples/github.vitest.tsx +22 -22
  118. package/src/examples/graph-bar-chart.vitest.tsx +8 -8
  119. package/src/examples/graph-multi-series.tsx +1 -1
  120. package/src/examples/graph-row.vitest.tsx +14 -14
  121. package/src/examples/graph-styles.vitest.tsx +77 -77
  122. package/src/examples/horizontal-bar-graph-weekly.tsx +138 -0
  123. package/src/examples/horizontal-bar-graph-weekly.vitest.tsx +164 -0
  124. package/src/examples/list-detail-metadata.vitest.tsx +4 -4
  125. package/src/examples/list-with-detail.vitest.tsx +46 -46
  126. package/src/examples/simple-candle-chart.vitest.tsx +8 -8
  127. package/src/examples/simple-dotted-line-graph.tsx +53 -0
  128. package/src/examples/simple-dotted-line-graph.vitest.tsx +62 -0
  129. package/src/examples/simple-grid.vitest.tsx +4 -4
  130. package/src/examples/simple-histogram.tsx +90 -0
  131. package/src/examples/simple-navigation.vitest.tsx +4 -4
  132. package/src/examples/swift-extension.vitest.tsx +3 -3
  133. package/src/examples/toast-variations.vitest.tsx +5 -5
  134. package/src/extensions/dev.vitest.tsx +8 -8
  135. package/src/index.tsx +21 -0
  136. package/src/logger.tsx +16 -6
  137. package/src/platform/node/sqlite.ts +29 -13
  138. package/src/theme.tsx +11 -10
  139. package/src/utils/run-command.tsx +10 -19
  140. package/src/utils.tsx +0 -163
  141. package/src/examples/store.tsx +0 -4
  142. package/src/examples/store.vitest.tsx +0 -78
  143. package/src/extensions/home.tsx +0 -227
  144. package/src/extensions/store.tsx +0 -375
@@ -102,7 +102,7 @@ test('form dropdown shows inline options', async () => {
102
102
 
103
103
 
104
104
 
105
- Dropdown Component Demo █
105
+ ▪︎ Dropdown Component Demo █
106
106
  │ Test dropdown with sections, multiple selection, and more █
107
107
  │ features █
108
108
  │ █
@@ -162,7 +162,7 @@ test('form dropdown shows inline options', async () => {
162
162
 
163
163
 
164
164
 
165
- Dropdown Component Demo █
165
+ ▪︎ Dropdown Component Demo █
166
166
  │ Test dropdown with sections, multiple selection, and more █
167
167
  │ features █
168
168
  │ █
@@ -219,7 +219,7 @@ test('form dropdown shows inline options', async () => {
219
219
 
220
220
 
221
221
 
222
- Dropdown Component Demo █
222
+ ▪︎ Dropdown Component Demo █
223
223
  │ Test dropdown with sections, multiple selection, and more █
224
224
  │ features █
225
225
  │ █
@@ -344,7 +344,7 @@ test('form dropdown keyboard navigation', async () => {
344
344
 
345
345
 
346
346
 
347
- Dropdown Component Demo █
347
+ ▪︎ Dropdown Component Demo █
348
348
  │ Test dropdown with sections, multiple selection, and more █
349
349
  │ features █
350
350
  │ █
@@ -401,7 +401,7 @@ test('form dropdown keyboard navigation', async () => {
401
401
 
402
402
 
403
403
 
404
- Dropdown Component Demo █
404
+ ▪︎ Dropdown Component Demo █
405
405
  │ Test dropdown with sections, multiple selection, and more █
406
406
  │ features █
407
407
  │ █
@@ -458,7 +458,7 @@ test('form dropdown keyboard navigation', async () => {
458
458
 
459
459
 
460
460
 
461
- Dropdown Component Demo █
461
+ ▪︎ Dropdown Component Demo █
462
462
  │ Test dropdown with sections, multiple selection, and more █
463
463
  │ features █
464
464
  │ █
@@ -515,7 +515,7 @@ test('form dropdown keyboard navigation', async () => {
515
515
 
516
516
 
517
517
 
518
- Dropdown Component Demo █
518
+ ▪︎ Dropdown Component Demo █
519
519
  │ Test dropdown with sections, multiple selection, and more █
520
520
  │ features █
521
521
  │ █
@@ -580,7 +580,7 @@ test('form dropdown with default value', async () => {
580
580
 
581
581
 
582
582
 
583
- Dropdown Component Demo █
583
+ ▪︎ Dropdown Component Demo █
584
584
  │ Test dropdown with sections, multiple selection, and more █
585
585
  │ features █
586
586
  │ █
@@ -637,7 +637,7 @@ test('form dropdown with default value', async () => {
637
637
 
638
638
 
639
639
 
640
- Dropdown Component Demo █
640
+ ▪︎ Dropdown Component Demo █
641
641
  │ Test dropdown with sections, multiple selection, and more █
642
642
  │ features █
643
643
  │ █
@@ -708,7 +708,7 @@ test('selecting second-to-last visible item should not scroll', async () => {
708
708
 
709
709
 
710
710
 
711
- Dropdown Component Demo █
711
+ ▪︎ Dropdown Component Demo █
712
712
  │ Test dropdown with sections, multiple selection, and more █
713
713
  │ features █
714
714
  │ █
@@ -765,7 +765,7 @@ test('selecting second-to-last visible item should not scroll', async () => {
765
765
 
766
766
 
767
767
 
768
- Dropdown Component Demo █
768
+ ▪︎ Dropdown Component Demo █
769
769
  │ Test dropdown with sections, multiple selection, and more █
770
770
  │ features █
771
771
  │ █
@@ -53,7 +53,7 @@ test(
53
53
 
54
54
 
55
55
 
56
- Form Scroll Test ▀
56
+ ▪︎ Form Scroll Test ▀
57
57
  │ Test scrolling behavior when navigating with Tab
58
58
 
59
59
  ◆ Field 1
@@ -147,7 +147,7 @@ test('form tagpicker shows inline options', async () => {
147
147
 
148
148
 
149
149
 
150
- TagPicker Component Demo
150
+ ▪︎ TagPicker Component Demo
151
151
  │ Test tag picker with multiple selection support
152
152
 
153
153
  ◆ Favorite Sport
@@ -207,7 +207,7 @@ test('form tagpicker shows inline options', async () => {
207
207
 
208
208
 
209
209
 
210
- TagPicker Component Demo
210
+ ▪︎ TagPicker Component Demo
211
211
  │ Test tag picker with multiple selection support
212
212
 
213
213
  ◆ Favorite Sport
@@ -264,7 +264,7 @@ test('form tagpicker shows inline options', async () => {
264
264
 
265
265
 
266
266
 
267
- TagPicker Component Demo
267
+ ▪︎ TagPicker Component Demo
268
268
  │ Test tag picker with multiple selection support
269
269
 
270
270
  ◆ Favorite Sport
@@ -389,7 +389,7 @@ test('form tagpicker keyboard navigation', async () => {
389
389
 
390
390
 
391
391
 
392
- TagPicker Component Demo
392
+ ▪︎ TagPicker Component Demo
393
393
  │ Test tag picker with multiple selection support
394
394
 
395
395
  ◆ Favorite Sport
@@ -446,7 +446,7 @@ test('form tagpicker keyboard navigation', async () => {
446
446
 
447
447
 
448
448
 
449
- TagPicker Component Demo
449
+ ▪︎ TagPicker Component Demo
450
450
  │ Test tag picker with multiple selection support
451
451
 
452
452
  ◆ Favorite Sport
@@ -503,7 +503,7 @@ test('form tagpicker keyboard navigation', async () => {
503
503
 
504
504
 
505
505
 
506
- TagPicker Component Demo
506
+ ▪︎ TagPicker Component Demo
507
507
  │ Test tag picker with multiple selection support
508
508
 
509
509
  ◆ Favorite Sport
@@ -560,7 +560,7 @@ test('form tagpicker keyboard navigation', async () => {
560
560
 
561
561
 
562
562
 
563
- TagPicker Component Demo
563
+ ▪︎ TagPicker Component Demo
564
564
  │ Test tag picker with multiple selection support
565
565
 
566
566
  ◆ Favorite Sport
@@ -625,7 +625,7 @@ test('form tagpicker with default value', async () => {
625
625
 
626
626
 
627
627
 
628
- TagPicker Component Demo
628
+ ▪︎ TagPicker Component Demo
629
629
  │ Test tag picker with multiple selection support
630
630
 
631
631
  ◆ Favorite Sport
@@ -682,7 +682,7 @@ test('form tagpicker with default value', async () => {
682
682
 
683
683
 
684
684
 
685
- TagPicker Component Demo
685
+ ▪︎ TagPicker Component Demo
686
686
  │ Test tag picker with multiple selection support
687
687
 
688
688
  ◆ Favorite Sport
@@ -746,7 +746,7 @@ test('form tagpicker with default value', async () => {
746
746
 
747
747
 
748
748
 
749
- TagPicker Component Demo
749
+ ▪︎ TagPicker Component Demo
750
750
  │ Test tag picker with multiple selection support
751
751
 
752
752
  ◆ Favorite Sport
@@ -770,7 +770,7 @@ test('form tagpicker with default value', async () => {
770
770
  │ ○ Poland
771
771
 
772
772
 
773
- Submitted Data
773
+ ▪︎ Submitted Data
774
774
  │ {
775
775
  │ "sports": [
776
776
  │ "basketball"
@@ -57,19 +57,19 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
57
57
  // Wait for command list to appear (extension has multiple commands)
58
58
  // Don't match "Commands" alone - it falsely matches "Building 18 commands..." build log
59
59
  const initialView = await session.text({
60
- waitFor: (text) => /My Pull Requests|Search Repositories/i.test(text),
60
+ waitFor: (text) => /My Pu.*uest|Search .*sitories/i.test(text),
61
61
  timeout: 30000,
62
62
  })
63
63
 
64
64
  // Wait for the full command list to render.
65
65
  // The list can paint the first item before all descendants are registered.
66
66
  await session.text({
67
- waitFor: (text) => text.includes('My Pull Requests') && text.includes('Search Repositories'),
67
+ waitFor: (text) => text.includes('My Pu...uest') && text.includes('Search ...sitories'),
68
68
  timeout: 30000,
69
69
  })
70
70
 
71
- expect(initialView).toContain('My Pull Requests')
72
- expect(initialView).toContain('Search Repositories')
71
+ expect(initialView).toContain('My Pu...uest')
72
+ expect(initialView).toContain('Search ...sitories')
73
73
  expect(initialView).toMatchInlineSnapshot(`
74
74
  "
75
75
 
@@ -79,19 +79,19 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
79
79
  > Search commands...
80
80
 
81
81
  Commands
82
- ›My Pull Requests List pull requests you created, participated in, or view
83
- Search Pull Requests Search recent pull requests globally in all repo view
84
- Create Pull Request Create a pull request in one of your GitHub repos view
85
- My Issues List issues created by you, assigned to you or mentioning y view
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
85
+ My IssuesList issues created by you, ...ned to you or mentioning you. view
86
86
  Search Issues Search recent issues globally in all repositories. view
87
87
  Create Issue Create an issue in one of your GitHub repositories. view
88
88
  Create Branch Create a branch in one of your GitHub repositories view
89
- Search Repositories Search in your public or private repositories by view
89
+ Search ...sitoriesSearch in your public or...te repositories by name. view
90
90
  My Latest Repositories List your repositories by latest updated view
91
91
  My Starred Repositories List repositories you have starred view
92
92
  Workflow Runs Manage workflow runs for a selected GitHub repository. view
93
- Notifications List inbox notifications from all repositories or a sel view
94
- Search Discussions Search recent Discussions globally in all reposito view
93
+ Noti...ionsList inbox notifications fr...es or a selected repository. view
94
+ Search ...ussionsSearch recent Discussion...bally in all repositories view
95
95
  My Discussions Show your Discussions view
96
96
  My Projects Show your Projects view
97
97
 
@@ -108,7 +108,7 @@ test.skipIf(!extensionExists)('github extension shows command list on launch', a
108
108
  test.skipIf(!extensionExists)('github extension can navigate commands', async () => {
109
109
  // Wait for command list
110
110
  await session.text({
111
- waitFor: (text) => text.includes('My Pull Requests') && text.includes('Search Repositories'),
111
+ waitFor: (text) => text.includes('My Pu...uest') && text.includes('Search ...sitories'),
112
112
  timeout: 30000,
113
113
  })
114
114
 
@@ -128,19 +128,19 @@ test.skipIf(!extensionExists)('github extension can navigate commands', async ()
128
128
  > Search commands...
129
129
 
130
130
  Commands
131
- My Pull Requests List pull requests you created, participated in, or view
132
- Search Pull Requests Search recent pull requests globally in all repo view
133
- ›Create Pull Request Create a pull request in one of your GitHub repos view
134
- My Issues List issues created by you, assigned to you or mentioning y view
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
134
+ My IssuesList issues created by you, ...ned to you or mentioning you. view
135
135
  Search Issues Search recent issues globally in all repositories. view
136
136
  Create Issue Create an issue in one of your GitHub repositories. view
137
137
  Create Branch Create a branch in one of your GitHub repositories view
138
- Search Repositories Search in your public or private repositories by view
138
+ Search ...sitoriesSearch in your public or...te repositories by name. view
139
139
  My Latest Repositories List your repositories by latest updated view
140
140
  My Starred Repositories List repositories you have starred view
141
141
  Workflow Runs Manage workflow runs for a selected GitHub repository. view
142
- Notifications List inbox notifications from all repositories or a sel view
143
- Search Discussions Search recent Discussions globally in all reposito view
142
+ Noti...ionsList inbox notifications fr...es or a selected repository. view
143
+ Search ...ussionsSearch recent Discussion...bally in all repositories view
144
144
  My Discussions Show your Discussions view
145
145
  My Projects Show your Projects view
146
146
 
@@ -157,7 +157,7 @@ test.skipIf(!extensionExists)('github extension can navigate commands', async ()
157
157
  test.skipIf(!extensionExists)('github extension can open actions panel', async () => {
158
158
  // Wait for command list
159
159
  await session.text({
160
- waitFor: (text) => /My Pull Requests|Search Repositories/i.test(text),
160
+ waitFor: (text) => /My Pu.*uest|Search .*sitories/i.test(text),
161
161
  timeout: 30000,
162
162
  })
163
163
 
@@ -209,7 +209,7 @@ test.skipIf(!extensionExists)('github extension can open actions panel', async (
209
209
  test.skipIf(!extensionExists)('github extension can search commands', async () => {
210
210
  // Wait for command list
211
211
  await session.text({
212
- waitFor: (text) => /My Pull Requests|Search Repositories/i.test(text),
212
+ waitFor: (text) => /My Pu.*uest|Search .*sitories/i.test(text),
213
213
  timeout: 30000,
214
214
  })
215
215
 
@@ -219,7 +219,7 @@ test.skipIf(!extensionExists)('github extension can search commands', async () =
219
219
  await session.type('workflow')
220
220
 
221
221
  const filteredList = await session.text({
222
- waitFor: (text) => /Workflow Runs/i.test(text) && !/My Pull Requests/i.test(text),
222
+ waitFor: (text) => /Workflow Runs/i.test(text) && !/My Pu.*uest/i.test(text),
223
223
  timeout: 5000,
224
224
  })
225
225
 
@@ -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
- Investment Portfolio Stocks / Bonds / Cash / C
39
+ Inves...tfolioStocks / Bonds...o / 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,7 +45,7 @@ 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 equal segmen
48
+ Stress Test (20 items Many small...al segments
49
49
 
50
50
 
51
51
  ↵ open detail ↑↓ navigate ^k actions :vi │
@@ -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
- Investment Portfolio Stocks / Bonds / Cash / C
96
+ Inves...tfolioStocks / Bonds...o / 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,7 +102,7 @@ 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 equal segmen
105
+ Stress Test (20 items Many small...al segments
106
106
 
107
107
 
108
108
  ↵ open detail ↑↓ navigate ^k actions :vi │
@@ -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
- Investment Portfolio Stocks / Bonds / Cash / C │ ────────────────────────────────────────────
152
+ Inves...tfolioStocks / Bonds...o / 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,7 +158,7 @@ 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 equal segmen
161
+ Stress Test (20 items Many small...al segments
162
162
 
163
163
 
164
164
  ↵ open detail ↑↓ navigate ^k actions :vi │
@@ -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
- Investment Portfolio Stocks / Bonds / Cash / C │ ────────────────────────────────────────────
208
+ Inves...tfolioStocks / Bonds...o / 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,7 +214,7 @@ 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 equal segmen
217
+ ›Stress Test (20 items Many small...al segments
218
218
 
219
219
 
220
220
  ↵ open detail ↑↓ navigate ^k actions :vi │
@@ -24,7 +24,7 @@ function GraphMultiSeries() {
24
24
  <Detail
25
25
  markdown="# Multi-Series Chart"
26
26
  metadata={
27
- <Graph height={12} xLabels={xLabels} yTicks={5}>
27
+ <Graph variant='area' height={12} xLabels={xLabels} yTicks={5}>
28
28
  <Graph.Line data={prices} color={Color.Orange} title="Price" />
29
29
  <Graph.Line data={sma} color={Color.Blue} title="SMA(5)" />
30
30
  </Graph>
@@ -32,13 +32,13 @@ 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 │
35
+ ›CPU vs Memory Area + Filled side by side │ CPU vs Memory
36
36
  Disk I/O Read vs Write operations │ █
37
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
-
38
+ Weather Station Temperature + Humidity │ Area chart (left) shows CPU with high
39
+ Mixed Variants Area left, Striped right │ variance.
40
+ Sparse ...(Zeros Filled vs Str...h zero values Filled chart (right) shows memory steadily
41
+ climbing.
42
42
  │ █
43
43
  │ 100│ ⡀ 100│ █
44
44
  │ │ ⡄ ⣼⣷⡀ │ ▖▖▌▌ █
@@ -48,7 +48,7 @@ test('side detail shows two graphs in a row', async () => {
48
48
  │ 33│⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ 33│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
49
49
  │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
50
50
  │ 0│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 0│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
51
- │ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
51
+ │ 0h 6h 12h 18h 0h 6h 12h 18h
52
52
 
53
53
  │ ───────────────────────────────────────────
54
54
 
@@ -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 Data (Zeros) Filled vs Striped with zer │ Filled chart (right) shows memory steadily █
159
+ Sparse ...(Zeros Filled vs Str...h zero values │ Filled chart (right) shows memory steadily █
160
160
  │ climbing. █
161
161
  │ █
162
162
  │ 100│ ⡀ 100│ █
@@ -167,7 +167,7 @@ test('esc returns from detail to list', async () => {
167
167
  │ 33│⣀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧ 33│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
168
168
  │ │⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ │▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
169
169
  │ 0│⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ 0│▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
170
- │ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
170
+ │ 0h 6h 12h 18h 0h 6h 12h 18h
171
171
 
172
172
  │ ───────────────────────────────────────────
173
173
 
@@ -183,7 +183,7 @@ test('esc returns from detail to list', async () => {
183
183
  test('sparse data with zeros shows baseline', async () => {
184
184
  await session.text({
185
185
  waitFor: (text) => {
186
- return text.includes('Sparse Data')
186
+ return text.includes('Sparse ...')
187
187
  },
188
188
  timeout: 10000,
189
189
  })
@@ -195,7 +195,7 @@ test('sparse data with zeros shows baseline', async () => {
195
195
 
196
196
  const text = await session.text({
197
197
  waitFor: (text) => {
198
- return text.includes('›Sparse Data')
198
+ return text.includes('›Sparse ...')
199
199
  },
200
200
  timeout: 5000,
201
201
  })
@@ -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 Data (Zeros) Filled vs Striped with zer │ baseline line so bars are visible even at █
216
+ ›Sparse ...(Zeros Filled vs Str...h zero values │ baseline line so bars are visible even at █
217
217
  │ zero. █
218
218
  │ █
219
219
  │ 100│ ▖ 100│ ▖ █
@@ -224,7 +224,7 @@ test('sparse data with zeros shows baseline', async () => {
224
224
  │ 33│ ▖ ▌▌▌ ▌▌▖ ▌▌▌ 33│ ▖ ▌▌▌ ▌▌▖ ▌▌▌
225
225
  │ │ ▌▌▌▌▌▌▌▌▌▌ ▌▌▌ │ ▌▌▌▌▌▌▌▌▌▌ ▌▌▌
226
226
  │ 0│▖▌▌▌▌▌▌▌▌▌▌▌▖▌▌▌▖ 0│▖▌▌▌▌▌▌▌▌▌▌▌▖▌▌▌▖
227
- │ 0h 6h 12h 18h24h 0h 6h 12h 18h24h
227
+ │ 0h 6h 12h 18h 0h 6h 12h 18h
228
228
 
229
229
  │ ───────────────────────────────────────────
230
230
 
@@ -234,7 +234,7 @@ test('sparse data with zeros shows baseline', async () => {
234
234
  "
235
235
  `)
236
236
 
237
- expect(text).toContain('›Sparse Data')
237
+ expect(text).toContain('›Sparse ...')
238
238
  }, 30000)
239
239
 
240
240
  test('navigate to striped pair', async () => {
@@ -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 Data (Zeros) Filled vs Striped with zer │ - Revenue: $10k** to **$75k █
272
+ Sparse ...(Zeros Filled vs Str...h zero values │ - Revenue: $10k** to **$75k █
273
273
  │ - Expenses: $8k** to **$45k
274
274
 
275
275
  │ 78│ ▖ 47│ ▖