@flyingrobots/bijou-tui 7.0.0 → 7.2.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 (569) hide show
  1. package/README.md +27 -4
  2. package/dist/accordion.d.ts +3 -108
  3. package/dist/accordion.d.ts.map +1 -1
  4. package/dist/accordion.js +2 -161
  5. package/dist/accordion.js.map +1 -1
  6. package/dist/accordion.part01.d.ts +25 -0
  7. package/dist/accordion.part01.d.ts.map +1 -0
  8. package/dist/accordion.part01.js +61 -0
  9. package/dist/accordion.part01.js.map +1 -0
  10. package/dist/accordion.part02.d.ts +8 -0
  11. package/dist/accordion.part02.d.ts.map +1 -0
  12. package/dist/accordion.part02.js +15 -0
  13. package/dist/accordion.part02.js.map +1 -0
  14. package/dist/animate.d.ts.map +1 -1
  15. package/dist/animate.js +5 -6
  16. package/dist/animate.js.map +1 -1
  17. package/dist/app-frame-actions.d.ts +1 -18
  18. package/dist/app-frame-actions.d.ts.map +1 -1
  19. package/dist/app-frame-actions.js +47 -43
  20. package/dist/app-frame-actions.js.map +1 -1
  21. package/dist/app-frame-i18n.d.ts.map +1 -1
  22. package/dist/app-frame-i18n.js +20 -3
  23. package/dist/app-frame-i18n.js.map +1 -1
  24. package/dist/app-frame-overlays.d.ts +9 -1
  25. package/dist/app-frame-overlays.d.ts.map +1 -1
  26. package/dist/app-frame-overlays.js +117 -25
  27. package/dist/app-frame-overlays.js.map +1 -1
  28. package/dist/app-frame-palette.d.ts +1 -11
  29. package/dist/app-frame-palette.d.ts.map +1 -1
  30. package/dist/app-frame-palette.js +19 -18
  31. package/dist/app-frame-palette.js.map +1 -1
  32. package/dist/app-frame-render.d.ts +0 -7
  33. package/dist/app-frame-render.d.ts.map +1 -1
  34. package/dist/app-frame-render.js +17 -26
  35. package/dist/app-frame-render.js.map +1 -1
  36. package/dist/app-frame-types.d.ts +8 -4
  37. package/dist/app-frame-types.d.ts.map +1 -1
  38. package/dist/app-frame-types.js +5 -5
  39. package/dist/app-frame-types.js.map +1 -1
  40. package/dist/app-frame-utils.d.ts +2 -1
  41. package/dist/app-frame-utils.d.ts.map +1 -1
  42. package/dist/app-frame-utils.js +8 -1
  43. package/dist/app-frame-utils.js.map +1 -1
  44. package/dist/app-frame.d.ts +75 -4
  45. package/dist/app-frame.d.ts.map +1 -1
  46. package/dist/app-frame.js +346 -272
  47. package/dist/app-frame.js.map +1 -1
  48. package/dist/app-frame.test-support.part01.d.ts +149 -0
  49. package/dist/app-frame.test-support.part01.d.ts.map +1 -0
  50. package/dist/app-frame.test-support.part01.js +106 -0
  51. package/dist/app-frame.test-support.part01.js.map +1 -0
  52. package/dist/app-frame.test-support.part02.d.ts +15 -0
  53. package/dist/app-frame.test-support.part02.d.ts.map +1 -0
  54. package/dist/app-frame.test-support.part02.js +89 -0
  55. package/dist/app-frame.test-support.part02.js.map +1 -0
  56. package/dist/browsable-list.d.ts +5 -5
  57. package/dist/browsable-list.d.ts.map +1 -1
  58. package/dist/browsable-list.js.map +1 -1
  59. package/dist/canvas.d.ts +2 -34
  60. package/dist/canvas.d.ts.map +1 -1
  61. package/dist/canvas.js +43 -47
  62. package/dist/canvas.js.map +1 -1
  63. package/dist/cell-glyph-fit.js +1 -1
  64. package/dist/cell-glyph-fit.js.map +1 -1
  65. package/dist/collection-surface-types.d.ts +12 -0
  66. package/dist/collection-surface-types.d.ts.map +1 -0
  67. package/dist/collection-surface-types.js +2 -0
  68. package/dist/collection-surface-types.js.map +1 -0
  69. package/dist/collection-surface.d.ts +2 -7
  70. package/dist/collection-surface.d.ts.map +1 -1
  71. package/dist/collection-surface.js +8 -18
  72. package/dist/collection-surface.js.map +1 -1
  73. package/dist/command-palette.d.ts.map +1 -1
  74. package/dist/command-palette.js +2 -1
  75. package/dist/command-palette.js.map +1 -1
  76. package/dist/commands.d.ts.map +1 -1
  77. package/dist/commands.js +1 -1
  78. package/dist/commands.js.map +1 -1
  79. package/dist/css/install.js.map +1 -1
  80. package/dist/css/parser.js +9 -3
  81. package/dist/css/parser.js.map +1 -1
  82. package/dist/css/resolver-types.d.ts +13 -0
  83. package/dist/css/resolver-types.d.ts.map +1 -0
  84. package/dist/css/resolver-types.js +2 -0
  85. package/dist/css/resolver-types.js.map +1 -0
  86. package/dist/css/resolver.d.ts +2 -12
  87. package/dist/css/resolver.d.ts.map +1 -1
  88. package/dist/css/resolver.js +13 -20
  89. package/dist/css/resolver.js.map +1 -1
  90. package/dist/css/text-style.d.ts +4 -8
  91. package/dist/css/text-style.d.ts.map +1 -1
  92. package/dist/css/text-style.js +13 -18
  93. package/dist/css/text-style.js.map +1 -1
  94. package/dist/dag-pane.d.ts +4 -224
  95. package/dist/dag-pane.d.ts.map +1 -1
  96. package/dist/dag-pane.js +3 -516
  97. package/dist/dag-pane.js.map +1 -1
  98. package/dist/dag-pane.part01.d.ts +58 -0
  99. package/dist/dag-pane.part01.d.ts.map +1 -0
  100. package/dist/dag-pane.part01.js +2 -0
  101. package/dist/dag-pane.part01.js.map +1 -0
  102. package/dist/dag-pane.part02.d.ts +4 -0
  103. package/dist/dag-pane.part02.d.ts.map +1 -0
  104. package/dist/dag-pane.part02.js +56 -0
  105. package/dist/dag-pane.part02.js.map +1 -0
  106. package/dist/dag-pane.part03.d.ts +6 -0
  107. package/dist/dag-pane.part03.d.ts.map +1 -0
  108. package/dist/dag-pane.part03.js +76 -0
  109. package/dist/dag-pane.part03.js.map +1 -0
  110. package/dist/dag-pane.part04.d.ts +7 -0
  111. package/dist/dag-pane.part04.d.ts.map +1 -0
  112. package/dist/dag-pane.part04.js +66 -0
  113. package/dist/dag-pane.part04.js.map +1 -0
  114. package/dist/dag-pane.part05.d.ts +7 -0
  115. package/dist/dag-pane.part05.d.ts.map +1 -0
  116. package/dist/dag-pane.part05.js +78 -0
  117. package/dist/dag-pane.part05.js.map +1 -0
  118. package/dist/dag-pane.part06.d.ts +14 -0
  119. package/dist/dag-pane.part06.d.ts.map +1 -0
  120. package/dist/dag-pane.part06.js +65 -0
  121. package/dist/dag-pane.part06.js.map +1 -0
  122. package/dist/dag-pane.part07.d.ts +18 -0
  123. package/dist/dag-pane.part07.d.ts.map +1 -0
  124. package/dist/dag-pane.part07.js +22 -0
  125. package/dist/dag-pane.part07.js.map +1 -0
  126. package/dist/driver.d.ts +35 -21
  127. package/dist/driver.d.ts.map +1 -1
  128. package/dist/driver.js +69 -39
  129. package/dist/driver.js.map +1 -1
  130. package/dist/eventbus.d.ts.map +1 -1
  131. package/dist/eventbus.js +13 -23
  132. package/dist/eventbus.js.map +1 -1
  133. package/dist/file-picker.d.ts +4 -160
  134. package/dist/file-picker.d.ts.map +1 -1
  135. package/dist/file-picker.js +3 -284
  136. package/dist/file-picker.js.map +1 -1
  137. package/dist/file-picker.part01.d.ts +54 -0
  138. package/dist/file-picker.part01.d.ts.map +1 -0
  139. package/dist/file-picker.part01.js +47 -0
  140. package/dist/file-picker.part01.js.map +1 -0
  141. package/dist/file-picker.part02.d.ts +9 -0
  142. package/dist/file-picker.part02.d.ts.map +1 -0
  143. package/dist/file-picker.part02.js +77 -0
  144. package/dist/file-picker.part02.js.map +1 -0
  145. package/dist/file-picker.part03.d.ts +12 -0
  146. package/dist/file-picker.part03.d.ts.map +1 -0
  147. package/dist/file-picker.part03.js +35 -0
  148. package/dist/file-picker.part03.js.map +1 -0
  149. package/dist/flex.d.ts +0 -61
  150. package/dist/flex.d.ts.map +1 -1
  151. package/dist/flex.js +11 -161
  152. package/dist/flex.js.map +1 -1
  153. package/dist/focus-area.d.ts +6 -210
  154. package/dist/focus-area.d.ts.map +1 -1
  155. package/dist/focus-area.js +5 -425
  156. package/dist/focus-area.js.map +1 -1
  157. package/dist/focus-area.part01.d.ts +57 -0
  158. package/dist/focus-area.part01.d.ts.map +1 -0
  159. package/dist/focus-area.part01.js +23 -0
  160. package/dist/focus-area.part01.js.map +1 -0
  161. package/dist/focus-area.part02.d.ts +13 -0
  162. package/dist/focus-area.part02.d.ts.map +1 -0
  163. package/dist/focus-area.part02.js +65 -0
  164. package/dist/focus-area.part02.js.map +1 -0
  165. package/dist/focus-area.part03.d.ts +5 -0
  166. package/dist/focus-area.part03.d.ts.map +1 -0
  167. package/dist/focus-area.part03.js +42 -0
  168. package/dist/focus-area.part03.js.map +1 -0
  169. package/dist/focus-area.part04.d.ts +5 -0
  170. package/dist/focus-area.part04.d.ts.map +1 -0
  171. package/dist/focus-area.part04.js +49 -0
  172. package/dist/focus-area.part04.js.map +1 -0
  173. package/dist/focus-area.part05.d.ts +10 -0
  174. package/dist/focus-area.part05.d.ts.map +1 -0
  175. package/dist/focus-area.part05.js +66 -0
  176. package/dist/focus-area.part05.js.map +1 -0
  177. package/dist/focus-area.part06.d.ts +17 -0
  178. package/dist/focus-area.part06.d.ts.map +1 -0
  179. package/dist/focus-area.part06.js +48 -0
  180. package/dist/focus-area.part06.js.map +1 -0
  181. package/dist/focus-map.d.ts.map +1 -1
  182. package/dist/focus-map.js +8 -10
  183. package/dist/focus-map.js.map +1 -1
  184. package/dist/index.d.ts +8 -79
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +8 -105
  187. package/dist/index.js.map +1 -1
  188. package/dist/index.part01.d.ts +15 -0
  189. package/dist/index.part01.d.ts.map +1 -0
  190. package/dist/index.part01.js +11 -0
  191. package/dist/index.part01.js.map +1 -0
  192. package/dist/index.part02.d.ts +26 -0
  193. package/dist/index.part02.d.ts.map +1 -0
  194. package/dist/index.part02.js +24 -0
  195. package/dist/index.part02.js.map +1 -0
  196. package/dist/index.part03.d.ts +17 -0
  197. package/dist/index.part03.d.ts.map +1 -0
  198. package/dist/index.part03.js +11 -0
  199. package/dist/index.part03.js.map +1 -0
  200. package/dist/index.part04.d.ts +6 -0
  201. package/dist/index.part04.d.ts.map +1 -0
  202. package/dist/index.part04.js +11 -0
  203. package/dist/index.part04.js.map +1 -0
  204. package/dist/index.part05.d.ts +10 -0
  205. package/dist/index.part05.d.ts.map +1 -0
  206. package/dist/index.part05.js +26 -0
  207. package/dist/index.part05.js.map +1 -0
  208. package/dist/index.part06.d.ts +9 -0
  209. package/dist/index.part06.d.ts.map +1 -0
  210. package/dist/index.part06.js +16 -0
  211. package/dist/index.part06.js.map +1 -0
  212. package/dist/index.part07.d.ts +8 -0
  213. package/dist/index.part07.d.ts.map +1 -0
  214. package/dist/index.part07.js +15 -0
  215. package/dist/index.part07.js.map +1 -0
  216. package/dist/index.part08.d.ts +5 -0
  217. package/dist/index.part08.d.ts.map +1 -0
  218. package/dist/index.part08.js +9 -0
  219. package/dist/index.part08.js.map +1 -0
  220. package/dist/input-map.d.ts.map +1 -1
  221. package/dist/input-map.js +1 -2
  222. package/dist/input-map.js.map +1 -1
  223. package/dist/input-parser.d.ts +3 -0
  224. package/dist/input-parser.d.ts.map +1 -0
  225. package/dist/input-parser.js +95 -0
  226. package/dist/input-parser.js.map +1 -0
  227. package/dist/input-routing-inspector.js +3 -3
  228. package/dist/input-routing-inspector.js.map +1 -1
  229. package/dist/inputstack.d.ts.map +1 -1
  230. package/dist/inputstack.js +2 -0
  231. package/dist/inputstack.js.map +1 -1
  232. package/dist/keybindings.d.ts.map +1 -1
  233. package/dist/keybindings.js +5 -2
  234. package/dist/keybindings.js.map +1 -1
  235. package/dist/keys.d.ts +0 -36
  236. package/dist/keys.d.ts.map +1 -1
  237. package/dist/keys.js +11 -66
  238. package/dist/keys.js.map +1 -1
  239. package/dist/layout-inspector.d.ts +2 -30
  240. package/dist/layout-inspector.d.ts.map +1 -1
  241. package/dist/layout-inspector.js +1 -132
  242. package/dist/layout-inspector.js.map +1 -1
  243. package/dist/layout-inspector.part01.d.ts +52 -0
  244. package/dist/layout-inspector.part01.d.ts.map +1 -0
  245. package/dist/layout-inspector.part01.js +48 -0
  246. package/dist/layout-inspector.part01.js.map +1 -0
  247. package/dist/layout-inspector.part02.d.ts +11 -0
  248. package/dist/layout-inspector.part02.d.ts.map +1 -0
  249. package/dist/layout-inspector.part02.js +80 -0
  250. package/dist/layout-inspector.part02.js.map +1 -0
  251. package/dist/layout-inspector.part03.d.ts +5 -0
  252. package/dist/layout-inspector.part03.d.ts.map +1 -0
  253. package/dist/layout-inspector.part03.js +11 -0
  254. package/dist/layout-inspector.part03.js.map +1 -0
  255. package/dist/layout-preset.js +4 -4
  256. package/dist/layout-preset.js.map +1 -1
  257. package/dist/layout.d.ts.map +1 -1
  258. package/dist/layout.js +5 -3
  259. package/dist/layout.js.map +1 -1
  260. package/dist/motion/motion.js +8 -4
  261. package/dist/motion/motion.js.map +1 -1
  262. package/dist/motion/reconciler.d.ts.map +1 -1
  263. package/dist/motion/reconciler.js +9 -7
  264. package/dist/motion/reconciler.js.map +1 -1
  265. package/dist/mouse-mode.d.ts +5 -0
  266. package/dist/mouse-mode.d.ts.map +1 -0
  267. package/dist/mouse-mode.js +17 -0
  268. package/dist/mouse-mode.js.map +1 -0
  269. package/dist/navigable-table.d.ts +3 -136
  270. package/dist/navigable-table.d.ts.map +1 -1
  271. package/dist/navigable-table.js +2 -234
  272. package/dist/navigable-table.js.map +1 -1
  273. package/dist/navigable-table.part01.d.ts +42 -0
  274. package/dist/navigable-table.part01.d.ts.map +1 -0
  275. package/dist/navigable-table.part01.js +42 -0
  276. package/dist/navigable-table.part01.js.map +1 -0
  277. package/dist/navigable-table.part02.d.ts +16 -0
  278. package/dist/navigable-table.part02.d.ts.map +1 -0
  279. package/dist/navigable-table.part02.js +83 -0
  280. package/dist/navigable-table.part02.js.map +1 -0
  281. package/dist/notification-card.d.ts +11 -0
  282. package/dist/notification-card.d.ts.map +1 -0
  283. package/dist/notification-card.js +157 -0
  284. package/dist/notification-card.js.map +1 -0
  285. package/dist/notification-stack.d.ts +6 -0
  286. package/dist/notification-stack.d.ts.map +1 -0
  287. package/dist/notification-stack.js +257 -0
  288. package/dist/notification-stack.js.map +1 -0
  289. package/dist/notification.d.ts +14 -112
  290. package/dist/notification.d.ts.map +1 -1
  291. package/dist/notification.js +12 -1087
  292. package/dist/notification.js.map +1 -1
  293. package/dist/notification.part01.d.ts +77 -0
  294. package/dist/notification.part01.d.ts.map +1 -0
  295. package/dist/notification.part01.js +19 -0
  296. package/dist/notification.part01.js.map +1 -0
  297. package/dist/notification.part02.d.ts +42 -0
  298. package/dist/notification.part02.d.ts.map +1 -0
  299. package/dist/notification.part02.js +44 -0
  300. package/dist/notification.part02.js.map +1 -0
  301. package/dist/notification.part03.d.ts +6 -0
  302. package/dist/notification.part03.d.ts.map +1 -0
  303. package/dist/notification.part03.js +81 -0
  304. package/dist/notification.part03.js.map +1 -0
  305. package/dist/notification.part04.d.ts +4 -0
  306. package/dist/notification.part04.d.ts.map +1 -0
  307. package/dist/notification.part04.js +32 -0
  308. package/dist/notification.part04.js.map +1 -0
  309. package/dist/notification.part05.d.ts +6 -0
  310. package/dist/notification.part05.d.ts.map +1 -0
  311. package/dist/notification.part05.js +95 -0
  312. package/dist/notification.part05.js.map +1 -0
  313. package/dist/notification.part06.d.ts +9 -0
  314. package/dist/notification.part06.d.ts.map +1 -0
  315. package/dist/notification.part06.js +65 -0
  316. package/dist/notification.part06.js.map +1 -0
  317. package/dist/notification.part07.d.ts +10 -0
  318. package/dist/notification.part07.d.ts.map +1 -0
  319. package/dist/notification.part07.js +70 -0
  320. package/dist/notification.part07.js.map +1 -0
  321. package/dist/notification.part08.d.ts +5 -0
  322. package/dist/notification.part08.d.ts.map +1 -0
  323. package/dist/notification.part08.js +79 -0
  324. package/dist/notification.part08.js.map +1 -0
  325. package/dist/notification.part09.d.ts +14 -0
  326. package/dist/notification.part09.d.ts.map +1 -0
  327. package/dist/notification.part09.js +96 -0
  328. package/dist/notification.part09.js.map +1 -0
  329. package/dist/notification.part10.d.ts +13 -0
  330. package/dist/notification.part10.d.ts.map +1 -0
  331. package/dist/notification.part10.js +94 -0
  332. package/dist/notification.part10.js.map +1 -0
  333. package/dist/notification.part11.d.ts +6 -0
  334. package/dist/notification.part11.d.ts.map +1 -0
  335. package/dist/notification.part11.js +42 -0
  336. package/dist/notification.part11.js.map +1 -0
  337. package/dist/overlay.d.ts +8 -232
  338. package/dist/overlay.d.ts.map +1 -1
  339. package/dist/overlay.js +5 -629
  340. package/dist/overlay.js.map +1 -1
  341. package/dist/overlay.part01.d.ts +71 -0
  342. package/dist/overlay.part01.d.ts.map +1 -0
  343. package/dist/overlay.part01.js +34 -0
  344. package/dist/overlay.part01.js.map +1 -0
  345. package/dist/overlay.part02.d.ts +8 -0
  346. package/dist/overlay.part02.d.ts.map +1 -0
  347. package/dist/overlay.part02.js +81 -0
  348. package/dist/overlay.part02.js.map +1 -0
  349. package/dist/overlay.part03.d.ts +27 -0
  350. package/dist/overlay.part03.d.ts.map +1 -0
  351. package/dist/overlay.part03.js +83 -0
  352. package/dist/overlay.part03.js.map +1 -0
  353. package/dist/overlay.part04.d.ts +8 -0
  354. package/dist/overlay.part04.d.ts.map +1 -0
  355. package/dist/overlay.part04.js +103 -0
  356. package/dist/overlay.part04.js.map +1 -0
  357. package/dist/overlay.part05.d.ts +8 -0
  358. package/dist/overlay.part05.d.ts.map +1 -0
  359. package/dist/overlay.part05.js +66 -0
  360. package/dist/overlay.part05.js.map +1 -0
  361. package/dist/overlay.part06.d.ts +46 -0
  362. package/dist/overlay.part06.d.ts.map +1 -0
  363. package/dist/overlay.part06.js +35 -0
  364. package/dist/overlay.part06.js.map +1 -0
  365. package/dist/overlay.part07.d.ts +4 -0
  366. package/dist/overlay.part07.d.ts.map +1 -0
  367. package/dist/overlay.part07.js +64 -0
  368. package/dist/overlay.part07.js.map +1 -0
  369. package/dist/overlay.part08.d.ts +34 -0
  370. package/dist/overlay.part08.d.ts.map +1 -0
  371. package/dist/overlay.part08.js +54 -0
  372. package/dist/overlay.part08.js.map +1 -0
  373. package/dist/overlay.part09.d.ts +6 -0
  374. package/dist/overlay.part09.d.ts.map +1 -0
  375. package/dist/overlay.part09.js +42 -0
  376. package/dist/overlay.part09.js.map +1 -0
  377. package/dist/pager.d.ts.map +1 -1
  378. package/dist/pager.js +2 -4
  379. package/dist/pager.js.map +1 -1
  380. package/dist/panel-dock.d.ts.map +1 -1
  381. package/dist/panel-dock.js +9 -11
  382. package/dist/panel-dock.js.map +1 -1
  383. package/dist/panels.d.ts.map +1 -1
  384. package/dist/panels.js +2 -0
  385. package/dist/panels.js.map +1 -1
  386. package/dist/pipeline/middleware/css.d.ts +3 -5
  387. package/dist/pipeline/middleware/css.d.ts.map +1 -1
  388. package/dist/pipeline/middleware/css.js +12 -6
  389. package/dist/pipeline/middleware/css.js.map +1 -1
  390. package/dist/pipeline/middleware/grayscale.js +15 -10
  391. package/dist/pipeline/middleware/grayscale.js.map +1 -1
  392. package/dist/pipeline/middleware/motion.js +9 -1
  393. package/dist/pipeline/middleware/motion.js.map +1 -1
  394. package/dist/pipeline/middleware/paint.js +9 -1
  395. package/dist/pipeline/middleware/paint.js.map +1 -1
  396. package/dist/pipeline/middleware/surface-shaders.js +13 -11
  397. package/dist/pipeline/middleware/surface-shaders.js.map +1 -1
  398. package/dist/pipeline/pipeline.d.ts +7 -52
  399. package/dist/pipeline/pipeline.d.ts.map +1 -1
  400. package/dist/pipeline/pipeline.js +37 -27
  401. package/dist/pipeline/pipeline.js.map +1 -1
  402. package/dist/raster-glyph.d.ts +3 -0
  403. package/dist/raster-glyph.d.ts.map +1 -0
  404. package/dist/raster-glyph.js +2 -0
  405. package/dist/raster-glyph.js.map +1 -0
  406. package/dist/raster-glyph.part01.d.ts +75 -0
  407. package/dist/raster-glyph.part01.d.ts.map +1 -0
  408. package/dist/raster-glyph.part01.js +25 -0
  409. package/dist/raster-glyph.part01.js.map +1 -0
  410. package/dist/raster-glyph.part02.d.ts +12 -0
  411. package/dist/raster-glyph.part02.d.ts.map +1 -0
  412. package/dist/raster-glyph.part02.js +81 -0
  413. package/dist/raster-glyph.part02.js.map +1 -0
  414. package/dist/raster-glyph.part03.d.ts +6 -0
  415. package/dist/raster-glyph.part03.d.ts.map +1 -0
  416. package/dist/raster-glyph.part03.js +60 -0
  417. package/dist/raster-glyph.part03.js.map +1 -0
  418. package/dist/raster-glyph.part04.d.ts +7 -0
  419. package/dist/raster-glyph.part04.d.ts.map +1 -0
  420. package/dist/raster-glyph.part04.js +59 -0
  421. package/dist/raster-glyph.part04.js.map +1 -0
  422. package/dist/raster-glyph.part05.d.ts +6 -0
  423. package/dist/raster-glyph.part05.d.ts.map +1 -0
  424. package/dist/raster-glyph.part05.js +71 -0
  425. package/dist/raster-glyph.part05.js.map +1 -0
  426. package/dist/raster-glyph.part06.d.ts +18 -0
  427. package/dist/raster-glyph.part06.d.ts.map +1 -0
  428. package/dist/raster-glyph.part06.js +78 -0
  429. package/dist/raster-glyph.part06.js.map +1 -0
  430. package/dist/raster-glyph.part07.d.ts +11 -0
  431. package/dist/raster-glyph.part07.d.ts.map +1 -0
  432. package/dist/raster-glyph.part07.js +55 -0
  433. package/dist/raster-glyph.part07.js.map +1 -0
  434. package/dist/raytrace.d.ts +3 -58
  435. package/dist/raytrace.d.ts.map +1 -1
  436. package/dist/raytrace.js +2 -120
  437. package/dist/raytrace.js.map +1 -1
  438. package/dist/raytrace.part01.d.ts +47 -0
  439. package/dist/raytrace.part01.d.ts.map +1 -0
  440. package/dist/raytrace.part01.js +45 -0
  441. package/dist/raytrace.part01.js.map +1 -0
  442. package/dist/raytrace.part02.d.ts +12 -0
  443. package/dist/raytrace.part02.d.ts.map +1 -0
  444. package/dist/raytrace.part02.js +73 -0
  445. package/dist/raytrace.part02.js.map +1 -0
  446. package/dist/runtime-binding.d.ts +2 -3
  447. package/dist/runtime-binding.d.ts.map +1 -1
  448. package/dist/runtime-binding.js +49 -38
  449. package/dist/runtime-binding.js.map +1 -1
  450. package/dist/runtime-engine.d.ts +2 -2
  451. package/dist/runtime-engine.d.ts.map +1 -1
  452. package/dist/runtime-engine.js +15 -4
  453. package/dist/runtime-engine.js.map +1 -1
  454. package/dist/runtime.d.ts +2 -18
  455. package/dist/runtime.d.ts.map +1 -1
  456. package/dist/runtime.js +43 -62
  457. package/dist/runtime.js.map +1 -1
  458. package/dist/screen.js +1 -1
  459. package/dist/screen.js.map +1 -1
  460. package/dist/shell-quit.d.ts.map +1 -1
  461. package/dist/shell-quit.js +49 -6
  462. package/dist/shell-quit.js.map +1 -1
  463. package/dist/split-pane.d.ts +3 -104
  464. package/dist/split-pane.d.ts.map +1 -1
  465. package/dist/split-pane.js +2 -190
  466. package/dist/split-pane.js.map +1 -1
  467. package/dist/split-pane.part01.d.ts +60 -0
  468. package/dist/split-pane.part01.d.ts.map +1 -0
  469. package/dist/split-pane.part01.js +45 -0
  470. package/dist/split-pane.part01.js.map +1 -0
  471. package/dist/split-pane.part02.d.ts +8 -0
  472. package/dist/split-pane.part02.d.ts.map +1 -0
  473. package/dist/split-pane.part02.js +73 -0
  474. package/dist/split-pane.part02.js.map +1 -0
  475. package/dist/split-pane.part03.d.ts +4 -0
  476. package/dist/split-pane.part03.d.ts.map +1 -0
  477. package/dist/split-pane.part03.js +40 -0
  478. package/dist/split-pane.part03.js.map +1 -0
  479. package/dist/spring.d.ts +4 -187
  480. package/dist/spring.d.ts.map +1 -1
  481. package/dist/spring.js +2 -142
  482. package/dist/spring.js.map +1 -1
  483. package/dist/spring.part01.d.ts +90 -0
  484. package/dist/spring.part01.d.ts.map +1 -0
  485. package/dist/spring.part01.js +58 -0
  486. package/dist/spring.part01.js.map +1 -0
  487. package/dist/spring.part02.d.ts +25 -0
  488. package/dist/spring.part02.d.ts.map +1 -0
  489. package/dist/spring.part02.js +21 -0
  490. package/dist/spring.part02.js.map +1 -0
  491. package/dist/status-bar.js +1 -1
  492. package/dist/status-bar.js.map +1 -1
  493. package/dist/subapp/mount.d.ts +6 -6
  494. package/dist/subapp/mount.d.ts.map +1 -1
  495. package/dist/subapp/mount.js +19 -14
  496. package/dist/subapp/mount.js.map +1 -1
  497. package/dist/surface-budget-types.d.ts +26 -0
  498. package/dist/surface-budget-types.d.ts.map +1 -0
  499. package/dist/surface-budget-types.js +2 -0
  500. package/dist/surface-budget-types.js.map +1 -0
  501. package/dist/surface-budget.d.ts +2 -25
  502. package/dist/surface-budget.d.ts.map +1 -1
  503. package/dist/surface-budget.js.map +1 -1
  504. package/dist/surface-diff.js +26 -28
  505. package/dist/surface-diff.js.map +1 -1
  506. package/dist/surface-layout.d.ts.map +1 -1
  507. package/dist/surface-layout.js +1 -2
  508. package/dist/surface-layout.js.map +1 -1
  509. package/dist/timeline.d.ts +1 -1
  510. package/dist/timeline.d.ts.map +1 -1
  511. package/dist/timeline.js +17 -15
  512. package/dist/timeline.js.map +1 -1
  513. package/dist/transition-shaders.d.ts +5 -142
  514. package/dist/transition-shaders.d.ts.map +1 -1
  515. package/dist/transition-shaders.js +4 -391
  516. package/dist/transition-shaders.js.map +1 -1
  517. package/dist/transition-shaders.part01.d.ts +41 -0
  518. package/dist/transition-shaders.part01.d.ts.map +1 -0
  519. package/dist/transition-shaders.part01.js +38 -0
  520. package/dist/transition-shaders.part01.js.map +1 -0
  521. package/dist/transition-shaders.part02.d.ts +12 -0
  522. package/dist/transition-shaders.part02.d.ts.map +1 -0
  523. package/dist/transition-shaders.part02.js +88 -0
  524. package/dist/transition-shaders.part02.js.map +1 -0
  525. package/dist/transition-shaders.part03.d.ts +6 -0
  526. package/dist/transition-shaders.part03.d.ts.map +1 -0
  527. package/dist/transition-shaders.part03.js +82 -0
  528. package/dist/transition-shaders.part03.js.map +1 -0
  529. package/dist/transition-shaders.part04.d.ts +16 -0
  530. package/dist/transition-shaders.part04.d.ts.map +1 -0
  531. package/dist/transition-shaders.part04.js +98 -0
  532. package/dist/transition-shaders.part04.js.map +1 -0
  533. package/dist/types.d.ts +10 -42
  534. package/dist/types.d.ts.map +1 -1
  535. package/dist/types.js +9 -36
  536. package/dist/types.js.map +1 -1
  537. package/dist/view-output.d.ts +1 -1
  538. package/dist/view-output.d.ts.map +1 -1
  539. package/dist/view-output.js +3 -2
  540. package/dist/view-output.js.map +1 -1
  541. package/dist/viewport.d.ts +7 -213
  542. package/dist/viewport.d.ts.map +1 -1
  543. package/dist/viewport.js +6 -470
  544. package/dist/viewport.js.map +1 -1
  545. package/dist/viewport.part01.d.ts +51 -0
  546. package/dist/viewport.part01.d.ts.map +1 -0
  547. package/dist/viewport.part01.js +10 -0
  548. package/dist/viewport.part01.js.map +1 -0
  549. package/dist/viewport.part02.d.ts +2 -0
  550. package/dist/viewport.part02.d.ts.map +1 -0
  551. package/dist/viewport.part02.js +69 -0
  552. package/dist/viewport.part02.js.map +1 -0
  553. package/dist/viewport.part03.d.ts +10 -0
  554. package/dist/viewport.part03.d.ts.map +1 -0
  555. package/dist/viewport.part03.js +78 -0
  556. package/dist/viewport.part03.js.map +1 -0
  557. package/dist/viewport.part04.d.ts +4 -0
  558. package/dist/viewport.part04.d.ts.map +1 -0
  559. package/dist/viewport.part04.js +50 -0
  560. package/dist/viewport.part04.js.map +1 -0
  561. package/dist/viewport.part05.d.ts +5 -0
  562. package/dist/viewport.part05.d.ts.map +1 -0
  563. package/dist/viewport.part05.js +59 -0
  564. package/dist/viewport.part05.js.map +1 -0
  565. package/dist/viewport.part06.d.ts +14 -0
  566. package/dist/viewport.part06.d.ts.map +1 -0
  567. package/dist/viewport.part06.js +58 -0
  568. package/dist/viewport.part06.js.map +1 -0
  569. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"focus-area.d.ts","sourceRoot":"","sources":["../src/focus-area.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focus-area.d.ts","sourceRoot":"","sources":["../src/focus-area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9P,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,426 +1,6 @@
1
- /**
2
- * Focus area building block a scrollable pane with a colored left gutter.
3
- *
4
- * Wraps `viewport()` and prepends a styled gutter character (`▎`) to each
5
- * line indicating focus state: shell focus chrome when focused, muted when
6
- * unfocused.
7
- *
8
- * Follows the building block pattern: immutable state + pure transformers +
9
- * pure render + convenience keymap factory.
10
- *
11
- * ```ts
12
- * // In TEA init:
13
- * const fa = createFocusAreaState({ content, width: 60, height: 20 });
14
- *
15
- * // In TEA view:
16
- * const output = focusArea(fa, { focused: true, ctx });
17
- *
18
- * // In TEA update:
19
- * case 'scroll-down':
20
- * return [{ ...model, fa: focusAreaScrollBy(model.fa, 1) }, []];
21
- * ```
22
- */
23
- import { createSurface, parseAnsiToSurface, renderByMode } from '@flyingrobots/bijou';
24
- import { resolveBCSSTextToken } from './css/text-style.js';
25
- import { viewport, createScrollState, scrollBy, scrollTo, scrollToTop, scrollToBottom, pageDown, pageUp, scrollByX, scrollToX, } from './viewport.js';
26
- import { createKeyMap } from './keybindings.js';
27
- // ---------------------------------------------------------------------------
28
- // Constants
29
- // ---------------------------------------------------------------------------
30
- /** Gutter character: left one quarter block (U+258E). */
31
- const GUTTER_CHAR = '▎';
32
- const EMPTY_CELL = { char: ' ', empty: false };
33
- const SCROLLBAR_TRACK_CELL = { char: '│', empty: false };
34
- const SCROLLBAR_THUMB_CELL = { char: '█', empty: false };
35
- const gutterCellCache = new Map();
36
- const scrollbarCellCache = new Map();
37
- // ---------------------------------------------------------------------------
38
- // State creation
39
- // ---------------------------------------------------------------------------
40
- /**
41
- * Create initial focus area state for the given content and dimensions.
42
- *
43
- * The viewport width is `width - 1` to account for the gutter column.
44
- * When `overflowX` is `'scroll'`, horizontal scroll bounds are computed
45
- * from the widest content line.
46
- *
47
- * @param options - Content, width, height, and overflow for the focus area.
48
- * @returns Fresh focus area state with scroll at the top-left.
49
- */
50
- export function createFocusAreaState(options) {
51
- const { content, overflowX = 'hidden', scrollbarMode = 'gutter' } = options;
52
- // Clamp dimensions to at least 1
53
- const width = Math.max(1, options.width);
54
- const height = Math.max(1, options.height);
55
- return {
56
- content,
57
- scroll: createScrollState(content, height, resolveFocusAreaViewportWidth(content.split('\n').length, width, height, overflowX, scrollbarMode)),
58
- width,
59
- height,
60
- overflowX,
61
- scrollbarMode,
62
- };
63
- }
64
- /**
65
- * Create focus area state for already-rendered surface content.
66
- *
67
- * Uses the surface dimensions directly to compute scroll bounds so callers can
68
- * keep pane rendering surface-native without string round-tripping.
69
- */
70
- export function createFocusAreaStateForSurface(surface, options) {
71
- const { overflowX = 'hidden', scrollbarMode = 'gutter' } = options;
72
- const width = Math.max(1, options.width);
73
- const height = Math.max(1, options.height);
74
- const viewportWidth = resolveFocusAreaViewportWidth(surface.height, width, height, overflowX, scrollbarMode);
75
- const maxX = viewportWidth === undefined ? 0 : Math.max(0, surface.width - viewportWidth);
76
- return {
77
- content: '',
78
- scroll: {
79
- y: 0,
80
- maxY: Math.max(0, surface.height - height),
81
- x: 0,
82
- maxX,
83
- totalLines: surface.height,
84
- visibleLines: height,
85
- },
86
- width,
87
- height,
88
- overflowX,
89
- scrollbarMode,
90
- };
91
- }
92
- // ---------------------------------------------------------------------------
93
- // State transformers
94
- // ---------------------------------------------------------------------------
95
- /**
96
- * Scroll vertically by a relative amount.
97
- *
98
- * @param state - Current focus area state.
99
- * @param dy - Relative vertical offset (positive = down).
100
- * @returns Updated state with new scroll position.
101
- */
102
- export function focusAreaScrollBy(state, dy) {
103
- return { ...state, scroll: scrollBy(state.scroll, dy) };
104
- }
105
- /**
106
- * Scroll vertically to an absolute position.
107
- *
108
- * @param state - Current focus area state.
109
- * @param y - Absolute vertical offset (0-based).
110
- * @returns Updated state with new scroll position.
111
- */
112
- export function focusAreaScrollTo(state, y) {
113
- return { ...state, scroll: scrollTo(state.scroll, y) };
114
- }
115
- /**
116
- * Scroll to the first line.
117
- *
118
- * @param state - Current focus area state.
119
- * @returns Updated state scrolled to the top.
120
- */
121
- export function focusAreaScrollToTop(state) {
122
- return { ...state, scroll: scrollToTop(state.scroll) };
123
- }
124
- /**
125
- * Scroll to the last line.
126
- *
127
- * @param state - Current focus area state.
128
- * @returns Updated state scrolled to the bottom.
129
- */
130
- export function focusAreaScrollToBottom(state) {
131
- return { ...state, scroll: scrollToBottom(state.scroll) };
132
- }
133
- /**
134
- * Page down (one viewport height).
135
- *
136
- * @param state - Current focus area state.
137
- * @returns Updated state advanced by one page.
138
- */
139
- export function focusAreaPageDown(state) {
140
- return { ...state, scroll: pageDown(state.scroll) };
141
- }
142
- /**
143
- * Page up (one viewport height).
144
- *
145
- * @param state - Current focus area state.
146
- * @returns Updated state moved back by one page.
147
- */
148
- export function focusAreaPageUp(state) {
149
- return { ...state, scroll: pageUp(state.scroll) };
150
- }
151
- /**
152
- * Scroll horizontally by a relative amount.
153
- * No-op when `overflowX` is `'hidden'`.
154
- *
155
- * @param state - Current focus area state.
156
- * @param dx - Relative horizontal offset (positive = right).
157
- * @returns Updated state with new horizontal scroll position.
158
- */
159
- export function focusAreaScrollByX(state, dx) {
160
- if (state.overflowX === 'hidden')
161
- return state;
162
- return { ...state, scroll: scrollByX(state.scroll, dx) };
163
- }
164
- /**
165
- * Scroll horizontally to an absolute position.
166
- * No-op when `overflowX` is `'hidden'`.
167
- *
168
- * @param state - Current focus area state.
169
- * @param x - Absolute horizontal offset (0-based).
170
- * @returns Updated state with new horizontal scroll position.
171
- */
172
- export function focusAreaScrollToX(state, x) {
173
- if (state.overflowX === 'hidden')
174
- return state;
175
- return { ...state, scroll: scrollToX(state.scroll, x) };
176
- }
177
- /**
178
- * Update content while preserving scroll position (clamped).
179
- *
180
- * @param state - Current focus area state.
181
- * @param content - New text content to display.
182
- * @returns Updated state with new content and clamped scroll position.
183
- */
184
- export function focusAreaSetContent(state, content) {
185
- const totalLines = content.split('\n').length;
186
- const viewportWidth = resolveFocusAreaViewportWidth(totalLines, state.width, state.height, state.overflowX, state.scrollbarMode);
187
- const newScroll = createScrollState(content, state.height, viewportWidth);
188
- const clampedY = Math.min(state.scroll.y, newScroll.maxY);
189
- const clampedX = Math.min(state.scroll.x, newScroll.maxX);
190
- return {
191
- ...state,
192
- content,
193
- scroll: { ...newScroll, y: clampedY, x: clampedX },
194
- };
195
- }
196
- // ---------------------------------------------------------------------------
197
- // Render
198
- // ---------------------------------------------------------------------------
199
- /**
200
- * Render the focus area — viewport content with a colored left gutter.
201
- *
202
- * The gutter character (`▎`) is styled based on focus state:
203
- * - Focused: `focusedGutterToken` (default: `theme.ui.focusGutter`)
204
- * - Unfocused: `unfocusedGutterToken` (default: `theme.semantic.muted`)
205
- * - Static mode: unstyled gutter
206
- * - Pipe / accessible mode: no gutter (full width to content)
207
- *
208
- * @param state - Current focus area state.
209
- * @param options - Rendering options (focus, tokens, scrollbar, ctx).
210
- * @returns Rendered focus area string.
211
- */
212
- export function focusArea(state, options) {
213
- const focused = options?.focused ?? true;
214
- const showScrollbar = options?.showScrollbar ?? true;
215
- const ctx = options?.ctx;
216
- const mode = ctx?.mode ?? 'interactive';
217
- // Pipe and accessible modes: no gutter, full width to content
218
- const hasGutter = mode !== 'pipe' && mode !== 'accessible';
219
- const contentWidth = hasGutter ? Math.max(1, state.width - 1) : state.width;
220
- // Clamp scrollX to render-time content width (may differ from state-time
221
- // width when pipe/accessible mode removes the gutter)
222
- let scrollX;
223
- if (state.overflowX === 'scroll') {
224
- const maxRenderX = Math.max(0, state.scroll.maxX + (contentWidth < state.width ? 0 : 1));
225
- scrollX = Math.min(state.scroll.x, maxRenderX);
226
- }
227
- const body = viewport({
228
- width: contentWidth,
229
- height: state.height,
230
- content: state.content,
231
- scrollY: state.scroll.y,
232
- scrollX,
233
- showScrollbar,
234
- scrollbarMode: state.scrollbarMode,
235
- });
236
- if (!hasGutter)
237
- return body;
238
- // Determine gutter string
239
- const gutter = resolveGutter(focused, ctx, options);
240
- // Prepend gutter to each line
241
- const lines = body.split('\n');
242
- return lines.map((line) => gutter + line).join('\n');
243
- }
244
- /**
245
- * Render the focus area into a surface without converting the pane body back
246
- * into a string first.
247
- */
248
- export function focusAreaSurface(content, state, options) {
249
- const surface = createSurface(state.width, state.height, EMPTY_CELL);
250
- return focusAreaSurfaceInto(content, state, surface, options);
251
- }
252
- /**
253
- * Paint the focus area into an existing target surface.
254
- *
255
- * The caller owns clearing the destination region beforehand when reusing the
256
- * same target across frames.
257
- */
258
- export function focusAreaSurfaceInto(content, state, target, options, offsetX = 0, offsetY = 0) {
259
- const focused = options?.focused ?? true;
260
- const showScrollbar = options?.showScrollbar ?? true;
261
- const ctx = options?.ctx;
262
- const mode = ctx?.mode ?? 'interactive';
263
- const hasGutter = mode !== 'pipe' && mode !== 'accessible' && state.width > 1;
264
- const gutterWidth = hasGutter ? 1 : 0;
265
- const bodyWidth = Math.max(0, state.width - gutterWidth);
266
- const needsScrollbar = showScrollbar && content.height > state.height && bodyWidth > 0;
267
- const contentWidth = needsScrollbar && state.scrollbarMode === 'gutter'
268
- ? Math.max(0, bodyWidth - 1)
269
- : bodyWidth;
270
- const scrollY = Math.max(0, Math.min(state.scroll.y, Math.max(0, content.height - state.height)));
271
- const scrollX = state.overflowX === 'scroll'
272
- ? Math.max(0, Math.min(state.scroll.x, Math.max(0, content.width - contentWidth)))
273
- : 0;
274
- if (contentWidth > 0 && state.height > 0) {
275
- target.blit(content, offsetX + gutterWidth, offsetY, scrollX, scrollY, contentWidth, state.height);
276
- }
277
- if (needsScrollbar) {
278
- const scrollbarX = offsetX + gutterWidth + bodyWidth - 1;
279
- const scrollbarCells = resolveScrollbarCells(ctx, options);
280
- paintScrollbarInto(target, scrollbarX, offsetY, state.height, content.height, scrollY, scrollbarCells.track, scrollbarCells.thumb);
281
- }
282
- if (hasGutter) {
283
- const gutterCell = resolveGutterCell(focused, ctx, options);
284
- for (let y = 0; y < state.height; y++) {
285
- paintCellPreservingBackground(target, offsetX, offsetY + y, gutterCell);
286
- }
287
- }
288
- return target;
289
- }
290
- function paintCellPreservingBackground(target, x, y, cell) {
291
- const existing = target.get(x, y);
292
- const hasExplicitBackground = cell.bg != null || cell.bgRGB != null;
293
- target.set(x, y, {
294
- char: cell.char,
295
- fg: cell.fg,
296
- bg: hasExplicitBackground ? cell.bg : existing.bg,
297
- fgRGB: cell.fgRGB,
298
- bgRGB: hasExplicitBackground ? cell.bgRGB : existing.bgRGB,
299
- modifiers: cell.modifiers,
300
- opacity: hasExplicitBackground ? cell.opacity : (cell.opacity ?? existing.opacity),
301
- empty: false,
302
- });
303
- }
304
- /**
305
- * Resolve the styled gutter string based on focus state and context.
306
- */
307
- function resolveGutter(focused, ctx, options) {
308
- if (!ctx)
309
- return GUTTER_CHAR;
310
- return renderByMode(ctx.mode, {
311
- static: () => GUTTER_CHAR,
312
- interactive: () => {
313
- const baseToken = focused
314
- ? (options?.focusedGutterToken ?? ctx.ui('focusGutter'))
315
- : (options?.unfocusedGutterToken ?? ctx.semantic('muted'));
316
- const token = resolveBCSSTextToken(ctx, {
317
- type: 'FocusArea',
318
- id: options?.id,
319
- classes: [...(options?.classes ?? []), focused ? 'focused' : 'unfocused'],
320
- }, {
321
- hex: baseToken.hex,
322
- bg: baseToken.bg,
323
- modifiers: baseToken.modifiers,
324
- });
325
- return ctx.style.styled(token, GUTTER_CHAR);
326
- },
327
- }, options);
328
- }
329
- function resolveGutterCell(focused, ctx, options) {
330
- const key = resolveGutter(focused, ctx, options);
331
- const cached = gutterCellCache.get(key);
332
- if (cached != null)
333
- return cached;
334
- const parsed = parseAnsiToSurface(key, 1, 1).get(0, 0);
335
- gutterCellCache.set(key, parsed);
336
- return parsed;
337
- }
338
- function resolveScrollbarCells(ctx, options) {
339
- return {
340
- track: resolveScrollbarCell('track', ctx, options),
341
- thumb: resolveScrollbarCell('thumb', ctx, options),
342
- };
343
- }
344
- function resolveScrollbarCell(kind, ctx, options) {
345
- if (!ctx) {
346
- return kind === 'thumb' ? SCROLLBAR_THUMB_CELL : SCROLLBAR_TRACK_CELL;
347
- }
348
- const baseToken = kind === 'thumb'
349
- ? (options?.scrollbarThumbToken ?? ctx.ui('scrollThumb'))
350
- : (options?.scrollbarTrackToken ?? ctx.ui('scrollTrack'));
351
- const baseChar = kind === 'thumb' ? SCROLLBAR_THUMB_CELL.char : SCROLLBAR_TRACK_CELL.char;
352
- const key = `${kind}:${baseChar}:${JSON.stringify(baseToken)}:${options?.id ?? ''}:${(options?.classes ?? []).join(',')}`;
353
- const cached = scrollbarCellCache.get(key);
354
- if (cached != null)
355
- return cached;
356
- const token = resolveBCSSTextToken(ctx, {
357
- type: kind === 'thumb' ? 'FocusAreaScrollbarThumb' : 'FocusAreaScrollbarTrack',
358
- id: options?.id,
359
- classes: [...(options?.classes ?? []), 'scrollbar', `scrollbar-${kind}`],
360
- }, {
361
- hex: baseToken.hex,
362
- bg: baseToken.bg,
363
- modifiers: baseToken.modifiers,
364
- });
365
- const parsed = parseAnsiToSurface(ctx.style.styled(token, baseChar), 1, 1).get(0, 0);
366
- scrollbarCellCache.set(key, parsed);
367
- return parsed;
368
- }
369
- function paintScrollbarInto(target, column, row, viewportHeight, totalLines, scrollY, trackCell, thumbCell) {
370
- if (totalLines <= viewportHeight) {
371
- for (let y = 0; y < viewportHeight; y++) {
372
- paintCellPreservingBackground(target, column, row + y, EMPTY_CELL);
373
- }
374
- return;
375
- }
376
- const thumbSize = Math.max(1, Math.round((viewportHeight / totalLines) * viewportHeight));
377
- const maxScroll = totalLines - viewportHeight;
378
- const scrollFraction = maxScroll > 0 ? scrollY / maxScroll : 0;
379
- const thumbStart = Math.round(scrollFraction * (viewportHeight - thumbSize));
380
- for (let index = 0; index < viewportHeight; index++) {
381
- const isThumb = index >= thumbStart && index < thumbStart + thumbSize;
382
- paintCellPreservingBackground(target, column, row + index, isThumb ? thumbCell : trackCell);
383
- }
384
- }
385
- function resolveFocusAreaViewportWidth(totalLines, width, height, overflowX, scrollbarMode) {
386
- const gutterWidth = width > 1 ? 1 : 0;
387
- const contentWidth = Math.max(1, width - gutterWidth);
388
- const hasScrollbar = totalLines > height && contentWidth > 1;
389
- const scrollableWidth = hasScrollbar && scrollbarMode === 'gutter'
390
- ? Math.max(1, contentWidth - 1)
391
- : contentWidth;
392
- return overflowX === 'scroll' ? scrollableWidth : undefined;
393
- }
394
- // ---------------------------------------------------------------------------
395
- // Convenience keymap
396
- // ---------------------------------------------------------------------------
397
- /**
398
- * Create a preconfigured KeyMap for focus area navigation.
399
- *
400
- * Arrow keys are intentionally excluded — reserved for content-specific
401
- * navigation (e.g., DAG node selection).
402
- *
403
- * @template Msg - Application message type dispatched by key bindings.
404
- * @param actions - Map of navigation actions to message values.
405
- * @returns Preconfigured key map with vim-style scroll bindings.
406
- */
407
- export function focusAreaKeyMap(actions) {
408
- const km = createKeyMap()
409
- .group('Scroll', (g) => {
410
- g.bind('j', 'Down', actions.scrollDown)
411
- .bind('k', 'Up', actions.scrollUp)
412
- .bind('d', 'Page down', actions.pageDown)
413
- .bind('u', 'Page up', actions.pageUp)
414
- .bind('g', 'Top', actions.top)
415
- .bind('shift+g', 'Bottom', actions.bottom);
416
- if (actions.scrollLeft !== undefined) {
417
- g.bind('h', 'Scroll left', actions.scrollLeft);
418
- }
419
- if (actions.scrollRight !== undefined) {
420
- g.bind('l', 'Scroll right', actions.scrollRight);
421
- }
422
- return g;
423
- });
424
- return km;
425
- }
1
+ export { createFocusAreaState } from './focus-area.part01.js';
2
+ export { createFocusAreaStateForSurface, focusAreaPageDown, focusAreaPageUp, focusAreaScrollBy, focusAreaScrollByX, focusAreaScrollTo, focusAreaScrollToBottom, focusAreaScrollToTop, focusAreaScrollToX, focusAreaSetContent } from './focus-area.part02.js';
3
+ export { focusArea, focusAreaSurface } from './focus-area.part03.js';
4
+ export { focusAreaSurfaceInto } from './focus-area.part04.js';
5
+ export { focusAreaKeyMap } from './focus-area.part06.js';
426
6
  //# sourceMappingURL=focus-area.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"focus-area.js","sourceRoot":"","sources":["../src/focus-area.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focus-area.js","sourceRoot":"","sources":["../src/focus-area.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC9P,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,57 @@
1
+ import type { BijouContext, Cell, TokenValue } from '@flyingrobots/bijou';
2
+ import type { ScrollState, ScrollbarMode } from './viewport.js';
3
+ export type OverflowX = 'scroll' | 'hidden';
4
+ export interface FocusAreaState {
5
+ /** Full text content displayed in the focus area. */
6
+ readonly content: string;
7
+ /** Underlying scroll position state. */
8
+ readonly scroll: ScrollState;
9
+ /** Total width in columns (including gutter). */
10
+ readonly width: number;
11
+ /** Total height in rows. */
12
+ readonly height: number;
13
+ /** Horizontal overflow behavior. */
14
+ readonly overflowX: OverflowX;
15
+ /** Scrollbar ownership model for the pane edge. */
16
+ readonly scrollbarMode: ScrollbarMode;
17
+ }
18
+ export interface FocusAreaOptions {
19
+ /** Full text content to display. */
20
+ readonly content: string;
21
+ /** Total width in columns (including gutter). */
22
+ readonly width: number;
23
+ /** Total height in rows. */
24
+ readonly height: number;
25
+ /** Horizontal overflow behavior. Default: `'hidden'`. */
26
+ readonly overflowX?: OverflowX;
27
+ /** Reserve a gutter column or overlay the rightmost content cell. Default: `'gutter'`. */
28
+ readonly scrollbarMode?: ScrollbarMode;
29
+ }
30
+ export interface FocusAreaRenderOptions {
31
+ /** Whether the pane is currently focused. Default: `true`. */
32
+ readonly focused?: boolean;
33
+ /** Token for the focused gutter. Default: `theme.ui.focusGutter`. */
34
+ readonly focusedGutterToken?: TokenValue;
35
+ /** Token for the unfocused gutter. Default: `theme.semantic.muted`. */
36
+ readonly unfocusedGutterToken?: TokenValue;
37
+ /** Show a scrollbar track on the right edge. Default: `true`. */
38
+ readonly showScrollbar?: boolean;
39
+ /** Token for the scrollbar track. Default: `theme.ui.scrollTrack`. */
40
+ readonly scrollbarTrackToken?: TokenValue;
41
+ /** Token for the scrollbar thumb. Default: `theme.ui.scrollThumb`. */
42
+ readonly scrollbarThumbToken?: TokenValue;
43
+ /** Optional BCSS id for the focus area. */
44
+ readonly id?: string;
45
+ /** Optional BCSS classes for the focus area. */
46
+ readonly classes?: readonly string[];
47
+ /** Bijou context for styling and mode detection. */
48
+ readonly ctx?: BijouContext;
49
+ }
50
+ export declare const GUTTER_CHAR = "\u258E";
51
+ export declare const EMPTY_CELL: Cell;
52
+ export declare const SCROLLBAR_TRACK_CELL: Cell;
53
+ export declare const SCROLLBAR_THUMB_CELL: Cell;
54
+ export declare const gutterCellCache: Map<string, Cell>;
55
+ export declare const scrollbarCellCache: Map<string, Cell>;
56
+ export declare function createFocusAreaState(options: FocusAreaOptions): FocusAreaState;
57
+ //# sourceMappingURL=focus-area.part01.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-area.part01.d.ts","sourceRoot":"","sources":["../src/focus-area.part01.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAI1E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGhE,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAC5C,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AACD,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,0FAA0F;IAC1F,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC;AACD,MAAM,WAAW,sBAAsB;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,UAAU,CAAC;IACzC,uEAAuE;IACvE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAC3C,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,sEAAsE;IACtE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC;IAC1C,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC;CAC7B;AACD,eAAO,MAAM,WAAW,WAAM,CAAC;AAC/B,eAAO,MAAM,UAAU,EAAE,IAAkC,CAAC;AAC5D,eAAO,MAAM,oBAAoB,EAAE,IAAkC,CAAC;AACtE,eAAO,MAAM,oBAAoB,EAAE,IAAkC,CAAC;AACtE,eAAO,MAAM,eAAe,mBAA0B,CAAC;AACvD,eAAO,MAAM,kBAAkB,mBAA0B,CAAC;AAC1D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,gBAAgB,GAAG,cAAc,CAiB9E"}
@@ -0,0 +1,23 @@
1
+ import { createScrollState } from './viewport.js';
2
+ import { resolveFocusAreaViewportWidth } from './focus-area.part06.js';
3
+ export const GUTTER_CHAR = '▎';
4
+ export const EMPTY_CELL = { char: ' ', empty: false };
5
+ export const SCROLLBAR_TRACK_CELL = { char: '│', empty: false };
6
+ export const SCROLLBAR_THUMB_CELL = { char: '█', empty: false };
7
+ export const gutterCellCache = new Map();
8
+ export const scrollbarCellCache = new Map();
9
+ export function createFocusAreaState(options) {
10
+ const { content, overflowX = 'hidden', scrollbarMode = 'gutter' } = options;
11
+ // Clamp dimensions to at least 1
12
+ const width = Math.max(1, options.width);
13
+ const height = Math.max(1, options.height);
14
+ return {
15
+ content,
16
+ scroll: createScrollState(content, height, resolveFocusAreaViewportWidth(content.split('\n').length, width, height, overflowX, scrollbarMode)),
17
+ width,
18
+ height,
19
+ overflowX,
20
+ scrollbarMode,
21
+ };
22
+ }
23
+ //# sourceMappingURL=focus-area.part01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-area.part01.js","sourceRoot":"","sources":["../src/focus-area.part01.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIlD,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAgDvE,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,oBAAoB,GAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACtE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAgB,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAgB,CAAC;AAC1D,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,QAAQ,EAAE,aAAa,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC5E,iCAAiC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO;QACL,OAAO;QACP,MAAM,EAAE,iBAAiB,CACvB,OAAO,EACP,MAAM,EACN,6BAA6B,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,CAAC,CACnG;QACD,KAAK;QACL,MAAM;QACN,SAAS;QACT,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Surface } from '@flyingrobots/bijou';
2
+ import type { FocusAreaOptions, FocusAreaState } from './focus-area.part01.js';
3
+ export declare function createFocusAreaStateForSurface(surface: Surface, options: Omit<FocusAreaOptions, 'content'>): FocusAreaState;
4
+ export declare function focusAreaScrollBy(state: FocusAreaState, dy: number): FocusAreaState;
5
+ export declare function focusAreaScrollTo(state: FocusAreaState, y: number): FocusAreaState;
6
+ export declare function focusAreaScrollToTop(state: FocusAreaState): FocusAreaState;
7
+ export declare function focusAreaScrollToBottom(state: FocusAreaState): FocusAreaState;
8
+ export declare function focusAreaPageDown(state: FocusAreaState): FocusAreaState;
9
+ export declare function focusAreaPageUp(state: FocusAreaState): FocusAreaState;
10
+ export declare function focusAreaScrollByX(state: FocusAreaState, dx: number): FocusAreaState;
11
+ export declare function focusAreaScrollToX(state: FocusAreaState, x: number): FocusAreaState;
12
+ export declare function focusAreaSetContent(state: FocusAreaState, content: string): FocusAreaState;
13
+ //# sourceMappingURL=focus-area.part02.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-area.part02.d.ts","sourceRoot":"","sources":["../src/focus-area.part02.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG/E,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GACzC,cAAc,CAqBhB;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAEnF;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,CAElF;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAE1E;AACD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAE7E;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAEvE;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAErE;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,cAAc,CAGpF;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,GAAG,cAAc,CAGnF;AACD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAiB1F"}
@@ -0,0 +1,65 @@
1
+ import { createScrollState, pageDown, pageUp, scrollBy, scrollByX, scrollTo, scrollToBottom, scrollToTop, scrollToX } from './viewport.js';
2
+ import { resolveFocusAreaViewportWidth } from './focus-area.part06.js';
3
+ export function createFocusAreaStateForSurface(surface, options) {
4
+ const { overflowX = 'hidden', scrollbarMode = 'gutter' } = options;
5
+ const width = Math.max(1, options.width);
6
+ const height = Math.max(1, options.height);
7
+ const viewportWidth = resolveFocusAreaViewportWidth(surface.height, width, height, overflowX, scrollbarMode);
8
+ const maxX = viewportWidth === undefined ? 0 : Math.max(0, surface.width - viewportWidth);
9
+ return {
10
+ content: '',
11
+ scroll: {
12
+ y: 0,
13
+ maxY: Math.max(0, surface.height - height),
14
+ x: 0,
15
+ maxX,
16
+ totalLines: surface.height,
17
+ visibleLines: height,
18
+ },
19
+ width,
20
+ height,
21
+ overflowX,
22
+ scrollbarMode,
23
+ };
24
+ }
25
+ export function focusAreaScrollBy(state, dy) {
26
+ return { ...state, scroll: scrollBy(state.scroll, dy) };
27
+ }
28
+ export function focusAreaScrollTo(state, y) {
29
+ return { ...state, scroll: scrollTo(state.scroll, y) };
30
+ }
31
+ export function focusAreaScrollToTop(state) {
32
+ return { ...state, scroll: scrollToTop(state.scroll) };
33
+ }
34
+ export function focusAreaScrollToBottom(state) {
35
+ return { ...state, scroll: scrollToBottom(state.scroll) };
36
+ }
37
+ export function focusAreaPageDown(state) {
38
+ return { ...state, scroll: pageDown(state.scroll) };
39
+ }
40
+ export function focusAreaPageUp(state) {
41
+ return { ...state, scroll: pageUp(state.scroll) };
42
+ }
43
+ export function focusAreaScrollByX(state, dx) {
44
+ if (state.overflowX === 'hidden')
45
+ return state;
46
+ return { ...state, scroll: scrollByX(state.scroll, dx) };
47
+ }
48
+ export function focusAreaScrollToX(state, x) {
49
+ if (state.overflowX === 'hidden')
50
+ return state;
51
+ return { ...state, scroll: scrollToX(state.scroll, x) };
52
+ }
53
+ export function focusAreaSetContent(state, content) {
54
+ const totalLines = content.split('\n').length;
55
+ const viewportWidth = resolveFocusAreaViewportWidth(totalLines, state.width, state.height, state.overflowX, state.scrollbarMode);
56
+ const newScroll = createScrollState(content, state.height, viewportWidth);
57
+ const clampedY = Math.min(state.scroll.y, newScroll.maxY);
58
+ const clampedX = Math.min(state.scroll.x, newScroll.maxX);
59
+ return {
60
+ ...state,
61
+ content,
62
+ scroll: { ...newScroll, y: clampedY, x: clampedX },
63
+ };
64
+ }
65
+ //# sourceMappingURL=focus-area.part02.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-area.part02.js","sourceRoot":"","sources":["../src/focus-area.part02.ts"],"names":[],"mappings":"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"}