@contraagent/elements 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/README.md +72 -2
  2. package/custom-elements.json +4260 -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/core/clock.d.ts +20 -0
  56. package/dist/core/clock.d.ts.map +1 -0
  57. package/dist/core/clock.js +45 -0
  58. package/dist/core/clock.js.map +1 -0
  59. package/dist/core/define.d.ts +3 -0
  60. package/dist/core/define.d.ts.map +1 -0
  61. package/dist/core/define.js +8 -0
  62. package/dist/core/define.js.map +1 -0
  63. package/dist/core/events.d.ts +78 -0
  64. package/dist/core/events.d.ts.map +1 -0
  65. package/dist/core/events.js +8 -0
  66. package/dist/core/events.js.map +1 -0
  67. package/dist/core/format.d.ts +8 -0
  68. package/dist/core/format.d.ts.map +1 -0
  69. package/dist/core/format.js +28 -0
  70. package/dist/core/format.js.map +1 -0
  71. package/dist/core/frame.d.ts +4 -0
  72. package/dist/core/frame.d.ts.map +1 -0
  73. package/dist/core/frame.js +5 -0
  74. package/dist/core/frame.js.map +1 -0
  75. package/dist/core/strings.d.ts +3 -0
  76. package/dist/core/strings.d.ts.map +1 -0
  77. package/dist/core/strings.js +14 -0
  78. package/dist/core/strings.js.map +1 -0
  79. package/dist/core/tone.d.ts +8 -0
  80. package/dist/core/tone.d.ts.map +1 -0
  81. package/dist/core/tone.js +9 -0
  82. package/dist/core/tone.js.map +1 -0
  83. package/dist/count/count.d.ts +22 -0
  84. package/dist/count/count.d.ts.map +1 -0
  85. package/dist/count/count.js +60 -0
  86. package/dist/count/count.js.map +1 -0
  87. package/dist/count/elapsed.d.ts +18 -0
  88. package/dist/count/elapsed.d.ts.map +1 -0
  89. package/dist/count/elapsed.js +33 -0
  90. package/dist/count/elapsed.js.map +1 -0
  91. package/dist/count/index.d.ts +3 -0
  92. package/dist/count/index.d.ts.map +1 -0
  93. package/dist/count/index.js +5 -0
  94. package/dist/count/index.js.map +1 -0
  95. package/dist/define/all.d.ts +13 -0
  96. package/dist/define/all.d.ts.map +1 -0
  97. package/dist/define/all.js +14 -0
  98. package/dist/define/all.js.map +1 -0
  99. package/dist/define/charts.d.ts +8 -0
  100. package/dist/define/charts.d.ts.map +1 -0
  101. package/dist/define/charts.js +15 -0
  102. package/dist/define/charts.js.map +1 -0
  103. package/dist/define/check-table.d.ts +4 -0
  104. package/dist/define/check-table.d.ts.map +1 -0
  105. package/dist/define/check-table.js +7 -0
  106. package/dist/define/check-table.js.map +1 -0
  107. package/dist/define/count.d.ts +5 -0
  108. package/dist/define/count.d.ts.map +1 -0
  109. package/dist/define/count.js +9 -0
  110. package/dist/define/count.js.map +1 -0
  111. package/dist/define/data-table.d.ts +4 -0
  112. package/dist/define/data-table.d.ts.map +1 -0
  113. package/dist/define/data-table.js +7 -0
  114. package/dist/define/data-table.js.map +1 -0
  115. package/dist/define/graph.d.ts +6 -0
  116. package/dist/define/graph.d.ts.map +1 -0
  117. package/dist/define/graph.js +9 -0
  118. package/dist/define/graph.js.map +1 -0
  119. package/dist/define/json-tree.d.ts +4 -0
  120. package/dist/define/json-tree.d.ts.map +1 -0
  121. package/dist/define/json-tree.js +7 -0
  122. package/dist/define/json-tree.js.map +1 -0
  123. package/dist/define/lanes.d.ts +4 -0
  124. package/dist/define/lanes.d.ts.map +1 -0
  125. package/dist/define/lanes.js +7 -0
  126. package/dist/define/lanes.js.map +1 -0
  127. package/dist/define/markdown.d.ts +4 -0
  128. package/dist/define/markdown.d.ts.map +1 -0
  129. package/dist/define/markdown.js +7 -0
  130. package/dist/define/markdown.js.map +1 -0
  131. package/dist/define/matrix.d.ts +4 -0
  132. package/dist/define/matrix.d.ts.map +1 -0
  133. package/dist/define/matrix.js +7 -0
  134. package/dist/define/matrix.js.map +1 -0
  135. package/dist/define/segmented.d.ts +4 -0
  136. package/dist/define/segmented.d.ts.map +1 -0
  137. package/dist/define/segmented.js +7 -0
  138. package/dist/define/segmented.js.map +1 -0
  139. package/dist/define/tiles.d.ts +5 -0
  140. package/dist/define/tiles.d.ts.map +1 -0
  141. package/dist/define/tiles.js +9 -0
  142. package/dist/define/tiles.js.map +1 -0
  143. package/dist/define/transcript.d.ts +4 -0
  144. package/dist/define/transcript.d.ts.map +1 -0
  145. package/dist/define/transcript.js +7 -0
  146. package/dist/define/transcript.js.map +1 -0
  147. package/dist/graph/arrange.d.ts +43 -0
  148. package/dist/graph/arrange.d.ts.map +1 -0
  149. package/dist/graph/arrange.js +390 -0
  150. package/dist/graph/arrange.js.map +1 -0
  151. package/dist/graph/card.d.ts +71 -0
  152. package/dist/graph/card.d.ts.map +1 -0
  153. package/dist/graph/card.js +185 -0
  154. package/dist/graph/card.js.map +1 -0
  155. package/dist/graph/host.d.ts +82 -0
  156. package/dist/graph/host.d.ts.map +1 -0
  157. package/dist/graph/host.js +21 -0
  158. package/dist/graph/host.js.map +1 -0
  159. package/dist/graph/icons.d.ts +7 -0
  160. package/dist/graph/icons.d.ts.map +1 -0
  161. package/dist/graph/icons.js +18 -0
  162. package/dist/graph/icons.js.map +1 -0
  163. package/dist/graph/index.d.ts +15 -0
  164. package/dist/graph/index.d.ts.map +1 -0
  165. package/dist/graph/index.js +17 -0
  166. package/dist/graph/index.js.map +1 -0
  167. package/dist/graph/layered-graph.d.ts +226 -0
  168. package/dist/graph/layered-graph.d.ts.map +1 -0
  169. package/dist/graph/layered-graph.js +396 -0
  170. package/dist/graph/layered-graph.js.map +1 -0
  171. package/dist/graph/layout.d.ts +80 -0
  172. package/dist/graph/layout.d.ts.map +1 -0
  173. package/dist/graph/layout.js +264 -0
  174. package/dist/graph/layout.js.map +1 -0
  175. package/dist/graph/marks.d.ts +24 -0
  176. package/dist/graph/marks.d.ts.map +1 -0
  177. package/dist/graph/marks.js +38 -0
  178. package/dist/graph/marks.js.map +1 -0
  179. package/dist/graph/nav.d.ts +14 -0
  180. package/dist/graph/nav.d.ts.map +1 -0
  181. package/dist/graph/nav.js +14 -0
  182. package/dist/graph/nav.js.map +1 -0
  183. package/dist/graph/pan-zoom.d.ts +80 -0
  184. package/dist/graph/pan-zoom.d.ts.map +1 -0
  185. package/dist/graph/pan-zoom.js +191 -0
  186. package/dist/graph/pan-zoom.js.map +1 -0
  187. package/dist/graph/paths.d.ts +9 -0
  188. package/dist/graph/paths.d.ts.map +1 -0
  189. package/dist/graph/paths.js +44 -0
  190. package/dist/graph/paths.js.map +1 -0
  191. package/dist/graph/place-card.d.ts +36 -0
  192. package/dist/graph/place-card.d.ts.map +1 -0
  193. package/dist/graph/place-card.js +68 -0
  194. package/dist/graph/place-card.js.map +1 -0
  195. package/dist/graph/strings.d.ts +50 -0
  196. package/dist/graph/strings.d.ts.map +1 -0
  197. package/dist/graph/strings.js +37 -0
  198. package/dist/graph/strings.js.map +1 -0
  199. package/dist/graph/styles.d.ts +2 -0
  200. package/dist/graph/styles.d.ts.map +1 -0
  201. package/dist/graph/styles.js +203 -0
  202. package/dist/graph/styles.js.map +1 -0
  203. package/dist/graph/types.d.ts +184 -0
  204. package/dist/graph/types.d.ts.map +1 -0
  205. package/dist/graph/types.js +2 -0
  206. package/dist/graph/types.js.map +1 -0
  207. package/dist/graph/view.d.ts +17 -0
  208. package/dist/graph/view.d.ts.map +1 -0
  209. package/dist/graph/view.js +21 -0
  210. package/dist/graph/view.js.map +1 -0
  211. package/dist/graph/views/dag.d.ts +10 -0
  212. package/dist/graph/views/dag.d.ts.map +1 -0
  213. package/dist/graph/views/dag.js +292 -0
  214. package/dist/graph/views/dag.js.map +1 -0
  215. package/dist/graph/views/foot.d.ts +8 -0
  216. package/dist/graph/views/foot.d.ts.map +1 -0
  217. package/dist/graph/views/foot.js +103 -0
  218. package/dist/graph/views/foot.js.map +1 -0
  219. package/dist/graph/views/node-table.d.ts +17 -0
  220. package/dist/graph/views/node-table.d.ts.map +1 -0
  221. package/dist/graph/views/node-table.js +80 -0
  222. package/dist/graph/views/node-table.js.map +1 -0
  223. package/dist/index.d.ts +22 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +26 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/json/index.d.ts +2 -0
  228. package/dist/json/index.d.ts.map +1 -0
  229. package/dist/json/index.js +3 -0
  230. package/dist/json/index.js.map +1 -0
  231. package/dist/json/json-tree.d.ts +21 -0
  232. package/dist/json/json-tree.d.ts.map +1 -0
  233. package/dist/json/json-tree.js +51 -0
  234. package/dist/json/json-tree.js.map +1 -0
  235. package/dist/lanes/index.d.ts +5 -0
  236. package/dist/lanes/index.d.ts.map +1 -0
  237. package/dist/lanes/index.js +7 -0
  238. package/dist/lanes/index.js.map +1 -0
  239. package/dist/lanes/lanes.d.ts +56 -0
  240. package/dist/lanes/lanes.d.ts.map +1 -0
  241. package/dist/lanes/lanes.js +160 -0
  242. package/dist/lanes/lanes.js.map +1 -0
  243. package/dist/lanes/stack.d.ts +26 -0
  244. package/dist/lanes/stack.d.ts.map +1 -0
  245. package/dist/lanes/stack.js +43 -0
  246. package/dist/lanes/stack.js.map +1 -0
  247. package/dist/lanes/styles.d.ts +2 -0
  248. package/dist/lanes/styles.d.ts.map +1 -0
  249. package/dist/lanes/styles.js +30 -0
  250. package/dist/lanes/styles.js.map +1 -0
  251. package/dist/lanes/types.d.ts +41 -0
  252. package/dist/lanes/types.d.ts.map +1 -0
  253. package/dist/lanes/types.js +6 -0
  254. package/dist/lanes/types.js.map +1 -0
  255. package/dist/markdown/cae-markdown.d.ts +37 -0
  256. package/dist/markdown/cae-markdown.d.ts.map +1 -0
  257. package/dist/markdown/cae-markdown.js +68 -0
  258. package/dist/markdown/cae-markdown.js.map +1 -0
  259. package/dist/markdown/highlight.d.ts +5 -0
  260. package/dist/markdown/highlight.d.ts.map +1 -0
  261. package/dist/markdown/highlight.js +86 -0
  262. package/dist/markdown/highlight.js.map +1 -0
  263. package/dist/markdown/index.d.ts +4 -0
  264. package/dist/markdown/index.d.ts.map +1 -0
  265. package/dist/markdown/index.js +6 -0
  266. package/dist/markdown/index.js.map +1 -0
  267. package/dist/markdown/markdown.d.ts +4 -0
  268. package/dist/markdown/markdown.d.ts.map +1 -0
  269. package/dist/markdown/markdown.js +105 -0
  270. package/dist/markdown/markdown.js.map +1 -0
  271. package/dist/matrix/grid-step.d.ts +8 -0
  272. package/dist/matrix/grid-step.d.ts.map +1 -0
  273. package/dist/matrix/grid-step.js +69 -0
  274. package/dist/matrix/grid-step.js.map +1 -0
  275. package/dist/matrix/index.d.ts +5 -0
  276. package/dist/matrix/index.d.ts.map +1 -0
  277. package/dist/matrix/index.js +7 -0
  278. package/dist/matrix/index.js.map +1 -0
  279. package/dist/matrix/mark-matrix.d.ts +97 -0
  280. package/dist/matrix/mark-matrix.d.ts.map +1 -0
  281. package/dist/matrix/mark-matrix.js +272 -0
  282. package/dist/matrix/mark-matrix.js.map +1 -0
  283. package/dist/matrix/styles.d.ts +4 -0
  284. package/dist/matrix/styles.d.ts.map +1 -0
  285. package/dist/matrix/styles.js +47 -0
  286. package/dist/matrix/styles.js.map +1 -0
  287. package/dist/matrix/types.d.ts +79 -0
  288. package/dist/matrix/types.d.ts.map +1 -0
  289. package/dist/matrix/types.js +5 -0
  290. package/dist/matrix/types.js.map +1 -0
  291. package/dist/primitives/fact-line.d.ts +14 -0
  292. package/dist/primitives/fact-line.d.ts.map +1 -0
  293. package/dist/primitives/fact-line.js +18 -0
  294. package/dist/primitives/fact-line.js.map +1 -0
  295. package/dist/primitives/icon.d.ts +14 -0
  296. package/dist/primitives/icon.d.ts.map +1 -0
  297. package/dist/primitives/icon.js +19 -0
  298. package/dist/primitives/icon.js.map +1 -0
  299. package/dist/primitives/index.d.ts +10 -0
  300. package/dist/primitives/index.d.ts.map +1 -0
  301. package/dist/primitives/index.js +13 -0
  302. package/dist/primitives/index.js.map +1 -0
  303. package/dist/primitives/legend.d.ts +28 -0
  304. package/dist/primitives/legend.d.ts.map +1 -0
  305. package/dist/primitives/legend.js +28 -0
  306. package/dist/primitives/legend.js.map +1 -0
  307. package/dist/primitives/pill.d.ts +23 -0
  308. package/dist/primitives/pill.d.ts.map +1 -0
  309. package/dist/primitives/pill.js +40 -0
  310. package/dist/primitives/pill.js.map +1 -0
  311. package/dist/primitives/roving-focus.d.ts +47 -0
  312. package/dist/primitives/roving-focus.d.ts.map +1 -0
  313. package/dist/primitives/roving-focus.js +111 -0
  314. package/dist/primitives/roving-focus.js.map +1 -0
  315. package/dist/primitives/segmented.d.ts +41 -0
  316. package/dist/primitives/segmented.d.ts.map +1 -0
  317. package/dist/primitives/segmented.js +88 -0
  318. package/dist/primitives/segmented.js.map +1 -0
  319. package/dist/primitives/share-bar.d.ts +37 -0
  320. package/dist/primitives/share-bar.d.ts.map +1 -0
  321. package/dist/primitives/share-bar.js +69 -0
  322. package/dist/primitives/share-bar.js.map +1 -0
  323. package/dist/primitives/states.d.ts +19 -0
  324. package/dist/primitives/states.d.ts.map +1 -0
  325. package/dist/primitives/states.js +11 -0
  326. package/dist/primitives/states.js.map +1 -0
  327. package/dist/primitives/window.d.ts +24 -0
  328. package/dist/primitives/window.d.ts.map +1 -0
  329. package/dist/primitives/window.js +56 -0
  330. package/dist/primitives/window.js.map +1 -0
  331. package/dist/styles/chips.d.ts +2 -0
  332. package/dist/styles/chips.d.ts.map +1 -0
  333. package/dist/styles/chips.js +18 -0
  334. package/dist/styles/chips.js.map +1 -0
  335. package/dist/styles/facts.d.ts +2 -0
  336. package/dist/styles/facts.d.ts.map +1 -0
  337. package/dist/styles/facts.js +7 -0
  338. package/dist/styles/facts.js.map +1 -0
  339. package/dist/styles/index.d.ts +16 -0
  340. package/dist/styles/index.d.ts.map +1 -0
  341. package/dist/styles/index.js +15 -0
  342. package/dist/styles/index.js.map +1 -0
  343. package/dist/styles/layout.d.ts +2 -0
  344. package/dist/styles/layout.d.ts.map +1 -0
  345. package/dist/styles/layout.js +33 -0
  346. package/dist/styles/layout.js.map +1 -0
  347. package/dist/styles/marks.d.ts +2 -0
  348. package/dist/styles/marks.d.ts.map +1 -0
  349. package/dist/styles/marks.js +30 -0
  350. package/dist/styles/marks.js.map +1 -0
  351. package/dist/styles/meter.d.ts +3 -0
  352. package/dist/styles/meter.d.ts.map +1 -0
  353. package/dist/styles/meter.js +9 -0
  354. package/dist/styles/meter.js.map +1 -0
  355. package/dist/styles/motion.d.ts +2 -0
  356. package/dist/styles/motion.d.ts.map +1 -0
  357. package/dist/styles/motion.js +27 -0
  358. package/dist/styles/motion.js.map +1 -0
  359. package/dist/styles/prose.d.ts +3 -0
  360. package/dist/styles/prose.d.ts.map +1 -0
  361. package/dist/styles/prose.js +59 -0
  362. package/dist/styles/prose.js.map +1 -0
  363. package/dist/styles/reset.d.ts +2 -0
  364. package/dist/styles/reset.d.ts.map +1 -0
  365. package/dist/styles/reset.js +13 -0
  366. package/dist/styles/reset.js.map +1 -0
  367. package/dist/styles/status.d.ts +2 -0
  368. package/dist/styles/status.d.ts.map +1 -0
  369. package/dist/styles/status.js +52 -0
  370. package/dist/styles/status.js.map +1 -0
  371. package/dist/styles/text.d.ts +2 -0
  372. package/dist/styles/text.d.ts.map +1 -0
  373. package/dist/styles/text.js +21 -0
  374. package/dist/styles/text.js.map +1 -0
  375. package/dist/styles/tokens.d.ts +8 -0
  376. package/dist/styles/tokens.d.ts.map +1 -0
  377. package/dist/styles/tokens.js +32 -0
  378. package/dist/styles/tokens.js.map +1 -0
  379. package/dist/table/data-table.d.ts +106 -0
  380. package/dist/table/data-table.d.ts.map +1 -0
  381. package/dist/table/data-table.js +408 -0
  382. package/dist/table/data-table.js.map +1 -0
  383. package/dist/table/index.d.ts +4 -0
  384. package/dist/table/index.d.ts.map +1 -0
  385. package/dist/table/index.js +6 -0
  386. package/dist/table/index.js.map +1 -0
  387. package/dist/table/styles.d.ts +2 -0
  388. package/dist/table/styles.d.ts.map +1 -0
  389. package/dist/table/styles.js +32 -0
  390. package/dist/table/styles.js.map +1 -0
  391. package/dist/table/types.d.ts +48 -0
  392. package/dist/table/types.d.ts.map +1 -0
  393. package/dist/table/types.js +30 -0
  394. package/dist/table/types.js.map +1 -0
  395. package/dist/themes/boot.d.ts +7 -0
  396. package/dist/themes/boot.d.ts.map +1 -0
  397. package/dist/themes/boot.js +14 -0
  398. package/dist/themes/boot.js.map +1 -0
  399. package/dist/themes/choice.d.ts +16 -0
  400. package/dist/themes/choice.d.ts.map +1 -0
  401. package/dist/themes/choice.js +45 -0
  402. package/dist/themes/choice.js.map +1 -0
  403. package/dist/themes/data.d.ts +43 -0
  404. package/dist/themes/data.d.ts.map +1 -0
  405. package/dist/themes/data.js +408 -0
  406. package/dist/themes/data.js.map +1 -0
  407. package/dist/themes/index.d.ts +7 -0
  408. package/dist/themes/index.d.ts.map +1 -0
  409. package/dist/themes/index.js +11 -0
  410. package/dist/themes/index.js.map +1 -0
  411. package/dist/themes/sheet.d.ts +16 -0
  412. package/dist/themes/sheet.d.ts.map +1 -0
  413. package/dist/themes/sheet.js +28 -0
  414. package/dist/themes/sheet.js.map +1 -0
  415. package/dist/themes/token-meanings.d.ts +3 -0
  416. package/dist/themes/token-meanings.d.ts.map +1 -0
  417. package/dist/themes/token-meanings.js +67 -0
  418. package/dist/themes/token-meanings.js.map +1 -0
  419. package/dist/themes/tokens-list.d.ts +14 -0
  420. package/dist/themes/tokens-list.d.ts.map +1 -0
  421. package/dist/themes/tokens-list.js +69 -0
  422. package/dist/themes/tokens-list.js.map +1 -0
  423. package/dist/tiles/index.d.ts +4 -0
  424. package/dist/tiles/index.d.ts.map +1 -0
  425. package/dist/tiles/index.js +6 -0
  426. package/dist/tiles/index.js.map +1 -0
  427. package/dist/tiles/stat-tiles.d.ts +40 -0
  428. package/dist/tiles/stat-tiles.d.ts.map +1 -0
  429. package/dist/tiles/stat-tiles.js +99 -0
  430. package/dist/tiles/stat-tiles.js.map +1 -0
  431. package/dist/tiles/styles.d.ts +2 -0
  432. package/dist/tiles/styles.d.ts.map +1 -0
  433. package/dist/tiles/styles.js +23 -0
  434. package/dist/tiles/styles.js.map +1 -0
  435. package/dist/tiles/types.d.ts +22 -0
  436. package/dist/tiles/types.d.ts.map +1 -0
  437. package/dist/tiles/types.js +2 -0
  438. package/dist/tiles/types.js.map +1 -0
  439. package/dist/transcript/follow-scroll.d.ts +21 -0
  440. package/dist/transcript/follow-scroll.d.ts.map +1 -0
  441. package/dist/transcript/follow-scroll.js +76 -0
  442. package/dist/transcript/follow-scroll.js.map +1 -0
  443. package/dist/transcript/index.d.ts +5 -0
  444. package/dist/transcript/index.d.ts.map +1 -0
  445. package/dist/transcript/index.js +7 -0
  446. package/dist/transcript/index.js.map +1 -0
  447. package/dist/transcript/styles.d.ts +2 -0
  448. package/dist/transcript/styles.d.ts.map +1 -0
  449. package/dist/transcript/styles.js +114 -0
  450. package/dist/transcript/styles.js.map +1 -0
  451. package/dist/transcript/tags.d.ts +6 -0
  452. package/dist/transcript/tags.d.ts.map +1 -0
  453. package/dist/transcript/tags.js +13 -0
  454. package/dist/transcript/tags.js.map +1 -0
  455. package/dist/transcript/tool-card.d.ts +16 -0
  456. package/dist/transcript/tool-card.d.ts.map +1 -0
  457. package/dist/transcript/tool-card.js +87 -0
  458. package/dist/transcript/tool-card.js.map +1 -0
  459. package/dist/transcript/transcript.d.ts +103 -0
  460. package/dist/transcript/transcript.d.ts.map +1 -0
  461. package/dist/transcript/transcript.js +397 -0
  462. package/dist/transcript/transcript.js.map +1 -0
  463. package/dist/transcript/types.d.ts +161 -0
  464. package/dist/transcript/types.d.ts.map +1 -0
  465. package/dist/transcript/types.js +25 -0
  466. package/dist/transcript/types.js.map +1 -0
  467. package/docs/charts.md +58 -0
  468. package/docs/check-table.md +40 -0
  469. package/docs/data-table.md +57 -0
  470. package/docs/examples/charts.ts +61 -0
  471. package/docs/examples/check-table.ts +19 -0
  472. package/docs/examples/ci-pipeline.ts +271 -0
  473. package/docs/examples/data-table.ts +39 -0
  474. package/docs/examples/graph.ts +57 -0
  475. package/docs/examples/lanes.ts +40 -0
  476. package/docs/examples/matrix.ts +56 -0
  477. package/docs/examples/page.css +34 -0
  478. package/docs/examples/segmented.ts +18 -0
  479. package/docs/examples/status.ts +30 -0
  480. package/docs/examples/theme.css +54 -0
  481. package/docs/examples/tiles.ts +27 -0
  482. package/docs/examples/transcript.ts +59 -0
  483. package/docs/graph.md +112 -0
  484. package/docs/lanes.md +48 -0
  485. package/docs/matrix.md +34 -0
  486. package/docs/page.md +87 -0
  487. package/docs/primitives.md +57 -0
  488. package/docs/strings.md +16 -0
  489. package/docs/theming.md +147 -0
  490. package/docs/tiles.md +40 -0
  491. package/docs/transcript.md +73 -0
  492. package/docs/tsconfig.json +20 -0
  493. package/package.json +161 -4
  494. package/src/charts/bar-chart.ts +74 -0
  495. package/src/charts/base.ts +188 -0
  496. package/src/charts/column-chart.ts +153 -0
  497. package/src/charts/heatmap.ts +129 -0
  498. package/src/charts/index.ts +10 -0
  499. package/src/charts/line-chart.ts +128 -0
  500. package/src/charts/scale.ts +61 -0
  501. package/src/charts/state-grid.ts +245 -0
  502. package/src/charts/types.ts +48 -0
  503. package/src/checks/check-table.ts +85 -0
  504. package/src/checks/index.ts +5 -0
  505. package/src/checks/styles.ts +31 -0
  506. package/src/checks/types.ts +48 -0
  507. package/src/core/clock.ts +46 -0
  508. package/src/core/define.ts +7 -0
  509. package/src/core/events.ts +89 -0
  510. package/src/core/format.ts +25 -0
  511. package/src/core/frame.ts +5 -0
  512. package/src/core/strings.ts +11 -0
  513. package/src/core/tone.ts +14 -0
  514. package/src/count/count.ts +54 -0
  515. package/src/count/elapsed.ts +33 -0
  516. package/src/count/index.ts +4 -0
  517. package/src/define/all.ts +13 -0
  518. package/src/define/charts.ts +17 -0
  519. package/src/define/check-table.ts +9 -0
  520. package/src/define/count.ts +11 -0
  521. package/src/define/data-table.ts +9 -0
  522. package/src/define/graph.ts +11 -0
  523. package/src/define/json-tree.ts +9 -0
  524. package/src/define/lanes.ts +9 -0
  525. package/src/define/markdown.ts +9 -0
  526. package/src/define/matrix.ts +9 -0
  527. package/src/define/segmented.ts +9 -0
  528. package/src/define/tiles.ts +11 -0
  529. package/src/define/transcript.ts +9 -0
  530. package/src/graph/arrange.ts +399 -0
  531. package/src/graph/card.ts +209 -0
  532. package/src/graph/host.ts +100 -0
  533. package/src/graph/icons.ts +23 -0
  534. package/src/graph/index.ts +16 -0
  535. package/src/graph/layered-graph.ts +417 -0
  536. package/src/graph/layout.ts +331 -0
  537. package/src/graph/marks.ts +42 -0
  538. package/src/graph/nav.ts +19 -0
  539. package/src/graph/pan-zoom.ts +219 -0
  540. package/src/graph/paths.ts +41 -0
  541. package/src/graph/place-card.ts +93 -0
  542. package/src/graph/strings.ts +86 -0
  543. package/src/graph/styles.ts +204 -0
  544. package/src/graph/types.ts +202 -0
  545. package/src/graph/view.ts +28 -0
  546. package/src/graph/views/dag.ts +294 -0
  547. package/src/graph/views/foot.ts +109 -0
  548. package/src/graph/views/node-table.ts +90 -0
  549. package/src/index.ts +25 -0
  550. package/src/json/index.ts +2 -0
  551. package/src/json/json-tree.ts +49 -0
  552. package/src/lanes/index.ts +6 -0
  553. package/src/lanes/lanes.ts +143 -0
  554. package/src/lanes/stack.ts +51 -0
  555. package/src/lanes/styles.ts +30 -0
  556. package/src/lanes/types.ts +51 -0
  557. package/src/markdown/cae-markdown.ts +64 -0
  558. package/src/markdown/highlight.ts +94 -0
  559. package/src/markdown/index.ts +5 -0
  560. package/src/markdown/markdown.ts +110 -0
  561. package/src/matrix/grid-step.ts +58 -0
  562. package/src/matrix/index.ts +6 -0
  563. package/src/matrix/mark-matrix.ts +285 -0
  564. package/src/matrix/styles.ts +48 -0
  565. package/src/matrix/types.ts +83 -0
  566. package/src/primitives/fact-line.ts +26 -0
  567. package/src/primitives/icon.ts +26 -0
  568. package/src/primitives/index.ts +12 -0
  569. package/src/primitives/legend.ts +56 -0
  570. package/src/primitives/pill.ts +58 -0
  571. package/src/primitives/roving-focus.ts +138 -0
  572. package/src/primitives/segmented.ts +92 -0
  573. package/src/primitives/share-bar.ts +94 -0
  574. package/src/primitives/states.ts +28 -0
  575. package/src/primitives/window.ts +65 -0
  576. package/src/styles/chips.ts +18 -0
  577. package/src/styles/facts.ts +7 -0
  578. package/src/styles/index.ts +19 -0
  579. package/src/styles/layout.ts +33 -0
  580. package/src/styles/marks.ts +30 -0
  581. package/src/styles/meter.ts +9 -0
  582. package/src/styles/motion.ts +27 -0
  583. package/src/styles/prose.ts +59 -0
  584. package/src/styles/reset.ts +13 -0
  585. package/src/styles/status.ts +52 -0
  586. package/src/styles/text.ts +21 -0
  587. package/src/styles/tokens.ts +35 -0
  588. package/src/table/data-table.ts +367 -0
  589. package/src/table/index.ts +5 -0
  590. package/src/table/styles.ts +32 -0
  591. package/src/table/types.ts +73 -0
  592. package/src/themes/boot.ts +14 -0
  593. package/src/themes/choice.ts +47 -0
  594. package/src/themes/data.ts +433 -0
  595. package/src/themes/index.ts +10 -0
  596. package/src/themes/sheet.ts +29 -0
  597. package/src/themes/token-meanings.ts +67 -0
  598. package/src/themes/tokens-list.ts +82 -0
  599. package/src/tiles/index.ts +5 -0
  600. package/src/tiles/stat-tiles.ts +92 -0
  601. package/src/tiles/styles.ts +23 -0
  602. package/src/tiles/types.ts +20 -0
  603. package/src/transcript/follow-scroll.ts +72 -0
  604. package/src/transcript/index.ts +6 -0
  605. package/src/transcript/styles.ts +114 -0
  606. package/src/transcript/tags.ts +18 -0
  607. package/src/transcript/tool-card.ts +103 -0
  608. package/src/transcript/transcript.ts +358 -0
  609. package/src/transcript/types.ts +167 -0
@@ -0,0 +1,138 @@
1
+ // One tab stop for a group of items: the arrow keys move the focus between them
2
+ // (a roving tabindex), Tab leaves the group.
3
+ import type { ReactiveController, ReactiveControllerHost } from 'lit';
4
+
5
+ export interface RovingFocusOptions {
6
+ /** The items, in order (row by row in a grid). */
7
+ items: () => readonly HTMLElement[];
8
+ /** Which arrow keys move: Left and Right, Up and Down, or both (a grid). */
9
+ layout: 'horizontal' | 'vertical' | 'grid';
10
+ /** The number of columns of a grid. */
11
+ columns?: () => number;
12
+ /** From the last item to the first and back (not in a grid). */
13
+ wrap?: boolean;
14
+ /** Called after the focus moved to `el`. */
15
+ onMove?: (el: HTMLElement, index: number) => void;
16
+ }
17
+
18
+ /**
19
+ * Where a key moves the focus among `n` items from `i`, or null when it does not
20
+ * move. A grid has `cols` columns: Left and Right move in the row, Up and Down in
21
+ * the column, Home and End to the row's ends, with Ctrl to the first and last
22
+ * item.
23
+ */
24
+ export function rovingStep(
25
+ n: number,
26
+ i: number,
27
+ key: string,
28
+ o: { layout: RovingFocusOptions['layout']; cols?: number; wrap?: boolean; ctrl?: boolean },
29
+ ): number | null {
30
+ if (n <= 0) return null;
31
+ const to = (j: number): number | null => (j === i || j < 0 || j >= n ? null : j);
32
+ if (o.layout === 'grid') {
33
+ const cols = Math.max(1, o.cols ?? 1);
34
+ const row = Math.floor(i / cols) * cols;
35
+ switch (key) {
36
+ case 'ArrowRight':
37
+ return (i + 1) % cols && i + 1 < n ? to(i + 1) : null;
38
+ case 'ArrowLeft':
39
+ return i % cols ? to(i - 1) : null;
40
+ case 'ArrowDown':
41
+ return to(i + cols);
42
+ case 'ArrowUp':
43
+ return to(i - cols);
44
+ case 'Home':
45
+ return to(o.ctrl ? 0 : row);
46
+ case 'End':
47
+ return to(o.ctrl ? n - 1 : Math.min(row + cols, n) - 1);
48
+ default:
49
+ return null;
50
+ }
51
+ }
52
+ const [prev, next] = o.layout === 'horizontal' ? ['ArrowLeft', 'ArrowRight'] : ['ArrowUp', 'ArrowDown'];
53
+ const step = (s: number): number | null => (o.wrap ? to((i + s + n) % n) : to(i + s));
54
+ switch (key) {
55
+ case next:
56
+ return step(1);
57
+ case prev:
58
+ return step(-1);
59
+ case 'Home':
60
+ return to(0);
61
+ case 'End':
62
+ return to(n - 1);
63
+ default:
64
+ return null;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * A roving tabindex over the host's items: the current item has `tabindex=0`, the
70
+ * others -1, and the keys of `rovingStep` move the focus. `current` follows a
71
+ * click or a focus too.
72
+ */
73
+ export class RovingFocusController implements ReactiveController {
74
+ /** The index of the item that holds the tab stop. */
75
+ current = 0;
76
+
77
+ constructor(
78
+ private readonly host: ReactiveControllerHost & HTMLElement,
79
+ private readonly o: RovingFocusOptions,
80
+ ) {
81
+ host.addController(this);
82
+ }
83
+
84
+ hostConnected(): void {
85
+ this.host.addEventListener('keydown', this.onKey);
86
+ this.host.addEventListener('focusin', this.onFocus);
87
+ }
88
+
89
+ hostDisconnected(): void {
90
+ this.host.removeEventListener('keydown', this.onKey);
91
+ this.host.removeEventListener('focusin', this.onFocus);
92
+ }
93
+
94
+ hostUpdated(): void {
95
+ this.sync();
96
+ }
97
+
98
+ /** Gives the tab stop to item `i`, without moving the focus. */
99
+ set(i: number): void {
100
+ this.current = i;
101
+ this.sync();
102
+ }
103
+
104
+ private sync(): void {
105
+ const items = this.o.items();
106
+ if (!items.length) return;
107
+ this.current = Math.min(Math.max(0, this.current), items.length - 1);
108
+ items.forEach((el, j) => (el.tabIndex = j === this.current ? 0 : -1));
109
+ }
110
+
111
+ private indexOf(e: Event): number {
112
+ const items = this.o.items();
113
+ return items.findIndex((el) => e.composedPath().includes(el));
114
+ }
115
+
116
+ private readonly onFocus = (e: FocusEvent): void => {
117
+ const i = this.indexOf(e);
118
+ if (i >= 0 && i !== this.current) this.set(i);
119
+ };
120
+
121
+ private readonly onKey = (e: KeyboardEvent): void => {
122
+ const items = this.o.items();
123
+ const i = this.indexOf(e);
124
+ if (i < 0) return;
125
+ const j = rovingStep(items.length, i, e.key, {
126
+ layout: this.o.layout,
127
+ cols: this.o.columns?.(),
128
+ wrap: this.o.wrap,
129
+ ctrl: e.ctrlKey || e.metaKey,
130
+ });
131
+ const el = j === null ? undefined : items[j];
132
+ if (j === null || !el) return;
133
+ e.preventDefault();
134
+ this.set(j);
135
+ el.focus();
136
+ this.o.onMove?.(el, j);
137
+ };
138
+ }
@@ -0,0 +1,92 @@
1
+ import { LitElement, css, html, nothing } from 'lit';
2
+ import { property } from 'lit/decorators.js';
3
+ import { repeat } from 'lit/directives/repeat.js';
4
+ import { emit } from '../core/events.js';
5
+ import { base } from '../styles/index.js';
6
+ import { RovingFocusController } from './roving-focus.js';
7
+
8
+ export interface SegmentedOption {
9
+ value: string;
10
+ label: string;
11
+ title?: string;
12
+ disabled?: boolean;
13
+ /** The option's language (`lang`), when its label is in another language than the page. */
14
+ lang?: string;
15
+ }
16
+
17
+ /**
18
+ * One choice among a few, as a row of buttons (a radio group): a click, or the
19
+ * arrow keys, Home and End, choose. The group is one tab stop.
20
+ *
21
+ * Its look: `--cae-segmented-radius`, `--cae-segmented-height`,
22
+ * `--cae-segmented-padding`, `--cae-segmented-font-size`,
23
+ * `--cae-segmented-divider` (the line between options) and
24
+ * `--cae-segmented-hover` (an option's text under the pointer), or the parts.
25
+ *
26
+ * @tagname cae-segmented
27
+ * @fires cae-change - `{value}`: the option the reader chose
28
+ * @csspart group - the row of options
29
+ * @csspart option - each option
30
+ * @csspart option-selected - the chosen option
31
+ */
32
+ export class CaeSegmented extends LitElement {
33
+ static override styles = [
34
+ base,
35
+ css`
36
+ :host { display: inline-flex; vertical-align: middle; }
37
+ .group { display: inline-flex; border: 1px solid var(--line); border-radius: var(--cae-segmented-radius, 6px); overflow: hidden; }
38
+ button { min-width: 22px; height: var(--cae-segmented-height, 20px); line-height: var(--cae-segmented-height, 20px); padding: var(--cae-segmented-padding, 0 10px);
39
+ margin: 0; border: 0; border-radius: 0; background: none; font-size: var(--cae-segmented-font-size, 11.5px); text-align: center;
40
+ color: var(--text-muted); cursor: pointer; }
41
+ button + button { border-left: var(--cae-segmented-divider, 1px solid var(--line)); }
42
+ button:hover { color: var(--cae-segmented-hover, var(--text)); }
43
+ button[aria-checked='true'] { background: var(--raise); color: var(--text); cursor: default; }
44
+ button:disabled { opacity: 0.5; cursor: default; }
45
+ button:focus-visible { outline-offset: -2px; }
46
+ `,
47
+ ];
48
+
49
+ @property({ attribute: false }) options: readonly SegmentedOption[] = [];
50
+ @property() value = '';
51
+ /** The group's accessible name. */
52
+ @property() label = '';
53
+
54
+ private readonly roving = new RovingFocusController(this, {
55
+ items: () => [...(this.renderRoot.querySelectorAll<HTMLButtonElement>('button:not(:disabled)') ?? [])],
56
+ layout: 'horizontal',
57
+ wrap: true,
58
+ onMove: (el) => this.choose(el.dataset['value'] ?? ''),
59
+ });
60
+
61
+ override willUpdate(): void {
62
+ const i = this.options.filter((o) => !o.disabled).findIndex((o) => o.value === this.value);
63
+ if (i >= 0) this.roving.current = i;
64
+ }
65
+
66
+ private choose(value: string): void {
67
+ if (value === this.value) return;
68
+ this.value = value;
69
+ emit(this, 'cae-change', { value });
70
+ }
71
+
72
+ override render() {
73
+ return html`<div class="group" part="group" role="radiogroup" aria-label=${this.label || nothing}>
74
+ ${repeat(
75
+ this.options,
76
+ (o) => o.value,
77
+ (o) => {
78
+ const on = o.value === this.value;
79
+ return html`<button type="button" role="radio" part=${on ? 'option option-selected' : 'option'} aria-checked=${on ? 'true' : 'false'}
80
+ data-value=${o.value} lang=${o.lang || nothing} title=${o.title || nothing} ?disabled=${!!o.disabled}
81
+ @click=${() => this.choose(o.value)}>${o.label}</button>`;
82
+ },
83
+ )}
84
+ </div>`;
85
+ }
86
+ }
87
+
88
+ declare global {
89
+ interface HTMLElementTagNameMap {
90
+ 'cae-segmented': CaeSegmented;
91
+ }
92
+ }
@@ -0,0 +1,94 @@
1
+ // A share bar: one whole, as a single 100% bar of its parts, side by side.
2
+ import { css, html, nothing, type TemplateResult } from 'lit';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+
5
+ export interface SharePart {
6
+ /** What tells the part apart (a stable key). */
7
+ id: string;
8
+ /** The part's name, the same as in the legend beside the bar. */
9
+ label: string;
10
+ /** Its amount; a part of 0 draws nothing. */
11
+ value: number;
12
+ /** Its colour: a CSS colour or `var(...)`, the same as its swatch in the legend. */
13
+ color: string;
14
+ /** The amount in words, for the tooltip (`$0.12`, `1.2k`). */
15
+ text?: string;
16
+ }
17
+
18
+ export interface ShareBarOptions {
19
+ /** The bar's accessible name. */
20
+ label?: string;
21
+ /** The smallest share (0..1) whose part is named under the bar; default 0.15. */
22
+ labelAt?: number;
23
+ }
24
+
25
+ /**
26
+ * Whole percents (0..100) for `values`, summing to exactly 100 when any is above 0
27
+ * (the largest remainders round up); all 0 when none is.
28
+ */
29
+ export function wholePercents(values: readonly number[]): number[] {
30
+ const total = values.reduce((a, v) => a + Math.max(v, 0), 0);
31
+ if (!total) return values.map(() => 0);
32
+ const exact = values.map((v) => (100 * Math.max(v, 0)) / total);
33
+ const out = exact.map(Math.floor);
34
+ const order = exact.map((x, i) => [x - Math.floor(x), i] as const).sort((a, b) => b[0] - a[0] || a[1] - b[1]);
35
+ for (let k = 0, left = 100 - out.reduce((a, v) => a + v, 0); k < left; k++) out[order[k]![1]]! += 1;
36
+ return out;
37
+ }
38
+
39
+ /** A share in words: `42%`, `<1%` for a part above 0 that rounds to 0. */
40
+ export const sharePercent = (pct: number, value: number): string => (pct === 0 && value > 0 ? '<1%' : `${pct}%`);
41
+
42
+ /**
43
+ * The parts of a whole as one bar (`.share`, part `share`): each part a segment as
44
+ * wide as its share, 2px apart, in the order given (so a part keeps its place when
45
+ * the amounts change), with its name and share under it when it is wide enough.
46
+ * Hovering or focusing a segment shows its name, share and amount; each segment is
47
+ * a tab stop with the same words. Name every part beside the bar too (a legend or a
48
+ * table): a colour alone never says which part is which.
49
+ */
50
+ export function shareBar(parts: readonly SharePart[], o: ShareBarOptions = {}): TemplateResult {
51
+ const shown = parts.filter((p) => p.value > 0);
52
+ const pcts = wholePercents(shown.map((p) => p.value));
53
+ const total = shown.reduce((a, p) => a + p.value, 0);
54
+ const labelAt = o.labelAt ?? 0.15;
55
+ const words = (p: SharePart, i: number) => [p.label, sharePercent(pcts[i]!, p.value), p.text].filter(Boolean).join(' | ');
56
+ return html`<div class="share" part="share">
57
+ <div class="share-bar" role="list" aria-label=${o.label || nothing}>
58
+ ${shown.map(
59
+ (p, i) => html`<span class="share-seg" role="listitem" tabindex="0" aria-label=${words(p, i)} data-id=${p.id}
60
+ data-edge=${i === 0 ? 'start' : i === shown.length - 1 ? 'end' : nothing}
61
+ style=${styleMap({ flexGrow: String(p.value / total), background: p.color })}
62
+ ><span class="share-tip" aria-hidden="true">${words(p, i)}</span></span>`,
63
+ )}
64
+ </div>
65
+ <div class="share-names" aria-hidden="true">
66
+ ${shown.map(
67
+ (p, i) => html`<span style=${styleMap({ flexGrow: String(p.value / total) })}
68
+ >${p.value / total >= labelAt ? html`<b>${p.label}</b> ${sharePercent(pcts[i]!, p.value)}` : nothing}</span>`,
69
+ )}
70
+ </div>
71
+ </div>`;
72
+ }
73
+
74
+ export const shareBarStyles = css`
75
+ .share { display: grid; gap: 6px; }
76
+ .share-bar, .share-names { display: flex; gap: 2px; min-width: 0; }
77
+ .share-bar { height: 14px; }
78
+ .share-seg { position: relative; flex: 0 1 0; min-width: 3px; height: 100%; border-radius: 1px; cursor: default; outline-offset: 2px; }
79
+ .share-seg[data-edge='start'] { border-radius: 4px 1px 1px 4px; }
80
+ .share-seg[data-edge='end'] { border-radius: 1px 4px 4px 1px; }
81
+ .share-seg:only-child { border-radius: 4px; }
82
+ /* A hit area taller than the bar. */
83
+ .share-seg::before { content: ''; position: absolute; inset: -6px 0; }
84
+ .share-seg:hover, .share-seg:focus-visible { box-shadow: 0 0 0 2px var(--card); }
85
+ .share-tip { display: none; position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); z-index: 2;
86
+ padding: 4px 8px; border-radius: var(--radius-sm); background: var(--raise); border: 1px solid var(--line2); box-shadow: 0 4px 14px var(--shadow);
87
+ color: var(--text); font-size: var(--font-size-sm); white-space: nowrap; pointer-events: none; }
88
+ .share-seg[data-edge='start'] .share-tip, .share-seg:only-child .share-tip { left: 0; transform: none; }
89
+ .share-seg[data-edge='end'] .share-tip { left: auto; right: 0; transform: none; }
90
+ .share-seg:hover .share-tip, .share-seg:focus-visible .share-tip { display: block; }
91
+ .share-names span { flex: 0 1 0; min-width: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
92
+ font-size: var(--font-size-sm); color: var(--text-muted); font-variant-numeric: tabular-nums; }
93
+ .share-names b { font-weight: 600; color: var(--text-2); }
94
+ `;
@@ -0,0 +1,28 @@
1
+ // States and their looks: a state is an id the host chooses; `StateStyles` maps it
2
+ // to a word, a tone and a shape, and orders the states (the legend's order).
3
+ import type { Tone } from '../core/tone.js';
4
+ import type { MarkShape } from './legend.js';
5
+
6
+ export interface StateStyle {
7
+ /** The word beside a mark and in the legend. */
8
+ label: string;
9
+ tone: Tone;
10
+ shape: MarkShape;
11
+ /** Higher is more severe: what a mark standing for several items shows. */
12
+ rank: number;
13
+ /** How many items are in this state, number first ("3 failed"); default: the number and `label`. */
14
+ count?: (n: number) => string;
15
+ }
16
+
17
+ /** State id → look. The key order is the legend order. */
18
+ export type StateStyles = Readonly<Record<string, StateStyle>>;
19
+
20
+ /** The most severe of `states` by `styles` (an unknown state ranks lowest); '' for none. */
21
+ export function worstState(states: Iterable<string>, styles: StateStyles): string {
22
+ let worst = '';
23
+ for (const s of states) if (worst === '' || (styles[s]?.rank ?? -Infinity) > (styles[worst]?.rank ?? -Infinity)) worst = s;
24
+ return worst;
25
+ }
26
+
27
+ /** How many items are in state `s`, in words. */
28
+ export const stateCount = (styles: StateStyles, s: string, n: number): string => styles[s]?.count?.(n) ?? `${n} ${styles[s]?.label ?? s}`;
@@ -0,0 +1,65 @@
1
+ // Windowing: which rows of a long list of fixed-height rows are drawn, and the
2
+ // space that stands for the rows above and below them.
3
+
4
+ export interface RowWindow {
5
+ /** The first row drawn. */
6
+ from: number;
7
+ /** The row after the last drawn. */
8
+ to: number;
9
+ /** The height that stands for the rows above `from`. */
10
+ padTop: number;
11
+ /** The height that stands for the rows from `to` on. */
12
+ padBottom: number;
13
+ }
14
+
15
+ /**
16
+ * The rows of `total` rows of `rowHeight` px that a viewport of `viewport` px,
17
+ * scrolled to `scrollTop`, shows, with `overscan` more rows on each side.
18
+ */
19
+ export function windowRows(total: number, scrollTop: number, viewport: number, rowHeight: number, overscan = 8): RowWindow {
20
+ const n = Math.max(0, Math.floor(total));
21
+ if (!n || rowHeight <= 0) return { from: 0, to: n, padTop: 0, padBottom: 0 };
22
+ const first = Math.floor(Math.max(0, scrollTop) / rowHeight);
23
+ const shown = Math.ceil(Math.max(0, viewport) / rowHeight) + 1;
24
+ const from = Math.min(n, Math.max(0, first - overscan));
25
+ const to = Math.min(n, Math.max(from, first + shown + overscan));
26
+ return { from, to, padTop: from * rowHeight, padBottom: (n - to) * rowHeight };
27
+ }
28
+
29
+ /**
30
+ * The rows a viewport of `viewport` px, scrolled to `scrollTop`, shows, when rows
31
+ * differ in height: `offsets[i]` is where row `i` starts and `offsets[total]` is
32
+ * the height of all of them (`rowOffsets`), with `overscan` more rows on each side.
33
+ */
34
+ export function windowRowsAt(offsets: readonly number[], scrollTop: number, viewport: number, overscan = 8): RowWindow {
35
+ const n = Math.max(0, offsets.length - 1);
36
+ const all = offsets[n] ?? 0;
37
+ if (!n || all <= 0) return { from: 0, to: n, padTop: 0, padBottom: 0 };
38
+ const top = Math.max(0, scrollTop);
39
+ const first = rowAt(offsets, top);
40
+ const last = rowAt(offsets, top + Math.max(0, viewport));
41
+ const from = Math.max(0, first - overscan);
42
+ const to = Math.min(n, Math.max(from, last + 1 + overscan));
43
+ return { from, to, padTop: offsets[from]!, padBottom: all - offsets[to]! };
44
+ }
45
+
46
+ /** Where each of `total` rows starts, and the height of all of them last: `height(i)` is row `i`'s. */
47
+ export function rowOffsets(total: number, height: (i: number) => number): number[] {
48
+ const out = new Array<number>(Math.max(0, total) + 1);
49
+ out[0] = 0;
50
+ for (let i = 0; i < total; i++) out[i + 1] = out[i]! + Math.max(0, height(i));
51
+ return out;
52
+ }
53
+
54
+ /** The row that holds `y`: the last `i` with `offsets[i] <= y`, at most the last row. */
55
+ function rowAt(offsets: readonly number[], y: number): number {
56
+ const n = offsets.length - 1;
57
+ let lo = 0;
58
+ let hi = n - 1;
59
+ while (lo < hi) {
60
+ const mid = (lo + hi + 1) >> 1;
61
+ if (offsets[mid]! <= y) lo = mid;
62
+ else hi = mid - 1;
63
+ }
64
+ return lo;
65
+ }
@@ -0,0 +1,18 @@
1
+ // Chips: a row of chips (stages: done, current, to come), a task's name, a tag, a key.
2
+ import { css } from 'lit';
3
+
4
+ export const chipStyles = css`
5
+ .tag { font-size: var(--font-size-xs); padding: 0 7px; border-radius: var(--radius-pill); border: 1px solid var(--line2); color: var(--text-muted); white-space: nowrap; }
6
+ .chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
7
+ .chip { font-size: var(--font-size-sm); padding: 1px 8px; border-radius: var(--radius-pill); border: 1px solid var(--line); color: var(--text-muted); white-space: nowrap; }
8
+ .chip[data-tone='done'] { color: var(--text-2); }
9
+ .chip[data-tone='done'] > [aria-hidden] { color: var(--tone); font-weight: 700; }
10
+ .chip[data-tone='running'] { background: var(--tone); color: var(--bg); border-color: var(--tone); font-weight: 600; animation: ping 1.6s var(--ease) infinite; }
11
+ .chip.todo { opacity: 0.65; }
12
+ .taskchip { display: inline-block; font: inherit; font-family: var(--mono); font-size: var(--font-size-sm); line-height: 1.5; padding: 0 8px;
13
+ border-radius: var(--radius-pill); border: 1px solid var(--line); background: var(--raise); color: var(--text-2); white-space: nowrap; }
14
+ button.taskchip { cursor: pointer; }
15
+ button.taskchip:hover { border-color: var(--accent); color: var(--text); }
16
+ .kbd { font-family: var(--mono); font-size: var(--font-size-xs); border: 1px solid var(--line2); border-bottom-width: 2px;
17
+ border-radius: var(--radius-sm); padding: 0 4px; color: var(--text-muted); }
18
+ `;
@@ -0,0 +1,7 @@
1
+ // Labelled facts in a row that wraps (the run's process, a task's definition).
2
+ import { css } from 'lit';
3
+
4
+ export const factStyles = css`
5
+ .drv-facts { display: flex; flex-wrap: wrap; gap: 6px 14px; margin-top: 8px; font-size: var(--font-size-md); }
6
+ .drv-facts i { font-style: normal; color: var(--text-muted); margin-right: 5px; font-size: var(--font-size-sm); }
7
+ `;
@@ -0,0 +1,19 @@
1
+ // The stylesheets the elements share, one job each. `base` is what every element
2
+ // starts from; the others are opt-in, for the elements that show what they style.
3
+ import type { CSSResult } from 'lit';
4
+ import { chipStyles } from './chips.js';
5
+ import { layoutStyles } from './layout.js';
6
+ import { motionStyles } from './motion.js';
7
+ import { resetStyles } from './reset.js';
8
+ import { statusStyles } from './status.js';
9
+ import { textStyles } from './text.js';
10
+ import { tokenStyles } from './tokens.js';
11
+
12
+ export { chipStyles, layoutStyles, motionStyles, resetStyles, statusStyles, textStyles, tokenStyles };
13
+ export { prose } from './prose.js';
14
+ export { meterStyles } from './meter.js';
15
+ export { factStyles } from './facts.js';
16
+ export { markStyles } from './marks.js';
17
+
18
+ /** Every element's styles, in cascade order: the tokens, then the shared rules. */
19
+ export const base: CSSResult[] = [tokenStyles, resetStyles, textStyles, statusStyles, chipStyles, layoutStyles, motionStyles];
@@ -0,0 +1,33 @@
1
+ // Layout: the 12-column grid, a panel, a section heading, an empty state, a
2
+ // short clickable row. The grid is a container: its columns follow its own
3
+ // width, not the window's.
4
+ import { css } from 'lit';
5
+
6
+ export const layoutStyles = css`
7
+ .g12 { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 14px; container-type: inline-size; }
8
+ .c12 { grid-column: span 12; }
9
+ .c7 { grid-column: span 7; }
10
+ .c5 { grid-column: span 5; }
11
+ @container (max-width: 1100px) {
12
+ .c7, .c5 { grid-column: span 12; }
13
+ }
14
+ .panel { background: linear-gradient(180deg, var(--panel2), var(--panel)); border: 1px solid var(--line);
15
+ border-radius: var(--radius-lg); padding: 14px 16px; min-width: 0; box-shadow: 0 10px 28px color-mix(in srgb, var(--shadow) 40%, transparent); }
16
+ .panel > h3 { margin: 0 0 12px; display: flex; align-items: center; gap: 8px; font-size: 12.5px; font-weight: 600; color: var(--text-2); }
17
+ .panel > h3 .r { margin-left: auto; font-weight: 400; font-size: 11.5px; color: var(--text-muted); }
18
+ .sect-h { margin: 14px 0 8px; font-size: var(--font-size-md); color: var(--text-2); font-weight: 600; }
19
+ .sect-h .meta { margin-left: 8px; font-weight: 400; }
20
+
21
+ .blank { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 60px 16px; color: var(--text-muted); text-align: center; }
22
+ .blank .ic { font-size: 30px; opacity: 0.55; }
23
+ .blank b { color: var(--text-2); font-weight: 600; }
24
+ .blank a.lnk { text-decoration: underline; }
25
+ .blank.small { padding: 24px; }
26
+
27
+ /* a short clickable row (failures, launches): a button, or a row whose name (.fl-name) is the button */
28
+ .fl { padding: 7px 10px; border-radius: var(--radius-md); cursor: pointer; display: grid; grid-template-columns: auto 1fr auto; gap: 2px 10px; align-items: baseline; }
29
+ button.fl { width: 100%; background: none; border: 0; color: inherit; text-align: start; }
30
+ .fl-name { background: none; border: 0; padding: 0; color: inherit; font-weight: 700; text-align: start; cursor: pointer; min-width: 0; }
31
+ .fl > .meta:last-child { grid-column: 1 / 4; overflow: hidden; text-overflow: ellipsis; }
32
+ .fl:hover { background: var(--raise); }
33
+ `;
@@ -0,0 +1,30 @@
1
+ // A status mark: a small square or round shape in a state's look (`data-tone` for
2
+ // its colour, `data-shape` for its shape), sized by `--m`. In a `.big` group a
3
+ // failed mark carries ✕, and a badge (`data-n`) is written in the mark.
4
+ import { css } from 'lit';
5
+
6
+ export const markStyles = css`
7
+ .mark { width: var(--m); height: var(--m); padding: 0; margin: 0; border: 0; border-radius: 50%; background: var(--tone, var(--status-done)); opacity: 0.9;
8
+ cursor: pointer; position: relative; transition: opacity 0.2s, transform 0.15s, background 0.3s; }
9
+ .mark:not([data-tone]) { --tone: initial; }
10
+ .mark[data-tone='muted'] { opacity: 0.55; }
11
+ .mark[data-tone='running'] { opacity: 1; animation: breathe 1.4s ease-in-out infinite; }
12
+ .mark[data-shape='ring'] { background: transparent; box-shadow: inset 0 0 0 1.5px var(--tone, var(--line2)); }
13
+ .mark[data-shape='hatched'] { border-radius: 2px; background: repeating-linear-gradient(135deg, transparent 0 2px, color-mix(in srgb, var(--tone) 55%, transparent) 2px 3px);
14
+ box-shadow: inset 0 0 0 1.5px var(--tone); opacity: 1; }
15
+ .mark[data-shape='half'] { background: linear-gradient(0deg, var(--tone) 50%, transparent 50%); box-shadow: inset 0 0 0 1.5px var(--tone); opacity: 1; }
16
+ .mark[data-shape='square'] { border-radius: 2px; opacity: 1; }
17
+ .big .mark[data-tone='failed']::after { content: '✕'; position: absolute; inset: 0; display: grid; place-items: center; color: var(--bg);
18
+ font-size: calc(var(--m) - 3px); line-height: 1; font-weight: 700; }
19
+ /* A badge (a count): in the mark; a small mark has a hole instead. */
20
+ .mark[data-n]::after { content: ''; position: absolute; inset: 32%; border-radius: 50%; background: var(--card); }
21
+ .big .mark[data-n]::after { content: attr(data-n); inset: 0; display: grid; place-items: center; border-radius: 0; background: none;
22
+ font: 700 max(7px, calc(var(--m) - 4px)) / 1 var(--sans); color: var(--bg); letter-spacing: -0.5px; }
23
+ .big .mark:is(:not([data-tone]), [data-tone='attention'], [data-tone='muted'])[data-n]::after { color: var(--text); }
24
+ .mark:hover, .mark:focus-visible { transform: scale(1.4); outline: var(--focus-width) solid var(--text); outline-offset: 1px; z-index: 2; }
25
+ .mark.sel { outline: var(--focus-width) solid var(--accent); outline-offset: 2px; z-index: 2; }
26
+ @media (prefers-reduced-motion: reduce) {
27
+ .mark { transition: none; }
28
+ .mark[data-tone='running'] { animation: none; background: linear-gradient(90deg, var(--status-running) 50%, transparent 50%); box-shadow: inset 0 0 0 1.5px var(--status-running); }
29
+ }
30
+ `;
@@ -0,0 +1,9 @@
1
+ // A duration bar under a time (the task table and History).
2
+ import { css } from 'lit';
3
+
4
+ /** A duration: it measures, it does not judge (red only for a failed attempt). */
5
+ export const meterStyles = css`
6
+ .jdur { position: relative; display: block; height: 6px; border-radius: 3px; background: var(--track); overflow: hidden; margin-top: 2px; }
7
+ .jdur i { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 3px; background: var(--meter); }
8
+ .jdur i.bad { background: var(--status-failed); }
9
+ `;
@@ -0,0 +1,27 @@
1
+ // Motion: the keyframes the elements use, and none of it for a reader who asks
2
+ // for reduced motion.
3
+ import { css } from 'lit';
4
+
5
+ export const motionStyles = css`
6
+ .enter { animation: enter 0.5s var(--ease) both; }
7
+
8
+ @keyframes turn { to { transform: rotate(360deg); } }
9
+ @keyframes breathe {
10
+ 0%, 100% { opacity: 0.45; box-shadow: 0 0 0 0 transparent; transform: scale(0.85); }
11
+ 50% { opacity: 1; box-shadow: 0 0 0 4px var(--status-running-bg); transform: scale(1); }
12
+ }
13
+ @keyframes ping { 0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--status-running) 55%, transparent); } 80%, 100% { box-shadow: 0 0 0 9px transparent; } }
14
+ @keyframes enter { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
15
+ @keyframes bump { 0% { transform: scale(1); } 35% { transform: scale(1.04); box-shadow: 0 0 0 1px var(--line2); } 100% { transform: scale(1); } }
16
+ @keyframes scan { from { transform: translateX(-100%); } to { transform: translateX(100%); } }
17
+ @keyframes growx { from { transform: scaleX(0); } to { transform: scaleX(1); } }
18
+ @keyframes stripes { to { background-position: 17px 0; } }
19
+ @keyframes toast-in { from { opacity: 0; transform: translateY(12px) scale(0.97); } to { opacity: 1; transform: none; } }
20
+ @keyframes toast-out { to { opacity: 0; transform: translateX(24px); } }
21
+ @keyframes rowin { from { background: color-mix(in srgb, var(--text) 10%, transparent); } to { background: transparent; } }
22
+ @keyframes bounce { 0%, 80%, 100% { transform: translateY(0); opacity: 0.45; } 40% { transform: translateY(-5px); opacity: 1; } }
23
+ @keyframes core-beat { 0%, 100% { transform: scale(1); } 50% { transform: scale(0.72); } }
24
+ @media (prefers-reduced-motion: reduce) {
25
+ *, *::before, *::after { animation: none !important; transition: none !important; }
26
+ }
27
+ `;
@@ -0,0 +1,59 @@
1
+ // Rendered markdown, highlighted code and JSON trees.
2
+ import { css } from 'lit';
3
+
4
+ /** Rendered markdown, highlighted code and JSON trees: transcripts, plugin files, panels. */
5
+ export const prose = css`
6
+ .jtree { font-family: var(--mono); font-size: var(--font-size-md); overflow: auto; }
7
+ .jt { margin-left: 16px; }
8
+ details.jt > summary { cursor: pointer; list-style: revert; }
9
+ .jk { color: var(--code-name); }
10
+ .js { color: var(--code-string); }
11
+ .jn { color: var(--code-number); }
12
+
13
+ .md-p { margin: 0.15em 0; }
14
+ .md-gap { height: 0.5em; }
15
+ .md-h { font-weight: 600; margin: 0.7em 0 0.25em; }
16
+ .md-h1 { font-size: 1.25em; }
17
+ .md-h2 { font-size: 1.12em; }
18
+ .md-h3 { font-size: 1.03em; color: var(--text-2); }
19
+ .md-h4 { color: var(--text-2); }
20
+ .md-li { padding-left: 16px; text-indent: -12px; margin: 0.1em 0; }
21
+ .md-li::before { content: '• '; color: var(--text-muted); }
22
+ .md-ol::before { content: ''; }
23
+ .md-n { color: var(--text-muted); margin-right: 6px; }
24
+ .md-q { border-left: 3px solid var(--line2); padding-left: 10px; color: var(--text-2); margin: 0.2em 0; }
25
+ .md-hr { border: 0; border-top: 1px solid var(--line); margin: 0.7em 0; }
26
+ .md-t { border-collapse: collapse; margin: 0.4em 0; }
27
+ .md-t th, .md-t td { border: 1px solid var(--line); padding: 3px 9px; text-align: left; font-size: 12.5px; }
28
+ .md-t th { background: var(--raise); }
29
+ .md-doc { padding: 10px 14px; background: var(--well); border: 1px solid var(--line); border-radius: var(--radius-md); max-height: 460px; overflow: auto; line-height: 1.55; }
30
+ .md-doc code, .tx code { background: var(--raise); border-radius: var(--radius-sm); padding: 0 4px; font-size: 0.92em; }
31
+ .md-doc pre { background: var(--well); border: 1px solid var(--line); border-radius: 6px; padding: 8px 10px; white-space: pre-wrap; }
32
+ .md-doc pre code, .tx pre code { background: none; padding: 0; border-radius: 0; font-size: inherit; }
33
+ .md-front { margin-bottom: 10px; border-collapse: collapse; }
34
+ .md-front td { padding: 2px 14px 2px 0; font-size: 12.5px; border: 0; vertical-align: top; }
35
+ .md-front td:first-child { color: var(--text-muted); }
36
+ .md-tele { color: var(--text-muted); font-size: 11.5px; margin-bottom: 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
37
+ .df-text { background: var(--well); border: 1px solid var(--line); border-radius: var(--radius-md); padding: 10px 12px; font-size: var(--font-size-md);
38
+ white-space: pre-wrap; max-height: 420px; overflow: auto; margin: 0; }
39
+ .df-tog { margin-left: auto; font-size: var(--font-size-sm); color: var(--accent); border: 1px solid var(--line2); border-radius: var(--radius-pill);
40
+ padding: 0 9px; cursor: pointer; background: none; }
41
+ .df-tog:hover { background: var(--accent-bg); }
42
+ /* a template placeholder in a prompt */
43
+ .pv { color: var(--code-constant); background: color-mix(in srgb, var(--code-constant) 12%, transparent); border-radius: var(--radius-sm); padding: 0 3px; }
44
+ .pv.pc { color: var(--code-keyword); background: color-mix(in srgb, var(--code-keyword) 12%, transparent); }
45
+
46
+ .hl { font-family: var(--mono); }
47
+ .hl-k { color: var(--code-keyword); }
48
+ .hl-const { color: var(--code-constant); font-style: italic; }
49
+ .hl-s { color: var(--code-string); }
50
+ .hl-doc { color: var(--code-string); font-style: italic; opacity: 0.85; }
51
+ .hl-c { color: var(--code-comment); font-style: italic; }
52
+ .hl-n { color: var(--code-number); }
53
+ .hl-d { color: var(--code-function); }
54
+ .hl-f { color: var(--code-function); font-weight: 600; }
55
+ .hl-cls { color: var(--code-type); font-weight: 700; }
56
+ .hl-t { color: var(--code-type); }
57
+ .hl-b { color: var(--code-name); }
58
+ .hl-key { color: var(--code-name); }
59
+ `;
@@ -0,0 +1,13 @@
1
+ // What every element's shadow root starts from: box sizing, scrollbars, the
2
+ // selection and the focus ring.
3
+ import { css } from 'lit';
4
+
5
+ export const resetStyles = css`
6
+ *, *::before, *::after { box-sizing: border-box; }
7
+ * { scrollbar-width: thin; scrollbar-color: var(--line2) transparent; }
8
+ *:hover { scrollbar-color: var(--text-muted) transparent; }
9
+ ::selection { background: var(--selection); }
10
+ :focus-visible { outline: var(--focus-width) solid var(--focus); outline-offset: 2px; }
11
+ button { font: inherit; color: inherit; }
12
+ [hidden] { display: none !important; }
13
+ `;