@inhuman.tools/quickdraw 0.0.0-bootstrap.0 → 0.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 (522) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +102 -1
  3. package/aurora.vert +168 -0
  4. package/dist/bench/host.d.ts +62 -0
  5. package/dist/bench/host.d.ts.map +1 -0
  6. package/dist/bench/host.js +77 -0
  7. package/dist/bench/host.js.map +1 -0
  8. package/dist/bench/main.d.ts +6 -0
  9. package/dist/bench/main.d.ts.map +1 -0
  10. package/dist/bench/main.js +118 -0
  11. package/dist/bench/main.js.map +1 -0
  12. package/dist/bench/model.d.ts +36 -0
  13. package/dist/bench/model.d.ts.map +1 -0
  14. package/dist/bench/model.js +112 -0
  15. package/dist/bench/model.js.map +1 -0
  16. package/dist/bench/tea.d.ts +14 -0
  17. package/dist/bench/tea.d.ts.map +1 -0
  18. package/dist/bench/tea.js +6 -0
  19. package/dist/bench/tea.js.map +1 -0
  20. package/dist/bench/view.d.ts +9 -0
  21. package/dist/bench/view.d.ts.map +1 -0
  22. package/dist/bench/view.js +88 -0
  23. package/dist/bench/view.js.map +1 -0
  24. package/dist/bench/worker.d.ts +6 -0
  25. package/dist/bench/worker.d.ts.map +1 -0
  26. package/dist/bench/worker.js +46 -0
  27. package/dist/bench/worker.js.map +1 -0
  28. package/dist/buffer/bgfx-mark.d.ts +32 -0
  29. package/dist/buffer/bgfx-mark.d.ts.map +1 -0
  30. package/dist/buffer/bgfx-mark.js +43 -0
  31. package/dist/buffer/bgfx-mark.js.map +1 -0
  32. package/dist/buffer/index.d.ts +191 -0
  33. package/dist/buffer/index.d.ts.map +1 -0
  34. package/dist/buffer/index.js +353 -0
  35. package/dist/buffer/index.js.map +1 -0
  36. package/dist/capabilities/env.d.ts +23 -0
  37. package/dist/capabilities/env.d.ts.map +1 -0
  38. package/dist/capabilities/env.js +35 -0
  39. package/dist/capabilities/env.js.map +1 -0
  40. package/dist/capabilities/index.d.ts +13 -0
  41. package/dist/capabilities/index.d.ts.map +1 -0
  42. package/dist/capabilities/index.js +13 -0
  43. package/dist/capabilities/index.js.map +1 -0
  44. package/dist/capabilities/parse.d.ts +41 -0
  45. package/dist/capabilities/parse.d.ts.map +1 -0
  46. package/dist/capabilities/parse.js +86 -0
  47. package/dist/capabilities/parse.js.map +1 -0
  48. package/dist/capabilities/probe.d.ts +37 -0
  49. package/dist/capabilities/probe.d.ts.map +1 -0
  50. package/dist/capabilities/probe.js +75 -0
  51. package/dist/capabilities/probe.js.map +1 -0
  52. package/dist/capabilities/sequences.d.ts +33 -0
  53. package/dist/capabilities/sequences.d.ts.map +1 -0
  54. package/dist/capabilities/sequences.js +36 -0
  55. package/dist/capabilities/sequences.js.map +1 -0
  56. package/dist/capabilities/types.d.ts +25 -0
  57. package/dist/capabilities/types.d.ts.map +1 -0
  58. package/dist/capabilities/types.js +5 -0
  59. package/dist/capabilities/types.js.map +1 -0
  60. package/dist/index.d.ts +11 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +11 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/input/decode.d.ts +167 -0
  65. package/dist/input/decode.d.ts.map +1 -0
  66. package/dist/input/decode.js +825 -0
  67. package/dist/input/decode.js.map +1 -0
  68. package/dist/input/draft.d.ts +85 -0
  69. package/dist/input/draft.d.ts.map +1 -0
  70. package/dist/input/draft.js +276 -0
  71. package/dist/input/draft.js.map +1 -0
  72. package/dist/input/index.d.ts +3 -0
  73. package/dist/input/index.d.ts.map +1 -0
  74. package/dist/input/index.js +3 -0
  75. package/dist/input/index.js.map +1 -0
  76. package/dist/input/prompt-blocks.d.ts +58 -0
  77. package/dist/input/prompt-blocks.d.ts.map +1 -0
  78. package/dist/input/prompt-blocks.js +48 -0
  79. package/dist/input/prompt-blocks.js.map +1 -0
  80. package/dist/input/rich-draft.d.ts +46 -0
  81. package/dist/input/rich-draft.d.ts.map +1 -0
  82. package/dist/input/rich-draft.js +391 -0
  83. package/dist/input/rich-draft.js.map +1 -0
  84. package/dist/input/rich-hit.d.ts +17 -0
  85. package/dist/input/rich-hit.d.ts.map +1 -0
  86. package/dist/input/rich-hit.js +89 -0
  87. package/dist/input/rich-hit.js.map +1 -0
  88. package/dist/input/rich-intake.d.ts +16 -0
  89. package/dist/input/rich-intake.d.ts.map +1 -0
  90. package/dist/input/rich-intake.js +22 -0
  91. package/dist/input/rich-intake.js.map +1 -0
  92. package/dist/input/rich-paint.d.ts +13 -0
  93. package/dist/input/rich-paint.d.ts.map +1 -0
  94. package/dist/input/rich-paint.js +18 -0
  95. package/dist/input/rich-paint.js.map +1 -0
  96. package/dist/internals/bgfx/index.d.ts +17 -0
  97. package/dist/internals/bgfx/index.d.ts.map +1 -0
  98. package/dist/internals/bgfx/index.js +17 -0
  99. package/dist/internals/bgfx/index.js.map +1 -0
  100. package/dist/internals/bgfx/materialize.d.ts +31 -0
  101. package/dist/internals/bgfx/materialize.d.ts.map +1 -0
  102. package/dist/internals/bgfx/materialize.js +117 -0
  103. package/dist/internals/bgfx/materialize.js.map +1 -0
  104. package/dist/internals/bgfx/opacity.d.ts +37 -0
  105. package/dist/internals/bgfx/opacity.d.ts.map +1 -0
  106. package/dist/internals/bgfx/opacity.js +76 -0
  107. package/dist/internals/bgfx/opacity.js.map +1 -0
  108. package/dist/internals/bgfx/registry.d.ts +13 -0
  109. package/dist/internals/bgfx/registry.d.ts.map +1 -0
  110. package/dist/internals/bgfx/registry.js +24 -0
  111. package/dist/internals/bgfx/registry.js.map +1 -0
  112. package/dist/internals/bgfx/sab-layout.d.ts +61 -0
  113. package/dist/internals/bgfx/sab-layout.d.ts.map +1 -0
  114. package/dist/internals/bgfx/sab-layout.js +107 -0
  115. package/dist/internals/bgfx/sab-layout.js.map +1 -0
  116. package/dist/internals/bgfx/shader-frame-host.d.ts +22 -0
  117. package/dist/internals/bgfx/shader-frame-host.d.ts.map +1 -0
  118. package/dist/internals/bgfx/shader-frame-host.js +165 -0
  119. package/dist/internals/bgfx/shader-frame-host.js.map +1 -0
  120. package/dist/internals/bgfx/shadertoy-catalog.d.ts +41 -0
  121. package/dist/internals/bgfx/shadertoy-catalog.d.ts.map +1 -0
  122. package/dist/internals/bgfx/shadertoy-catalog.js +200 -0
  123. package/dist/internals/bgfx/shadertoy-catalog.js.map +1 -0
  124. package/dist/internals/bgfx/shadertoy-gl.d.ts +38 -0
  125. package/dist/internals/bgfx/shadertoy-gl.d.ts.map +1 -0
  126. package/dist/internals/bgfx/shadertoy-gl.js +283 -0
  127. package/dist/internals/bgfx/shadertoy-gl.js.map +1 -0
  128. package/dist/internals/bgfx/types.d.ts +51 -0
  129. package/dist/internals/bgfx/types.d.ts.map +1 -0
  130. package/dist/internals/bgfx/types.js +14 -0
  131. package/dist/internals/bgfx/types.js.map +1 -0
  132. package/dist/internals/bgfx-worker.d.ts +6 -0
  133. package/dist/internals/bgfx-worker.d.ts.map +1 -0
  134. package/dist/internals/bgfx-worker.js +131 -0
  135. package/dist/internals/bgfx-worker.js.map +1 -0
  136. package/dist/layout/birth.d.ts +77 -0
  137. package/dist/layout/birth.d.ts.map +1 -0
  138. package/dist/layout/birth.js +148 -0
  139. package/dist/layout/birth.js.map +1 -0
  140. package/dist/layout/children.d.ts +5 -0
  141. package/dist/layout/children.d.ts.map +1 -0
  142. package/dist/layout/children.js +19 -0
  143. package/dist/layout/children.js.map +1 -0
  144. package/dist/layout/chrome_frame.d.ts +254 -0
  145. package/dist/layout/chrome_frame.d.ts.map +1 -0
  146. package/dist/layout/chrome_frame.js +1080 -0
  147. package/dist/layout/chrome_frame.js.map +1 -0
  148. package/dist/layout/chrome_mask.d.ts +40 -0
  149. package/dist/layout/chrome_mask.d.ts.map +1 -0
  150. package/dist/layout/chrome_mask.js +150 -0
  151. package/dist/layout/chrome_mask.js.map +1 -0
  152. package/dist/layout/engine.d.ts +49 -0
  153. package/dist/layout/engine.d.ts.map +1 -0
  154. package/dist/layout/engine.js +1269 -0
  155. package/dist/layout/engine.js.map +1 -0
  156. package/dist/layout/flex.d.ts +36 -0
  157. package/dist/layout/flex.d.ts.map +1 -0
  158. package/dist/layout/flex.js +111 -0
  159. package/dist/layout/flex.js.map +1 -0
  160. package/dist/layout/grid.d.ts +36 -0
  161. package/dist/layout/grid.d.ts.map +1 -0
  162. package/dist/layout/grid.js +126 -0
  163. package/dist/layout/grid.js.map +1 -0
  164. package/dist/layout/index.d.ts +30 -0
  165. package/dist/layout/index.d.ts.map +1 -0
  166. package/dist/layout/index.js +30 -0
  167. package/dist/layout/index.js.map +1 -0
  168. package/dist/layout/indication.d.ts +34 -0
  169. package/dist/layout/indication.d.ts.map +1 -0
  170. package/dist/layout/indication.js +68 -0
  171. package/dist/layout/indication.js.map +1 -0
  172. package/dist/layout/length.d.ts +18 -0
  173. package/dist/layout/length.d.ts.map +1 -0
  174. package/dist/layout/length.js +24 -0
  175. package/dist/layout/length.js.map +1 -0
  176. package/dist/layout/live_paint.d.ts +145 -0
  177. package/dist/layout/live_paint.d.ts.map +1 -0
  178. package/dist/layout/live_paint.js +255 -0
  179. package/dist/layout/live_paint.js.map +1 -0
  180. package/dist/layout/markdown.d.ts +22 -0
  181. package/dist/layout/markdown.d.ts.map +1 -0
  182. package/dist/layout/markdown.js +167 -0
  183. package/dist/layout/markdown.js.map +1 -0
  184. package/dist/layout/measure.d.ts +46 -0
  185. package/dist/layout/measure.d.ts.map +1 -0
  186. package/dist/layout/measure.js +307 -0
  187. package/dist/layout/measure.js.map +1 -0
  188. package/dist/layout/paint-hotkey.d.ts +45 -0
  189. package/dist/layout/paint-hotkey.d.ts.map +1 -0
  190. package/dist/layout/paint-hotkey.js +152 -0
  191. package/dist/layout/paint-hotkey.js.map +1 -0
  192. package/dist/layout/paint.d.ts +25 -0
  193. package/dist/layout/paint.d.ts.map +1 -0
  194. package/dist/layout/paint.js +189 -0
  195. package/dist/layout/paint.js.map +1 -0
  196. package/dist/layout/paint_theme.d.ts +85 -0
  197. package/dist/layout/paint_theme.d.ts.map +1 -0
  198. package/dist/layout/paint_theme.js +76 -0
  199. package/dist/layout/paint_theme.js.map +1 -0
  200. package/dist/layout/progress.d.ts +31 -0
  201. package/dist/layout/progress.d.ts.map +1 -0
  202. package/dist/layout/progress.js +83 -0
  203. package/dist/layout/progress.js.map +1 -0
  204. package/dist/layout/selection.d.ts +136 -0
  205. package/dist/layout/selection.d.ts.map +1 -0
  206. package/dist/layout/selection.js +312 -0
  207. package/dist/layout/selection.js.map +1 -0
  208. package/dist/layout/selection_gesture.d.ts +88 -0
  209. package/dist/layout/selection_gesture.d.ts.map +1 -0
  210. package/dist/layout/selection_gesture.js +239 -0
  211. package/dist/layout/selection_gesture.js.map +1 -0
  212. package/dist/layout/selection_paint.d.ts +47 -0
  213. package/dist/layout/selection_paint.d.ts.map +1 -0
  214. package/dist/layout/selection_paint.js +320 -0
  215. package/dist/layout/selection_paint.js.map +1 -0
  216. package/dist/layout/serialize.d.ts +49 -0
  217. package/dist/layout/serialize.d.ts.map +1 -0
  218. package/dist/layout/serialize.js +437 -0
  219. package/dist/layout/serialize.js.map +1 -0
  220. package/dist/layout/squeeze.d.ts +58 -0
  221. package/dist/layout/squeeze.d.ts.map +1 -0
  222. package/dist/layout/squeeze.js +239 -0
  223. package/dist/layout/squeeze.js.map +1 -0
  224. package/dist/layout/text.d.ts +44 -0
  225. package/dist/layout/text.d.ts.map +1 -0
  226. package/dist/layout/text.js +230 -0
  227. package/dist/layout/text.js.map +1 -0
  228. package/dist/layout/theme_store.d.ts +21 -0
  229. package/dist/layout/theme_store.d.ts.map +1 -0
  230. package/dist/layout/theme_store.js +133 -0
  231. package/dist/layout/theme_store.js.map +1 -0
  232. package/dist/layout/types.d.ts +564 -0
  233. package/dist/layout/types.d.ts.map +1 -0
  234. package/dist/layout/types.js +2 -0
  235. package/dist/layout/types.js.map +1 -0
  236. package/dist/layout/visual_draft.d.ts +60 -0
  237. package/dist/layout/visual_draft.d.ts.map +1 -0
  238. package/dist/layout/visual_draft.js +199 -0
  239. package/dist/layout/visual_draft.js.map +1 -0
  240. package/dist/lexicon/color.d.ts +22 -0
  241. package/dist/lexicon/color.d.ts.map +1 -0
  242. package/dist/lexicon/color.js +6 -0
  243. package/dist/lexicon/color.js.map +1 -0
  244. package/dist/lexicon/index.d.ts +15 -0
  245. package/dist/lexicon/index.d.ts.map +1 -0
  246. package/dist/lexicon/index.js +15 -0
  247. package/dist/lexicon/index.js.map +1 -0
  248. package/dist/lexicon/prominence.d.ts +46 -0
  249. package/dist/lexicon/prominence.d.ts.map +1 -0
  250. package/dist/lexicon/prominence.js +73 -0
  251. package/dist/lexicon/prominence.js.map +1 -0
  252. package/dist/lexicon/quarantine.d.ts +21 -0
  253. package/dist/lexicon/quarantine.d.ts.map +1 -0
  254. package/dist/lexicon/quarantine.js +15 -0
  255. package/dist/lexicon/quarantine.js.map +1 -0
  256. package/dist/lexicon/roles.d.ts +37 -0
  257. package/dist/lexicon/roles.d.ts.map +1 -0
  258. package/dist/lexicon/roles.js +52 -0
  259. package/dist/lexicon/roles.js.map +1 -0
  260. package/dist/lexicon/tiers.d.ts +18 -0
  261. package/dist/lexicon/tiers.d.ts.map +1 -0
  262. package/dist/lexicon/tiers.js +17 -0
  263. package/dist/lexicon/tiers.js.map +1 -0
  264. package/dist/measure/index.d.ts +43 -0
  265. package/dist/measure/index.d.ts.map +1 -0
  266. package/dist/measure/index.js +120 -0
  267. package/dist/measure/index.js.map +1 -0
  268. package/dist/render.d.ts +72 -0
  269. package/dist/render.d.ts.map +1 -0
  270. package/dist/render.js +164 -0
  271. package/dist/render.js.map +1 -0
  272. package/dist/runtime/agents_keys.d.ts +8 -0
  273. package/dist/runtime/agents_keys.d.ts.map +1 -0
  274. package/dist/runtime/agents_keys.js +24 -0
  275. package/dist/runtime/agents_keys.js.map +1 -0
  276. package/dist/runtime/agents_peek.d.ts +44 -0
  277. package/dist/runtime/agents_peek.d.ts.map +1 -0
  278. package/dist/runtime/agents_peek.js +96 -0
  279. package/dist/runtime/agents_peek.js.map +1 -0
  280. package/dist/runtime/agents_preview.d.ts +27 -0
  281. package/dist/runtime/agents_preview.d.ts.map +1 -0
  282. package/dist/runtime/agents_preview.js +122 -0
  283. package/dist/runtime/agents_preview.js.map +1 -0
  284. package/dist/runtime/box_bus.d.ts +144 -0
  285. package/dist/runtime/box_bus.d.ts.map +1 -0
  286. package/dist/runtime/box_bus.js +74 -0
  287. package/dist/runtime/box_bus.js.map +1 -0
  288. package/dist/runtime/clipboard-image.d.ts +20 -0
  289. package/dist/runtime/clipboard-image.d.ts.map +1 -0
  290. package/dist/runtime/clipboard-image.js +62 -0
  291. package/dist/runtime/clipboard-image.js.map +1 -0
  292. package/dist/runtime/copy_toast.d.ts +46 -0
  293. package/dist/runtime/copy_toast.d.ts.map +1 -0
  294. package/dist/runtime/copy_toast.js +117 -0
  295. package/dist/runtime/copy_toast.js.map +1 -0
  296. package/dist/runtime/echo.d.ts +41 -0
  297. package/dist/runtime/echo.d.ts.map +1 -0
  298. package/dist/runtime/echo.js +112 -0
  299. package/dist/runtime/echo.js.map +1 -0
  300. package/dist/runtime/frame.d.ts +79 -0
  301. package/dist/runtime/frame.d.ts.map +1 -0
  302. package/dist/runtime/frame.js +258 -0
  303. package/dist/runtime/frame.js.map +1 -0
  304. package/dist/runtime/index.d.ts +16 -0
  305. package/dist/runtime/index.d.ts.map +1 -0
  306. package/dist/runtime/index.js +16 -0
  307. package/dist/runtime/index.js.map +1 -0
  308. package/dist/runtime/key_buffer.d.ts +19 -0
  309. package/dist/runtime/key_buffer.d.ts.map +1 -0
  310. package/dist/runtime/key_buffer.js +24 -0
  311. package/dist/runtime/key_buffer.js.map +1 -0
  312. package/dist/runtime/keys.d.ts +66 -0
  313. package/dist/runtime/keys.d.ts.map +1 -0
  314. package/dist/runtime/keys.js +220 -0
  315. package/dist/runtime/keys.js.map +1 -0
  316. package/dist/runtime/paint_snapshot.d.ts +9 -0
  317. package/dist/runtime/paint_snapshot.d.ts.map +1 -0
  318. package/dist/runtime/paint_snapshot.js +8 -0
  319. package/dist/runtime/paint_snapshot.js.map +1 -0
  320. package/dist/runtime/paint_source.d.ts +266 -0
  321. package/dist/runtime/paint_source.d.ts.map +1 -0
  322. package/dist/runtime/paint_source.js +532 -0
  323. package/dist/runtime/paint_source.js.map +1 -0
  324. package/dist/runtime/present_loop.d.ts +11 -0
  325. package/dist/runtime/present_loop.d.ts.map +1 -0
  326. package/dist/runtime/present_loop.js +46 -0
  327. package/dist/runtime/present_loop.js.map +1 -0
  328. package/dist/runtime/present_profile.d.ts +58 -0
  329. package/dist/runtime/present_profile.d.ts.map +1 -0
  330. package/dist/runtime/present_profile.js +130 -0
  331. package/dist/runtime/present_profile.js.map +1 -0
  332. package/dist/runtime/raster.d.ts +24 -0
  333. package/dist/runtime/raster.d.ts.map +1 -0
  334. package/dist/runtime/raster.js +43 -0
  335. package/dist/runtime/raster.js.map +1 -0
  336. package/dist/runtime/renderer.d.ts +151 -0
  337. package/dist/runtime/renderer.d.ts.map +1 -0
  338. package/dist/runtime/renderer.js +1607 -0
  339. package/dist/runtime/renderer.js.map +1 -0
  340. package/dist/runtime/screenshot.d.ts +9 -0
  341. package/dist/runtime/screenshot.d.ts.map +1 -0
  342. package/dist/runtime/screenshot.js +111 -0
  343. package/dist/runtime/screenshot.js.map +1 -0
  344. package/dist/runtime/selection_host.d.ts +41 -0
  345. package/dist/runtime/selection_host.d.ts.map +1 -0
  346. package/dist/runtime/selection_host.js +190 -0
  347. package/dist/runtime/selection_host.js.map +1 -0
  348. package/dist/runtime/stderr_hold.d.ts +16 -0
  349. package/dist/runtime/stderr_hold.d.ts.map +1 -0
  350. package/dist/runtime/stderr_hold.js +23 -0
  351. package/dist/runtime/stderr_hold.js.map +1 -0
  352. package/dist/runtime/thought_birth.d.ts +25 -0
  353. package/dist/runtime/thought_birth.d.ts.map +1 -0
  354. package/dist/runtime/thought_birth.js +122 -0
  355. package/dist/runtime/thought_birth.js.map +1 -0
  356. package/dist/runtime/thought_collapsed.d.ts +35 -0
  357. package/dist/runtime/thought_collapsed.d.ts.map +1 -0
  358. package/dist/runtime/thought_collapsed.js +94 -0
  359. package/dist/runtime/thought_collapsed.js.map +1 -0
  360. package/dist/runtime/tty.d.ts +58 -0
  361. package/dist/runtime/tty.d.ts.map +1 -0
  362. package/dist/runtime/tty.js +130 -0
  363. package/dist/runtime/tty.js.map +1 -0
  364. package/dist/theme/ansi16.d.ts +34 -0
  365. package/dist/theme/ansi16.d.ts.map +1 -0
  366. package/dist/theme/ansi16.js +181 -0
  367. package/dist/theme/ansi16.js.map +1 -0
  368. package/dist/theme/ansi256.d.ts +15 -0
  369. package/dist/theme/ansi256.d.ts.map +1 -0
  370. package/dist/theme/ansi256.js +94 -0
  371. package/dist/theme/ansi256.js.map +1 -0
  372. package/dist/theme/ground.d.ts +8 -0
  373. package/dist/theme/ground.d.ts.map +1 -0
  374. package/dist/theme/ground.js +11 -0
  375. package/dist/theme/ground.js.map +1 -0
  376. package/dist/theme/index.d.ts +10 -0
  377. package/dist/theme/index.d.ts.map +1 -0
  378. package/dist/theme/index.js +10 -0
  379. package/dist/theme/index.js.map +1 -0
  380. package/dist/theme/region.d.ts +42 -0
  381. package/dist/theme/region.d.ts.map +1 -0
  382. package/dist/theme/region.js +105 -0
  383. package/dist/theme/region.js.map +1 -0
  384. package/dist/theme/resolver.d.ts +126 -0
  385. package/dist/theme/resolver.d.ts.map +1 -0
  386. package/dist/theme/resolver.js +366 -0
  387. package/dist/theme/resolver.js.map +1 -0
  388. package/dist/theme/salience.d.ts +90 -0
  389. package/dist/theme/salience.d.ts.map +1 -0
  390. package/dist/theme/salience.js +208 -0
  391. package/dist/theme/salience.js.map +1 -0
  392. package/dist/theme/seeds.d.ts +113 -0
  393. package/dist/theme/seeds.d.ts.map +1 -0
  394. package/dist/theme/seeds.js +52 -0
  395. package/dist/theme/seeds.js.map +1 -0
  396. package/dist/theme/selection.d.ts +94 -0
  397. package/dist/theme/selection.d.ts.map +1 -0
  398. package/dist/theme/selection.js +135 -0
  399. package/dist/theme/selection.js.map +1 -0
  400. package/dist/theme/theme.d.ts +41 -0
  401. package/dist/theme/theme.d.ts.map +1 -0
  402. package/dist/theme/theme.js +34 -0
  403. package/dist/theme/theme.js.map +1 -0
  404. package/dist/widgets/composer-caret.d.ts +47 -0
  405. package/dist/widgets/composer-caret.d.ts.map +1 -0
  406. package/dist/widgets/composer-caret.js +90 -0
  407. package/dist/widgets/composer-caret.js.map +1 -0
  408. package/dist/widgets/composer-click.d.ts +30 -0
  409. package/dist/widgets/composer-click.d.ts.map +1 -0
  410. package/dist/widgets/composer-click.js +89 -0
  411. package/dist/widgets/composer-click.js.map +1 -0
  412. package/dist/widgets/composer-command.d.ts +64 -0
  413. package/dist/widgets/composer-command.d.ts.map +1 -0
  414. package/dist/widgets/composer-command.js +127 -0
  415. package/dist/widgets/composer-command.js.map +1 -0
  416. package/dist/widgets/composer-frame.d.ts +74 -0
  417. package/dist/widgets/composer-frame.d.ts.map +1 -0
  418. package/dist/widgets/composer-frame.js +284 -0
  419. package/dist/widgets/composer-frame.js.map +1 -0
  420. package/dist/widgets/composer-picker.d.ts +89 -0
  421. package/dist/widgets/composer-picker.d.ts.map +1 -0
  422. package/dist/widgets/composer-picker.js +240 -0
  423. package/dist/widgets/composer-picker.js.map +1 -0
  424. package/dist/widgets/diff.d.ts +11 -0
  425. package/dist/widgets/diff.d.ts.map +1 -0
  426. package/dist/widgets/diff.js +19 -0
  427. package/dist/widgets/diff.js.map +1 -0
  428. package/dist/widgets/expand.d.ts +28 -0
  429. package/dist/widgets/expand.d.ts.map +1 -0
  430. package/dist/widgets/expand.js +94 -0
  431. package/dist/widgets/expand.js.map +1 -0
  432. package/dist/widgets/index.d.ts +126 -0
  433. package/dist/widgets/index.d.ts.map +1 -0
  434. package/dist/widgets/index.js +455 -0
  435. package/dist/widgets/index.js.map +1 -0
  436. package/dist/widgets/internals/arrival-lang.d.ts +88 -0
  437. package/dist/widgets/internals/arrival-lang.d.ts.map +1 -0
  438. package/dist/widgets/internals/arrival-lang.js +211 -0
  439. package/dist/widgets/internals/arrival-lang.js.map +1 -0
  440. package/dist/widgets/internals/diff-expand.d.ts +93 -0
  441. package/dist/widgets/internals/diff-expand.d.ts.map +1 -0
  442. package/dist/widgets/internals/diff-expand.js +1106 -0
  443. package/dist/widgets/internals/diff-expand.js.map +1 -0
  444. package/dist/widgets/internals/embedded-syntax.d.ts +62 -0
  445. package/dist/widgets/internals/embedded-syntax.d.ts.map +1 -0
  446. package/dist/widgets/internals/embedded-syntax.js +465 -0
  447. package/dist/widgets/internals/embedded-syntax.js.map +1 -0
  448. package/dist/widgets/internals/markdown-expand.d.ts +57 -0
  449. package/dist/widgets/internals/markdown-expand.d.ts.map +1 -0
  450. package/dist/widgets/internals/markdown-expand.js +980 -0
  451. package/dist/widgets/internals/markdown-expand.js.map +1 -0
  452. package/dist/widgets/internals/overlay-syntax.d.ts +24 -0
  453. package/dist/widgets/internals/overlay-syntax.d.ts.map +1 -0
  454. package/dist/widgets/internals/overlay-syntax.js +90 -0
  455. package/dist/widgets/internals/overlay-syntax.js.map +1 -0
  456. package/dist/widgets/internals/pierre-parse/cleanLastNewline.d.ts +6 -0
  457. package/dist/widgets/internals/pierre-parse/cleanLastNewline.d.ts.map +1 -0
  458. package/dist/widgets/internals/pierre-parse/cleanLastNewline.js +8 -0
  459. package/dist/widgets/internals/pierre-parse/cleanLastNewline.js.map +1 -0
  460. package/dist/widgets/internals/pierre-parse/constants.d.ts +13 -0
  461. package/dist/widgets/internals/pierre-parse/constants.d.ts.map +1 -0
  462. package/dist/widgets/internals/pierre-parse/constants.js +13 -0
  463. package/dist/widgets/internals/pierre-parse/constants.js.map +1 -0
  464. package/dist/widgets/internals/pierre-parse/detachString.d.ts +3 -0
  465. package/dist/widgets/internals/pierre-parse/detachString.d.ts.map +1 -0
  466. package/dist/widgets/internals/pierre-parse/detachString.js +24 -0
  467. package/dist/widgets/internals/pierre-parse/detachString.js.map +1 -0
  468. package/dist/widgets/internals/pierre-parse/index.d.ts +8 -0
  469. package/dist/widgets/internals/pierre-parse/index.d.ts.map +1 -0
  470. package/dist/widgets/internals/pierre-parse/index.js +8 -0
  471. package/dist/widgets/internals/pierre-parse/index.js.map +1 -0
  472. package/dist/widgets/internals/pierre-parse/parseDiffFromFile.d.ts +15 -0
  473. package/dist/widgets/internals/pierre-parse/parseDiffFromFile.d.ts.map +1 -0
  474. package/dist/widgets/internals/pierre-parse/parseDiffFromFile.js +39 -0
  475. package/dist/widgets/internals/pierre-parse/parseDiffFromFile.js.map +1 -0
  476. package/dist/widgets/internals/pierre-parse/parsePatchFiles.d.ts +11 -0
  477. package/dist/widgets/internals/pierre-parse/parsePatchFiles.d.ts.map +1 -0
  478. package/dist/widgets/internals/pierre-parse/parsePatchFiles.js +621 -0
  479. package/dist/widgets/internals/pierre-parse/parsePatchFiles.js.map +1 -0
  480. package/dist/widgets/internals/pierre-parse/types.d.ts +73 -0
  481. package/dist/widgets/internals/pierre-parse/types.d.ts.map +1 -0
  482. package/dist/widgets/internals/pierre-parse/types.js +7 -0
  483. package/dist/widgets/internals/pierre-parse/types.js.map +1 -0
  484. package/dist/widgets/internals/syntax.d.ts +55 -0
  485. package/dist/widgets/internals/syntax.d.ts.map +1 -0
  486. package/dist/widgets/internals/syntax.js +261 -0
  487. package/dist/widgets/internals/syntax.js.map +1 -0
  488. package/dist/widgets/markdown.d.ts +14 -0
  489. package/dist/widgets/markdown.d.ts.map +1 -0
  490. package/dist/widgets/markdown.js +9 -0
  491. package/dist/widgets/markdown.js.map +1 -0
  492. package/dist/widgets/shadow-stream.d.ts +88 -0
  493. package/dist/widgets/shadow-stream.d.ts.map +1 -0
  494. package/dist/widgets/shadow-stream.js +359 -0
  495. package/dist/widgets/shadow-stream.js.map +1 -0
  496. package/dist/widgets/speech.d.ts +36 -0
  497. package/dist/widgets/speech.d.ts.map +1 -0
  498. package/dist/widgets/speech.js +238 -0
  499. package/dist/widgets/speech.js.map +1 -0
  500. package/dist/widgets/stream-birth.d.ts +13 -0
  501. package/dist/widgets/stream-birth.d.ts.map +1 -0
  502. package/dist/widgets/stream-birth.js +70 -0
  503. package/dist/widgets/stream-birth.js.map +1 -0
  504. package/dist/widgets/syntax-boot.d.ts +25 -0
  505. package/dist/widgets/syntax-boot.d.ts.map +1 -0
  506. package/dist/widgets/syntax-boot.js +181 -0
  507. package/dist/widgets/syntax-boot.js.map +1 -0
  508. package/dist/widgets/text.d.ts +16 -0
  509. package/dist/widgets/text.d.ts.map +1 -0
  510. package/dist/widgets/text.js +14 -0
  511. package/dist/widgets/text.js.map +1 -0
  512. package/dist/widgets/transcript.d.ts +44 -0
  513. package/dist/widgets/transcript.d.ts.map +1 -0
  514. package/dist/widgets/transcript.js +106 -0
  515. package/dist/widgets/transcript.js.map +1 -0
  516. package/doom.vert +1840 -0
  517. package/fonts/DejaVuSans.ttf +0 -0
  518. package/fonts/DejaVuSansMono.ttf +0 -0
  519. package/fonts/LICENSE-DejaVu.txt +187 -0
  520. package/fonts/README.md +6 -0
  521. package/gradient.vert +75 -0
  522. package/package.json +147 -4
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Cell-grid lengths. px is banned — never rewrite to cells.
3
+ */
4
+ export type Length = number | "auto" | {
5
+ fr: number;
6
+ } | {
7
+ pct: number;
8
+ } | {
9
+ ch: number;
10
+ } | {
11
+ lh: number;
12
+ };
13
+ /** Resolve length against definite containing-block size (cells). */
14
+ export declare function resolveLength(len: Length | undefined, cb: number, axis?: "main" | "cross"): number | "auto";
15
+ export declare function isFr(len: Length | undefined): len is {
16
+ fr: number;
17
+ };
18
+ //# sourceMappingURL=length.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"length.d.ts","sourceRoot":"","sources":["../../src/layout/length.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1G,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,GAAG,OAAgB,GAAG,MAAM,GAAG,MAAM,CASnH;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAEnE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Cell-grid lengths. px is banned — never rewrite to cells.
3
+ */
4
+ /** Resolve length against definite containing-block size (cells). */
5
+ export function resolveLength(len, cb, axis = "main") {
6
+ if (len === undefined || len === "auto")
7
+ return "auto";
8
+ if (typeof len === "number")
9
+ return Math.max(0, Math.floor(len));
10
+ if ("fr" in len)
11
+ return "auto"; // fr resolved in flex/grid free-space pass
12
+ if ("pct" in len)
13
+ return Math.max(0, Math.floor((cb * len.pct) / 100));
14
+ if ("ch" in len)
15
+ return Math.max(0, len.ch);
16
+ if ("lh" in len)
17
+ return Math.max(0, len.lh);
18
+ void axis;
19
+ return "auto";
20
+ }
21
+ export function isFr(len) {
22
+ return typeof len === "object" && len !== null && "fr" in len;
23
+ }
24
+ //# sourceMappingURL=length.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"length.js","sourceRoot":"","sources":["../../src/layout/length.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,GAAuB,EAAE,EAAU,EAAE,OAAyB,MAAM;IAChG,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACvD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,MAAM,CAAC,CAAC,2CAA2C;IAC3E,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvE,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC;IACV,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAuB;IAC1C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,CAAC;AAChE,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Live paint — predetermined motion owned by the render layer.
3
+ *
4
+ * Logic declares **intent** (`spinner` / `elapsed` / `countdown` / `quota`); paint
5
+ * resolves glyphs and labels from wall clock. Present reads {@link LiveDemand}
6
+ * from the Frame to choose Hz — fps-on-demand, not a global fixed aesthetic loop.
7
+ *
8
+ * Braille frames, spin rates, and duration formatting live **here only**.
9
+ * Callers never pass tick indices or braille strings.
10
+ */
11
+ import type { Positioned } from "./types.js";
12
+ /** Named spinner profiles — semantics, not glyphs. */
13
+ export type SpinnerProfile = "thinking" | "tool" | "working";
14
+ /**
15
+ * Subscription window for the Cmd/Ctrl status overlay. Paint owns remaining
16
+ * duration from {@link resetAt}; producers never send a spelled string.
17
+ */
18
+ export type ChromeQuotaWindow = {
19
+ remainingPercent: number;
20
+ /** Unix seconds when this window resets. */
21
+ resetAt?: number;
22
+ };
23
+ /**
24
+ * Live decoration kind on a paint op / gutter.
25
+ * - spinner: single-cell rotating glyph
26
+ * - elapsed: compact duration from startedAt (label text)
27
+ * - countdown: remaining seconds until retryUntilMs
28
+ * - quota: remaining windows from resetAt (status-rail overlay)
29
+ * - birth: opacity wavefront over source text (W is host-stepped)
30
+ */
31
+ export type LivePaint = {
32
+ kind: "spinner";
33
+ profile: SpinnerProfile;
34
+ /** Target present Hz for this decoration */
35
+ hz: number;
36
+ } | {
37
+ kind: "elapsed";
38
+ startedAt: number;
39
+ /** Prefix e.g. "thinking · " */
40
+ prefix?: string;
41
+ /** Stem before ` · duration`. Default `thinking`. */
42
+ label?: string;
43
+ hz: number;
44
+ } | {
45
+ kind: "countdown";
46
+ untilMs: number;
47
+ hz: number;
48
+ } | {
49
+ kind: "quota";
50
+ windows: readonly ChromeQuotaWindow[];
51
+ /** Static occupancy prefix, e.g. `10k/500k`. Paint joins it with remaining. */
52
+ prefix?: string;
53
+ hz: number;
54
+ } | {
55
+ kind: "birth";
56
+ /** Host frontier key (usually the stream's layout key). */
57
+ siteId: string;
58
+ /** Stream ink mass T. */
59
+ T: number;
60
+ /** This line's start on the stream axis. */
61
+ offset: number;
62
+ /** Prominence left of W. */
63
+ target: number;
64
+ birthFloor: number;
65
+ falloff: number;
66
+ tipWindow: number;
67
+ /**
68
+ * 0 — host arms present from {@link birthFrontierLive}, not this op.
69
+ * A non-zero hz here would keep ticking after W catches T.
70
+ */
71
+ hz: number;
72
+ };
73
+ export type LiveDemand = {
74
+ /** Max Hz among all live ops in the frame (0 = nothing live). */
75
+ maxHz: number;
76
+ /** Counts by kind (debug / metrics). */
77
+ spinners: number;
78
+ elapsed: number;
79
+ quota: number;
80
+ birth: number;
81
+ };
82
+ /** Default Hz per profile — present takes max across frame. */
83
+ export declare const SPINNER_HZ: Record<SpinnerProfile, number>;
84
+ export declare function spinnerLive(profile?: SpinnerProfile): Extract<LivePaint, {
85
+ kind: "spinner";
86
+ }>;
87
+ export declare function elapsedLive(startedAt: number, opts?: {
88
+ prefix?: string;
89
+ label?: string;
90
+ hz?: number;
91
+ }): Extract<LivePaint, {
92
+ kind: "elapsed";
93
+ }>;
94
+ /** Layout measure for {@link formatRetryCountdown}; 999 is the width cap. */
95
+ export declare const RETRY_COUNTDOWN_MEASURE = "Failed to request; retrying in 999 seconds";
96
+ export declare function formatRetryCountdown(untilMs: number, nowMs: number): string;
97
+ export declare function retryCountdownLive(untilMs: number): Extract<LivePaint, {
98
+ kind: "countdown";
99
+ }>;
100
+ /** 1Hz is enough for minute-rounding remaining labels. */
101
+ export declare function quotaLive(windows: readonly ChromeQuotaWindow[], opts?: {
102
+ hz?: number;
103
+ prefix?: string;
104
+ }): Extract<LivePaint, {
105
+ kind: "quota";
106
+ }>;
107
+ /** Compact token count: `999`, `1.5k`, `10k`, `500k`. */
108
+ export declare function formatTokenCount(n: number): string;
109
+ /** `10k/500k`. Empty when neither used nor a window exists. A known window paints `0/500k`. */
110
+ export declare function formatContextOccupancy(used: number, limit: number): string;
111
+ /** Occupancy prefix joined with live remaining, e.g. `10k/500k · 51% left for 5 hours`. */
112
+ export declare function formatHeldStatus(prefix: string, windows: readonly ChromeQuotaWindow[], nowMs: number): string;
113
+ /**
114
+ * Narrow rails drop the spelled quota and keep occupancy. Occupancy is the
115
+ * shorter chip (`10k/500k`); the full hint is `occupancy · 51% left for …`.
116
+ * A rail with no occupancy has nothing shorter to fall back to.
117
+ */
118
+ export declare function formatHeldStatusFit(prefix: string, windows: readonly ChromeQuotaWindow[], nowMs: number, maxColumns: number, measure: (text: string) => number): string;
119
+ export declare function birthLive(opts: {
120
+ siteId: string;
121
+ T: number;
122
+ offset: number;
123
+ target: number;
124
+ birthFloor: number;
125
+ falloff: number;
126
+ tipWindow: number;
127
+ }): Extract<LivePaint, {
128
+ kind: "birth";
129
+ }>;
130
+ /** Resolve spinner glyph for wall clock (ms). */
131
+ export declare function resolveSpinnerGlyph(profile: SpinnerProfile, nowMs: number): string;
132
+ /** Compact duration — paint-side only. */
133
+ export declare function formatElapsedCompact(ms: number): string;
134
+ /**
135
+ * Spelled remaining duration. Same grammar as connect.scm `paint-reset`:
136
+ * nearest minute; skip a leftover 1 minute at hour scale; 59 minutes rounds
137
+ * up; days keep leftover hours, not minutes.
138
+ */
139
+ export declare function formatRemainingSpelled(remainingMs: number): string;
140
+ export declare function formatQuotaWindows(windows: readonly ChromeQuotaWindow[], nowMs: number): string;
141
+ /** Resolve live op to display string at nowMs. Birth is style, not a label. */
142
+ export declare function resolveLiveText(live: LivePaint, nowMs: number): string;
143
+ /** Scan paint order for live demand (after layout). */
144
+ export declare function collectLiveDemand(paintOrder: readonly Positioned[]): LiveDemand;
145
+ //# sourceMappingURL=live_paint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live_paint.d.ts","sourceRoot":"","sources":["../../src/layout/live_paint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Live paint — predetermined motion owned by the render layer.
3
+ *
4
+ * Logic declares **intent** (`spinner` / `elapsed` / `countdown` / `quota`); paint
5
+ * resolves glyphs and labels from wall clock. Present reads {@link LiveDemand}
6
+ * from the Frame to choose Hz — fps-on-demand, not a global fixed aesthetic loop.
7
+ *
8
+ * Braille frames, spin rates, and duration formatting live **here only**.
9
+ * Callers never pass tick indices or braille strings.
10
+ */
11
+ /** Default Hz per profile — present takes max across frame. */
12
+ export const SPINNER_HZ = {
13
+ thinking: 12,
14
+ tool: 12,
15
+ working: 10,
16
+ };
17
+ /** Glyph alphabets — paint-only; never export to model/logic APIs. */
18
+ const SPINNER_GLYPHS = {
19
+ thinking: "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏",
20
+ tool: "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏",
21
+ working: "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏",
22
+ };
23
+ export function spinnerLive(profile = "working") {
24
+ return {
25
+ kind: "spinner",
26
+ profile,
27
+ hz: SPINNER_HZ[profile],
28
+ };
29
+ }
30
+ export function elapsedLive(startedAt, opts) {
31
+ return {
32
+ kind: "elapsed",
33
+ startedAt,
34
+ prefix: opts?.prefix,
35
+ label: opts?.label,
36
+ hz: opts?.hz ?? 2, // 2Hz is enough for second-granularity labels
37
+ };
38
+ }
39
+ /** Layout measure for {@link formatRetryCountdown}; 999 is the width cap. */
40
+ export const RETRY_COUNTDOWN_MEASURE = "Failed to request; retrying in 999 seconds";
41
+ export function formatRetryCountdown(untilMs, nowMs) {
42
+ const seconds = Math.max(0, Math.ceil((untilMs - nowMs) / 1000));
43
+ return `Failed to request; retrying in ${seconds} second${seconds === 1 ? "" : "s"}`;
44
+ }
45
+ export function retryCountdownLive(untilMs) {
46
+ return {
47
+ kind: "countdown",
48
+ untilMs,
49
+ hz: 2,
50
+ };
51
+ }
52
+ /** 1Hz is enough for minute-rounding remaining labels. */
53
+ export function quotaLive(windows, opts) {
54
+ const prefix = (opts?.prefix ?? "").trim();
55
+ return {
56
+ kind: "quota",
57
+ windows,
58
+ ...(prefix === "" ? {} : { prefix }),
59
+ hz: opts?.hz ?? 1,
60
+ };
61
+ }
62
+ /** Compact token count: `999`, `1.5k`, `10k`, `500k`. */
63
+ export function formatTokenCount(n) {
64
+ if (!Number.isFinite(n) || n < 0)
65
+ return "0";
66
+ const x = Math.round(n);
67
+ if (x < 1000)
68
+ return `${x}`;
69
+ const k = x / 1000;
70
+ if (k < 10) {
71
+ const tenths = (Math.round(k * 10) / 10).toFixed(1);
72
+ return tenths.endsWith(".0") ? `${tenths.slice(0, -2)}k` : `${tenths}k`;
73
+ }
74
+ return `${Math.round(k)}k`;
75
+ }
76
+ /** `10k/500k`. Empty when neither used nor a window exists. A known window paints `0/500k`. */
77
+ export function formatContextOccupancy(used, limit) {
78
+ const hasLimit = Number.isFinite(limit) && limit > 0;
79
+ const hasUsed = Number.isFinite(used) && used > 0;
80
+ if (!hasLimit && !hasUsed)
81
+ return "";
82
+ if (!hasLimit)
83
+ return formatTokenCount(used);
84
+ return `${formatTokenCount(Number.isFinite(used) && used > 0 ? used : 0)}/${formatTokenCount(limit)}`;
85
+ }
86
+ /** Occupancy prefix joined with live remaining, e.g. `10k/500k · 51% left for 5 hours`. */
87
+ export function formatHeldStatus(prefix, windows, nowMs) {
88
+ const occupancy = prefix.trim();
89
+ const quota = formatQuotaWindows(windows, nowMs);
90
+ if (occupancy === "")
91
+ return quota;
92
+ return quota === "" ? occupancy : `${occupancy} · ${quota}`;
93
+ }
94
+ /**
95
+ * Narrow rails drop the spelled quota and keep occupancy. Occupancy is the
96
+ * shorter chip (`10k/500k`); the full hint is `occupancy · 51% left for …`.
97
+ * A rail with no occupancy has nothing shorter to fall back to.
98
+ */
99
+ export function formatHeldStatusFit(prefix, windows, nowMs, maxColumns, measure) {
100
+ const full = formatHeldStatus(prefix, windows, nowMs);
101
+ if (maxColumns <= 0 || measure(full) <= maxColumns)
102
+ return full;
103
+ const occupancy = prefix.trim();
104
+ if (occupancy === "" || occupancy === full)
105
+ return full;
106
+ return measure(occupancy) <= maxColumns ? occupancy : full;
107
+ }
108
+ export function birthLive(opts) {
109
+ return {
110
+ kind: "birth",
111
+ siteId: opts.siteId,
112
+ T: opts.T,
113
+ offset: opts.offset,
114
+ target: opts.target,
115
+ birthFloor: opts.birthFloor,
116
+ falloff: opts.falloff,
117
+ tipWindow: opts.tipWindow,
118
+ hz: 0,
119
+ };
120
+ }
121
+ /** Resolve spinner glyph for wall clock (ms). */
122
+ export function resolveSpinnerGlyph(profile, nowMs) {
123
+ const frames = SPINNER_GLYPHS[profile] ?? SPINNER_GLYPHS.working;
124
+ if (frames.length === 0)
125
+ return "·";
126
+ const hz = SPINNER_HZ[profile] ?? 10;
127
+ const i = Math.floor((Math.max(0, nowMs) * hz) / 1000) % frames.length;
128
+ return frames[i] ?? frames[0];
129
+ }
130
+ /** Compact duration — paint-side only. */
131
+ export function formatElapsedCompact(ms) {
132
+ if (!Number.isFinite(ms) || ms < 0)
133
+ return "";
134
+ const s = ms / 1000;
135
+ if (s < 1)
136
+ return "<1s";
137
+ if (s < 60) {
138
+ // In-motion: always one tenth so `3.0s` does not collapse to `3s`
139
+ // and shift the ghost overlay.
140
+ return `${s.toFixed(1)}s`;
141
+ }
142
+ const m = Math.floor(s / 60);
143
+ const rem = Math.round(s % 60);
144
+ return rem > 0 ? `${m}m ${rem}s` : `${m}m`;
145
+ }
146
+ /**
147
+ * Spelled remaining duration. Same grammar as connect.scm `paint-reset`:
148
+ * nearest minute; skip a leftover 1 minute at hour scale; 59 minutes rounds
149
+ * up; days keep leftover hours, not minutes.
150
+ */
151
+ export function formatRemainingSpelled(remainingMs) {
152
+ if (!Number.isFinite(remainingMs))
153
+ return "";
154
+ const s = Math.max(0, Math.round(remainingMs / 1000));
155
+ const mins = s === 0 ? 0 : Math.max(1, Math.trunc((s + 30) / 60));
156
+ if (mins === 0)
157
+ return "";
158
+ if (mins < 60)
159
+ return countWord(mins, "minute");
160
+ if (mins < 1440) {
161
+ const h = Math.trunc(mins / 60);
162
+ const m = mins % 60;
163
+ if (m === 0 || m === 1)
164
+ return hoursPhrase(h);
165
+ if (m === 59)
166
+ return hoursPhrase(h + 1);
167
+ return `${countWord(h, "hour")} and ${countWord(m, "minute")}`;
168
+ }
169
+ const d = Math.trunc(mins / 1440);
170
+ const h = Math.trunc((mins % 1440) / 60);
171
+ if (h === 0)
172
+ return countWord(d, "day");
173
+ return `${countWord(d, "day")} and ${countWord(h, "hour")}`;
174
+ }
175
+ export function formatQuotaWindows(windows, nowMs) {
176
+ const bits = [];
177
+ for (const window of windows) {
178
+ const bit = formatQuotaWindow(window, nowMs);
179
+ if (bit !== "")
180
+ bits.push(bit);
181
+ }
182
+ return bits.join(" · ");
183
+ }
184
+ function formatQuotaWindow(window, nowMs) {
185
+ if (!Number.isFinite(window.remainingPercent))
186
+ return "";
187
+ const left = `${Math.round(Math.max(0, window.remainingPercent))}%`;
188
+ if (window.resetAt == null || !Number.isFinite(window.resetAt))
189
+ return left;
190
+ // A reset deadline expires the snapshot, not just its countdown. Keep the
191
+ // window hidden until the provider reports fresh usage; assuming 100% here
192
+ // would also be wrong if another client has already consumed the new window.
193
+ if (window.resetAt * 1000 <= nowMs)
194
+ return "";
195
+ const until = formatRemainingSpelled(window.resetAt * 1000 - nowMs);
196
+ return until === "" ? left : `${left} left for ${until}`;
197
+ }
198
+ function countWord(n, unit) {
199
+ return `${n} ${unit}${n === 1 ? "" : "s"}`;
200
+ }
201
+ function hoursPhrase(h) {
202
+ return h >= 24 ? countWord(Math.trunc(h / 24), "day") : countWord(h, "hour");
203
+ }
204
+ /** Resolve live op to display string at nowMs. Birth is style, not a label. */
205
+ export function resolveLiveText(live, nowMs) {
206
+ if (live.kind === "spinner") {
207
+ return resolveSpinnerGlyph(live.profile, nowMs);
208
+ }
209
+ if (live.kind === "birth")
210
+ return "";
211
+ if (live.kind === "quota") {
212
+ return formatHeldStatus(live.prefix ?? "", live.windows, nowMs);
213
+ }
214
+ if (live.kind === "countdown") {
215
+ return formatRetryCountdown(live.untilMs, nowMs);
216
+ }
217
+ const elapsed = Math.max(0, nowMs - live.startedAt);
218
+ const label = live.label ?? "thinking";
219
+ const body = elapsed < 500 ? label : `${label} · ${formatElapsedCompact(elapsed)}`;
220
+ return live.prefix == null ? body : `${live.prefix}${formatElapsedCompact(elapsed)}`;
221
+ }
222
+ /** Scan paint order for live demand (after layout). */
223
+ export function collectLiveDemand(paintOrder) {
224
+ let maxHz = 0;
225
+ let spinners = 0;
226
+ let elapsed = 0;
227
+ let quota = 0;
228
+ let birth = 0;
229
+ for (const pos of paintOrder) {
230
+ for (const op of pos.paint) {
231
+ if (op.kind !== "live")
232
+ continue;
233
+ maxHz = Math.max(maxHz, op.live.hz);
234
+ switch (op.live.kind) {
235
+ case "spinner": {
236
+ spinners += 1;
237
+ break;
238
+ }
239
+ case "elapsed":
240
+ case "countdown": {
241
+ elapsed += 1;
242
+ break;
243
+ }
244
+ case "quota": {
245
+ quota += 1;
246
+ break;
247
+ }
248
+ default:
249
+ birth += 1;
250
+ }
251
+ }
252
+ }
253
+ return { maxHz, spinners, elapsed, quota, birth };
254
+ }
255
+ //# sourceMappingURL=live_paint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live_paint.js","sourceRoot":"","sources":["../../src/layout/live_paint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Markdown subset → LayoutNode tree (our engine only).
3
+ * No external MD library. CSI stripped by caller via guard when needed.
4
+ */
5
+ import type { LayoutNode } from "./types.js";
6
+ import type { Style } from "../buffer/index.js";
7
+ export type MarkdownOpts = {
8
+ key?: string;
9
+ baseStyle?: Style;
10
+ };
11
+ /** Inline: **bold**, *italic*, `code`, `[text](url)` — one markdown line. */
12
+ export declare function markdownInlineSegs(line: string, base?: Style): {
13
+ text: string;
14
+ style: Style;
15
+ }[];
16
+ /**
17
+ * Parse markdown subset into a column of text nodes.
18
+ * Headings bold; lists prefixed; fences as code_pad indentation_exception.
19
+ * Cached so measure+place share node identity (and wrap-cache hits).
20
+ */
21
+ export declare function markdownToNodes(src: string, opts?: MarkdownOpts): LayoutNode[];
22
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/layout/markdown.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,KAAK,CAAC;CACnB,CAAC;AAWF,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,KAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EAAE,CAmCnG;AA8BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,YAAiB,GAAG,UAAU,EAAE,CAelF"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Markdown subset → LayoutNode tree (our engine only).
3
+ * No external MD library. CSI stripped by caller via guard when needed.
4
+ */
5
+ import { FgP } from "../lexicon/index.js";
6
+ /** Body voice — one HK-adjusted prominence. Headings lift to primary. */
7
+ function voiceBase(style) {
8
+ return {
9
+ ...style,
10
+ role: style?.role ?? "foreground",
11
+ prominence: style?.prominence ?? FgP.secondary,
12
+ };
13
+ }
14
+ /** Inline: **bold**, *italic*, `code`, `[text](url)` — one markdown line. */
15
+ export function markdownInlineSegs(line, base = {}) {
16
+ const segs = [];
17
+ const re = /(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`|\[[^\]]+\]\([^)]+\))/g;
18
+ let last = 0;
19
+ let m;
20
+ while ((m = re.exec(line)) !== null) {
21
+ if (m.index > last) {
22
+ segs.push({ text: line.slice(last, m.index), style: base });
23
+ }
24
+ const tok = m[0];
25
+ if (tok.startsWith("**")) {
26
+ segs.push({
27
+ text: tok.slice(2, -2),
28
+ style: { ...base, bold: true },
29
+ });
30
+ }
31
+ else if (tok.startsWith("*")) {
32
+ segs.push({ text: tok.slice(1, -1), style: { ...base, italic: true } });
33
+ }
34
+ else if (tok.startsWith("`")) {
35
+ segs.push({
36
+ text: tok.slice(1, -1),
37
+ style: { ...base, role: "code" }, // keep body prominence
38
+ });
39
+ }
40
+ else if (tok.startsWith("[")) {
41
+ const close = tok.indexOf("]");
42
+ const label = close > 0 ? tok.slice(1, close) : tok;
43
+ segs.push({
44
+ text: label.length > 0 ? label : " ",
45
+ style: { ...base, role: "accent", underline: true },
46
+ });
47
+ }
48
+ last = m.index + tok.length;
49
+ }
50
+ if (last < line.length)
51
+ segs.push({ text: line.slice(last), style: base });
52
+ if (segs.length === 0)
53
+ segs.push({ text: line, style: base });
54
+ return segs;
55
+ }
56
+ function lineNode(key, line, style) {
57
+ // engine text is single-style per leaf; flatten bold runs by joining with markers lost → best-effort: strip markers for single style
58
+ const plain = line
59
+ .replaceAll(/\*\*([^*]+)\*\*/g, "$1")
60
+ .replaceAll(/\*([^*]+)\*/g, "$1")
61
+ .replaceAll(/`([^`]+)`/g, "$1");
62
+ const bold = /\*\*/.test(line);
63
+ const italic = !bold && /\*[^*]/.test(line);
64
+ return {
65
+ type: "text",
66
+ key,
67
+ content: plain,
68
+ style: { ...style, bold: bold || style.bold, italic: italic || style.italic },
69
+ };
70
+ }
71
+ const MD_CACHE_LIMIT = 64;
72
+ const mdCache = new Map();
73
+ function mdCacheKey(src, opts) {
74
+ const style = opts.baseStyle;
75
+ const styleKey = style == null
76
+ ? ""
77
+ : `${style.role ?? ""}:${String(style.prominence ?? "")}:${style.bold === true ? "b" : ""}:${style.italic === true ? "i" : ""}`;
78
+ return `${opts.key ?? "md"}\0${styleKey}\0${src}`;
79
+ }
80
+ /**
81
+ * Parse markdown subset into a column of text nodes.
82
+ * Headings bold; lists prefixed; fences as code_pad indentation_exception.
83
+ * Cached so measure+place share node identity (and wrap-cache hits).
84
+ */
85
+ export function markdownToNodes(src, opts = {}) {
86
+ const cacheKey = mdCacheKey(src, opts);
87
+ const cached = mdCache.get(cacheKey);
88
+ if (cached !== undefined) {
89
+ mdCache.delete(cacheKey);
90
+ mdCache.set(cacheKey, cached);
91
+ return cached;
92
+ }
93
+ const out = parseMarkdownNodes(src, opts);
94
+ if (mdCache.size >= MD_CACHE_LIMIT) {
95
+ const oldest = mdCache.keys().next().value;
96
+ if (oldest !== undefined)
97
+ mdCache.delete(oldest);
98
+ }
99
+ mdCache.set(cacheKey, out);
100
+ return out;
101
+ }
102
+ function parseMarkdownNodes(src, opts) {
103
+ const base = voiceBase(opts.baseStyle);
104
+ const heading = { ...base, prominence: FgP.primary };
105
+ const key = opts.key ?? "md";
106
+ const lines = src.replaceAll("\r\n", "\n").split("\n");
107
+ const out = [];
108
+ let i = 0;
109
+ let n = 0;
110
+ while (i < lines.length) {
111
+ const line = lines[i];
112
+ // fenced code
113
+ if (line.trimStart().startsWith("```")) {
114
+ const body = [];
115
+ i++;
116
+ while (i < lines.length && !lines[i].trimStart().startsWith("```")) {
117
+ body.push(lines[i]);
118
+ i++;
119
+ }
120
+ if (i < lines.length)
121
+ i++; // close fence
122
+ out.push({
123
+ type: "indentation_exception",
124
+ key: `${key}:fence-${n++}`,
125
+ kind: "code_pad",
126
+ children: body.map((l, j) => ({
127
+ type: "text",
128
+ key: `${key}:c${n}-${j}`,
129
+ content: l,
130
+ style: { role: "code", prominence: base.prominence ?? FgP.secondary },
131
+ })),
132
+ });
133
+ continue;
134
+ }
135
+ // Headings: same role as body, primary prominence. No emphasis hue.
136
+ if (line.startsWith("### ")) {
137
+ out.push(lineNode(`${key}:h3-${n++}`, line.slice(4), heading));
138
+ i++;
139
+ continue;
140
+ }
141
+ if (line.startsWith("## ")) {
142
+ out.push(lineNode(`${key}:h2-${n++}`, line.slice(3), heading));
143
+ i++;
144
+ continue;
145
+ }
146
+ if (line.startsWith("# ")) {
147
+ out.push(lineNode(`${key}:h1-${n++}`, line.slice(2), heading));
148
+ i++;
149
+ continue;
150
+ }
151
+ if (/^\s*[-*]\s+/.test(line)) {
152
+ const text = line.replace(/^\s*[-*]\s+/, "· ");
153
+ out.push(lineNode(`${key}:li-${n++}`, text, base));
154
+ i++;
155
+ continue;
156
+ }
157
+ if (line.trim() === "") {
158
+ out.push({ type: "text", key: `${key}:sp-${n++}`, content: " " });
159
+ i++;
160
+ continue;
161
+ }
162
+ out.push(lineNode(`${key}:p-${n++}`, line, base));
163
+ i++;
164
+ }
165
+ return out.length > 0 ? out : [{ type: "text", key: `${key}:empty`, content: "" }];
166
+ }
167
+ //# sourceMappingURL=markdown.js.map