termcast 1.3.48 → 1.3.50

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 (255) hide show
  1. package/dist/build.d.ts.map +1 -1
  2. package/dist/build.js +12 -0
  3. package/dist/build.js.map +1 -1
  4. package/dist/cli.js +5 -40
  5. package/dist/cli.js.map +1 -1
  6. package/dist/colors.d.ts +7 -7
  7. package/dist/colors.js +7 -7
  8. package/dist/compile.d.ts +6 -1
  9. package/dist/compile.d.ts.map +1 -1
  10. package/dist/compile.js +45 -26
  11. package/dist/compile.js.map +1 -1
  12. package/dist/components/actions.js +1 -1
  13. package/dist/components/actions.js.map +1 -1
  14. package/dist/components/bar-chart.d.ts +38 -0
  15. package/dist/components/bar-chart.d.ts.map +1 -0
  16. package/dist/components/bar-chart.js +158 -0
  17. package/dist/components/bar-chart.js.map +1 -0
  18. package/dist/components/bar-graph.d.ts +41 -0
  19. package/dist/components/bar-graph.d.ts.map +1 -0
  20. package/dist/components/bar-graph.js +95 -0
  21. package/dist/components/bar-graph.js.map +1 -0
  22. package/dist/components/detail.d.ts.map +1 -1
  23. package/dist/components/detail.js +5 -7
  24. package/dist/components/detail.js.map +1 -1
  25. package/dist/components/footer.d.ts.map +1 -1
  26. package/dist/components/footer.js +8 -9
  27. package/dist/components/footer.js.map +1 -1
  28. package/dist/components/form/date-picker.d.ts.map +1 -1
  29. package/dist/components/form/date-picker.js +7 -1
  30. package/dist/components/form/date-picker.js.map +1 -1
  31. package/dist/components/form/dropdown.d.ts.map +1 -1
  32. package/dist/components/form/dropdown.js +10 -2
  33. package/dist/components/form/dropdown.js.map +1 -1
  34. package/dist/components/form/index.d.ts.map +1 -1
  35. package/dist/components/form/index.js +4 -5
  36. package/dist/components/form/index.js.map +1 -1
  37. package/dist/components/form/use-form-navigation.d.ts.map +1 -1
  38. package/dist/components/form/use-form-navigation.js +6 -0
  39. package/dist/components/form/use-form-navigation.js.map +1 -1
  40. package/dist/components/graph.d.ts +111 -0
  41. package/dist/components/graph.d.ts.map +1 -0
  42. package/dist/components/graph.js +392 -0
  43. package/dist/components/graph.js.map +1 -0
  44. package/dist/components/icon.js +5 -5
  45. package/dist/components/icon.js.map +1 -1
  46. package/dist/components/list.d.ts +53 -5
  47. package/dist/components/list.d.ts.map +1 -1
  48. package/dist/components/list.js +125 -71
  49. package/dist/components/list.js.map +1 -1
  50. package/dist/components/loading-bar.js +3 -3
  51. package/dist/components/loading-bar.js.map +1 -1
  52. package/dist/components/loading-text.d.ts +1 -1
  53. package/dist/components/loading-text.d.ts.map +1 -1
  54. package/dist/components/loading-text.js +3 -1
  55. package/dist/components/loading-text.js.map +1 -1
  56. package/dist/components/metadata.js +2 -2
  57. package/dist/components/metadata.js.map +1 -1
  58. package/dist/components/row.d.ts +10 -0
  59. package/dist/components/row.d.ts.map +1 -0
  60. package/dist/components/row.js +12 -0
  61. package/dist/components/row.js.map +1 -0
  62. package/dist/components/table.d.ts +57 -0
  63. package/dist/components/table.d.ts.map +1 -0
  64. package/dist/components/table.js +365 -0
  65. package/dist/components/table.js.map +1 -0
  66. package/dist/descendants.js +13 -13
  67. package/dist/descendants.js.map +1 -1
  68. package/dist/examples/bar-graph-weekly.d.ts +2 -0
  69. package/dist/examples/bar-graph-weekly.d.ts.map +1 -0
  70. package/dist/examples/bar-graph-weekly.js +95 -0
  71. package/dist/examples/bar-graph-weekly.js.map +1 -0
  72. package/dist/examples/components-weird-places.d.ts +2 -0
  73. package/dist/examples/components-weird-places.d.ts.map +1 -0
  74. package/dist/examples/components-weird-places.js +46 -0
  75. package/dist/examples/components-weird-places.js.map +1 -0
  76. package/dist/examples/graph-bar-chart.d.ts +2 -0
  77. package/dist/examples/graph-bar-chart.d.ts.map +1 -0
  78. package/dist/examples/graph-bar-chart.js +270 -0
  79. package/dist/examples/graph-bar-chart.js.map +1 -0
  80. package/dist/examples/graph-multi-series.d.ts +2 -0
  81. package/dist/examples/graph-multi-series.d.ts.map +1 -0
  82. package/dist/examples/graph-multi-series.js +23 -0
  83. package/dist/examples/graph-multi-series.js.map +1 -0
  84. package/dist/examples/graph-polymarket.d.ts +2 -0
  85. package/dist/examples/graph-polymarket.d.ts.map +1 -0
  86. package/dist/examples/graph-polymarket.js +109 -0
  87. package/dist/examples/graph-polymarket.js.map +1 -0
  88. package/dist/examples/graph-row.d.ts +2 -0
  89. package/dist/examples/graph-row.d.ts.map +1 -0
  90. package/dist/examples/graph-row.js +226 -0
  91. package/dist/examples/graph-row.js.map +1 -0
  92. package/dist/examples/graph-styles.d.ts +2 -0
  93. package/dist/examples/graph-styles.d.ts.map +1 -0
  94. package/dist/examples/graph-styles.js +316 -0
  95. package/dist/examples/graph-styles.js.map +1 -0
  96. package/dist/examples/list-accessory-table.d.ts +2 -0
  97. package/dist/examples/list-accessory-table.d.ts.map +1 -0
  98. package/dist/examples/list-accessory-table.js +46 -0
  99. package/dist/examples/list-accessory-table.js.map +1 -0
  100. package/dist/examples/list-item-accessories.d.ts +2 -0
  101. package/dist/examples/list-item-accessories.d.ts.map +1 -0
  102. package/dist/examples/list-item-accessories.js +27 -0
  103. package/dist/examples/list-item-accessories.js.map +1 -0
  104. package/dist/examples/list-no-actions.d.ts +2 -0
  105. package/dist/examples/list-no-actions.d.ts.map +1 -0
  106. package/dist/examples/list-no-actions.js +7 -0
  107. package/dist/examples/list-no-actions.js.map +1 -0
  108. package/dist/examples/simple-detail-table.d.ts +2 -0
  109. package/dist/examples/simple-detail-table.d.ts.map +1 -0
  110. package/dist/examples/simple-detail-table.js +45 -0
  111. package/dist/examples/simple-detail-table.js.map +1 -0
  112. package/dist/examples/simple-graph.d.ts +2 -0
  113. package/dist/examples/simple-graph.d.ts.map +1 -0
  114. package/dist/examples/simple-graph.js +32 -0
  115. package/dist/examples/simple-graph.js.map +1 -0
  116. package/dist/examples/simple-table-wrap.d.ts +2 -0
  117. package/dist/examples/simple-table-wrap.d.ts.map +1 -0
  118. package/dist/examples/simple-table-wrap.js +37 -0
  119. package/dist/examples/simple-table-wrap.js.map +1 -0
  120. package/dist/examples/table-edge-cases.d.ts +2 -0
  121. package/dist/examples/table-edge-cases.d.ts.map +1 -0
  122. package/dist/examples/table-edge-cases.js +70 -0
  123. package/dist/examples/table-edge-cases.js.map +1 -0
  124. package/dist/examples/table-flex-grow.d.ts +2 -0
  125. package/dist/examples/table-flex-grow.d.ts.map +1 -0
  126. package/dist/examples/table-flex-grow.js +18 -0
  127. package/dist/examples/table-flex-grow.js.map +1 -0
  128. package/dist/extensions/dev.d.ts.map +1 -1
  129. package/dist/extensions/dev.js +5 -1
  130. package/dist/extensions/dev.js.map +1 -1
  131. package/dist/globals.d.ts +1 -0
  132. package/dist/globals.d.ts.map +1 -1
  133. package/dist/globals.js +2 -0
  134. package/dist/globals.js.map +1 -1
  135. package/dist/index.d.ts +10 -0
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +10 -0
  138. package/dist/index.js.map +1 -1
  139. package/dist/internal/date-picker-widget.d.ts.map +1 -1
  140. package/dist/internal/date-picker-widget.js +4 -0
  141. package/dist/internal/date-picker-widget.js.map +1 -1
  142. package/dist/internal/providers.d.ts.map +1 -1
  143. package/dist/internal/providers.js +1 -3
  144. package/dist/internal/providers.js.map +1 -1
  145. package/dist/markdown-utils.d.ts +22 -1
  146. package/dist/markdown-utils.d.ts.map +1 -1
  147. package/dist/markdown-utils.js +66 -1
  148. package/dist/markdown-utils.js.map +1 -1
  149. package/dist/opentui.d.ts +4 -0
  150. package/dist/opentui.d.ts.map +1 -0
  151. package/dist/opentui.js +3 -0
  152. package/dist/opentui.js.map +1 -0
  153. package/dist/release.d.ts +2 -1
  154. package/dist/release.d.ts.map +1 -1
  155. package/dist/release.js +2 -1
  156. package/dist/release.js.map +1 -1
  157. package/dist/state.d.ts +1 -0
  158. package/dist/state.d.ts.map +1 -1
  159. package/dist/state.js +1 -1
  160. package/dist/state.js.map +1 -1
  161. package/dist/theme.d.ts +1 -0
  162. package/dist/theme.d.ts.map +1 -1
  163. package/dist/theme.js +13 -0
  164. package/dist/theme.js.map +1 -1
  165. package/dist/themes/nerv.json +227 -0
  166. package/dist/themes/termcast.json +72 -71
  167. package/dist/themes.d.ts +2 -1
  168. package/dist/themes.d.ts.map +1 -1
  169. package/dist/themes.js +7 -5
  170. package/dist/themes.js.map +1 -1
  171. package/dist/utils.d.ts.map +1 -1
  172. package/dist/utils.js +3 -0
  173. package/dist/utils.js.map +1 -1
  174. package/package.json +13 -5
  175. package/src/build.tsx +13 -0
  176. package/src/cli.tsx +5 -49
  177. package/src/colors.tsx +7 -7
  178. package/src/compile.tsx +52 -29
  179. package/src/components/actions.tsx +1 -1
  180. package/src/components/bar-chart.tsx +271 -0
  181. package/src/components/bar-graph.tsx +214 -0
  182. package/src/components/detail.tsx +7 -8
  183. package/src/components/footer.tsx +14 -15
  184. package/src/components/form/date-picker.tsx +9 -0
  185. package/src/components/form/dropdown.tsx +13 -3
  186. package/src/components/form/index.tsx +4 -6
  187. package/src/components/form/use-form-navigation.tsx +6 -0
  188. package/src/components/graph.tsx +506 -0
  189. package/src/components/icon.tsx +5 -5
  190. package/src/components/list.tsx +210 -102
  191. package/src/components/loading-bar.tsx +3 -3
  192. package/src/components/loading-text.tsx +4 -2
  193. package/src/components/metadata.tsx +2 -2
  194. package/src/components/row.tsx +31 -0
  195. package/src/components/table.tsx +511 -0
  196. package/src/descendants.tsx +13 -13
  197. package/src/examples/action-shortcut.vitest.tsx +1 -1
  198. package/src/examples/actions-context.vitest.tsx +1 -1
  199. package/src/examples/bar-graph-weekly.tsx +264 -0
  200. package/src/examples/bar-graph-weekly.vitest.tsx +275 -0
  201. package/src/examples/detail-metadata-showcase.vitest.tsx +8 -8
  202. package/src/examples/form-basic.vitest.tsx +239 -0
  203. package/src/examples/form-dropdown.vitest.tsx +29 -29
  204. package/src/examples/form-tagpicker.vitest.tsx +27 -27
  205. package/src/examples/github.vitest.tsx +4 -4
  206. package/src/examples/graph-bar-chart.tsx +408 -0
  207. package/src/examples/graph-bar-chart.vitest.tsx +283 -0
  208. package/src/examples/graph-multi-series.tsx +36 -0
  209. package/src/examples/graph-multi-series.vitest.tsx +89 -0
  210. package/src/examples/graph-polymarket.tsx +182 -0
  211. package/src/examples/graph-polymarket.vitest.tsx +130 -0
  212. package/src/examples/graph-row.tsx +347 -0
  213. package/src/examples/graph-row.vitest.tsx +295 -0
  214. package/src/examples/graph-styles.tsx +457 -0
  215. package/src/examples/graph-styles.vitest.tsx +322 -0
  216. package/src/examples/list-accessory-table.tsx +77 -0
  217. package/src/examples/list-detail-metadata.vitest.tsx +21 -21
  218. package/src/examples/list-dropdown-default.vitest.tsx +12 -12
  219. package/src/examples/list-item-accessories.tsx +106 -0
  220. package/src/examples/list-item-accessories.vitest.tsx +115 -0
  221. package/src/examples/list-no-actions.tsx +18 -0
  222. package/src/examples/list-no-actions.vitest.tsx +97 -0
  223. package/src/examples/list-spacing-mode.vitest.tsx +6 -6
  224. package/src/examples/list-with-detail.vitest.tsx +92 -92
  225. package/src/examples/list-with-dropdown.vitest.tsx +49 -6
  226. package/src/examples/list-with-sections.vitest.tsx +61 -56
  227. package/src/examples/simple-detail-markdown.vitest.tsx +21 -17
  228. package/src/examples/simple-detail-table.tsx +65 -0
  229. package/src/examples/simple-detail-table.vitest.tsx +200 -0
  230. package/src/examples/simple-graph.tsx +51 -0
  231. package/src/examples/simple-graph.vitest.tsx +124 -0
  232. package/src/examples/simple-grid.vitest.tsx +3 -3
  233. package/src/examples/simple-list-search.vitest.tsx +65 -0
  234. package/src/examples/simple-navigation.vitest.tsx +3 -3
  235. package/src/examples/simple-table-wrap.tsx +55 -0
  236. package/src/examples/simple-table-wrap.vitest.tsx +91 -0
  237. package/src/examples/store.vitest.tsx +1 -1
  238. package/src/examples/table-edge-cases.tsx +72 -0
  239. package/src/examples/table-edge-cases.vitest.tsx +307 -0
  240. package/src/examples/table-flex-grow.tsx +53 -0
  241. package/src/examples/table-flex-grow.vitest.tsx +124 -0
  242. package/src/extensions/dev.tsx +7 -1
  243. package/src/globals.ts +3 -0
  244. package/src/index.tsx +31 -0
  245. package/src/internal/date-picker-widget.tsx +4 -0
  246. package/src/internal/providers.tsx +1 -4
  247. package/src/markdown-utils.tsx +82 -1
  248. package/src/opentui.tsx +5 -0
  249. package/src/release.tsx +3 -0
  250. package/src/state.tsx +2 -1
  251. package/src/theme.tsx +14 -0
  252. package/src/themes/nerv.json +231 -0
  253. package/src/themes/termcast.json +75 -71
  254. package/src/themes.ts +8 -5
  255. package/src/utils.tsx +4 -0
@@ -678,3 +678,242 @@ test('form scrolls with mouse wheel', async () => {
678
678
  "
679
679
  `)
680
680
  }, 10000)
681
+
682
+ test('arrow down from checkbox to dropdown lands on first item', async () => {
683
+ await session.text({
684
+ waitFor: (text) => {
685
+ return /Form Component Demo/i.test(text)
686
+ },
687
+ })
688
+
689
+ // Navigate to Checkbox via tab: Description → Username → Password → Bio → Checkbox
690
+ await session.press('tab')
691
+ await session.press('tab')
692
+ await session.press('tab')
693
+ await session.press('tab')
694
+
695
+ const checkboxFocused = await session.text()
696
+ expect(checkboxFocused).toContain('Email Preferences')
697
+
698
+ // Arrow down from Checkbox should focus the Country dropdown
699
+ // Bug: the dropdown also processes the arrow and moves cursor to index 1 (Canada)
700
+ // Expected: cursor stays at index 0 (United States)
701
+ await session.press('down')
702
+
703
+ const afterDown = await session.text()
704
+ expect(afterDown).toMatchInlineSnapshot(`
705
+ "
706
+
707
+
708
+
709
+
710
+ │ Required field
711
+
712
+ ◇ Password
713
+ │ Enter secure password
714
+
715
+ │ Must be at least 8 characters
716
+
717
+ ◇ Biography
718
+ │ Tell us about yourself...
719
+
720
+
721
+ │ █
722
+ │ ▀
723
+ │ Maximum 500 characters
724
+
725
+ ◇ Email Preferences
726
+ │ ○ Subscribe to newsletter
727
+
728
+ │ Receive weekly updates
729
+
730
+ ◆ Country
731
+ │ Select your country
732
+
733
+ │ Americas
734
+ │› ○ United States
735
+ │ ○ Canada
736
+ │ ○ Mexico
737
+ │ Europe
738
+
739
+ │ Your country of residence
740
+
741
+ ◇ Empty Dropdown
742
+ │ No items available
743
+
744
+ ◇ Minimal Field
745
+ │ No info text
746
+
747
+ ◇ Date of Birth
748
+
749
+ │ ← 2026 →
750
+ │ ← February →
751
+
752
+
753
+ ctrl ↵ submit tab navigate ^k actions
754
+
755
+ "
756
+ `)
757
+
758
+ // The cursor (›) should be on United States (index 0), not Canada (index 1)
759
+ expect(afterDown).toMatch(/›.*United States/)
760
+ }, 10000)
761
+
762
+ test('arrow down on last dropdown item moves focus to next form field', async () => {
763
+ await session.text({
764
+ waitFor: (text) => {
765
+ return /Form Component Demo/i.test(text)
766
+ },
767
+ })
768
+
769
+ // Description → Username → Password → Biography → Email Preferences
770
+ await session.press('tab')
771
+ await session.press('tab')
772
+ await session.press('tab')
773
+ await session.press('tab')
774
+
775
+ // Move from checkbox to country dropdown first item (United States)
776
+ await session.press('down')
777
+
778
+ // Move to last country option (Germany)
779
+ await session.press('down')
780
+ await session.press('down')
781
+ await session.press('down')
782
+ await session.press('down')
783
+ await session.press('down')
784
+
785
+ const focusedLastItemSnapshot = await session.text()
786
+ expect(focusedLastItemSnapshot).toMatch(/›.*Germany/)
787
+
788
+ // Repro: this should move focus to the next form field (Empty Dropdown)
789
+ await session.press('down')
790
+
791
+ const afterBoundaryDownSnapshot = await session.text()
792
+ expect(afterBoundaryDownSnapshot).toMatch(/◆\s+Empty Dropdown/)
793
+ expect(afterBoundaryDownSnapshot).toMatch(/◇\s+Country/)
794
+ }, 10000)
795
+
796
+ test('arrow up on first dropdown item moves focus to previous form field', async () => {
797
+ await session.text({
798
+ waitFor: (text) => {
799
+ return /Form Component Demo/i.test(text)
800
+ },
801
+ })
802
+
803
+ // Description → Username → Password → Biography → Email Preferences
804
+ await session.press('tab')
805
+ await session.press('tab')
806
+ await session.press('tab')
807
+ await session.press('tab')
808
+
809
+ // Move from checkbox to country dropdown first item (United States)
810
+ await session.press('down')
811
+
812
+ const firstItemFocusedSnapshot = await session.text()
813
+ expect(firstItemFocusedSnapshot).toMatch(/›.*United States/)
814
+
815
+ // Boundary up should move focus back to previous form field (Email Preferences)
816
+ await session.press('up')
817
+
818
+ const afterBoundaryUpSnapshot = await session.text()
819
+ expect(afterBoundaryUpSnapshot).toMatch(/◆\s+Email Preferences/)
820
+ expect(afterBoundaryUpSnapshot).toMatch(/◇\s+Country/)
821
+ }, 10000)
822
+
823
+ test('date picker down boundary moves focus to next form field', async () => {
824
+ await session.text({
825
+ waitFor: (text) => {
826
+ return /Form Component Demo/i.test(text)
827
+ },
828
+ })
829
+
830
+ await session.press('tab')
831
+ await session.press('tab')
832
+ await session.press('tab')
833
+ await session.press('tab')
834
+ await session.press('tab')
835
+ await session.press('tab')
836
+ await session.press('tab')
837
+ await session.press('tab')
838
+
839
+ const datePickerFocusedSnapshot = await session.text()
840
+ expect(datePickerFocusedSnapshot).toMatch(/◆\s+Date of Birth/)
841
+
842
+ await session.type('10')
843
+ await session.press('down')
844
+
845
+ const nonBoundaryDownSnapshot = await session.text()
846
+ expect(nonBoundaryDownSnapshot).toMatch(/◆\s+Date of Birth/)
847
+ expect(nonBoundaryDownSnapshot).not.toMatch(/◆\s+Upload Documents/)
848
+
849
+ await session.press('down')
850
+ await session.press('down')
851
+
852
+ const afterBoundaryDownSnapshot = await session.text()
853
+ expect(afterBoundaryDownSnapshot).toMatch(/◆\s+Upload Documents/)
854
+ expect(afterBoundaryDownSnapshot).toMatch(/◇\s+Date of Birth/)
855
+ }, 10000)
856
+
857
+ test('date picker up boundary moves focus to previous form field', async () => {
858
+ await session.text({
859
+ waitFor: (text) => {
860
+ return /Form Component Demo/i.test(text)
861
+ },
862
+ })
863
+
864
+ await session.press('tab')
865
+ await session.press('tab')
866
+ await session.press('tab')
867
+ await session.press('tab')
868
+ await session.press('tab')
869
+ await session.press('tab')
870
+ await session.press('tab')
871
+ await session.press('tab')
872
+
873
+ const datePickerFocusedSnapshot = await session.text()
874
+ expect(datePickerFocusedSnapshot).toMatch(/◆\s+Date of Birth/)
875
+
876
+ await session.type('1')
877
+ await session.press('up')
878
+
879
+ const afterFirstUpSnapshot = await session.text()
880
+ expect(afterFirstUpSnapshot).toMatch(/◆\s+Date of Birth/)
881
+
882
+ await session.press('up')
883
+
884
+ const afterSecondUpSnapshot = await session.text()
885
+ expect(afterSecondUpSnapshot).toMatch(/◆\s+Date of Birth/)
886
+
887
+ await session.press('up')
888
+
889
+ const afterBoundaryUpSnapshot = await session.text()
890
+ expect(afterBoundaryUpSnapshot).toMatch(/◆\s+Minimal Field/)
891
+ expect(afterBoundaryUpSnapshot).toMatch(/◇\s+Date of Birth/)
892
+ }, 10000)
893
+
894
+ test('textarea arrow keys move focus between adjacent form fields', async () => {
895
+ await session.text({
896
+ waitFor: (text) => {
897
+ return /Form Component Demo/i.test(text)
898
+ },
899
+ })
900
+
901
+ await session.press('tab')
902
+ await session.press('tab')
903
+ await session.press('tab')
904
+
905
+ const textareaFocusedSnapshot = await session.text()
906
+ expect(textareaFocusedSnapshot).toMatch(/◆\s+Biography/)
907
+
908
+ await session.type('hello')
909
+ await session.press('down')
910
+
911
+ const afterDownSnapshot = await session.text()
912
+ expect(afterDownSnapshot).toMatch(/◆\s+Email Preferences/)
913
+ expect(afterDownSnapshot).toMatch(/◇\s+Biography/)
914
+
915
+ await session.press('up')
916
+
917
+ const afterUpSnapshot = await session.text()
918
+ expect(afterUpSnapshot).toMatch(/◆\s+Biography/)
919
+ }, 10000)
@@ -110,8 +110,8 @@ test('form dropdown shows inline options', async () => {
110
110
  │ TypeScript, Rust █
111
111
  │ █
112
112
  │ Frontend █
113
- ● TypeScript █
114
- │› ○ JavaScript █
113
+ │› ● TypeScript █
114
+ ○ JavaScript █
115
115
  │ ○ React █
116
116
  │ ○ Vue █
117
117
  │ █
@@ -169,9 +169,9 @@ test('form dropdown shows inline options', async () => {
169
169
  ◆ Programming Languages █
170
170
  │ TypeScript, Rust █
171
171
  │ █
172
- ○ Svelte █
172
+ │› ○ Svelte █
173
173
  │ Backend █
174
- │› ○ Node.js █
174
+ ○ Node.js █
175
175
  │ ○ Python █
176
176
  │ ○ Go █
177
177
  │ █
@@ -224,11 +224,11 @@ test('form dropdown shows inline options', async () => {
224
224
  │ features █
225
225
  │ █
226
226
  ◆ Programming Languages █
227
- │ TypeScript, Rust, Node.js
227
+ │ TypeScript, Rust, Svelte
228
228
  │ █
229
- │ ○ Svelte █
229
+ │› Svelte █
230
230
  │ Backend █
231
- │› Node.js █
231
+ │ ○ Node.js █
232
232
  │ ○ Python █
233
233
  │ ○ Go █
234
234
  │ █
@@ -351,11 +351,11 @@ test('form dropdown keyboard navigation', async () => {
351
351
  ◆ Programming Languages █
352
352
  │ TypeScript, Rust █
353
353
  │ █
354
- │› ○ Svelte
355
- Backend
356
- │ ○ Node.js
357
- │ ○ Python
358
- Go
354
+ │ Frontend
355
+ ● TypeScript
356
+ │ ○ JavaScript
357
+ │ ○ React
358
+ │› Vue
359
359
  │ █
360
360
  │ Choose your preferred programming languages █
361
361
  │ █
@@ -408,9 +408,9 @@ test('form dropdown keyboard navigation', async () => {
408
408
  ◆ Programming Languages █
409
409
  │ TypeScript, Rust █
410
410
  │ █
411
- ○ Svelte █
411
+ │› ○ Svelte █
412
412
  │ Backend █
413
- │› ○ Node.js █
413
+ ○ Node.js █
414
414
  │ ○ Python █
415
415
  │ ○ Go █
416
416
  │ █
@@ -465,11 +465,11 @@ test('form dropdown keyboard navigation', async () => {
465
465
  ◆ Programming Languages █
466
466
  │ TypeScript, Rust █
467
467
  │ █
468
- │› ○ Svelte
469
- Backend
470
- │ ○ Node.js
471
- │ ○ Python
472
- Go
468
+ │ Frontend
469
+ ● TypeScript
470
+ │ ○ JavaScript
471
+ │ ○ React
472
+ │› Vue
473
473
  │ █
474
474
  │ Choose your preferred programming languages █
475
475
  │ █
@@ -522,11 +522,11 @@ test('form dropdown keyboard navigation', async () => {
522
522
  ◆ Programming Languages █
523
523
  │ TypeScript, Rust █
524
524
  │ █
525
- │› ○ Svelte
526
- Backend
527
- │ ○ Node.js
528
- │ ○ Python
529
- Go
525
+ │ Frontend
526
+ ● TypeScript
527
+ │ ○ JavaScript
528
+ │ ○ React
529
+ │› Vue
530
530
  │ █
531
531
  │ Choose your preferred programming languages █
532
532
  │ █
@@ -717,8 +717,8 @@ test('selecting second-to-last visible item should not scroll', async () => {
717
717
  │ █
718
718
  │ Frontend █
719
719
  │ ● TypeScript █
720
- ○ JavaScript █
721
- │› ○ React █
720
+ │› ○ JavaScript █
721
+ ○ React █
722
722
  │ ○ Vue █
723
723
  │ █
724
724
  │ Choose your preferred programming languages █
@@ -770,12 +770,12 @@ test('selecting second-to-last visible item should not scroll', async () => {
770
770
  │ features █
771
771
  │ █
772
772
  ◆ Programming Languages █
773
- │ TypeScript, Rust, React
773
+ │ TypeScript, Rust, JavaScript
774
774
  │ █
775
775
  │ Frontend █
776
776
  │ ● TypeScript █
777
- │ ○ JavaScript █
778
- │› React █
777
+ │› JavaScript █
778
+ │ ○ React █
779
779
  │ ○ Vue █
780
780
  │ █
781
781
  │ Choose your preferred programming languages █
@@ -153,8 +153,8 @@ test('form tagpicker shows inline options', async () => {
153
153
  ◆ Favorite Sport
154
154
  │ Choose your favorite sport...
155
155
 
156
- ○ Basketball
157
- │› ○ Football
156
+ │› ○ Basketball
157
+ ○ Football
158
158
  │ ○ Tennis
159
159
  │ ○ Baseball
160
160
  │ ○ Golf
@@ -213,11 +213,11 @@ test('form tagpicker shows inline options', async () => {
213
213
  ◆ Favorite Sport
214
214
  │ Choose your favorite sport...
215
215
 
216
+ │ ○ Basketball
217
+ │ ○ Football
218
+ │ ○ Tennis
216
219
  │ ○ Baseball
217
- ○ Golf
218
- │› ○ Swimming
219
- │ ○ Cycling
220
- │ ○ Running
220
+ │› ○ Golf
221
221
 
222
222
  │ Select your favorite sport from the list
223
223
 
@@ -268,13 +268,13 @@ test('form tagpicker shows inline options', async () => {
268
268
  │ Test tag picker with multiple selection support
269
269
 
270
270
  ◆ Favorite Sport
271
- Swimming
271
+ Golf
272
272
 
273
+ │ ○ Basketball
274
+ │ ○ Football
275
+ │ ○ Tennis
273
276
  │ ○ Baseball
274
- │ ○ Golf
275
- │› ● Swimming
276
- │ ○ Cycling
277
- │ ○ Running
277
+ │› Golf
278
278
 
279
279
  │ Select your favorite sport from the list
280
280
 
@@ -398,8 +398,8 @@ test('form tagpicker keyboard navigation', async () => {
398
398
  │ ○ Basketball
399
399
  │ ○ Football
400
400
  │ ○ Tennis
401
- ○ Baseball
402
- │› ○ Golf
401
+ │› ○ Baseball
402
+ ○ Golf
403
403
 
404
404
  │ Select your favorite sport from the list
405
405
 
@@ -452,11 +452,11 @@ test('form tagpicker keyboard navigation', async () => {
452
452
  ◆ Favorite Sport
453
453
  │ Choose your favorite sport...
454
454
 
455
+ │ ○ Basketball
456
+ │ ○ Football
457
+ │ ○ Tennis
455
458
  │ ○ Baseball
456
- ○ Golf
457
- │› ○ Swimming
458
- │ ○ Cycling
459
- │ ○ Running
459
+ │› ○ Golf
460
460
 
461
461
  │ Select your favorite sport from the list
462
462
 
@@ -509,11 +509,11 @@ test('form tagpicker keyboard navigation', async () => {
509
509
  ◆ Favorite Sport
510
510
  │ Choose your favorite sport...
511
511
 
512
- │ ○ Baseball
513
- │› Golf
514
- │ ○ Swimming
515
- Cycling
516
- │ ○ Running
512
+ │ ○ Basketball
513
+ Football
514
+ │ ○ Tennis
515
+ │› Baseball
516
+ │ ○ Golf
517
517
 
518
518
  │ Select your favorite sport from the list
519
519
 
@@ -566,11 +566,11 @@ test('form tagpicker keyboard navigation', async () => {
566
566
  ◆ Favorite Sport
567
567
  │ Choose your favorite sport...
568
568
 
569
- │ ○ Baseball
570
- │› Golf
571
- │ ○ Swimming
572
- Cycling
573
- │ ○ Running
569
+ │ ○ Basketball
570
+ Football
571
+ │ ○ Tennis
572
+ │› Baseball
573
+ │ ○ Golf
574
574
 
575
575
  │ Select your favorite sport from the list
576
576
 
@@ -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
100
+ ↵ run command ↑↓ navigate ^k actions 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
149
+ ↵ run command ↑↓ navigate ^k actions powered by termcast.app
150
150
 
151
151
 
152
152
 
@@ -192,7 +192,7 @@ test.skipIf(!extensionExists)('github extension can open actions panel', async (
192
192
  │ Settings │
193
193
  │ Configure GitHub... ⌃⇧, │
194
194
  │ Change Theme... │
195
- See Console Logs
195
+ Toggle Console Logs
196
196
  │ │
197
197
  │ │
198
198
  │ │
@@ -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
242
+ ↵ run command ↑↓ navigate ^k actions powered by termcast.app
243
243
 
244
244
 
245
245