@inhuman.tools/quickdraw 0.0.0-stage → 0.3.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 +101 -2
  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 +25 -0
  281. package/dist/runtime/agents_preview.d.ts.map +1 -0
  282. package/dist/runtime/agents_preview.js +118 -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 +146 -3
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Types for the vendored @pierre/diffs@1.2.12 parse surface (Apache-2.0).
3
+ * Origin types: package dist/types.d.ts — FileContents / hunk metadata only.
4
+ * See NOTICE in this directory.
5
+ */
6
+ export interface FileContents {
7
+ name: string;
8
+ contents: string;
9
+ lang?: string;
10
+ header?: string;
11
+ cacheKey?: string;
12
+ }
13
+ export type ChangeTypes = "change" | "rename-pure" | "rename-changed" | "new" | "deleted";
14
+ export interface ContextContent {
15
+ type: "context";
16
+ lines: number;
17
+ additionLineIndex: number;
18
+ deletionLineIndex: number;
19
+ }
20
+ export interface ChangeContent {
21
+ type: "change";
22
+ deletions: number;
23
+ deletionLineIndex: number;
24
+ additions: number;
25
+ additionLineIndex: number;
26
+ }
27
+ export interface Hunk {
28
+ collapsedBefore: number;
29
+ additionStart: number;
30
+ additionCount: number;
31
+ additionLines: number;
32
+ additionLineIndex: number;
33
+ deletionStart: number;
34
+ deletionCount: number;
35
+ deletionLines: number;
36
+ deletionLineIndex: number;
37
+ hunkContent: (ContextContent | ChangeContent)[];
38
+ hunkContext?: string;
39
+ hunkSpecs?: string;
40
+ splitLineStart: number;
41
+ splitLineCount: number;
42
+ unifiedLineStart: number;
43
+ unifiedLineCount: number;
44
+ noEOFCRDeletions: boolean;
45
+ noEOFCRAdditions: boolean;
46
+ }
47
+ export interface FileDiffMetadata {
48
+ name: string;
49
+ prevName?: string;
50
+ lang?: string;
51
+ newObjectId?: string;
52
+ prevObjectId?: string;
53
+ mode?: string;
54
+ prevMode?: string;
55
+ type: ChangeTypes;
56
+ hunks: Hunk[];
57
+ splitLineCount: number;
58
+ unifiedLineCount: number;
59
+ /**
60
+ * LINE BUFFERS. Full-file sides iff `!isPartial`. Compact hunk-touched
61
+ * lines iff `isPartial`. Treating a partial parse as a whole file invents
62
+ * context Pierre never saw.
63
+ */
64
+ isPartial: boolean;
65
+ deletionLines: string[];
66
+ additionLines: string[];
67
+ cacheKey?: string;
68
+ }
69
+ export interface ParsedPatch {
70
+ patchMetadata?: string;
71
+ files: FileDiffMetadata[];
72
+ }
73
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/widgets/internals/pierre-parse/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,KAAK,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,IAAI;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,CAAC,cAAc,GAAG,aAAa,CAAC,EAAE,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,gBAAgB,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Types for the vendored @pierre/diffs@1.2.12 parse surface (Apache-2.0).
3
+ * Origin types: package dist/types.d.ts — FileContents / hunk metadata only.
4
+ * See NOTICE in this directory.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/widgets/internals/pierre-parse/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * ./syntax.js — shiki tokens → Style runs → LayoutNode lines.
3
+ *
4
+ * Prefer warmHighlighter() once at app boot, then highlightCodeSync in paint path.
5
+ */
6
+ import type { Style } from "../../buffer/index.js";
7
+ export type TokenRun = {
8
+ text: string;
9
+ color?: string;
10
+ bold?: boolean;
11
+ italic?: boolean;
12
+ };
13
+ export type HighlightLine = TokenRun[];
14
+ /**
15
+ * Syntax policy stage 1 (quickdraw-color-hygiene): shiki theme is
16
+ * polarity-selected, not hardcoded. `"dark"|"light"` matches theme's
17
+ * `CanvasPolarity` structurally — callers pass `canvasPolarity(ground)`
18
+ * straight through without this package depending on quickdraw-theme.
19
+ */
20
+ export type SyntaxPolarity = "dark" | "light";
21
+ /**
22
+ * Bind the highlighter's default shiki theme polarity (dark/light ground).
23
+ * The value is MobX-observable: retained widgets read it (via
24
+ * {@link syntaxPolarity}) inside their `reaction` data function, so a flip
25
+ * marks their baked-token subtree dirty without any manual invalidation.
26
+ */
27
+ export declare function setHighlightPolarity(polarity: SyntaxPolarity): void;
28
+ /**
29
+ * Ambient highlighter state, MobX-observable. Retained widgets
30
+ * (harness `WorkCellWidget` / `SpeechWidget` / `ComposerWidget`) read these
31
+ * inside their `reaction` data function, so MobX tracks them and re-marks
32
+ * the baked-token subtree dirty when either changes — no manual
33
+ * invalidation counter. Both genuinely affect the bytes a
34
+ * `highlightCodeSync` call returns for identical input:
35
+ * - polarity selects the shiki theme (`github-dark` ↔ `github-light`), and
36
+ * - warmth decides whether tokens are returned at all (cold → plain lines).
37
+ */
38
+ export declare function syntaxPolarity(): SyntaxPolarity;
39
+ export declare function syntaxWarm(): boolean;
40
+ /** Warm shared highlighter (idempotent). Call at app boot. */
41
+ export declare function warmHighlighter(langs?: string[]): Promise<void>;
42
+ export declare function isHighlighterReady(): boolean;
43
+ export declare function highlightCodeSync(code: string, opts?: {
44
+ lang?: string;
45
+ theme?: string;
46
+ polarity?: SyntaxPolarity;
47
+ }): HighlightLine[];
48
+ /**
49
+ * Best-effort language guess for fences without an info string. Cheap signal
50
+ * scoring, not parsing — returns undefined when no signal clears the bar, so
51
+ * callers fall back to plain rendering rather than mis-highlighting.
52
+ */
53
+ export declare function guessLang(code: string): string | undefined;
54
+ export declare function runsToStyle(run: TokenRun): Style;
55
+ //# sourceMappingURL=syntax.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax.d.ts","sourceRoot":"","sources":["../../../src/widgets/internals/syntax.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAGnD,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,QAAQ,EAAE,CAAC;AAKvC;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC;AAkB9C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAEnE;AAkDD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAE/C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,8DAA8D;AAC9D,wBAAsB,eAAe,CAAC,KAAK,GAAE,MAAM,EAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBtF;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAgBD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAAE,GAClE,aAAa,EAAE,CA0CjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA2C1D;AASD,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,KAAK,CAUhD"}
@@ -0,0 +1,261 @@
1
+ /**
2
+ * ./syntax.js — shiki tokens → Style runs → LayoutNode lines.
3
+ *
4
+ * Prefer warmHighlighter() once at app boot, then highlightCodeSync in paint path.
5
+ */
6
+ import { observable } from "mobx";
7
+ import { createHighlighter } from "shiki";
8
+ import { ARRIVAL_LANG } from "./arrival-lang.js";
9
+ import { detectShellEmbeds, spliceEmbeds } from "./embedded-syntax.js";
10
+ const FONT_ITALIC = 1;
11
+ const FONT_BOLD = 2;
12
+ const THEME_DARK = "github-dark";
13
+ const THEME_LIGHT = "github-light";
14
+ const DEFAULT_POLARITY = "dark";
15
+ const DEFAULT_LANG = "text";
16
+ /**
17
+ * Ambient syntax polarity (stage-1 syntax policy). Hosts set this at theme
18
+ * attunement via {@link setHighlightPolarity} from `canvasPolarity(ground)` —
19
+ * widgets (markdown fences, diff) then inherit without threading polarity
20
+ * through every call site. Explicit `opts.polarity` still wins per call.
21
+ */
22
+ const ambientPolarity = observable.box(DEFAULT_POLARITY, { deep: false });
23
+ /** True once {@link warmHighlighter} loaded the shared highlighter. */
24
+ const highlighterWarm = observable.box(false, { deep: false });
25
+ /**
26
+ * Bind the highlighter's default shiki theme polarity (dark/light ground).
27
+ * The value is MobX-observable: retained widgets read it (via
28
+ * {@link syntaxPolarity}) inside their `reaction` data function, so a flip
29
+ * marks their baked-token subtree dirty without any manual invalidation.
30
+ */
31
+ export function setHighlightPolarity(polarity) {
32
+ ambientPolarity.set(polarity === "light" ? "light" : "dark");
33
+ }
34
+ function themeForPolarity(polarity) {
35
+ return polarity === "light" ? THEME_LIGHT : THEME_DARK;
36
+ }
37
+ function resolvePolarity(opts) {
38
+ return opts?.polarity ?? ambientPolarity.get();
39
+ }
40
+ const WARM_LANGS = [
41
+ "typescript",
42
+ "javascript",
43
+ "tsx",
44
+ "jsx",
45
+ "json",
46
+ "markdown",
47
+ "elixir",
48
+ "python",
49
+ "rust",
50
+ "go",
51
+ "bash",
52
+ "shell",
53
+ "css",
54
+ "html",
55
+ "yaml",
56
+ "toml",
57
+ "text",
58
+ ];
59
+ let highlighter = null;
60
+ let warmPromise = null;
61
+ function plainLines(code) {
62
+ return code.split("\n").map((line) => [{ text: line }]);
63
+ }
64
+ function tokenToRun(content, color, fontStyle) {
65
+ const run = { text: content };
66
+ if (color)
67
+ run.color = color;
68
+ const fs = fontStyle ?? 0;
69
+ if (fs & FONT_BOLD)
70
+ run.bold = true;
71
+ if (fs & FONT_ITALIC)
72
+ run.italic = true;
73
+ return run;
74
+ }
75
+ function mapTokens(tokens) {
76
+ return tokens.map((line) => line.map((tok) => tokenToRun(tok.content, tok.color, tok.fontStyle)));
77
+ }
78
+ /**
79
+ * Ambient highlighter state, MobX-observable. Retained widgets
80
+ * (harness `WorkCellWidget` / `SpeechWidget` / `ComposerWidget`) read these
81
+ * inside their `reaction` data function, so MobX tracks them and re-marks
82
+ * the baked-token subtree dirty when either changes — no manual
83
+ * invalidation counter. Both genuinely affect the bytes a
84
+ * `highlightCodeSync` call returns for identical input:
85
+ * - polarity selects the shiki theme (`github-dark` ↔ `github-light`), and
86
+ * - warmth decides whether tokens are returned at all (cold → plain lines).
87
+ */
88
+ export function syntaxPolarity() {
89
+ return ambientPolarity.get();
90
+ }
91
+ export function syntaxWarm() {
92
+ return highlighterWarm.get();
93
+ }
94
+ /** Warm shared highlighter (idempotent). Call at app boot. */
95
+ export async function warmHighlighter(langs = [...WARM_LANGS]) {
96
+ if (highlighter)
97
+ return;
98
+ if (!warmPromise) {
99
+ warmPromise = createHighlighter({
100
+ themes: [THEME_DARK, THEME_LIGHT],
101
+ langs: [...langs, ARRIVAL_LANG],
102
+ })
103
+ .then((h) => {
104
+ highlighter = h;
105
+ highlighterWarm.set(true);
106
+ return h;
107
+ })
108
+ .catch((error) => {
109
+ // Clear the cached promise on failure so the next warm() retries
110
+ // instead of returning the same rejected promise forever.
111
+ warmPromise = null;
112
+ throw error;
113
+ });
114
+ }
115
+ await warmPromise;
116
+ }
117
+ export function isHighlighterReady() {
118
+ return highlighter !== null;
119
+ }
120
+ /**
121
+ * Sync highlight after warmHighlighter(). Falls back to plain if not warm
122
+ * or lang unknown. `theme` overrides `polarity` when both are given;
123
+ * `polarity` (dark default) is the intent-level knob callers should reach for.
124
+ */
125
+ const HIGHLIGHT_CACHE_LIMIT = 128;
126
+ /** Skip shiki for pathological sources — first paint of a huge always-open diff. */
127
+ const HIGHLIGHT_MAX_CHARS = 128 * 1024;
128
+ const highlightCache = new Map();
129
+ function highlightCacheKey(code, lang, theme) {
130
+ return `${theme}\0${lang}\0${code}`;
131
+ }
132
+ export function highlightCodeSync(code, opts) {
133
+ const lang = opts?.lang ?? DEFAULT_LANG;
134
+ const theme = (opts?.theme ?? themeForPolarity(resolvePolarity(opts)));
135
+ if (code.length > HIGHLIGHT_MAX_CHARS)
136
+ return plainLines(code);
137
+ if (!highlighter)
138
+ return plainLines(code);
139
+ const cacheKey = highlightCacheKey(code, lang, theme);
140
+ const cached = highlightCache.get(cacheKey);
141
+ if (cached !== undefined) {
142
+ highlightCache.delete(cacheKey);
143
+ highlightCache.set(cacheKey, cached);
144
+ return cached;
145
+ }
146
+ try {
147
+ const result = highlighter.codeToTokens(code, {
148
+ lang: lang,
149
+ theme,
150
+ });
151
+ const baseline = mapTokens(result.tokens);
152
+ // Shell commands carry other languages inside them (heredocs writing a
153
+ // file, `python -c "…"`). Color those spans with their own language,
154
+ // spliced back into the bash baseline by offset. Only languages that are
155
+ // actually loaded — a cold language tokenizes to plain runs and would
156
+ // trade the bash string color for nothing.
157
+ let lines = baseline;
158
+ if (lang === "bash" || lang === "shell") {
159
+ const loaded = new Set(highlighter.getLoadedLanguages());
160
+ const regions = detectShellEmbeds(code).filter((r) => loaded.has(r.lang));
161
+ if (regions.length > 0) {
162
+ lines = spliceEmbeds(baseline, code, regions, (slice, sliceLang) => highlightCodeSync(slice, { lang: sliceLang, theme }));
163
+ }
164
+ }
165
+ if (highlightCache.size >= HIGHLIGHT_CACHE_LIMIT) {
166
+ const oldest = highlightCache.keys().next().value;
167
+ if (oldest !== undefined)
168
+ highlightCache.delete(oldest);
169
+ }
170
+ highlightCache.set(cacheKey, lines);
171
+ return lines;
172
+ }
173
+ catch {
174
+ return plainLines(code);
175
+ }
176
+ }
177
+ /**
178
+ * Best-effort language guess for fences without an info string. Cheap signal
179
+ * scoring, not parsing — returns undefined when no signal clears the bar, so
180
+ * callers fall back to plain rendering rather than mis-highlighting.
181
+ */
182
+ export function guessLang(code) {
183
+ const head = code.slice(0, 2000);
184
+ const shebang = /^#!\s*(?:\S*\/)?(?:env\s+)?(bash|sh|zsh|node|python3?|ruby)\b/.exec(head);
185
+ if (shebang) {
186
+ const bin = shebang[1];
187
+ if (bin === "node")
188
+ return "javascript";
189
+ if (bin.startsWith("python"))
190
+ return "python";
191
+ if (bin === "ruby")
192
+ return "ruby";
193
+ return "bash";
194
+ }
195
+ const trimmed = head.trim();
196
+ if (/^[{[]/.test(trimmed)) {
197
+ try {
198
+ JSON.parse(code);
199
+ return "json";
200
+ }
201
+ catch {
202
+ // fall through — JS object literals land in the keyword scoring below
203
+ }
204
+ }
205
+ if (/^<!doctype\s|^<html\b|^<\?xml\b/i.test(trimmed))
206
+ return "html";
207
+ const scores = {};
208
+ const bump = (lang, n = 1) => (scores[lang] = (scores[lang] ?? 0) + n);
209
+ if (/\b(interface|type)\s+\w+\s*(?:=\s*)?[{<]|:\s*(string|number|boolean|void)\b|\bas\s+const\b/.test(head))
210
+ bump("typescript", 2);
211
+ if (/\b(const|let|=>|function|import\s.+\sfrom)\b/.test(head))
212
+ bump("typescript", 1);
213
+ if (/\bdef\s+\w+\s*\(|\bself\b|^\s*(from|import)\s+\w+(\s+import\s)?/m.test(head))
214
+ bump("python", 2);
215
+ if (/\bfn\s+\w+|\blet\s+mut\b|::\w+|#\[\w+/.test(head))
216
+ bump("rust", 2);
217
+ if (/\bfunc\s+\w+\(|:=|\bpackage\s+\w+$/m.test(head))
218
+ bump("go", 2);
219
+ if (/^\s*(SELECT|INSERT|UPDATE|DELETE|CREATE\s+TABLE)\b/im.test(head))
220
+ bump("sql", 2);
221
+ if (/^[.#]?[\w-]+\s*\{[^:}]*:[^}]*;/m.test(head))
222
+ bump("css", 2);
223
+ if (/^\s*<[a-z][\w-]*(\s|>)/m.test(head))
224
+ bump("html", 1);
225
+ if (/^\w[\w-]*:\s+\S/m.test(head) && !/[{;]/.test(head))
226
+ bump("yaml", 2);
227
+ if (/^\s*(if|for|while)\s+\[\[|\becho\s|\$\{?\w+/m.test(head))
228
+ bump("bash", 1);
229
+ const MIN_SCORE = 2;
230
+ let best;
231
+ let bestScore = 0;
232
+ for (const [lang, s] of Object.entries(scores)) {
233
+ if (s >= MIN_SCORE && s > bestScore) {
234
+ best = lang;
235
+ bestScore = s;
236
+ }
237
+ }
238
+ return best;
239
+ }
240
+ function parseHexRgb(color) {
241
+ const m = /^#?([0-9a-f]{6})$/i.exec(color.trim());
242
+ if (!m)
243
+ return undefined;
244
+ const n = Number.parseInt(m[1], 16);
245
+ return { r: (n >> 16) & 0xff, g: (n >> 8) & 0xff, b: n & 0xff };
246
+ }
247
+ export function runsToStyle(run) {
248
+ const style = {};
249
+ if (run.color) {
250
+ // Token RGB is hue/chroma. Resolver recasts AL onto the paired role.
251
+ const rgb = parseHexRgb(run.color);
252
+ if (rgb)
253
+ style.fgRgb = rgb;
254
+ }
255
+ if (run.bold)
256
+ style.bold = true;
257
+ if (run.italic)
258
+ style.italic = true;
259
+ return style;
260
+ }
261
+ //# sourceMappingURL=syntax.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syntax.js","sourceRoot":"","sources":["../../../src/widgets/internals/syntax.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Prior markdown node — layout expands at measure/place.
3
+ *
4
+ * WIDTH: `opts.width` is ignored. Allocation is layout's. Honoring it
5
+ * here fights measure/place. Diff is the opposite (`diff.ts`).
6
+ */
7
+ import type { Style } from "../buffer/index.js";
8
+ import type { LayoutNode } from "../layout/types.js";
9
+ export declare function Markdown(content: string, opts?: {
10
+ key?: string;
11
+ width?: number;
12
+ style?: Style;
13
+ }): LayoutNode;
14
+ //# sourceMappingURL=markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/widgets/markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAO,GAAG,UAAU,CAOhH"}
@@ -0,0 +1,9 @@
1
+ export function Markdown(content, opts = {}) {
2
+ return {
3
+ type: "markdown",
4
+ key: opts.key,
5
+ content,
6
+ style: opts.style,
7
+ };
8
+ }
9
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/widgets/markdown.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAwD,EAAE;IAClG,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO;QACP,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * ShadowStream — labeled, height-bounded, gradient-faded window over a live
3
+ * text stream (`ShadowStream`, 2026-07-18).
4
+ *
5
+ * Render-side only: pure `LayoutNode` construction. Caller owns state cycle
6
+ * and collapse. Not a "thinking" feature — any streaming process with a header
7
+ * you want to peek-bound (thinking / searching / compiling / log tail).
8
+ *
9
+ * ## Dominating primitive
10
+ *
11
+ * Always rendered, always at `base` prominence. What changes is how much of
12
+ * the stream is shown.
13
+ *
14
+ * ## Three states
15
+ *
16
+ * - `fully_collapsed` — only the primitive (`▸ thinking`).
17
+ * - `peek` — the shadow window (default live render).
18
+ * - `expanded` — `▾ primitive` + full lines (caller may wrap in a rule gutter).
19
+ *
20
+ * ## Peek shadow (two axes)
21
+ *
22
+ * Paint dissolves FG toward local surface / theme ground. Axes:
23
+ *
24
+ * 1. **Vertical age (lanes):** each body row is **full-width uniform** dim by
25
+ * age — oldest darkest, gradually de-dims toward newest (`kLine`). Older
26
+ * lanes never get a horizontal birth ramp.
27
+ * 2. **Opacity wavefront:** host steps wavefront `W` on the newest line only.
28
+ * Full left of W, gradient after W. Older lanes never wait for W.
29
+ * 3. **Squeeze oldest:** primitive at `base` + per-char horizontal dissolve
30
+ * on the oldest tail (`floor → shadowCap`).
31
+ *
32
+ * Peek always ghost-overlays the oldest visible line onto the primitive row.
33
+ * One-line peek: that row is also the birth tip. Taller peeks: oldest
34
+ * squeezes; middle lanes age; newest carries the wavefront.
35
+ */
36
+ import { type LayoutNode, type LivePaint } from "../layout/index.js";
37
+ import type { SemanticRole } from "../lexicon/index.js";
38
+ export type ShadowStreamState = "fully_collapsed" | "peek" | "expanded";
39
+ export type ShadowStreamProps = {
40
+ /** Dominating label — "thinking", "searching", a translation, … */
41
+ primitive?: string;
42
+ /** Stream body as string (split on `\n`) or pre-split lines. */
43
+ lines?: string | readonly string[];
44
+ state?: ShadowStreamState;
45
+ width?: number;
46
+ /** Peek window height in lines (default 3). */
47
+ height?: number;
48
+ /** Newest-line / primitive prominence (default 0.6). */
49
+ base?: number;
50
+ floor?: number;
51
+ /** Horizontal fade ceiling on the squeezed oldest tail (default 0.4). */
52
+ shadowCap?: number;
53
+ /** Softest tip prominence after the wavefront. */
54
+ birthFloor?: number;
55
+ /** Rest lag of wavefront behind tip when hot. */
56
+ tipWindow?: number;
57
+ /** Role for all stream paint (default muted). */
58
+ role?: SemanticRole;
59
+ /**
60
+ * Local surface the stream sits on — FG opacity dissolves toward this
61
+ * furniture (e.g. `surface` + BgP.panel when inside a Panel), not theme
62
+ * ground. Omit on transparent transcript cells (theme ground is correct).
63
+ */
64
+ surfaceRole?: SemanticRole;
65
+ /** Solidity of surfaceRole (default 1 / solid). */
66
+ surfaceProminence?: number;
67
+ key?: string;
68
+ collapsedIcon?: string;
69
+ expandedIcon?: string;
70
+ /** Live paint on the primitive (e.g. elapsed label). */
71
+ primitiveLive?: LivePaint;
72
+ /**
73
+ * Newest-line opacity wavefront. Off by default — peek paints at age
74
+ * prominence as-is. Pass true to crawl W on the newest line.
75
+ */
76
+ wavefront?: boolean;
77
+ /**
78
+ * When true, expanded body is left empty (caller supplies markdown etc.).
79
+ * Default false: plain lines at base prominence.
80
+ */
81
+ expandedBodyExternal?: boolean;
82
+ };
83
+ /**
84
+ * Pure LayoutNode tree for a ShadowStream.
85
+ * Root is a column flex; does not wrap Indication — caller composes.
86
+ */
87
+ export declare function ShadowStream(props?: ShadowStreamProps): LayoutNode;
88
+ //# sourceMappingURL=shadow-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-stream.d.ts","sourceRoot":"","sources":["../../src/widgets/shadow-stream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,EAA2B,KAAK,UAAU,EAAa,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iDAAiD;IACjD,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAuXF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,iBAAsB,GAAG,UAAU,CAyCtE"}