@contraagent/elements 0.0.0-stage → 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 (648) hide show
  1. package/README.md +83 -2
  2. package/custom-elements.json +5022 -0
  3. package/dist/charts/bar-chart.d.ts +32 -0
  4. package/dist/charts/bar-chart.d.ts.map +1 -0
  5. package/dist/charts/bar-chart.js +70 -0
  6. package/dist/charts/bar-chart.js.map +1 -0
  7. package/dist/charts/base.d.ts +48 -0
  8. package/dist/charts/base.d.ts.map +1 -0
  9. package/dist/charts/base.js +203 -0
  10. package/dist/charts/base.js.map +1 -0
  11. package/dist/charts/column-chart.d.ts +42 -0
  12. package/dist/charts/column-chart.d.ts.map +1 -0
  13. package/dist/charts/column-chart.js +146 -0
  14. package/dist/charts/column-chart.js.map +1 -0
  15. package/dist/charts/heatmap.d.ts +42 -0
  16. package/dist/charts/heatmap.d.ts.map +1 -0
  17. package/dist/charts/heatmap.js +124 -0
  18. package/dist/charts/heatmap.js.map +1 -0
  19. package/dist/charts/index.d.ts +9 -0
  20. package/dist/charts/index.d.ts.map +1 -0
  21. package/dist/charts/index.js +11 -0
  22. package/dist/charts/index.js.map +1 -0
  23. package/dist/charts/line-chart.d.ts +36 -0
  24. package/dist/charts/line-chart.d.ts.map +1 -0
  25. package/dist/charts/line-chart.js +118 -0
  26. package/dist/charts/line-chart.js.map +1 -0
  27. package/dist/charts/scale.d.ts +32 -0
  28. package/dist/charts/scale.d.ts.map +1 -0
  29. package/dist/charts/scale.js +50 -0
  30. package/dist/charts/scale.js.map +1 -0
  31. package/dist/charts/state-grid.d.ts +64 -0
  32. package/dist/charts/state-grid.d.ts.map +1 -0
  33. package/dist/charts/state-grid.js +223 -0
  34. package/dist/charts/state-grid.js.map +1 -0
  35. package/dist/charts/types.d.ts +34 -0
  36. package/dist/charts/types.d.ts.map +1 -0
  37. package/dist/charts/types.js +11 -0
  38. package/dist/charts/types.js.map +1 -0
  39. package/dist/checks/check-table.d.ts +32 -0
  40. package/dist/checks/check-table.d.ts.map +1 -0
  41. package/dist/checks/check-table.js +94 -0
  42. package/dist/checks/check-table.js.map +1 -0
  43. package/dist/checks/index.d.ts +4 -0
  44. package/dist/checks/index.d.ts.map +1 -0
  45. package/dist/checks/index.js +6 -0
  46. package/dist/checks/index.js.map +1 -0
  47. package/dist/checks/styles.d.ts +5 -0
  48. package/dist/checks/styles.d.ts.map +1 -0
  49. package/dist/checks/styles.js +30 -0
  50. package/dist/checks/styles.js.map +1 -0
  51. package/dist/checks/types.d.ts +35 -0
  52. package/dist/checks/types.d.ts.map +1 -0
  53. package/dist/checks/types.js +12 -0
  54. package/dist/checks/types.js.map +1 -0
  55. package/dist/code/code.d.ts +83 -0
  56. package/dist/code/code.d.ts.map +1 -0
  57. package/dist/code/code.js +206 -0
  58. package/dist/code/code.js.map +1 -0
  59. package/dist/code/highlight.d.ts +25 -0
  60. package/dist/code/highlight.d.ts.map +1 -0
  61. package/dist/code/highlight.js +312 -0
  62. package/dist/code/highlight.js.map +1 -0
  63. package/dist/code/index.d.ts +3 -0
  64. package/dist/code/index.d.ts.map +1 -0
  65. package/dist/code/index.js +5 -0
  66. package/dist/code/index.js.map +1 -0
  67. package/dist/core/clock.d.ts +20 -0
  68. package/dist/core/clock.d.ts.map +1 -0
  69. package/dist/core/clock.js +45 -0
  70. package/dist/core/clock.js.map +1 -0
  71. package/dist/core/define.d.ts +3 -0
  72. package/dist/core/define.d.ts.map +1 -0
  73. package/dist/core/define.js +8 -0
  74. package/dist/core/define.js.map +1 -0
  75. package/dist/core/events.d.ts +78 -0
  76. package/dist/core/events.d.ts.map +1 -0
  77. package/dist/core/events.js +8 -0
  78. package/dist/core/events.js.map +1 -0
  79. package/dist/core/format.d.ts +8 -0
  80. package/dist/core/format.d.ts.map +1 -0
  81. package/dist/core/format.js +28 -0
  82. package/dist/core/format.js.map +1 -0
  83. package/dist/core/frame.d.ts +4 -0
  84. package/dist/core/frame.d.ts.map +1 -0
  85. package/dist/core/frame.js +5 -0
  86. package/dist/core/frame.js.map +1 -0
  87. package/dist/core/strings.d.ts +3 -0
  88. package/dist/core/strings.d.ts.map +1 -0
  89. package/dist/core/strings.js +14 -0
  90. package/dist/core/strings.js.map +1 -0
  91. package/dist/core/tone.d.ts +8 -0
  92. package/dist/core/tone.d.ts.map +1 -0
  93. package/dist/core/tone.js +9 -0
  94. package/dist/core/tone.js.map +1 -0
  95. package/dist/count/count.d.ts +22 -0
  96. package/dist/count/count.d.ts.map +1 -0
  97. package/dist/count/count.js +60 -0
  98. package/dist/count/count.js.map +1 -0
  99. package/dist/count/elapsed.d.ts +18 -0
  100. package/dist/count/elapsed.d.ts.map +1 -0
  101. package/dist/count/elapsed.js +33 -0
  102. package/dist/count/elapsed.js.map +1 -0
  103. package/dist/count/index.d.ts +3 -0
  104. package/dist/count/index.d.ts.map +1 -0
  105. package/dist/count/index.js +5 -0
  106. package/dist/count/index.js.map +1 -0
  107. package/dist/define/all.d.ts +15 -0
  108. package/dist/define/all.d.ts.map +1 -0
  109. package/dist/define/all.js +16 -0
  110. package/dist/define/all.js.map +1 -0
  111. package/dist/define/charts.d.ts +8 -0
  112. package/dist/define/charts.d.ts.map +1 -0
  113. package/dist/define/charts.js +15 -0
  114. package/dist/define/charts.js.map +1 -0
  115. package/dist/define/check-table.d.ts +4 -0
  116. package/dist/define/check-table.d.ts.map +1 -0
  117. package/dist/define/check-table.js +7 -0
  118. package/dist/define/check-table.js.map +1 -0
  119. package/dist/define/code.d.ts +4 -0
  120. package/dist/define/code.d.ts.map +1 -0
  121. package/dist/define/code.js +7 -0
  122. package/dist/define/code.js.map +1 -0
  123. package/dist/define/count.d.ts +5 -0
  124. package/dist/define/count.d.ts.map +1 -0
  125. package/dist/define/count.js +9 -0
  126. package/dist/define/count.js.map +1 -0
  127. package/dist/define/data-table.d.ts +4 -0
  128. package/dist/define/data-table.d.ts.map +1 -0
  129. package/dist/define/data-table.js +7 -0
  130. package/dist/define/data-table.js.map +1 -0
  131. package/dist/define/graph.d.ts +6 -0
  132. package/dist/define/graph.d.ts.map +1 -0
  133. package/dist/define/graph.js +9 -0
  134. package/dist/define/graph.js.map +1 -0
  135. package/dist/define/json-tree.d.ts +4 -0
  136. package/dist/define/json-tree.d.ts.map +1 -0
  137. package/dist/define/json-tree.js +7 -0
  138. package/dist/define/json-tree.js.map +1 -0
  139. package/dist/define/lanes.d.ts +4 -0
  140. package/dist/define/lanes.d.ts.map +1 -0
  141. package/dist/define/lanes.js +7 -0
  142. package/dist/define/lanes.js.map +1 -0
  143. package/dist/define/markdown.d.ts +4 -0
  144. package/dist/define/markdown.d.ts.map +1 -0
  145. package/dist/define/markdown.js +7 -0
  146. package/dist/define/markdown.js.map +1 -0
  147. package/dist/define/matrix.d.ts +4 -0
  148. package/dist/define/matrix.d.ts.map +1 -0
  149. package/dist/define/matrix.js +7 -0
  150. package/dist/define/matrix.js.map +1 -0
  151. package/dist/define/segmented.d.ts +4 -0
  152. package/dist/define/segmented.d.ts.map +1 -0
  153. package/dist/define/segmented.js +7 -0
  154. package/dist/define/segmented.js.map +1 -0
  155. package/dist/define/tiles.d.ts +5 -0
  156. package/dist/define/tiles.d.ts.map +1 -0
  157. package/dist/define/tiles.js +9 -0
  158. package/dist/define/tiles.js.map +1 -0
  159. package/dist/define/transcript.d.ts +4 -0
  160. package/dist/define/transcript.d.ts.map +1 -0
  161. package/dist/define/transcript.js +7 -0
  162. package/dist/define/transcript.js.map +1 -0
  163. package/dist/define/tree.d.ts +4 -0
  164. package/dist/define/tree.d.ts.map +1 -0
  165. package/dist/define/tree.js +7 -0
  166. package/dist/define/tree.js.map +1 -0
  167. package/dist/graph/arrange.d.ts +43 -0
  168. package/dist/graph/arrange.d.ts.map +1 -0
  169. package/dist/graph/arrange.js +390 -0
  170. package/dist/graph/arrange.js.map +1 -0
  171. package/dist/graph/card.d.ts +71 -0
  172. package/dist/graph/card.d.ts.map +1 -0
  173. package/dist/graph/card.js +185 -0
  174. package/dist/graph/card.js.map +1 -0
  175. package/dist/graph/host.d.ts +82 -0
  176. package/dist/graph/host.d.ts.map +1 -0
  177. package/dist/graph/host.js +21 -0
  178. package/dist/graph/host.js.map +1 -0
  179. package/dist/graph/icons.d.ts +7 -0
  180. package/dist/graph/icons.d.ts.map +1 -0
  181. package/dist/graph/icons.js +18 -0
  182. package/dist/graph/icons.js.map +1 -0
  183. package/dist/graph/index.d.ts +15 -0
  184. package/dist/graph/index.d.ts.map +1 -0
  185. package/dist/graph/index.js +17 -0
  186. package/dist/graph/index.js.map +1 -0
  187. package/dist/graph/layered-graph.d.ts +226 -0
  188. package/dist/graph/layered-graph.d.ts.map +1 -0
  189. package/dist/graph/layered-graph.js +396 -0
  190. package/dist/graph/layered-graph.js.map +1 -0
  191. package/dist/graph/layout.d.ts +80 -0
  192. package/dist/graph/layout.d.ts.map +1 -0
  193. package/dist/graph/layout.js +264 -0
  194. package/dist/graph/layout.js.map +1 -0
  195. package/dist/graph/marks.d.ts +24 -0
  196. package/dist/graph/marks.d.ts.map +1 -0
  197. package/dist/graph/marks.js +38 -0
  198. package/dist/graph/marks.js.map +1 -0
  199. package/dist/graph/nav.d.ts +14 -0
  200. package/dist/graph/nav.d.ts.map +1 -0
  201. package/dist/graph/nav.js +14 -0
  202. package/dist/graph/nav.js.map +1 -0
  203. package/dist/graph/pan-zoom.d.ts +80 -0
  204. package/dist/graph/pan-zoom.d.ts.map +1 -0
  205. package/dist/graph/pan-zoom.js +191 -0
  206. package/dist/graph/pan-zoom.js.map +1 -0
  207. package/dist/graph/paths.d.ts +9 -0
  208. package/dist/graph/paths.d.ts.map +1 -0
  209. package/dist/graph/paths.js +44 -0
  210. package/dist/graph/paths.js.map +1 -0
  211. package/dist/graph/place-card.d.ts +36 -0
  212. package/dist/graph/place-card.d.ts.map +1 -0
  213. package/dist/graph/place-card.js +68 -0
  214. package/dist/graph/place-card.js.map +1 -0
  215. package/dist/graph/strings.d.ts +50 -0
  216. package/dist/graph/strings.d.ts.map +1 -0
  217. package/dist/graph/strings.js +37 -0
  218. package/dist/graph/strings.js.map +1 -0
  219. package/dist/graph/styles.d.ts +2 -0
  220. package/dist/graph/styles.d.ts.map +1 -0
  221. package/dist/graph/styles.js +203 -0
  222. package/dist/graph/styles.js.map +1 -0
  223. package/dist/graph/types.d.ts +184 -0
  224. package/dist/graph/types.d.ts.map +1 -0
  225. package/dist/graph/types.js +2 -0
  226. package/dist/graph/types.js.map +1 -0
  227. package/dist/graph/view.d.ts +17 -0
  228. package/dist/graph/view.d.ts.map +1 -0
  229. package/dist/graph/view.js +21 -0
  230. package/dist/graph/view.js.map +1 -0
  231. package/dist/graph/views/dag.d.ts +10 -0
  232. package/dist/graph/views/dag.d.ts.map +1 -0
  233. package/dist/graph/views/dag.js +292 -0
  234. package/dist/graph/views/dag.js.map +1 -0
  235. package/dist/graph/views/foot.d.ts +8 -0
  236. package/dist/graph/views/foot.d.ts.map +1 -0
  237. package/dist/graph/views/foot.js +103 -0
  238. package/dist/graph/views/foot.js.map +1 -0
  239. package/dist/graph/views/node-table.d.ts +17 -0
  240. package/dist/graph/views/node-table.d.ts.map +1 -0
  241. package/dist/graph/views/node-table.js +80 -0
  242. package/dist/graph/views/node-table.js.map +1 -0
  243. package/dist/index.d.ts +24 -0
  244. package/dist/index.d.ts.map +1 -0
  245. package/dist/index.js +28 -0
  246. package/dist/index.js.map +1 -0
  247. package/dist/json/index.d.ts +2 -0
  248. package/dist/json/index.d.ts.map +1 -0
  249. package/dist/json/index.js +3 -0
  250. package/dist/json/index.js.map +1 -0
  251. package/dist/json/json-tree.d.ts +21 -0
  252. package/dist/json/json-tree.d.ts.map +1 -0
  253. package/dist/json/json-tree.js +51 -0
  254. package/dist/json/json-tree.js.map +1 -0
  255. package/dist/lanes/index.d.ts +5 -0
  256. package/dist/lanes/index.d.ts.map +1 -0
  257. package/dist/lanes/index.js +7 -0
  258. package/dist/lanes/index.js.map +1 -0
  259. package/dist/lanes/lanes.d.ts +56 -0
  260. package/dist/lanes/lanes.d.ts.map +1 -0
  261. package/dist/lanes/lanes.js +160 -0
  262. package/dist/lanes/lanes.js.map +1 -0
  263. package/dist/lanes/stack.d.ts +26 -0
  264. package/dist/lanes/stack.d.ts.map +1 -0
  265. package/dist/lanes/stack.js +43 -0
  266. package/dist/lanes/stack.js.map +1 -0
  267. package/dist/lanes/styles.d.ts +2 -0
  268. package/dist/lanes/styles.d.ts.map +1 -0
  269. package/dist/lanes/styles.js +30 -0
  270. package/dist/lanes/styles.js.map +1 -0
  271. package/dist/lanes/types.d.ts +41 -0
  272. package/dist/lanes/types.d.ts.map +1 -0
  273. package/dist/lanes/types.js +6 -0
  274. package/dist/lanes/types.js.map +1 -0
  275. package/dist/markdown/cae-markdown.d.ts +37 -0
  276. package/dist/markdown/cae-markdown.d.ts.map +1 -0
  277. package/dist/markdown/cae-markdown.js +68 -0
  278. package/dist/markdown/cae-markdown.js.map +1 -0
  279. package/dist/markdown/highlight.d.ts +2 -0
  280. package/dist/markdown/highlight.d.ts.map +1 -0
  281. package/dist/markdown/highlight.js +3 -0
  282. package/dist/markdown/highlight.js.map +1 -0
  283. package/dist/markdown/index.d.ts +4 -0
  284. package/dist/markdown/index.d.ts.map +1 -0
  285. package/dist/markdown/index.js +6 -0
  286. package/dist/markdown/index.js.map +1 -0
  287. package/dist/markdown/markdown.d.ts +4 -0
  288. package/dist/markdown/markdown.d.ts.map +1 -0
  289. package/dist/markdown/markdown.js +105 -0
  290. package/dist/markdown/markdown.js.map +1 -0
  291. package/dist/matrix/grid-step.d.ts +8 -0
  292. package/dist/matrix/grid-step.d.ts.map +1 -0
  293. package/dist/matrix/grid-step.js +69 -0
  294. package/dist/matrix/grid-step.js.map +1 -0
  295. package/dist/matrix/index.d.ts +5 -0
  296. package/dist/matrix/index.d.ts.map +1 -0
  297. package/dist/matrix/index.js +7 -0
  298. package/dist/matrix/index.js.map +1 -0
  299. package/dist/matrix/mark-matrix.d.ts +97 -0
  300. package/dist/matrix/mark-matrix.d.ts.map +1 -0
  301. package/dist/matrix/mark-matrix.js +272 -0
  302. package/dist/matrix/mark-matrix.js.map +1 -0
  303. package/dist/matrix/styles.d.ts +4 -0
  304. package/dist/matrix/styles.d.ts.map +1 -0
  305. package/dist/matrix/styles.js +47 -0
  306. package/dist/matrix/styles.js.map +1 -0
  307. package/dist/matrix/types.d.ts +79 -0
  308. package/dist/matrix/types.d.ts.map +1 -0
  309. package/dist/matrix/types.js +5 -0
  310. package/dist/matrix/types.js.map +1 -0
  311. package/dist/primitives/fact-line.d.ts +14 -0
  312. package/dist/primitives/fact-line.d.ts.map +1 -0
  313. package/dist/primitives/fact-line.js +18 -0
  314. package/dist/primitives/fact-line.js.map +1 -0
  315. package/dist/primitives/icon.d.ts +14 -0
  316. package/dist/primitives/icon.d.ts.map +1 -0
  317. package/dist/primitives/icon.js +19 -0
  318. package/dist/primitives/icon.js.map +1 -0
  319. package/dist/primitives/index.d.ts +10 -0
  320. package/dist/primitives/index.d.ts.map +1 -0
  321. package/dist/primitives/index.js +13 -0
  322. package/dist/primitives/index.js.map +1 -0
  323. package/dist/primitives/legend.d.ts +28 -0
  324. package/dist/primitives/legend.d.ts.map +1 -0
  325. package/dist/primitives/legend.js +28 -0
  326. package/dist/primitives/legend.js.map +1 -0
  327. package/dist/primitives/pill.d.ts +23 -0
  328. package/dist/primitives/pill.d.ts.map +1 -0
  329. package/dist/primitives/pill.js +40 -0
  330. package/dist/primitives/pill.js.map +1 -0
  331. package/dist/primitives/roving-focus.d.ts +47 -0
  332. package/dist/primitives/roving-focus.d.ts.map +1 -0
  333. package/dist/primitives/roving-focus.js +111 -0
  334. package/dist/primitives/roving-focus.js.map +1 -0
  335. package/dist/primitives/segmented.d.ts +41 -0
  336. package/dist/primitives/segmented.d.ts.map +1 -0
  337. package/dist/primitives/segmented.js +88 -0
  338. package/dist/primitives/segmented.js.map +1 -0
  339. package/dist/primitives/share-bar.d.ts +37 -0
  340. package/dist/primitives/share-bar.d.ts.map +1 -0
  341. package/dist/primitives/share-bar.js +69 -0
  342. package/dist/primitives/share-bar.js.map +1 -0
  343. package/dist/primitives/states.d.ts +19 -0
  344. package/dist/primitives/states.d.ts.map +1 -0
  345. package/dist/primitives/states.js +11 -0
  346. package/dist/primitives/states.js.map +1 -0
  347. package/dist/primitives/window.d.ts +24 -0
  348. package/dist/primitives/window.d.ts.map +1 -0
  349. package/dist/primitives/window.js +56 -0
  350. package/dist/primitives/window.js.map +1 -0
  351. package/dist/styles/chips.d.ts +2 -0
  352. package/dist/styles/chips.d.ts.map +1 -0
  353. package/dist/styles/chips.js +18 -0
  354. package/dist/styles/chips.js.map +1 -0
  355. package/dist/styles/facts.d.ts +2 -0
  356. package/dist/styles/facts.d.ts.map +1 -0
  357. package/dist/styles/facts.js +7 -0
  358. package/dist/styles/facts.js.map +1 -0
  359. package/dist/styles/index.d.ts +16 -0
  360. package/dist/styles/index.d.ts.map +1 -0
  361. package/dist/styles/index.js +15 -0
  362. package/dist/styles/index.js.map +1 -0
  363. package/dist/styles/layout.d.ts +2 -0
  364. package/dist/styles/layout.d.ts.map +1 -0
  365. package/dist/styles/layout.js +33 -0
  366. package/dist/styles/layout.js.map +1 -0
  367. package/dist/styles/marks.d.ts +2 -0
  368. package/dist/styles/marks.d.ts.map +1 -0
  369. package/dist/styles/marks.js +30 -0
  370. package/dist/styles/marks.js.map +1 -0
  371. package/dist/styles/meter.d.ts +3 -0
  372. package/dist/styles/meter.d.ts.map +1 -0
  373. package/dist/styles/meter.js +9 -0
  374. package/dist/styles/meter.js.map +1 -0
  375. package/dist/styles/motion.d.ts +2 -0
  376. package/dist/styles/motion.d.ts.map +1 -0
  377. package/dist/styles/motion.js +27 -0
  378. package/dist/styles/motion.js.map +1 -0
  379. package/dist/styles/prose.d.ts +3 -0
  380. package/dist/styles/prose.d.ts.map +1 -0
  381. package/dist/styles/prose.js +64 -0
  382. package/dist/styles/prose.js.map +1 -0
  383. package/dist/styles/reset.d.ts +2 -0
  384. package/dist/styles/reset.d.ts.map +1 -0
  385. package/dist/styles/reset.js +13 -0
  386. package/dist/styles/reset.js.map +1 -0
  387. package/dist/styles/status.d.ts +2 -0
  388. package/dist/styles/status.d.ts.map +1 -0
  389. package/dist/styles/status.js +52 -0
  390. package/dist/styles/status.js.map +1 -0
  391. package/dist/styles/text.d.ts +2 -0
  392. package/dist/styles/text.d.ts.map +1 -0
  393. package/dist/styles/text.js +21 -0
  394. package/dist/styles/text.js.map +1 -0
  395. package/dist/styles/tokens.d.ts +8 -0
  396. package/dist/styles/tokens.d.ts.map +1 -0
  397. package/dist/styles/tokens.js +32 -0
  398. package/dist/styles/tokens.js.map +1 -0
  399. package/dist/table/data-table.d.ts +106 -0
  400. package/dist/table/data-table.d.ts.map +1 -0
  401. package/dist/table/data-table.js +408 -0
  402. package/dist/table/data-table.js.map +1 -0
  403. package/dist/table/index.d.ts +4 -0
  404. package/dist/table/index.d.ts.map +1 -0
  405. package/dist/table/index.js +6 -0
  406. package/dist/table/index.js.map +1 -0
  407. package/dist/table/styles.d.ts +2 -0
  408. package/dist/table/styles.d.ts.map +1 -0
  409. package/dist/table/styles.js +32 -0
  410. package/dist/table/styles.js.map +1 -0
  411. package/dist/table/types.d.ts +48 -0
  412. package/dist/table/types.d.ts.map +1 -0
  413. package/dist/table/types.js +30 -0
  414. package/dist/table/types.js.map +1 -0
  415. package/dist/themes/boot.d.ts +7 -0
  416. package/dist/themes/boot.d.ts.map +1 -0
  417. package/dist/themes/boot.js +14 -0
  418. package/dist/themes/boot.js.map +1 -0
  419. package/dist/themes/choice.d.ts +16 -0
  420. package/dist/themes/choice.d.ts.map +1 -0
  421. package/dist/themes/choice.js +45 -0
  422. package/dist/themes/choice.js.map +1 -0
  423. package/dist/themes/data.d.ts +43 -0
  424. package/dist/themes/data.d.ts.map +1 -0
  425. package/dist/themes/data.js +408 -0
  426. package/dist/themes/data.js.map +1 -0
  427. package/dist/themes/index.d.ts +7 -0
  428. package/dist/themes/index.d.ts.map +1 -0
  429. package/dist/themes/index.js +11 -0
  430. package/dist/themes/index.js.map +1 -0
  431. package/dist/themes/sheet.d.ts +16 -0
  432. package/dist/themes/sheet.d.ts.map +1 -0
  433. package/dist/themes/sheet.js +28 -0
  434. package/dist/themes/sheet.js.map +1 -0
  435. package/dist/themes/token-meanings.d.ts +3 -0
  436. package/dist/themes/token-meanings.d.ts.map +1 -0
  437. package/dist/themes/token-meanings.js +67 -0
  438. package/dist/themes/token-meanings.js.map +1 -0
  439. package/dist/themes/tokens-list.d.ts +14 -0
  440. package/dist/themes/tokens-list.d.ts.map +1 -0
  441. package/dist/themes/tokens-list.js +69 -0
  442. package/dist/themes/tokens-list.js.map +1 -0
  443. package/dist/tiles/index.d.ts +4 -0
  444. package/dist/tiles/index.d.ts.map +1 -0
  445. package/dist/tiles/index.js +6 -0
  446. package/dist/tiles/index.js.map +1 -0
  447. package/dist/tiles/stat-tiles.d.ts +40 -0
  448. package/dist/tiles/stat-tiles.d.ts.map +1 -0
  449. package/dist/tiles/stat-tiles.js +99 -0
  450. package/dist/tiles/stat-tiles.js.map +1 -0
  451. package/dist/tiles/styles.d.ts +2 -0
  452. package/dist/tiles/styles.d.ts.map +1 -0
  453. package/dist/tiles/styles.js +23 -0
  454. package/dist/tiles/styles.js.map +1 -0
  455. package/dist/tiles/types.d.ts +22 -0
  456. package/dist/tiles/types.d.ts.map +1 -0
  457. package/dist/tiles/types.js +2 -0
  458. package/dist/tiles/types.js.map +1 -0
  459. package/dist/transcript/follow-scroll.d.ts +21 -0
  460. package/dist/transcript/follow-scroll.d.ts.map +1 -0
  461. package/dist/transcript/follow-scroll.js +76 -0
  462. package/dist/transcript/follow-scroll.js.map +1 -0
  463. package/dist/transcript/index.d.ts +5 -0
  464. package/dist/transcript/index.d.ts.map +1 -0
  465. package/dist/transcript/index.js +7 -0
  466. package/dist/transcript/index.js.map +1 -0
  467. package/dist/transcript/styles.d.ts +2 -0
  468. package/dist/transcript/styles.d.ts.map +1 -0
  469. package/dist/transcript/styles.js +114 -0
  470. package/dist/transcript/styles.js.map +1 -0
  471. package/dist/transcript/tags.d.ts +6 -0
  472. package/dist/transcript/tags.d.ts.map +1 -0
  473. package/dist/transcript/tags.js +13 -0
  474. package/dist/transcript/tags.js.map +1 -0
  475. package/dist/transcript/tool-card.d.ts +16 -0
  476. package/dist/transcript/tool-card.d.ts.map +1 -0
  477. package/dist/transcript/tool-card.js +87 -0
  478. package/dist/transcript/tool-card.js.map +1 -0
  479. package/dist/transcript/transcript.d.ts +103 -0
  480. package/dist/transcript/transcript.d.ts.map +1 -0
  481. package/dist/transcript/transcript.js +397 -0
  482. package/dist/transcript/transcript.js.map +1 -0
  483. package/dist/transcript/types.d.ts +161 -0
  484. package/dist/transcript/types.d.ts.map +1 -0
  485. package/dist/transcript/types.js +25 -0
  486. package/dist/transcript/types.js.map +1 -0
  487. package/dist/tree/index.d.ts +2 -0
  488. package/dist/tree/index.d.ts.map +1 -0
  489. package/dist/tree/index.js +4 -0
  490. package/dist/tree/index.js.map +1 -0
  491. package/dist/tree/tree.d.ts +83 -0
  492. package/dist/tree/tree.d.ts.map +1 -0
  493. package/dist/tree/tree.js +251 -0
  494. package/dist/tree/tree.js.map +1 -0
  495. package/docs/charts.md +58 -0
  496. package/docs/check-table.md +40 -0
  497. package/docs/code.md +55 -0
  498. package/docs/data-table.md +57 -0
  499. package/docs/examples/charts.ts +61 -0
  500. package/docs/examples/check-table.ts +19 -0
  501. package/docs/examples/ci-pipeline.ts +271 -0
  502. package/docs/examples/code.ts +28 -0
  503. package/docs/examples/data-table.ts +39 -0
  504. package/docs/examples/graph.ts +57 -0
  505. package/docs/examples/lanes.ts +40 -0
  506. package/docs/examples/matrix.ts +56 -0
  507. package/docs/examples/page.css +34 -0
  508. package/docs/examples/segmented.ts +18 -0
  509. package/docs/examples/status.ts +30 -0
  510. package/docs/examples/theme.css +54 -0
  511. package/docs/examples/tiles.ts +27 -0
  512. package/docs/examples/transcript.ts +59 -0
  513. package/docs/examples/tree.ts +44 -0
  514. package/docs/graph.md +112 -0
  515. package/docs/lanes.md +48 -0
  516. package/docs/matrix.md +34 -0
  517. package/docs/page.md +87 -0
  518. package/docs/primitives.md +57 -0
  519. package/docs/strings.md +16 -0
  520. package/docs/theming.md +147 -0
  521. package/docs/tiles.md +40 -0
  522. package/docs/transcript.md +73 -0
  523. package/docs/tree.md +44 -0
  524. package/docs/tsconfig.json +20 -0
  525. package/package.json +177 -4
  526. package/src/charts/bar-chart.ts +74 -0
  527. package/src/charts/base.ts +188 -0
  528. package/src/charts/column-chart.ts +153 -0
  529. package/src/charts/heatmap.ts +129 -0
  530. package/src/charts/index.ts +10 -0
  531. package/src/charts/line-chart.ts +128 -0
  532. package/src/charts/scale.ts +61 -0
  533. package/src/charts/state-grid.ts +245 -0
  534. package/src/charts/types.ts +48 -0
  535. package/src/checks/check-table.ts +85 -0
  536. package/src/checks/index.ts +5 -0
  537. package/src/checks/styles.ts +31 -0
  538. package/src/checks/types.ts +48 -0
  539. package/src/code/code.ts +199 -0
  540. package/src/code/highlight.ts +378 -0
  541. package/src/code/index.ts +4 -0
  542. package/src/core/clock.ts +46 -0
  543. package/src/core/define.ts +7 -0
  544. package/src/core/events.ts +89 -0
  545. package/src/core/format.ts +25 -0
  546. package/src/core/frame.ts +5 -0
  547. package/src/core/strings.ts +11 -0
  548. package/src/core/tone.ts +14 -0
  549. package/src/count/count.ts +54 -0
  550. package/src/count/elapsed.ts +33 -0
  551. package/src/count/index.ts +4 -0
  552. package/src/define/all.ts +15 -0
  553. package/src/define/charts.ts +17 -0
  554. package/src/define/check-table.ts +9 -0
  555. package/src/define/code.ts +9 -0
  556. package/src/define/count.ts +11 -0
  557. package/src/define/data-table.ts +9 -0
  558. package/src/define/graph.ts +11 -0
  559. package/src/define/json-tree.ts +9 -0
  560. package/src/define/lanes.ts +9 -0
  561. package/src/define/markdown.ts +9 -0
  562. package/src/define/matrix.ts +9 -0
  563. package/src/define/segmented.ts +9 -0
  564. package/src/define/tiles.ts +11 -0
  565. package/src/define/transcript.ts +9 -0
  566. package/src/define/tree.ts +9 -0
  567. package/src/graph/arrange.ts +399 -0
  568. package/src/graph/card.ts +209 -0
  569. package/src/graph/host.ts +100 -0
  570. package/src/graph/icons.ts +23 -0
  571. package/src/graph/index.ts +16 -0
  572. package/src/graph/layered-graph.ts +417 -0
  573. package/src/graph/layout.ts +331 -0
  574. package/src/graph/marks.ts +42 -0
  575. package/src/graph/nav.ts +19 -0
  576. package/src/graph/pan-zoom.ts +219 -0
  577. package/src/graph/paths.ts +41 -0
  578. package/src/graph/place-card.ts +93 -0
  579. package/src/graph/strings.ts +86 -0
  580. package/src/graph/styles.ts +204 -0
  581. package/src/graph/types.ts +202 -0
  582. package/src/graph/view.ts +28 -0
  583. package/src/graph/views/dag.ts +294 -0
  584. package/src/graph/views/foot.ts +109 -0
  585. package/src/graph/views/node-table.ts +90 -0
  586. package/src/index.ts +27 -0
  587. package/src/json/index.ts +2 -0
  588. package/src/json/json-tree.ts +49 -0
  589. package/src/lanes/index.ts +6 -0
  590. package/src/lanes/lanes.ts +143 -0
  591. package/src/lanes/stack.ts +51 -0
  592. package/src/lanes/styles.ts +30 -0
  593. package/src/lanes/types.ts +51 -0
  594. package/src/markdown/cae-markdown.ts +64 -0
  595. package/src/markdown/highlight.ts +2 -0
  596. package/src/markdown/index.ts +5 -0
  597. package/src/markdown/markdown.ts +110 -0
  598. package/src/matrix/grid-step.ts +58 -0
  599. package/src/matrix/index.ts +6 -0
  600. package/src/matrix/mark-matrix.ts +285 -0
  601. package/src/matrix/styles.ts +48 -0
  602. package/src/matrix/types.ts +83 -0
  603. package/src/primitives/fact-line.ts +26 -0
  604. package/src/primitives/icon.ts +26 -0
  605. package/src/primitives/index.ts +12 -0
  606. package/src/primitives/legend.ts +56 -0
  607. package/src/primitives/pill.ts +58 -0
  608. package/src/primitives/roving-focus.ts +138 -0
  609. package/src/primitives/segmented.ts +92 -0
  610. package/src/primitives/share-bar.ts +94 -0
  611. package/src/primitives/states.ts +28 -0
  612. package/src/primitives/window.ts +65 -0
  613. package/src/styles/chips.ts +18 -0
  614. package/src/styles/facts.ts +7 -0
  615. package/src/styles/index.ts +19 -0
  616. package/src/styles/layout.ts +33 -0
  617. package/src/styles/marks.ts +30 -0
  618. package/src/styles/meter.ts +9 -0
  619. package/src/styles/motion.ts +27 -0
  620. package/src/styles/prose.ts +64 -0
  621. package/src/styles/reset.ts +13 -0
  622. package/src/styles/status.ts +52 -0
  623. package/src/styles/text.ts +21 -0
  624. package/src/styles/tokens.ts +35 -0
  625. package/src/table/data-table.ts +367 -0
  626. package/src/table/index.ts +5 -0
  627. package/src/table/styles.ts +32 -0
  628. package/src/table/types.ts +73 -0
  629. package/src/themes/boot.ts +14 -0
  630. package/src/themes/choice.ts +47 -0
  631. package/src/themes/data.ts +433 -0
  632. package/src/themes/index.ts +10 -0
  633. package/src/themes/sheet.ts +29 -0
  634. package/src/themes/token-meanings.ts +67 -0
  635. package/src/themes/tokens-list.ts +82 -0
  636. package/src/tiles/index.ts +5 -0
  637. package/src/tiles/stat-tiles.ts +92 -0
  638. package/src/tiles/styles.ts +23 -0
  639. package/src/tiles/types.ts +20 -0
  640. package/src/transcript/follow-scroll.ts +72 -0
  641. package/src/transcript/index.ts +6 -0
  642. package/src/transcript/styles.ts +114 -0
  643. package/src/transcript/tags.ts +18 -0
  644. package/src/transcript/tool-card.ts +103 -0
  645. package/src/transcript/transcript.ts +358 -0
  646. package/src/transcript/types.ts +167 -0
  647. package/src/tree/index.ts +3 -0
  648. package/src/tree/tree.ts +263 -0
@@ -0,0 +1,143 @@
1
+ import { LitElement, html, nothing, type PropertyValues, type TemplateResult } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import { repeat } from 'lit/directives/repeat.js';
4
+ import { withDefaults } from '../core/strings.js';
5
+ import { legend, legendStyles, type LegendItem } from '../primitives/legend.js';
6
+ import { base } from '../styles/index.js';
7
+ import { barBox, fitRange, stack } from './stack.js';
8
+ import { lanesStyles } from './styles.js';
9
+ import { DEFAULT_LANES_STRINGS, type Lane, type LaneStyle, type LanesStrings, type TimeRange } from './types.js';
10
+
11
+ /** A span shorter than this shows seconds on its axis (else every tick reads the same minute). */
12
+ const SECONDS_BELOW_MS = 10 * 60e3;
13
+
14
+ /**
15
+ * Bars on a time axis, a lane per group: each bar as long as it took, the
16
+ * overlapping bars of a lane stacked, a running bar (`end` null) growing until
17
+ * now and a line at now. A bar's look is its style in `barStyles`, whose
18
+ * labels are the legend (a row per `group`). The bars grow in when they are
19
+ * first drawn.
20
+ *
21
+ * Its look: `--cae-lanes-label-width` (the lanes' labels; 112px, 78px on a
22
+ * narrow screen) and the parts.
23
+ *
24
+ * @tagname cae-lanes
25
+ * @csspart axis - the times above the lanes
26
+ * @csspart lane - each lane
27
+ * @csspart lane-label - a lane's label
28
+ * @csspart track - the area of a lane's bars
29
+ * @csspart bar - each bar
30
+ * @csspart now - the line at now, while a bar runs
31
+ * @csspart legend - each row of the legend
32
+ * @csspart empty - what the element shows with no bars
33
+ * @slot empty - what the element shows with no bars, instead of `strings.empty`
34
+ */
35
+ export class CaeLanes extends LitElement {
36
+ static override styles = [base, legendStyles, lanesStyles];
37
+
38
+ @property({ attribute: false }) lanes: readonly Lane[] = [];
39
+ /** A look per style key of the bars, in legend order. */
40
+ @property({ attribute: false }) barStyles: Readonly<Record<string, LaneStyle>> = {};
41
+ /** The time the axis spans; null fits the bars (`fitRange`). */
42
+ @property({ attribute: false }) range: TimeRange | null = null;
43
+ /** Draws again every second, so the running bars and the line at now move. */
44
+ @property({ type: Boolean }) live = false;
45
+ /** Bars the host left out, as a note after the legend. */
46
+ @property({ type: Number }) omitted = 0;
47
+ /** The language of the axis' times; by default the page's (`lang`). */
48
+ @property() locale = '';
49
+ @property({ attribute: false }) strings: Partial<LanesStrings> = {};
50
+
51
+ private timer: ReturnType<typeof setInterval> | null = null;
52
+ /** The bars have been drawn once: later bars do not grow in. */
53
+ private drawn = false;
54
+
55
+ override connectedCallback(): void {
56
+ super.connectedCallback();
57
+ this.tick(this.live);
58
+ }
59
+
60
+ override disconnectedCallback(): void {
61
+ super.disconnectedCallback();
62
+ this.tick(false);
63
+ }
64
+
65
+ protected override updated(changed: PropertyValues<this>): void {
66
+ if (changed.has('live')) this.tick(this.live);
67
+ }
68
+
69
+ private tick(on: boolean): void {
70
+ if (on && !this.timer) this.timer = setInterval(() => this.requestUpdate(), 1000);
71
+ if (!on && this.timer) {
72
+ clearInterval(this.timer);
73
+ this.timer = null;
74
+ }
75
+ }
76
+
77
+ private time(t: number, seconds: boolean): string {
78
+ const locale = this.locale || document.documentElement.lang || undefined;
79
+ return new Date(t).toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit', ...(seconds ? { second: '2-digit' } : {}), hourCycle: 'h23' });
80
+ }
81
+
82
+ override render() {
83
+ const s = withDefaults(DEFAULT_LANES_STRINGS, this.strings);
84
+ const now = Date.now();
85
+ const range = this.range ?? fitRange(this.lanes, now);
86
+ if (!range) return html`<div part="empty"><slot name="empty">${s.empty}</slot></div>`;
87
+ const animate = !this.drawn;
88
+ this.drawn = true;
89
+ const span = Math.max(1, range.end - range.start);
90
+ const running = this.lanes.some((l) => l.bars.some((b) => b.end === null));
91
+ const seconds = span < SECONDS_BELOW_MS;
92
+ const nowAt = Math.min(1, (now - range.start) / span);
93
+ return html`<div class="lanes ${animate ? 'anim' : ''}">
94
+ <div class="axis" part="axis">${[0, 0.25, 0.5, 0.75, 1].map((k) => html`<span>${this.time(range.start + span * k, seconds)}</span>`)}</div>
95
+ ${repeat(this.lanes, (l) => l.id, (l) => this.lane(l, range, now))}
96
+ ${running
97
+ ? html`<span class="now" part="now" style="left:calc(var(--label) + 8px + (100% - var(--label) - 8px) * ${nowAt.toFixed(4)})"></span>`
98
+ : nothing}
99
+ </div>
100
+ ${this.legends(s)}`;
101
+ }
102
+
103
+ private lane(l: Lane, range: TimeRange, now: number): TemplateResult {
104
+ const placed = stack(l.bars);
105
+ const rows = Math.max(1, ...placed.map((p) => p.row + 1));
106
+ return html`<div class="lane" part="lane">
107
+ <span class="name" part="lane-label" title=${l.label}>${l.label}</span>
108
+ <div class="track" part="track" style="--rows:${rows}">
109
+ ${placed.map(({ bar, row }) => {
110
+ const box = barBox(bar, range, now);
111
+ const look = this.barStyles[bar.style];
112
+ return html`<span class="bar ${bar.end === null ? 'running' : ''}" part="bar" data-style=${bar.style}
113
+ data-pattern=${look?.pattern ?? 'solid'} title=${bar.label}
114
+ style="--bar:${look?.color ?? 'var(--line2)'};--row:${row};left:min(${box.left.toFixed(3)}%, 100% - max(3px, ${box.width.toFixed(3)}%));width:${box.width.toFixed(3)}%"></span>`;
115
+ })}
116
+ </div>
117
+ </div>`;
118
+ }
119
+
120
+ /** A legend row per group of styles, in key order; the note of omitted bars ends the last. */
121
+ private legends(s: LanesStrings): TemplateResult[] {
122
+ const groups: LegendItem[][] = [];
123
+ for (const look of Object.values(this.barStyles)) {
124
+ const g = look.group ?? 0;
125
+ (groups[g] ??= []).push({
126
+ label: look.label,
127
+ icon: html`<i data-pattern=${look.pattern ?? 'solid'} style="--bar:${look.color}"></i>`,
128
+ });
129
+ }
130
+ const rows = groups.filter(Boolean);
131
+ if (this.omitted) {
132
+ if (!rows.length) rows.push([]);
133
+ rows[rows.length - 1]!.push({ label: s.omitted(this.omitted) });
134
+ }
135
+ return rows.map((items) => legend(items));
136
+ }
137
+ }
138
+
139
+ declare global {
140
+ interface HTMLElementTagNameMap {
141
+ 'cae-lanes': CaeLanes;
142
+ }
143
+ }
@@ -0,0 +1,51 @@
1
+ // Where the bars of `<cae-lanes>` go: their row in a lane, their box on the
2
+ // axis, and the axis when the host does not set one. Pure.
3
+ import type { Lane, TimeRange } from './types.js';
4
+
5
+ interface Span {
6
+ start: number;
7
+ end: number | null;
8
+ }
9
+
10
+ /**
11
+ * The bars of a lane in order of start, each on the first row whose last bar
12
+ * has ended, so overlapping bars do not hide each other. A running bar (`end`
13
+ * null) keeps its row.
14
+ */
15
+ export function stack<B extends Span>(bars: readonly B[]): { bar: B; row: number }[] {
16
+ const ends: number[] = [];
17
+ return [...bars]
18
+ .sort((a, b) => a.start - b.start)
19
+ .map((bar) => {
20
+ const end = bar.end ?? Infinity;
21
+ let row = ends.findIndex((e) => e <= bar.start);
22
+ if (row < 0) row = ends.push(end) - 1;
23
+ else ends[row] = end;
24
+ return { bar, row };
25
+ });
26
+ }
27
+
28
+ /** A running bar extends the axis to now plus this margin, rounded up to `STEP_MS`. */
29
+ const MARGIN_MS = 20e3;
30
+ const STEP_MS = 60e3;
31
+
32
+ /**
33
+ * The axis that fits the bars: from the first start to the last end; with a
34
+ * running bar, to `now` plus 20 seconds, rounded up to the minute. Null with no bars.
35
+ */
36
+ export function fitRange(lanes: readonly Lane[], now: number): TimeRange | null {
37
+ const bars = lanes.flatMap((l) => l.bars);
38
+ if (!bars.length) return null;
39
+ const start = Math.min(...bars.map((b) => b.start));
40
+ const running = bars.some((b) => b.end === null);
41
+ const end = running ? start + Math.ceil((now - start + MARGIN_MS) / STEP_MS) * STEP_MS : Math.max(...bars.map((b) => b.end ?? now));
42
+ return { start, end };
43
+ }
44
+
45
+ /** A bar's left edge and width, in percent of the range; a running bar grows to `now`, within the range. */
46
+ export function barBox(b: Span, range: TimeRange, now: number): { left: number; width: number } {
47
+ const span = Math.max(1, range.end - range.start);
48
+ const left = ((b.start - range.start) / span) * 100;
49
+ const w = (((b.end ?? now) - b.start) / span) * 100;
50
+ return { left, width: Math.max(0.4, b.end === null ? Math.min(100 - left, w) : w) };
51
+ }
@@ -0,0 +1,30 @@
1
+ // The look of `<cae-lanes>`: a label column, then a track per lane with its
2
+ // bars; a bar's look is its colour (`--bar`) and its pattern (`data-pattern`),
3
+ // the same on the bar and on its swatch in the legend.
4
+ import { css } from 'lit';
5
+
6
+ export const lanesStyles = css`
7
+ :host { display: block; container-type: inline-size; --label: var(--cae-lanes-label-width, 112px); }
8
+ /* narrow (the host is a container): a narrower label column, and the axis' first, middle and last times only */
9
+ @container (max-width: 760px) { .lanes { --label: var(--cae-lanes-label-width, 78px); } }
10
+ @container (max-width: 480px) { .axis span:nth-child(even) { display: none; } }
11
+ .lanes { position: relative; }
12
+ .axis { display: flex; justify-content: space-between; font-family: var(--mono); font-size: 10px; color: var(--text-muted); margin: 0 0 6px calc(var(--label) + 8px); }
13
+ .lane { display: grid; grid-template-columns: var(--label) minmax(0, 1fr); gap: 8px; align-items: center; min-height: 24px; padding: 4px 0; }
14
+ .name { font-size: 11.5px; color: var(--text-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
15
+ .track { position: relative; height: calc(var(--rows, 1) * 14px + 2px); border-radius: 4px;
16
+ background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--text) 5%, transparent) 0 1px, transparent 1px 10%); }
17
+ .bar { position: absolute; top: calc(var(--row, 0) * 14px + 2px); height: 12px; border-radius: 4px; min-width: 3px; cursor: default;
18
+ transform-origin: left center; transition: width 1s linear; }
19
+ .anim .bar:not(.running) { animation: growx 0.6s var(--ease) both; }
20
+ :is(.bar, .legend i)[data-pattern] { background: var(--bar); }
21
+ :is(.bar, .legend i)[data-pattern='hatched'] { background: repeating-linear-gradient(135deg, var(--bar) 0 3px, color-mix(in srgb, var(--bar) 55%, var(--bg)) 3px 5px); }
22
+ :is(.bar, .legend i)[data-pattern='outline'] { background: none; box-shadow: inset 0 0 0 1.5px var(--bar); }
23
+ :is(.bar, .legend i)[data-pattern='striped'] { background: repeating-linear-gradient(45deg, var(--bar) 0 6px, color-mix(in srgb, var(--bar) 60%, var(--bg)) 6px 12px);
24
+ background-size: 17px 17px; }
25
+ .bar[data-pattern='striped'] { animation: stripes 0.8s linear infinite; box-shadow: 0 0 12px color-mix(in srgb, var(--bar) 45%, transparent); }
26
+ .bar:hover { filter: brightness(1.2); }
27
+ .now { position: absolute; top: -4px; bottom: -4px; width: 2px; background: var(--status-running); border-radius: 2px; box-shadow: 0 0 10px var(--status-running); }
28
+ .legend { margin-top: 10px; }
29
+ .legend + .legend { margin-top: 4px; }
30
+ `;
@@ -0,0 +1,51 @@
1
+ // What `<cae-lanes>` shows: bars on a time axis, a lane per group.
2
+
3
+ /** Something that took time: from `start` to `end` (epoch ms); `end` null while it runs. */
4
+ export interface LaneBar {
5
+ id: string;
6
+ start: number;
7
+ /** Null: running, the bar grows to now. */
8
+ end: number | null;
9
+ /** The key of its look in the element's `barStyles`. */
10
+ style: string;
11
+ /** The bar's tooltip: one item per line. */
12
+ label: string;
13
+ }
14
+
15
+ /** A row of bars; overlapping bars of a lane are stacked (`stack`). */
16
+ export interface Lane {
17
+ id: string;
18
+ label: string;
19
+ bars: readonly LaneBar[];
20
+ }
21
+
22
+ /** How a bar is filled: its colour, hatched, moving stripes, or only an outline. */
23
+ export type LanePattern = 'solid' | 'hatched' | 'striped' | 'outline';
24
+
25
+ /** A look of bars, and its entry in the legend. */
26
+ export interface LaneStyle {
27
+ label: string;
28
+ /** A CSS colour or `var(...)`. */
29
+ color: string;
30
+ pattern?: LanePattern;
31
+ /** The legend row of its entry (0, the first, by default). */
32
+ group?: number;
33
+ }
34
+
35
+ export interface LanesStrings {
36
+ /** The note after the legend: bars the host left out. */
37
+ omitted: (n: number) => string;
38
+ /** No bars. */
39
+ empty: string;
40
+ }
41
+
42
+ export const DEFAULT_LANES_STRINGS: LanesStrings = {
43
+ omitted: (n) => (n === 1 ? '1 bar not shown' : `${n} bars not shown`),
44
+ empty: 'No bars',
45
+ };
46
+
47
+ /** The time the axis spans, epoch ms. */
48
+ export interface TimeRange {
49
+ start: number;
50
+ end: number;
51
+ }
@@ -0,0 +1,64 @@
1
+ import { LitElement, css, html, nothing } from 'lit';
2
+ import { property, state } from 'lit/decorators.js';
3
+ import { unsafeHTML } from 'lit/directives/unsafe-html.js';
4
+ import { withDefaults } from '../core/strings.js';
5
+ import { base, prose } from '../styles/index.js';
6
+ import { mdFile } from './markdown.js';
7
+
8
+ export interface MarkdownStrings {
9
+ /** The button that shows the text rendered. */
10
+ showRendered: string;
11
+ /** The button that shows the text as it is. */
12
+ showSource: string;
13
+ }
14
+
15
+ export const DEFAULT_MARKDOWN_STRINGS: Readonly<MarkdownStrings> = { showRendered: 'Show rendered', showSource: 'Show source' };
16
+
17
+ /**
18
+ * A markdown text with a rendered/source switch. `split` may take a leading line
19
+ * off the text, shown apart above the rendered body; the source is the text as
20
+ * it is.
21
+ *
22
+ * @tagname cae-markdown
23
+ * @csspart toggle - the rendered/source button
24
+ */
25
+ export class CaeMarkdown extends LitElement {
26
+ static override styles = [
27
+ base,
28
+ prose,
29
+ css`
30
+ :host { display: block; }
31
+ /* A path or a URL has no break opportunity; it wraps inside the box instead of widening it. */
32
+ .md-p, .md-h, .md-li, .md-q { overflow-wrap: anywhere; }
33
+ .bar { display: flex; justify-content: flex-end; margin-bottom: 4px; }
34
+ `,
35
+ ];
36
+
37
+ @property() text = '';
38
+ /** Takes a leading line off the text (`head`), shown apart above the rendered `body`. */
39
+ @property({ attribute: false }) split?: (text: string) => { head: string; body: string };
40
+ /** Marks up the rendered (escaped) HTML further, as `mdFile`'s `mark`. */
41
+ @property({ attribute: false }) transform?: (html: string) => string;
42
+ /** The visible words; English by default. */
43
+ @property({ attribute: false }) strings: Partial<MarkdownStrings> = {};
44
+ @state() private source = false;
45
+
46
+ override render() {
47
+ const s = withDefaults(DEFAULT_MARKDOWN_STRINGS, this.strings);
48
+ const { head, body } = this.split?.(this.text) ?? { head: '', body: this.text };
49
+ const rendered = mdFile(body, this.transform);
50
+ return html`<div class="bar">
51
+ <button type="button" class="df-tog" part="toggle" @click=${() => (this.source = !this.source)}>
52
+ ${this.source ? s.showRendered : s.showSource}</button>
53
+ </div>
54
+ ${this.source
55
+ ? html`<pre class="df-text">${this.text}</pre>`
56
+ : html`${head ? html`<div class="md-tele jmono">${head}</div>` : nothing}${unsafeHTML(rendered)}`}`;
57
+ }
58
+ }
59
+
60
+ declare global {
61
+ interface HTMLElementTagNameMap {
62
+ 'cae-markdown': CaeMarkdown;
63
+ }
64
+ }
@@ -0,0 +1,2 @@
1
+ // The highlighter of markdown's code blocks: `code/highlight.ts`, by the names of this entry.
2
+ export { highlight, hlJson, hlPython } from '../code/highlight.js';
@@ -0,0 +1,5 @@
1
+ // `@contraagent/elements/markdown`: markdown and code as escaped HTML, and the
2
+ // element that shows it; `…/markdown/define` registers the element.
3
+ export * from './markdown.js';
4
+ export * from './highlight.js';
5
+ export * from './cae-markdown.js';
@@ -0,0 +1,110 @@
1
+ // Markdown: what model output and text files actually use. Everything is
2
+ // escaped first, so nothing the text holds can inject markup; links keep only
3
+ // http(s) targets. Returns HTML for `unsafeHTML`.
4
+ import { esc } from '../core/format.js';
5
+ import { highlight } from './highlight.js';
6
+
7
+ function mdInline(t: string): string {
8
+ return t
9
+ .replace(/`([^`\n]+)`/g, '<code>$1</code>')
10
+ .replace(/\*\*([^*\n]+)\*\*/g, '<b>$1</b>')
11
+ .replace(/(^|[^*\w])\*([^*\n]+)\*(?!\w)/g, '$1<i>$2</i>')
12
+ .replace(/\[([^\]\n]+)\]\((https?:\/\/[^)\s]+)\)/g, '<a class="lnk" href="$2" target="_blank" rel="noopener">$1</a>');
13
+ }
14
+
15
+ interface Segment {
16
+ t: 'text' | 'code';
17
+ s: string;
18
+ lang?: string;
19
+ }
20
+
21
+ /** Text and fenced code; an unclosed fence (a live stream) runs to the end. */
22
+ function mdSplit(text: string): Segment[] {
23
+ const out: Segment[] = [];
24
+ let pos = 0;
25
+ for (;;) {
26
+ const open = text.indexOf('```', pos);
27
+ if (open < 0) {
28
+ out.push({ t: 'text', s: text.slice(pos) });
29
+ return out;
30
+ }
31
+ out.push({ t: 'text', s: text.slice(pos, open) });
32
+ const nl = text.indexOf('\n', open + 3);
33
+ const lang = text.slice(open + 3, nl < 0 ? text.length : nl).trim();
34
+ const start = nl < 0 ? text.length : nl + 1;
35
+ const close = text.indexOf('```', start);
36
+ if (close < 0) {
37
+ out.push({ t: 'code', s: text.slice(start), lang });
38
+ return out;
39
+ }
40
+ out.push({ t: 'code', s: text.slice(start, close), lang });
41
+ pos = close + 3;
42
+ }
43
+ }
44
+
45
+ const TABLE_ROW = /^\s*\|.*\|\s*$/;
46
+
47
+ export function md(text: string | null | undefined): string {
48
+ return mdSplit(String(text || ''))
49
+ .map((seg) => {
50
+ if (seg.t === 'code') return `<pre><code class="hl">${highlight(seg.s, seg.lang)}</code></pre>`;
51
+ const lines = esc(seg.s).split('\n');
52
+ const out: string[] = [];
53
+ for (let k = 0; k < lines.length; k++) {
54
+ const line = lines[k] ?? '';
55
+ let m: RegExpMatchArray | null;
56
+ if ((m = line.match(/^(#{1,6})\s+(.*)$/))) {
57
+ out.push(`<div class="md-h md-h${Math.min(m[1]!.length, 4)}">${mdInline(m[2]!)}</div>`);
58
+ } else if (/^\s*(-{3,}|\*{3,})\s*$/.test(line)) {
59
+ out.push('<hr class="md-hr">');
60
+ } else if ((m = line.match(/^\s*&gt;\s?(.*)$/))) {
61
+ out.push(`<div class="md-q">${mdInline(m[1]!)}</div>`);
62
+ } else if ((m = line.match(/^\s*[-*]\s+(.*)$/))) {
63
+ out.push(`<div class="md-li">${mdInline(m[1]!)}</div>`);
64
+ } else if ((m = line.match(/^\s*(\d+)[.)]\s+(.*)$/))) {
65
+ out.push(`<div class="md-li md-ol"><span class="md-n">${m[1]}.</span>${mdInline(m[2]!)}</div>`);
66
+ } else if (TABLE_ROW.test(line) && /^\s*\|[\s:|-]+\|\s*$/.test(lines[k + 1] ?? '')) {
67
+ const cells = (l: string) =>
68
+ l
69
+ .trim()
70
+ .replace(/^\||\|$/g, '')
71
+ .split('|')
72
+ .map((c) => mdInline(c.trim()));
73
+ const head = cells(line);
74
+ k += 2;
75
+ const rows: string[][] = [];
76
+ while (k < lines.length && TABLE_ROW.test(lines[k] ?? '')) rows.push(cells(lines[k++] ?? ''));
77
+ k--;
78
+ out.push(
79
+ `<table class="md-t"><tr>${head.map((c) => `<th>${c}</th>`).join('')}</tr>` +
80
+ rows.map((r) => `<tr>${r.map((c) => `<td>${c}</td>`).join('')}</tr>`).join('') +
81
+ '</table>',
82
+ );
83
+ } else {
84
+ out.push(line.trim() === '' ? '<div class="md-gap"></div>' : `<div class="md-p">${mdInline(line)}</div>`);
85
+ }
86
+ }
87
+ return out.join('');
88
+ })
89
+ .join('');
90
+ }
91
+
92
+ /** A markdown file as a person reads it: its `---` front matter as a small table, then the body. */
93
+ export function mdFile(text: string | null | undefined, mark?: (html: string) => string): string {
94
+ const src = String(text || '');
95
+ const m = src.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
96
+ let front = '';
97
+ let body = src;
98
+ if (m) {
99
+ body = m[2] ?? '';
100
+ const rows = (m[1] ?? '')
101
+ .split('\n')
102
+ .map((l) => l.match(/^([\w-]+):\s*(.*)$/))
103
+ .filter((x): x is RegExpMatchArray => !!x)
104
+ .map(([, k, v]) => `<tr><td class="jmono">${esc(k)}</td><td>${esc(v)}</td></tr>`)
105
+ .join('');
106
+ front = rows ? `<table class="md-front">${rows}</table>` : '';
107
+ }
108
+ const html = md(body);
109
+ return `<div class="md-doc">${front}${mark ? mark(html) : html}</div>`;
110
+ }
@@ -0,0 +1,58 @@
1
+ // Moving across a grid of marks with the keys: the marks of a table of rows and columns.
2
+
3
+ /**
4
+ * Where a key moves in a grid of marks (`has[r][c]`: a mark there), from (`r`, `c`):
5
+ * left and right to the next mark in the row, up and down to the nearest row with a
6
+ * mark in the column, Home and End to the row's first and last, with Ctrl to the
7
+ * first and last row's, PageUp and PageDown `page` rows. Null when it does not move.
8
+ */
9
+ export function gridStep(has: readonly (readonly boolean[])[], r: number, c: number, key: string, ctrl = false, page = 10): [number, number] | null {
10
+ const at = (i: number, j: number) => has[i]?.[j] === true;
11
+ const first = (i: number) => (has[i] ?? []).findIndex(Boolean);
12
+ const last = (i: number) => (has[i] ?? []).lastIndexOf(true);
13
+ const rowWith = (from: number, step: number, col: number): number => {
14
+ for (let i = from; i >= 0 && i < has.length; i += step) if (at(i, col)) return i;
15
+ return -1;
16
+ };
17
+ const near = (i: number): [number, number] | null => {
18
+ // The mark of row i nearest to column c.
19
+ const row = has[i] ?? [];
20
+ let best = -1;
21
+ row.forEach((x, j) => x && (best < 0 || Math.abs(j - c) < Math.abs(best - c)) && (best = j));
22
+ return best < 0 ? null : [i, best];
23
+ };
24
+ switch (key) {
25
+ case 'ArrowRight':
26
+ case 'ArrowLeft': {
27
+ const s = key === 'ArrowRight' ? 1 : -1;
28
+ for (let j = c + s; j >= 0 && j < (has[r]?.length ?? 0); j += s) if (at(r, j)) return [r, j];
29
+ return null;
30
+ }
31
+ case 'ArrowDown':
32
+ case 'ArrowUp': {
33
+ const s = key === 'ArrowDown' ? 1 : -1;
34
+ const i = rowWith(r + s, s, c);
35
+ if (i >= 0) return [i, c];
36
+ for (let k = r + s; k >= 0 && k < has.length; k += s) if (first(k) >= 0) return near(k);
37
+ return null;
38
+ }
39
+ case 'Home': {
40
+ const i = ctrl ? has.findIndex((row) => row.some(Boolean)) : r;
41
+ return i < 0 || first(i) < 0 ? null : [i, first(i)];
42
+ }
43
+ case 'End': {
44
+ let i = r;
45
+ if (ctrl) for (i = has.length - 1; i >= 0 && last(i) < 0; i--);
46
+ return i < 0 || last(i) < 0 ? null : [i, last(i)];
47
+ }
48
+ case 'PageDown':
49
+ case 'PageUp': {
50
+ const s = key === 'PageDown' ? 1 : -1;
51
+ const target = Math.max(0, Math.min(has.length - 1, r + s * page));
52
+ for (let k = target; k !== r; k -= s) if (first(k) >= 0) return near(k);
53
+ return null;
54
+ }
55
+ default:
56
+ return null;
57
+ }
58
+ }
@@ -0,0 +1,6 @@
1
+ // A table of marks: `@contraagent/elements/matrix`. `CaeMarkMatrix` is registered
2
+ // by `@contraagent/elements/matrix/define`.
3
+ export * from './types.js';
4
+ export * from './grid-step.js';
5
+ export * from './styles.js';
6
+ export * from './mark-matrix.js';