@textui/widgets 0.1.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 (423) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +69 -0
  3. package/dist/chart/area-chart.d.ts +4 -0
  4. package/dist/chart/area-chart.d.ts.map +1 -0
  5. package/dist/chart/area-chart.js +3 -0
  6. package/dist/chart/bar-chart.d.ts +32 -0
  7. package/dist/chart/bar-chart.d.ts.map +1 -0
  8. package/dist/chart/bar-chart.js +32 -0
  9. package/dist/chart/gauge.d.ts +26 -0
  10. package/dist/chart/gauge.d.ts.map +1 -0
  11. package/dist/chart/gauge.js +26 -0
  12. package/dist/chart/heatmap.d.ts +13 -0
  13. package/dist/chart/heatmap.d.ts.map +1 -0
  14. package/dist/chart/heatmap.js +27 -0
  15. package/dist/chart/histogram.d.ts +12 -0
  16. package/dist/chart/histogram.d.ts.map +1 -0
  17. package/dist/chart/histogram.js +22 -0
  18. package/dist/chart/index.d.ts +20 -0
  19. package/dist/chart/index.d.ts.map +1 -0
  20. package/dist/chart/index.js +32 -0
  21. package/dist/chart/line-chart.d.ts +7 -0
  22. package/dist/chart/line-chart.d.ts.map +1 -0
  23. package/dist/chart/line-chart.js +75 -0
  24. package/dist/chart/shared.d.ts +34 -0
  25. package/dist/chart/shared.d.ts.map +1 -0
  26. package/dist/chart/shared.js +78 -0
  27. package/dist/chart/sparkline.d.ts +15 -0
  28. package/dist/chart/sparkline.d.ts.map +1 -0
  29. package/dist/chart/sparkline.js +22 -0
  30. package/dist/control/button.d.ts +27 -0
  31. package/dist/control/button.d.ts.map +1 -0
  32. package/dist/control/button.js +130 -0
  33. package/dist/control/checkbox.d.ts +10 -0
  34. package/dist/control/checkbox.d.ts.map +1 -0
  35. package/dist/control/checkbox.js +31 -0
  36. package/dist/control/index.d.ts +20 -0
  37. package/dist/control/index.d.ts.map +1 -0
  38. package/dist/control/index.js +36 -0
  39. package/dist/control/radio-group.d.ts +17 -0
  40. package/dist/control/radio-group.d.ts.map +1 -0
  41. package/dist/control/radio-group.js +32 -0
  42. package/dist/control/search-box.d.ts +7 -0
  43. package/dist/control/search-box.d.ts.map +1 -0
  44. package/dist/control/search-box.js +3 -0
  45. package/dist/control/select.d.ts +42 -0
  46. package/dist/control/select.d.ts.map +1 -0
  47. package/dist/control/select.js +166 -0
  48. package/dist/control/shared.d.ts +41 -0
  49. package/dist/control/shared.d.ts.map +1 -0
  50. package/dist/control/shared.js +1 -0
  51. package/dist/control/slider.d.ts +14 -0
  52. package/dist/control/slider.d.ts.map +1 -0
  53. package/dist/control/slider.js +45 -0
  54. package/dist/control/switch.d.ts +10 -0
  55. package/dist/control/switch.d.ts.map +1 -0
  56. package/dist/control/switch.js +32 -0
  57. package/dist/control/text-area.d.ts +87 -0
  58. package/dist/control/text-area.d.ts.map +1 -0
  59. package/dist/control/text-area.js +299 -0
  60. package/dist/control/text-input.d.ts +10 -0
  61. package/dist/control/text-input.d.ts.map +1 -0
  62. package/dist/control/text-input.js +129 -0
  63. package/dist/data/code-viewer.d.ts +71 -0
  64. package/dist/data/code-viewer.d.ts.map +1 -0
  65. package/dist/data/code-viewer.js +232 -0
  66. package/dist/data/feed.d.ts +43 -0
  67. package/dist/data/feed.d.ts.map +1 -0
  68. package/dist/data/feed.js +178 -0
  69. package/dist/data/index.d.ts +54 -0
  70. package/dist/data/index.d.ts.map +1 -0
  71. package/dist/data/index.js +187 -0
  72. package/dist/data/list.d.ts +31 -0
  73. package/dist/data/list.d.ts.map +1 -0
  74. package/dist/data/list.js +104 -0
  75. package/dist/data/log-viewer.d.ts +26 -0
  76. package/dist/data/log-viewer.d.ts.map +1 -0
  77. package/dist/data/log-viewer.js +69 -0
  78. package/dist/data/markdown-view.d.ts +31 -0
  79. package/dist/data/markdown-view.d.ts.map +1 -0
  80. package/dist/data/markdown-view.js +139 -0
  81. package/dist/data/pagination.d.ts +9 -0
  82. package/dist/data/pagination.d.ts.map +1 -0
  83. package/dist/data/pagination.js +18 -0
  84. package/dist/data/scroll-thumb.d.ts +15 -0
  85. package/dist/data/scroll-thumb.d.ts.map +1 -0
  86. package/dist/data/scroll-thumb.js +32 -0
  87. package/dist/data/shared.d.ts +12 -0
  88. package/dist/data/shared.d.ts.map +1 -0
  89. package/dist/data/shared.js +17 -0
  90. package/dist/data/tree.d.ts +35 -0
  91. package/dist/data/tree.d.ts.map +1 -0
  92. package/dist/data/tree.js +158 -0
  93. package/dist/decorations.d.ts +88 -0
  94. package/dist/decorations.d.ts.map +1 -0
  95. package/dist/decorations.js +135 -0
  96. package/dist/display/alert.d.ts +8 -0
  97. package/dist/display/alert.d.ts.map +1 -0
  98. package/dist/display/alert.js +12 -0
  99. package/dist/display/badge.d.ts +10 -0
  100. package/dist/display/badge.d.ts.map +1 -0
  101. package/dist/display/badge.js +21 -0
  102. package/dist/display/card.d.ts +8 -0
  103. package/dist/display/card.d.ts.map +1 -0
  104. package/dist/display/card.js +12 -0
  105. package/dist/display/empty-state.d.ts +10 -0
  106. package/dist/display/empty-state.d.ts.map +1 -0
  107. package/dist/display/empty-state.js +5 -0
  108. package/dist/display/error-state.d.ts +9 -0
  109. package/dist/display/error-state.d.ts.map +1 -0
  110. package/dist/display/error-state.js +7 -0
  111. package/dist/display/heading.d.ts +6 -0
  112. package/dist/display/heading.d.ts.map +1 -0
  113. package/dist/display/heading.js +8 -0
  114. package/dist/display/index.d.ts +25 -0
  115. package/dist/display/index.d.ts.map +1 -0
  116. package/dist/display/index.js +52 -0
  117. package/dist/display/key-value.d.ts +14 -0
  118. package/dist/display/key-value.d.ts.map +1 -0
  119. package/dist/display/key-value.js +11 -0
  120. package/dist/display/label.d.ts +6 -0
  121. package/dist/display/label.d.ts.map +1 -0
  122. package/dist/display/label.js +3 -0
  123. package/dist/display/marquee.d.ts +36 -0
  124. package/dist/display/marquee.d.ts.map +1 -0
  125. package/dist/display/marquee.js +55 -0
  126. package/dist/display/progress.d.ts +39 -0
  127. package/dist/display/progress.d.ts.map +1 -0
  128. package/dist/display/progress.js +46 -0
  129. package/dist/display/skeleton.d.ts +20 -0
  130. package/dist/display/skeleton.d.ts.map +1 -0
  131. package/dist/display/skeleton.js +20 -0
  132. package/dist/display/spinner.d.ts +7 -0
  133. package/dist/display/spinner.d.ts.map +1 -0
  134. package/dist/display/spinner.js +9 -0
  135. package/dist/display/status-dot.d.ts +8 -0
  136. package/dist/display/status-dot.d.ts.map +1 -0
  137. package/dist/display/status-dot.js +13 -0
  138. package/dist/display/timeline.d.ts +12 -0
  139. package/dist/display/timeline.d.ts.map +1 -0
  140. package/dist/display/timeline.js +22 -0
  141. package/dist/find.d.ts +74 -0
  142. package/dist/find.d.ts.map +1 -0
  143. package/dist/find.js +102 -0
  144. package/dist/form/danger-zone.d.ts +11 -0
  145. package/dist/form/danger-zone.d.ts.map +1 -0
  146. package/dist/form/danger-zone.js +15 -0
  147. package/dist/form/field.d.ts +19 -0
  148. package/dist/form/field.d.ts.map +1 -0
  149. package/dist/form/field.js +35 -0
  150. package/dist/form/form-actions.d.ts +11 -0
  151. package/dist/form/form-actions.d.ts.map +1 -0
  152. package/dist/form/form-actions.js +16 -0
  153. package/dist/form/form-section.d.ts +7 -0
  154. package/dist/form/form-section.d.ts.map +1 -0
  155. package/dist/form/form-section.js +5 -0
  156. package/dist/form/form.d.ts +7 -0
  157. package/dist/form/form.d.ts.map +1 -0
  158. package/dist/form/form.js +3 -0
  159. package/dist/form/index.d.ts +42 -0
  160. package/dist/form/index.d.ts.map +1 -0
  161. package/dist/form/index.js +140 -0
  162. package/dist/form/shared.d.ts +25 -0
  163. package/dist/form/shared.d.ts.map +1 -0
  164. package/dist/form/shared.js +9 -0
  165. package/dist/index.d.ts +26 -0
  166. package/dist/index.d.ts.map +1 -0
  167. package/dist/index.js +62 -0
  168. package/dist/layout/center.d.ts +7 -0
  169. package/dist/layout/center.d.ts.map +1 -0
  170. package/dist/layout/center.js +8 -0
  171. package/dist/layout/column.d.ts +3 -0
  172. package/dist/layout/column.d.ts.map +1 -0
  173. package/dist/layout/column.js +2 -0
  174. package/dist/layout/divider.d.ts +11 -0
  175. package/dist/layout/divider.d.ts.map +1 -0
  176. package/dist/layout/divider.js +13 -0
  177. package/dist/layout/grid.d.ts +10 -0
  178. package/dist/layout/grid.d.ts.map +1 -0
  179. package/dist/layout/grid.js +22 -0
  180. package/dist/layout/index.d.ts +19 -0
  181. package/dist/layout/index.d.ts.map +1 -0
  182. package/dist/layout/index.js +36 -0
  183. package/dist/layout/panel.d.ts +37 -0
  184. package/dist/layout/panel.d.ts.map +1 -0
  185. package/dist/layout/panel.js +71 -0
  186. package/dist/layout/row.d.ts +7 -0
  187. package/dist/layout/row.d.ts.map +1 -0
  188. package/dist/layout/row.js +2 -0
  189. package/dist/layout/scroll-view.d.ts +27 -0
  190. package/dist/layout/scroll-view.d.ts.map +1 -0
  191. package/dist/layout/scroll-view.js +93 -0
  192. package/dist/layout/splitter.d.ts +10 -0
  193. package/dist/layout/splitter.d.ts.map +1 -0
  194. package/dist/layout/splitter.js +9 -0
  195. package/dist/layout/stack.d.ts +7 -0
  196. package/dist/layout/stack.d.ts.map +1 -0
  197. package/dist/layout/stack.js +5 -0
  198. package/dist/navigation/breadcrumb.d.ts +14 -0
  199. package/dist/navigation/breadcrumb.d.ts.map +1 -0
  200. package/dist/navigation/breadcrumb.js +24 -0
  201. package/dist/navigation/index.d.ts +17 -0
  202. package/dist/navigation/index.d.ts.map +1 -0
  203. package/dist/navigation/index.js +30 -0
  204. package/dist/navigation/key-hints.d.ts +11 -0
  205. package/dist/navigation/key-hints.d.ts.map +1 -0
  206. package/dist/navigation/key-hints.js +13 -0
  207. package/dist/navigation/menu.d.ts +35 -0
  208. package/dist/navigation/menu.d.ts.map +1 -0
  209. package/dist/navigation/menu.js +88 -0
  210. package/dist/navigation/status-bar.d.ts +18 -0
  211. package/dist/navigation/status-bar.d.ts.map +1 -0
  212. package/dist/navigation/status-bar.js +12 -0
  213. package/dist/navigation/tabs.d.ts +20 -0
  214. package/dist/navigation/tabs.d.ts.map +1 -0
  215. package/dist/navigation/tabs.js +41 -0
  216. package/dist/navigation/toolbar.d.ts +14 -0
  217. package/dist/navigation/toolbar.d.ts.map +1 -0
  218. package/dist/navigation/toolbar.js +10 -0
  219. package/dist/navigation/wizard.d.ts +15 -0
  220. package/dist/navigation/wizard.d.ts.map +1 -0
  221. package/dist/navigation/wizard.js +17 -0
  222. package/dist/overlay/command-palette.d.ts +63 -0
  223. package/dist/overlay/command-palette.d.ts.map +1 -0
  224. package/dist/overlay/command-palette.js +415 -0
  225. package/dist/overlay/dialog.d.ts +16 -0
  226. package/dist/overlay/dialog.d.ts.map +1 -0
  227. package/dist/overlay/dialog.js +44 -0
  228. package/dist/overlay/index.d.ts +84 -0
  229. package/dist/overlay/index.d.ts.map +1 -0
  230. package/dist/overlay/index.js +157 -0
  231. package/dist/overlay/layer-scope.d.ts +21 -0
  232. package/dist/overlay/layer-scope.d.ts.map +1 -0
  233. package/dist/overlay/layer-scope.js +5 -0
  234. package/dist/overlay/path-picker.d.ts +14 -0
  235. package/dist/overlay/path-picker.d.ts.map +1 -0
  236. package/dist/overlay/path-picker.js +200 -0
  237. package/dist/overlay/prompt-dialog.d.ts +12 -0
  238. package/dist/overlay/prompt-dialog.d.ts.map +1 -0
  239. package/dist/overlay/prompt-dialog.js +29 -0
  240. package/dist/overlay/shared.d.ts +17 -0
  241. package/dist/overlay/shared.d.ts.map +1 -0
  242. package/dist/overlay/shared.js +17 -0
  243. package/dist/overlay/toast-host.d.ts +8 -0
  244. package/dist/overlay/toast-host.d.ts.map +1 -0
  245. package/dist/overlay/toast-host.js +19 -0
  246. package/dist/overlay/toast.d.ts +9 -0
  247. package/dist/overlay/toast.d.ts.map +1 -0
  248. package/dist/overlay/toast.js +20 -0
  249. package/dist/overlay/tooltip.d.ts +6 -0
  250. package/dist/overlay/tooltip.d.ts.map +1 -0
  251. package/dist/overlay/tooltip.js +11 -0
  252. package/dist/panel/index.d.ts +79 -0
  253. package/dist/panel/index.d.ts.map +1 -0
  254. package/dist/panel/index.js +256 -0
  255. package/dist/panel/resource-panel.d.ts +93 -0
  256. package/dist/panel/resource-panel.d.ts.map +1 -0
  257. package/dist/panel/resource-panel.js +213 -0
  258. package/dist/panel/shared.d.ts +6 -0
  259. package/dist/panel/shared.d.ts.map +1 -0
  260. package/dist/panel/shared.js +4 -0
  261. package/dist/shells/console-shell.d.ts +8 -0
  262. package/dist/shells/console-shell.d.ts.map +1 -0
  263. package/dist/shells/console-shell.js +30 -0
  264. package/dist/shells/index.d.ts +20 -0
  265. package/dist/shells/index.d.ts.map +1 -0
  266. package/dist/shells/index.js +61 -0
  267. package/dist/shells/paper-shell.d.ts +9 -0
  268. package/dist/shells/paper-shell.d.ts.map +1 -0
  269. package/dist/shells/paper-shell.js +23 -0
  270. package/dist/shells/plain-shell.d.ts +3 -0
  271. package/dist/shells/plain-shell.d.ts.map +1 -0
  272. package/dist/shells/plain-shell.js +11 -0
  273. package/dist/shells/shared.d.ts +12 -0
  274. package/dist/shells/shared.d.ts.map +1 -0
  275. package/dist/shells/shared.js +21 -0
  276. package/dist/shells/workbench-shell.d.ts +9 -0
  277. package/dist/shells/workbench-shell.d.ts.map +1 -0
  278. package/dist/shells/workbench-shell.js +43 -0
  279. package/dist/surface/bar-layout.d.ts +4 -0
  280. package/dist/surface/bar-layout.d.ts.map +1 -0
  281. package/dist/surface/bar-layout.js +7 -0
  282. package/dist/surface/index.d.ts +58 -0
  283. package/dist/surface/index.d.ts.map +1 -0
  284. package/dist/surface/index.js +48 -0
  285. package/dist/surface/inline-layout.d.ts +4 -0
  286. package/dist/surface/inline-layout.d.ts.map +1 -0
  287. package/dist/surface/inline-layout.js +7 -0
  288. package/dist/surface/mount-view.d.ts +7 -0
  289. package/dist/surface/mount-view.d.ts.map +1 -0
  290. package/dist/surface/mount-view.js +19 -0
  291. package/dist/surface/rail-layout.d.ts +4 -0
  292. package/dist/surface/rail-layout.d.ts.map +1 -0
  293. package/dist/surface/rail-layout.js +19 -0
  294. package/dist/surface/shared.d.ts +7 -0
  295. package/dist/surface/shared.d.ts.map +1 -0
  296. package/dist/surface/shared.js +1 -0
  297. package/dist/surface/single-layout.d.ts +4 -0
  298. package/dist/surface/single-layout.d.ts.map +1 -0
  299. package/dist/surface/single-layout.js +18 -0
  300. package/dist/surface/split-layout.d.ts +4 -0
  301. package/dist/surface/split-layout.d.ts.map +1 -0
  302. package/dist/surface/split-layout.js +7 -0
  303. package/dist/surface/stack-layout.d.ts +4 -0
  304. package/dist/surface/stack-layout.d.ts.map +1 -0
  305. package/dist/surface/stack-layout.js +22 -0
  306. package/dist/surface/surface-area.d.ts +16 -0
  307. package/dist/surface/surface-area.d.ts.map +1 -0
  308. package/dist/surface/surface-area.js +32 -0
  309. package/dist/surface/tabs-layout.d.ts +4 -0
  310. package/dist/surface/tabs-layout.d.ts.map +1 -0
  311. package/dist/surface/tabs-layout.js +24 -0
  312. package/dist/tone.d.ts +16 -0
  313. package/dist/tone.d.ts.map +1 -0
  314. package/dist/tone.js +45 -0
  315. package/dist/viewport.d.ts +30 -0
  316. package/dist/viewport.d.ts.map +1 -0
  317. package/dist/viewport.js +17 -0
  318. package/package.json +54 -0
  319. package/src/chart/area-chart.ts +9 -0
  320. package/src/chart/bar-chart.ts +74 -0
  321. package/src/chart/gauge.ts +60 -0
  322. package/src/chart/heatmap.ts +49 -0
  323. package/src/chart/histogram.ts +36 -0
  324. package/src/chart/index.ts +36 -0
  325. package/src/chart/line-chart.ts +100 -0
  326. package/src/chart/shared.ts +112 -0
  327. package/src/chart/sparkline.ts +46 -0
  328. package/src/control/button.ts +184 -0
  329. package/src/control/checkbox.ts +48 -0
  330. package/src/control/index.ts +40 -0
  331. package/src/control/radio-group.ts +60 -0
  332. package/src/control/search-box.ts +15 -0
  333. package/src/control/select.ts +230 -0
  334. package/src/control/shared.ts +41 -0
  335. package/src/control/slider.ts +63 -0
  336. package/src/control/switch.ts +39 -0
  337. package/src/control/text-area.ts +390 -0
  338. package/src/control/text-input.ts +150 -0
  339. package/src/data/code-viewer.ts +337 -0
  340. package/src/data/feed.ts +204 -0
  341. package/src/data/index.ts +243 -0
  342. package/src/data/list.ts +149 -0
  343. package/src/data/log-viewer.ts +105 -0
  344. package/src/data/markdown-view.ts +182 -0
  345. package/src/data/pagination.ts +31 -0
  346. package/src/data/scroll-thumb.ts +40 -0
  347. package/src/data/shared.ts +23 -0
  348. package/src/data/tree.ts +215 -0
  349. package/src/decorations.ts +176 -0
  350. package/src/display/alert.ts +28 -0
  351. package/src/display/badge.ts +40 -0
  352. package/src/display/card.ts +23 -0
  353. package/src/display/empty-state.ts +21 -0
  354. package/src/display/error-state.ts +23 -0
  355. package/src/display/heading.ts +17 -0
  356. package/src/display/index.ts +55 -0
  357. package/src/display/key-value.ts +32 -0
  358. package/src/display/label.ts +11 -0
  359. package/src/display/marquee.ts +88 -0
  360. package/src/display/progress.ts +92 -0
  361. package/src/display/skeleton.ts +34 -0
  362. package/src/display/spinner.ts +20 -0
  363. package/src/display/status-dot.ts +24 -0
  364. package/src/display/timeline.ts +47 -0
  365. package/src/find.ts +138 -0
  366. package/src/form/danger-zone.ts +34 -0
  367. package/src/form/field.ts +61 -0
  368. package/src/form/form-actions.ts +35 -0
  369. package/src/form/form-section.ts +16 -0
  370. package/src/form/form.ts +13 -0
  371. package/src/form/index.ts +191 -0
  372. package/src/form/shared.ts +36 -0
  373. package/src/index.ts +63 -0
  374. package/src/layout/center.ts +17 -0
  375. package/src/layout/column.ts +6 -0
  376. package/src/layout/divider.ts +31 -0
  377. package/src/layout/grid.ts +34 -0
  378. package/src/layout/index.ts +39 -0
  379. package/src/layout/panel.ts +114 -0
  380. package/src/layout/row.ts +11 -0
  381. package/src/layout/scroll-view.ts +115 -0
  382. package/src/layout/splitter.ts +24 -0
  383. package/src/layout/stack.ts +12 -0
  384. package/src/navigation/breadcrumb.ts +43 -0
  385. package/src/navigation/index.ts +33 -0
  386. package/src/navigation/key-hints.ts +25 -0
  387. package/src/navigation/menu.ts +134 -0
  388. package/src/navigation/status-bar.ts +43 -0
  389. package/src/navigation/tabs.ts +73 -0
  390. package/src/navigation/toolbar.ts +25 -0
  391. package/src/navigation/wizard.ts +43 -0
  392. package/src/overlay/command-palette.ts +485 -0
  393. package/src/overlay/dialog.ts +65 -0
  394. package/src/overlay/index.ts +232 -0
  395. package/src/overlay/layer-scope.ts +26 -0
  396. package/src/overlay/path-picker.ts +215 -0
  397. package/src/overlay/prompt-dialog.ts +45 -0
  398. package/src/overlay/shared.ts +19 -0
  399. package/src/overlay/toast-host.ts +30 -0
  400. package/src/overlay/toast.ts +35 -0
  401. package/src/overlay/tooltip.ts +17 -0
  402. package/src/panel/index.ts +317 -0
  403. package/src/panel/resource-panel.ts +304 -0
  404. package/src/panel/shared.ts +8 -0
  405. package/src/shells/console-shell.ts +47 -0
  406. package/src/shells/index.ts +66 -0
  407. package/src/shells/paper-shell.ts +31 -0
  408. package/src/shells/plain-shell.ts +19 -0
  409. package/src/shells/shared.ts +24 -0
  410. package/src/shells/workbench-shell.ts +62 -0
  411. package/src/surface/bar-layout.ts +11 -0
  412. package/src/surface/index.ts +53 -0
  413. package/src/surface/inline-layout.ts +11 -0
  414. package/src/surface/mount-view.ts +30 -0
  415. package/src/surface/rail-layout.ts +27 -0
  416. package/src/surface/shared.ts +7 -0
  417. package/src/surface/single-layout.ts +25 -0
  418. package/src/surface/split-layout.ts +11 -0
  419. package/src/surface/stack-layout.ts +32 -0
  420. package/src/surface/surface-area.ts +46 -0
  421. package/src/surface/tabs-layout.ts +30 -0
  422. package/src/tone.ts +48 -0
  423. package/src/viewport.ts +45 -0
@@ -0,0 +1,88 @@
1
+ import { defineComponent, h, useFocus, useInput, useState, useTheme } from '@textui/core';
2
+ import { Marquee } from '../display/index.js';
3
+ import { TONE } from '../tone.js';
4
+ export const Menu = defineComponent('Menu', (props) => {
5
+ const theme = useTheme();
6
+ const { items, onSelect, visibleRows, activeId, autoFocus, interactive = true, ...rest } = props;
7
+ const focus = useFocus({ autoFocus, disabled: !interactive });
8
+ const selectable = items.filter((i) => !i.disabled);
9
+ const [internalHighlight, setHighlight] = useState(Math.max(0, items.findIndex((i) => i.id === activeId)));
10
+ // When something else drives the list, `activeId` is the whole truth.
11
+ const highlight = interactive
12
+ ? internalHighlight
13
+ : Math.max(0, items.findIndex((i) => i.id === activeId));
14
+ useInput((event) => {
15
+ switch (event.name) {
16
+ case 'up':
17
+ setHighlight((highlight - 1 + items.length) % items.length);
18
+ return true;
19
+ case 'down':
20
+ setHighlight((highlight + 1) % items.length);
21
+ return true;
22
+ case 'home':
23
+ setHighlight(0);
24
+ return true;
25
+ case 'end':
26
+ setHighlight(items.length - 1);
27
+ return true;
28
+ case 'enter': {
29
+ const item = items[highlight];
30
+ if (item && !item.disabled)
31
+ onSelect?.(item.id, item);
32
+ return true;
33
+ }
34
+ default: return false;
35
+ }
36
+ }, { focusId: focus.id, enabled: interactive });
37
+ const rows = visibleRows ?? items.length;
38
+ const start = Math.max(0, Math.min(highlight - Math.floor(rows / 2), items.length - rows));
39
+ const window = items.slice(start, start + rows);
40
+ // One switch in the menu gives every row the column, blank on the rows that
41
+ // are not switches. Per-row would left-align the labels differently
42
+ // depending on what happened to be a toggle, which reads as a broken menu.
43
+ const switches = items.some((item) => item.checked !== undefined);
44
+ return h('box', { id: focus.id, role: 'menu', direction: 'column', ...rest }, ...window.flatMap((item, i) => {
45
+ const active = start + i === highlight;
46
+ const row = h('box', {
47
+ key: item.id,
48
+ role: 'menuitem',
49
+ label: item.label,
50
+ selected: active,
51
+ direction: 'row',
52
+ gap: 1,
53
+ bg: active ? 'selected' : undefined,
54
+ fg: item.disabled ? 'disabled' : active ? 'inverted' : item.tone ? TONE[item.tone] : undefined,
55
+ onClick: () => { if (!item.disabled)
56
+ onSelect?.(item.id, item); },
57
+ }, h('text', { content: active ? theme.glyphs.chevronRight : ' ', shrink: 0 }), switches
58
+ ? h('text', { content: item.checked === true ? theme.glyphs.check : ' ', shrink: 0 })
59
+ : null,
60
+ // The mark never gives up room. It is the shortest thing on the row
61
+ // and the one that stays legible when everything else is an ellipsis.
62
+ item.icon ? h('text', { content: item.icon, shrink: 0 }) : null,
63
+ // The row under the cursor reads itself out. Everything else is
64
+ // truncated and still, which is what you want of nineteen rows you
65
+ // are scanning past - and useless for the one you have stopped on.
66
+ h(Marquee, { content: item.label, active }), h('spacer', { flex: 1 }),
67
+ // The description yields first, and by a lot. It is the elaboration;
68
+ // the label is the thing being chosen, and a row reading "Accept ed…"
69
+ // beside a full sentence has given up the wrong half.
70
+ item.description
71
+ ? h(Marquee, {
72
+ content: item.description,
73
+ active,
74
+ fg: active ? 'inverted' : 'muted',
75
+ shrink: 8,
76
+ })
77
+ : null, item.shortcut ? h('text', { content: item.shortcut, fg: active ? 'inverted' : 'subtle' }) : null,
78
+ // Present but empty means "this opens something, contents unknown" -
79
+ // which is what the command palette knows about an argument whose
80
+ // choices it has not resolved yet.
81
+ item.children ? h('text', { content: theme.glyphs.chevronRight }) : null);
82
+ return item.separatorBefore
83
+ ? [h('box', { key: `${item.id}-sep`, height: 1, fill: theme.borderChars().top, fg: 'borderSubtle' }), row]
84
+ : [row];
85
+ }), selectable.length === 0
86
+ ? h('text', { content: ' no matches', fg: 'subtle' })
87
+ : null);
88
+ });
@@ -0,0 +1,18 @@
1
+ import type { BoxProps, SemanticVariant } from '@textui/core';
2
+ export interface StatusSegment {
3
+ id: string;
4
+ label: string;
5
+ icon?: string;
6
+ tone?: SemanticVariant;
7
+ }
8
+ export interface StatusBarProps extends BoxProps {
9
+ /**
10
+ * Segments before the gap and after it. Named `leading`/`trailing` rather
11
+ * than `left`/`right` because those are style props on every node.
12
+ */
13
+ leading?: StatusSegment[];
14
+ trailing?: StatusSegment[];
15
+ separator?: string;
16
+ }
17
+ export declare const StatusBar: (props: StatusBarProps) => import("@textui/core").RenderOutput;
18
+ //# sourceMappingURL=status-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../src/navigation/status-bar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI9D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB;AAED,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,SAAS,gEAqBpB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { defineComponent, h, useTheme } from '@textui/core';
2
+ import { TONE } from '../tone.js';
3
+ export const StatusBar = defineComponent('StatusBar', (props) => {
4
+ const theme = useTheme();
5
+ const { leading = [], trailing = [], separator, ...rest } = props;
6
+ const sep = separator ?? ` ${theme.glyphs.separator} `;
7
+ const segment = (item) => h('box', { key: item.id, direction: 'row', gap: item.icon ? 1 : 0 }, item.icon ? h('text', { content: item.icon, fg: item.tone ? TONE[item.tone] : undefined }) : null, h('text', { content: item.label, fg: item.tone ? TONE[item.tone] : 'muted' }));
8
+ const join = (items) => items.flatMap((item, i) => i === items.length - 1
9
+ ? [segment(item)]
10
+ : [segment(item), h('text', { key: `${item.id}-s`, content: sep, fg: 'subtle' })]);
11
+ return h('box', { role: 'contentinfo', direction: 'row', height: 1, ...rest }, ...join(leading), h('spacer', { flex: 1 }), ...join(trailing));
12
+ });
@@ -0,0 +1,20 @@
1
+ import type { BoxProps } from '@textui/core';
2
+ export interface TabItem {
3
+ id: string;
4
+ label: string;
5
+ icon?: string;
6
+ badge?: string | number;
7
+ disabled?: boolean;
8
+ }
9
+ export interface TabsProps extends BoxProps {
10
+ items: TabItem[];
11
+ activeId?: string;
12
+ onChange?(id: string): void;
13
+ /** Underline the active tab instead of inverting it. */
14
+ variant?: 'underline' | 'solid' | 'plain';
15
+ separator?: string;
16
+ /** Take focus on mount, so the keyboard has somewhere to be. */
17
+ autoFocus?: boolean;
18
+ }
19
+ export declare const Tabs: (props: TabsProps) => import("@textui/core").RenderOutput;
20
+ //# sourceMappingURL=tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../src/navigation/tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7C,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAU,SAAQ,QAAQ;IACzC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wDAAwD;IACxD,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,IAAI,2DAiDf,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { defineComponent, h, useFocus, useInput } from '@textui/core';
2
+ export const Tabs = defineComponent('Tabs', (props) => {
3
+ const { items, activeId, onChange, variant = 'underline', separator, autoFocus, ...rest } = props;
4
+ const focus = useFocus({ autoFocus });
5
+ const index = Math.max(0, items.findIndex((t) => t.id === activeId));
6
+ useInput((event) => {
7
+ const step = event.name === 'right' ? 1 : event.name === 'left' ? -1 : 0;
8
+ if (step === 0)
9
+ return false;
10
+ const next = items[(index + step + items.length) % items.length];
11
+ if (next && !next.disabled)
12
+ onChange?.(next.id);
13
+ return true;
14
+ }, { focusId: focus.id });
15
+ const gap = separator ? 0 : 1;
16
+ return h('box', { id: focus.id, role: 'tablist', direction: 'row', gap, ...rest }, ...items.flatMap((item, i) => {
17
+ const active = item.id === activeId;
18
+ const tab = h('box', {
19
+ key: item.id,
20
+ role: 'tab',
21
+ label: item.label,
22
+ selected: active,
23
+ direction: 'row',
24
+ gap: 1,
25
+ padding: variant === 'solid' ? [0, 1] : 0,
26
+ bg: variant === 'solid' && active ? 'selected' : undefined,
27
+ fg: item.disabled ? 'disabled' : active ? (variant === 'solid' ? 'inverted' : 'accent') : 'muted',
28
+ bold: active,
29
+ underline: variant === 'underline' && active,
30
+ onClick: () => { if (!item.disabled)
31
+ onChange?.(item.id); },
32
+ }, item.icon ? h('text', { content: item.icon }) : null, h('text', { content: item.label }), item.badge !== undefined
33
+ // No colour of its own on the active tab: `muted` against the
34
+ // selected background is the one pairing that never reads.
35
+ ? h('text', { content: String(item.badge), fg: active ? undefined : 'muted' })
36
+ : null);
37
+ return separator && i < items.length - 1
38
+ ? [tab, h('text', { key: `${item.id}-sep`, content: separator, fg: 'borderSubtle' })]
39
+ : [tab];
40
+ }));
41
+ });
@@ -0,0 +1,14 @@
1
+ import type { BoxProps, SemanticVariant } from '@textui/core';
2
+ export interface ToolbarProps extends BoxProps {
3
+ items: {
4
+ id: string;
5
+ label: string;
6
+ icon?: string;
7
+ shortcut?: string;
8
+ disabled?: boolean;
9
+ tone?: SemanticVariant;
10
+ }[];
11
+ onSelect?(id: string): void;
12
+ }
13
+ export declare const Toolbar: (props: ToolbarProps) => import("@textui/core").RenderOutput;
14
+ //# sourceMappingURL=toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/navigation/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI9D,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,eAAe,CAAA;KAAE,EAAE,CAAC;IACrH,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,eAAO,MAAM,OAAO,8DAenB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { defineComponent, h } from '@textui/core';
2
+ import { TONE } from '../tone.js';
3
+ export const Toolbar = defineComponent('Toolbar', ({ items, onSelect, ...rest }) => h('box', { role: 'toolbar', direction: 'row', gap: 2, ...rest }, ...items.map((item) => h('box', {
4
+ key: item.id,
5
+ direction: 'row',
6
+ gap: 1,
7
+ fg: item.disabled ? 'disabled' : item.tone ? TONE[item.tone] : undefined,
8
+ onClick: () => { if (!item.disabled)
9
+ onSelect?.(item.id); },
10
+ }, item.shortcut ? h('text', { content: item.shortcut, fg: 'accent', bold: true }) : null, item.icon ? h('text', { content: item.icon }) : null, h('text', { content: item.label, fg: 'muted' })))));
@@ -0,0 +1,15 @@
1
+ import type { BoxProps } from '@textui/core';
2
+ export interface WizardStep {
3
+ id: string;
4
+ label: string;
5
+ description?: string;
6
+ }
7
+ export interface WizardProps extends BoxProps {
8
+ steps: WizardStep[];
9
+ activeId: string;
10
+ /** Steps already completed. */
11
+ completedIds?: string[];
12
+ orientation?: 'horizontal' | 'vertical';
13
+ }
14
+ export declare const Wizard: (props: WizardProps) => import("@textui/core").RenderOutput;
15
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../src/navigation/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AAGzD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACzC;AAED,eAAO,MAAM,MAAM,6DAyBjB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { defineComponent, h, useTheme } from '@textui/core';
2
+ export const Wizard = defineComponent('Wizard', (props) => {
3
+ const theme = useTheme();
4
+ const { steps, activeId, completedIds = [], orientation = 'horizontal', ...rest } = props;
5
+ const activeIndex = steps.findIndex((s) => s.id === activeId);
6
+ return h('box', { direction: orientation === 'horizontal' ? 'row' : 'column', gap: orientation === 'horizontal' ? 2 : 0, ...rest }, ...steps.map((step, i) => {
7
+ const done = completedIds.includes(step.id);
8
+ const active = step.id === activeId;
9
+ const glyph = done ? theme.glyphs.check : active ? theme.glyphs.bulletFilled : theme.glyphs.bulletHollow;
10
+ const tone = done ? 'success' : active ? 'accent' : 'subtle';
11
+ return h('box', { key: step.id, direction: 'row', gap: 1 }, h('text', { content: glyph, fg: tone }), h('box', { direction: 'column' }, h('text', { content: `${i + 1}. ${step.label}`, bold: active, fg: active ? 'text' : 'muted' }), step.description && active
12
+ ? h('text', { content: step.description, fg: 'subtle' })
13
+ : null), orientation === 'horizontal' && i < steps.length - 1
14
+ ? h('text', { content: theme.glyphs.chevronRight, fg: i < activeIndex ? 'success' : 'subtle' })
15
+ : null);
16
+ }));
17
+ });
@@ -0,0 +1,63 @@
1
+ import type { ArgSpec, BoxProps, CommandDefinition } from '@textui/core';
2
+ export interface CommandPaletteProps extends BoxProps {
3
+ /**
4
+ * Rows to search. Defaults to every enabled command in the `palette` slot.
5
+ *
6
+ * A function is re-read every render, which is what a list of switches
7
+ * needs: after one is flipped the row has to show its new state, and a
8
+ * snapshot taken when the palette opened cannot.
9
+ */
10
+ commands?: CommandDefinition[] | (() => CommandDefinition[]);
11
+ placeholder?: string;
12
+ /** Notified after a command runs. The palette runs it itself. */
13
+ onRun?(id: string, args?: Record<string, unknown>): void;
14
+ onClose?(): void;
15
+ /** Off makes this a picker: it reports the choice and runs nothing. */
16
+ execute?: boolean;
17
+ /** Group the list by `category`, with a rule between groups. */
18
+ grouped?: boolean;
19
+ visibleRows?: number;
20
+ width?: number;
21
+ /**
22
+ * Open already drilled into this command's choices.
23
+ *
24
+ * For a caller that has decided *which* question is being asked and only
25
+ * wants the palette to ask it - a menu item for "Theme" should offer the
26
+ * themes, not the whole command list with "Theme" typed into the search box.
27
+ */
28
+ openAt?: string;
29
+ }
30
+ /**
31
+ * The command palette.
32
+ *
33
+ * It searches the command registry rather than a list someone maintained, so
34
+ * a command registered anywhere is reachable here the moment it exists - which
35
+ * is the payoff for insisting actions are commands. It also *runs* what it
36
+ * finds, so choosing "Open dialog" here and pressing the button that opens a
37
+ * dialog are the same act, reaching the same code.
38
+ *
39
+ * A command that declares an argument with `choices` gets a second level:
40
+ * choosing it lists the choices, and picking one runs the command with it.
41
+ * That is where sub-items come from - the command says what it needs and the
42
+ * palette asks, rather than every caller inventing its own submenu.
43
+ */
44
+ export declare const CommandPalette: (props: CommandPaletteProps) => import("@textui/core").RenderOutput;
45
+ /**
46
+ * The argument the palette should ask about, if there is one.
47
+ *
48
+ * A fixed set of choices, or something required that nothing has supplied.
49
+ * Only the first kind used to count, which meant a command declaring "I need a
50
+ * title" ran with no title and did nothing - the one failure mode that looks
51
+ * exactly like a broken key.
52
+ *
53
+ * Exported because "will this command ask something?" is a question other
54
+ * chrome has to answer too - a menu row wants a chevron and wants to hand off
55
+ * rather than run - and the menu bar had written its own version that
56
+ * *called* the `choices` function to find out. A function is allowed to be
57
+ * async, so that answer was sometimes a promise, and the copy went on to call
58
+ * `.map` on it. Whether a command will ask is a property of its declaration;
59
+ * nothing has to be resolved to know it.
60
+ */
61
+ export declare function argumentOf(command: CommandDefinition, collected?: Record<string, unknown>): ArgSpec | undefined;
62
+ export declare function filterCommands(commands: CommandDefinition[], query: string): CommandDefinition[];
63
+ //# sourceMappingURL=command-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../src/overlay/command-palette.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAa,MAAM,cAAc,CAAC;AAgB/F,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,iBAAiB,EAAE,CAAC,CAAC;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,KAAK,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,cAAc,qEA0VzB,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,iBAAiB,EAC1B,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACtC,OAAO,GAAG,SAAS,CAKrB;AAqBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAehG"}