@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,83 @@
1
+ import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
2
+ import type { Tone } from '../core/tone.js';
3
+ /** One item of a tree: its name, the items under it, and how it looks. */
4
+ export interface TreeItem {
5
+ /** Its id, unique in the tree. */
6
+ id: string;
7
+ name: string;
8
+ /** Its icon: a directory for an item with children, a file for one without, unless given. */
9
+ icon?: 'file' | 'directory' | null;
10
+ /** A word beside the name, coloured by `tone` (with its mark: ✓ done, ✕ failed, ◌ attention). */
11
+ badge?: string | null;
12
+ tone?: Tone | null;
13
+ /** Its children are shown at first (default: true). */
14
+ open?: boolean | null;
15
+ children?: readonly TreeItem[] | null;
16
+ /** A click or Enter selects it (`cae-select`); default: an item with no children. An item with children that is not selectable opens and closes instead. */
17
+ selectable?: boolean | null;
18
+ }
19
+ export interface TreeStrings {
20
+ /** What a tree with no items shows. */
21
+ empty: string;
22
+ }
23
+ export declare const DEFAULT_TREE_STRINGS: Readonly<TreeStrings>;
24
+ /** An item where the tree shows it: its depth (1 at the top), its parent, and its place among its siblings. */
25
+ export interface TreeRow {
26
+ item: TreeItem;
27
+ level: number;
28
+ parent: string | null;
29
+ index: number;
30
+ siblings: number;
31
+ }
32
+ /** The items shown, top to bottom: every item whose ancestors are all open (`isOpen`). */
33
+ export declare function visibleRows(items: readonly TreeItem[], isOpen: (t: TreeItem) => boolean): TreeRow[];
34
+ /** The ids of the ancestors of item `id`, outermost first; null when no item has that id. */
35
+ export declare function ancestorsOf(items: readonly TreeItem[], id: string): string[] | null;
36
+ /** The first item, depth first, that `match` accepts. */
37
+ export declare function findItem(items: readonly TreeItem[], match: (t: TreeItem) => boolean): TreeItem | null;
38
+ /**
39
+ * Items in a tree, the children of each under it, folded and opened by the reader: files
40
+ * and directories, say. It is one tab stop: Up and Down move between the items shown,
41
+ * Right opens an item (then moves to its first child), Left closes it (or moves to its
42
+ * parent), Home and End go to the first and the last, a letter to the next item of
43
+ * that initial; Enter, Space or a click selects a selectable item (`cae-select`) and
44
+ * opens or closes any other. The toggle before an item with children opens and closes
45
+ * it (`cae-toggle`). The ancestors of `selected` are always open.
46
+ *
47
+ * @tagname cae-tree
48
+ * @fires cae-select - `{id}`: an item was chosen with a click, Enter or Space
49
+ * @fires cae-toggle - `{id, open}`: the reader opened or closed an item
50
+ * @csspart tree - the list of items
51
+ * @csspart item - an item's row
52
+ * @csspart empty - what it shows with no items
53
+ */
54
+ export declare class CaeTree extends LitElement {
55
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
56
+ items: readonly TreeItem[];
57
+ /** The selected item's id, or null. */
58
+ selected: string | null;
59
+ /** What the tree is named to a screen reader. */
60
+ label: string;
61
+ /** The visible words; English by default. */
62
+ strings: Partial<TreeStrings>;
63
+ /** The reader's choice of open and closed items, by id, over each item's `open`. */
64
+ private opened;
65
+ /** The item that holds the tab stop. */
66
+ private focusId;
67
+ private readonly isOpen;
68
+ willUpdate(changed: PropertyValues<this>): void;
69
+ updated(changed: PropertyValues<this>): void;
70
+ private rowOf;
71
+ private setOpen;
72
+ private choose;
73
+ private moveTo;
74
+ private onKey;
75
+ render(): TemplateResult<1>;
76
+ private row;
77
+ }
78
+ declare global {
79
+ interface HTMLElementTagNameMap {
80
+ 'cae-tree': CaeTree;
81
+ }
82
+ }
83
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/tree/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAIpG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,kCAAkC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACnC,iGAAiG;IACjG,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACnB,uDAAuD;IACvD,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IACtC,4JAA4J;IAC5J,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,oBAAoB,EAAE,QAAQ,CAAC,WAAW,CAAyB,CAAC;AAEjF,+GAA+G;AAC/G,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAKD,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,EAAE,CASnG;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAOnF;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,IAAI,CAOrG;AAKD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,0DAsBpB;IAE8B,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAM;IAChE,uCAAuC;IACP,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC/D,iDAAiD;IACrC,KAAK,SAAM;IACvB,6CAA6C;IACb,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,CAAM;IAEnE,oFAAoF;IAC3E,OAAO,CAAC,MAAM,CAA8B;IACrD,wCAAwC;IAC/B,OAAO,CAAC,OAAO,CAAuB;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqE;IAEnF,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAW/C,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IAMrD,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;YAMA,MAAM;IAMpB,OAAO,CAAC,KAAK;IAyCJ,MAAM;IASf,OAAO,CAAC,GAAG;CAgCZ;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
@@ -0,0 +1,251 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { LitElement, css, html, nothing, svg } from 'lit';
8
+ import { property, state } from 'lit/decorators.js';
9
+ import { emit } from '../core/events.js';
10
+ import { withDefaults } from '../core/strings.js';
11
+ import { statusChip } from '../primitives/pill.js';
12
+ import { base } from '../styles/index.js';
13
+ export const DEFAULT_TREE_STRINGS = { empty: 'No items' };
14
+ const hasChildren = (t) => !!t.children?.length;
15
+ const selectable = (t) => t.selectable ?? !hasChildren(t);
16
+ /** The items shown, top to bottom: every item whose ancestors are all open (`isOpen`). */
17
+ export function visibleRows(items, isOpen) {
18
+ const out = [];
19
+ const walk = (list, level, parent) => list.forEach((item, index) => {
20
+ out.push({ item, level, parent, index, siblings: list.length });
21
+ if (hasChildren(item) && isOpen(item))
22
+ walk(item.children, level + 1, item.id);
23
+ });
24
+ walk(items, 1, null);
25
+ return out;
26
+ }
27
+ /** The ids of the ancestors of item `id`, outermost first; null when no item has that id. */
28
+ export function ancestorsOf(items, id) {
29
+ for (const t of items) {
30
+ if (t.id === id)
31
+ return [];
32
+ const below = t.children ? ancestorsOf(t.children, id) : null;
33
+ if (below)
34
+ return [t.id, ...below];
35
+ }
36
+ return null;
37
+ }
38
+ /** The first item, depth first, that `match` accepts. */
39
+ export function findItem(items, match) {
40
+ for (const t of items) {
41
+ if (match(t))
42
+ return t;
43
+ const below = t.children ? findItem(t.children, match) : null;
44
+ if (below)
45
+ return below;
46
+ }
47
+ return null;
48
+ }
49
+ const FOLDER = svg `<path d="M1.5 3.5h4l1.5 1.5h7.5v8h-13z" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"></path>`;
50
+ const FILE = svg `<path d="M3.5 1.5h6l3 3v10h-9z M9.5 1.5v3h3" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linejoin="round"></path>`;
51
+ /**
52
+ * Items in a tree, the children of each under it, folded and opened by the reader: files
53
+ * and directories, say. It is one tab stop: Up and Down move between the items shown,
54
+ * Right opens an item (then moves to its first child), Left closes it (or moves to its
55
+ * parent), Home and End go to the first and the last, a letter to the next item of
56
+ * that initial; Enter, Space or a click selects a selectable item (`cae-select`) and
57
+ * opens or closes any other. The toggle before an item with children opens and closes
58
+ * it (`cae-toggle`). The ancestors of `selected` are always open.
59
+ *
60
+ * @tagname cae-tree
61
+ * @fires cae-select - `{id}`: an item was chosen with a click, Enter or Space
62
+ * @fires cae-toggle - `{id, open}`: the reader opened or closed an item
63
+ * @csspart tree - the list of items
64
+ * @csspart item - an item's row
65
+ * @csspart empty - what it shows with no items
66
+ */
67
+ export class CaeTree extends LitElement {
68
+ constructor() {
69
+ super(...arguments);
70
+ this.items = [];
71
+ /** The selected item's id, or null. */
72
+ this.selected = null;
73
+ /** What the tree is named to a screen reader. */
74
+ this.label = '';
75
+ /** The visible words; English by default. */
76
+ this.strings = {};
77
+ /** The reader's choice of open and closed items, by id, over each item's `open`. */
78
+ this.opened = new Map();
79
+ /** The item that holds the tab stop. */
80
+ this.focusId = null;
81
+ this.isOpen = (t) => this.opened.get(t.id) ?? t.open ?? true;
82
+ }
83
+ static { this.styles = [
84
+ base,
85
+ css `
86
+ :host { display: block; font-size: var(--font-size-md); }
87
+ .tree { margin: 0; padding: 2px 0; }
88
+ .row { display: flex; align-items: center; gap: 4px; min-height: 24px; padding: 0 8px 0 calc((var(--level) - 1) * 14px + 4px);
89
+ border-radius: var(--radius-sm); cursor: pointer; white-space: nowrap; color: var(--text-2); }
90
+ .row:hover { background: var(--raise); }
91
+ .row[aria-selected='true'] { background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--text); box-shadow: inset 2px 0 0 var(--accent); }
92
+ .row:focus-visible { outline-offset: -2px; }
93
+ .twist { flex: none; display: inline-grid; place-items: center; width: 16px; height: 16px; color: var(--text-muted); border-radius: var(--radius-sm); }
94
+ .twist svg { transition: transform 0.12s ease; }
95
+ [aria-expanded='true'] > .twist svg { transform: rotate(90deg); }
96
+ .twist:hover { color: var(--text); }
97
+ .icon { flex: none; width: 16px; height: 16px; color: var(--text-muted); }
98
+ .name { overflow: hidden; text-overflow: ellipsis; min-width: 0; }
99
+ .badge { flex: none; margin-left: 6px; font-size: 11px; padding: 0 6px; border-radius: var(--radius-pill); background: var(--raise); color: var(--text-2); }
100
+ .badge[data-tone] { background: var(--tone-bg); color: var(--tone); }
101
+ .badge[data-tone='done'] { background: none; color: var(--text-2); }
102
+ .empty { color: var(--text-muted); font-size: var(--font-size-sm); padding: 4px 8px; }
103
+ @media (prefers-reduced-motion: reduce) { .twist svg { transition: none; } }
104
+ `,
105
+ ]; }
106
+ willUpdate(changed) {
107
+ if (changed.has('selected') && this.selected) {
108
+ const up = ancestorsOf(this.items, this.selected);
109
+ if (up?.some((id) => this.opened.get(id) !== true)) {
110
+ const next = new Map(this.opened);
111
+ for (const id of up)
112
+ next.set(id, true);
113
+ this.opened = next;
114
+ }
115
+ }
116
+ }
117
+ updated(changed) {
118
+ if (changed.has('selected') && this.selected && !this.matches(':focus-within')) {
119
+ this.rowOf(this.selected)?.scrollIntoView?.({ block: 'nearest' });
120
+ }
121
+ }
122
+ rowOf(id) {
123
+ return this.renderRoot.querySelector(`[data-id="${CSS.escape(id)}"]`);
124
+ }
125
+ setOpen(t, open) {
126
+ if (!hasChildren(t) || this.isOpen(t) === open)
127
+ return;
128
+ this.opened = new Map(this.opened).set(t.id, open);
129
+ emit(this, 'cae-toggle', { id: t.id, open });
130
+ }
131
+ choose(t) {
132
+ this.focusId = t.id;
133
+ if (selectable(t))
134
+ emit(this, 'cae-select', { id: t.id });
135
+ else
136
+ this.setOpen(t, !this.isOpen(t));
137
+ }
138
+ async moveTo(id) {
139
+ this.focusId = id;
140
+ await this.updateComplete;
141
+ this.rowOf(id)?.focus();
142
+ }
143
+ onKey(e, rows, i) {
144
+ const row = rows[i];
145
+ const t = row.item;
146
+ let to;
147
+ switch (e.key) {
148
+ case 'ArrowDown':
149
+ to = rows[i + 1];
150
+ break;
151
+ case 'ArrowUp':
152
+ to = rows[i - 1];
153
+ break;
154
+ case 'Home':
155
+ to = rows[0];
156
+ break;
157
+ case 'End':
158
+ to = rows[rows.length - 1];
159
+ break;
160
+ case 'ArrowRight':
161
+ if (hasChildren(t) && !this.isOpen(t))
162
+ this.setOpen(t, true);
163
+ else if (hasChildren(t))
164
+ to = rows[i + 1];
165
+ break;
166
+ case 'ArrowLeft':
167
+ if (hasChildren(t) && this.isOpen(t))
168
+ this.setOpen(t, false);
169
+ else if (row.parent)
170
+ to = rows.find((r) => r.item.id === row.parent);
171
+ break;
172
+ case 'Enter':
173
+ case ' ':
174
+ this.choose(t);
175
+ break;
176
+ default: {
177
+ if (e.key.length !== 1 || e.ctrlKey || e.metaKey || e.altKey || !/\S/.test(e.key))
178
+ return;
179
+ const k = e.key.toLowerCase();
180
+ const order = [...rows.slice(i + 1), ...rows.slice(0, i)];
181
+ to = order.find((r) => r.item.name.toLowerCase().startsWith(k));
182
+ if (!to)
183
+ return;
184
+ }
185
+ }
186
+ e.preventDefault();
187
+ if (to)
188
+ void this.moveTo(to.item.id);
189
+ }
190
+ render() {
191
+ if (!this.items.length)
192
+ return html `<div class="empty" part="empty">${withDefaults(DEFAULT_TREE_STRINGS, this.strings).empty}</div>`;
193
+ const rows = visibleRows(this.items, this.isOpen);
194
+ const stop = rows.find((r) => r.item.id === this.focusId) ?? rows.find((r) => r.item.id === this.selected) ?? rows[0];
195
+ return html `<div class="tree" role="tree" part="tree" aria-label=${this.label || nothing}>
196
+ ${rows.map((r, i) => this.row(r, i, rows, r === stop))}
197
+ </div>`;
198
+ }
199
+ row(r, i, rows, stop) {
200
+ const t = r.item;
201
+ const parent = hasChildren(t);
202
+ const open = parent && this.isOpen(t);
203
+ const directory = (t.icon ?? (parent ? 'directory' : 'file')) === 'directory';
204
+ return html `<div
205
+ class="row"
206
+ part="item"
207
+ role="treeitem"
208
+ data-id=${t.id}
209
+ tabindex=${stop ? 0 : -1}
210
+ style="--level: ${r.level}"
211
+ aria-level=${r.level}
212
+ aria-setsize=${r.siblings}
213
+ aria-posinset=${r.index + 1}
214
+ aria-expanded=${parent ? String(open) : nothing}
215
+ aria-selected=${selectable(t) ? String(t.id === this.selected) : nothing}
216
+ @click=${() => this.choose(t)}
217
+ @focus=${() => (this.focusId = t.id)}
218
+ @keydown=${(e) => this.onKey(e, rows, i)}
219
+ >
220
+ <span class="twist" aria-hidden="true" @click=${(e) => {
221
+ if (!parent)
222
+ return;
223
+ e.stopPropagation();
224
+ this.focusId = t.id;
225
+ this.setOpen(t, !open);
226
+ }}>${parent ? html `<svg width="10" height="10" viewBox="0 0 10 10"><path d="M3 1.5 7 5 3 8.5" fill="none" stroke="currentColor" stroke-width="1.5"></path></svg>` : nothing}</span>
227
+ <svg class="icon" viewBox="0 0 16 16" aria-hidden="true">${directory ? FOLDER : FILE}</svg>
228
+ <span class="name">${t.name}</span>
229
+ ${t.badge ? statusChip('badge', { text: t.badge, tone: t.tone ?? 'neutral' }) : nothing}
230
+ </div>`;
231
+ }
232
+ }
233
+ __decorate([
234
+ property({ attribute: false })
235
+ ], CaeTree.prototype, "items", void 0);
236
+ __decorate([
237
+ property({ attribute: false })
238
+ ], CaeTree.prototype, "selected", void 0);
239
+ __decorate([
240
+ property()
241
+ ], CaeTree.prototype, "label", void 0);
242
+ __decorate([
243
+ property({ attribute: false })
244
+ ], CaeTree.prototype, "strings", void 0);
245
+ __decorate([
246
+ state()
247
+ ], CaeTree.prototype, "opened", void 0);
248
+ __decorate([
249
+ state()
250
+ ], CaeTree.prototype, "focusId", void 0);
251
+ //# sourceMappingURL=tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/tree/tree.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAA4C,MAAM,KAAK,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAwB1C,MAAM,CAAC,MAAM,oBAAoB,GAA0B,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAWjF,MAAM,WAAW,GAAG,CAAC,CAAW,EAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC;AACnE,MAAM,UAAU,GAAG,CAAC,CAAW,EAAW,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAE7E,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,KAA0B,EAAE,MAAgC;IACtF,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,IAAyB,EAAE,KAAa,EAAE,MAAqB,EAAE,EAAE,CAC/E,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC3B,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAChE,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,QAAS,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IACL,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,WAAW,CAAC,KAA0B,EAAE,EAAU;IAChE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,KAA0B,EAAE,KAA+B;IAClF,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,MAAM,GAAG,GAAG,CAAA,8HAA8H,CAAC;AACjJ,MAAM,IAAI,GAAG,GAAG,CAAA,mIAAmI,CAAC;AAEpJ;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,OAAQ,SAAQ,UAAU;IAAvC;;QAyBkC,UAAK,GAAwB,EAAE,CAAC;QAChE,uCAAuC;QACP,aAAQ,GAAkB,IAAI,CAAC;QAC/D,iDAAiD;QACrC,UAAK,GAAG,EAAE,CAAC;QACvB,6CAA6C;QACb,YAAO,GAAyB,EAAE,CAAC;QAEnE,oFAAoF;QACnE,WAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;QACrD,wCAAwC;QACvB,YAAO,GAAkB,IAAI,CAAC;QAE9B,WAAM,GAAG,CAAC,CAAW,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;IA2H9F,CAAC;aAhKiB,WAAM,GAAG;QACvB,IAAI;QACJ,GAAG,CAAA;;;;;;;;;;;;;;;;;;;KAmBF;KACF,AAtBqB,CAsBpB;IAiBO,UAAU,CAAC,OAA6B;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7C,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClC,KAAK,MAAM,EAAE,IAAI,EAAE;oBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAEQ,OAAO,CAAC,OAA6B;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAc,aAAa,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC;IAEO,OAAO,CAAC,CAAW,EAAE,IAAa;QACxC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO;QACvD,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,MAAM,CAAC,CAAW;QACxB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;QACpB,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;YACrD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,EAAU;QAC7B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,cAAc,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEO,KAAK,CAAC,CAAgB,EAAE,IAAwB,EAAE,CAAS;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACrB,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;QACnB,IAAI,EAAuB,CAAC;QAC5B,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;YACd,KAAK,WAAW;gBACd,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,SAAS;gBACZ,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjB,MAAM;YACR,KAAK,MAAM;gBACT,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,MAAM;YACR,KAAK,KAAK;gBACR,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;qBACxD,IAAI,WAAW,CAAC,CAAC,CAAC;oBAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1C,MAAM;YACR,KAAK,WAAW;gBACd,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;qBACxD,IAAI,GAAG,CAAC,MAAM;oBAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM;YACR,KAAK,OAAO,CAAC;YACb,KAAK,GAAG;gBACN,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACf,MAAM;YACR,OAAO,CAAC,CAAC,CAAC;gBACR,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,OAAO;gBAC1F,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1D,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,EAAE;oBAAE,OAAO;YAClB,CAAC;QACH,CAAC;QACD,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,EAAE;YAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAEQ,MAAM;QACb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA,mCAAmC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,QAAQ,CAAC;QACrI,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACtH,OAAO,IAAI,CAAA,wDAAwD,IAAI,CAAC,KAAK,IAAI,OAAO;QACpF,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;WACjD,CAAC;IACV,CAAC;IAEO,GAAG,CAAC,CAAU,EAAE,CAAS,EAAE,IAAwB,EAAE,IAAa;QACxE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACjB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,WAAW,CAAC;QAC9E,OAAO,IAAI,CAAA;;;;gBAIC,CAAC,CAAC,EAAE;iBACH,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACN,CAAC,CAAC,KAAK;mBACZ,CAAC,CAAC,KAAK;qBACL,CAAC,CAAC,QAAQ;sBACT,CAAC,CAAC,KAAK,GAAG,CAAC;sBACX,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO;sBAC/B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;eAC/D,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;eACpB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;iBACzB,CAAC,CAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;;sDAEP,CAAC,CAAQ,EAAE,EAAE;YAC3D,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA,+IAA+I,CAAC,CAAC,CAAC,OAAO;iEAChH,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;2BAC/D,CAAC,CAAC,IAAI;QACzB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;WAClF,CAAC;IACV,CAAC;;AAvI+B;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;sCAAiC;AAEhC;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;yCAAgC;AAEnD;IAAX,QAAQ,EAAE;sCAAY;AAES;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;wCAAoC;AAGlD;IAAhB,KAAK,EAAE;uCAA6C;AAEpC;IAAhB,KAAK,EAAE;wCAAuC"}
package/docs/charts.md ADDED
@@ -0,0 +1,58 @@
1
+ # Charts
2
+
3
+ Five charts of plain series: `<cae-column-chart>` (vertical bars, stacked or
4
+ side by side), `<cae-line-chart>`, `<cae-heatmap>`, `<cae-state-grid>` (a state
5
+ per row and column) and `<cae-bar-chart>` (horizontal bars). Register them with
6
+ `@contraagent/elements/charts/define`; the types and the arithmetic they share
7
+ are in `@contraagent/elements/charts`.
8
+
9
+ ![Five charts of a CI pipeline: minutes by day as stacked columns, queue time as two lines, builds by weekday and hour as a heatmap, nightly builds as a state grid, and a test funnel as horizontal bars](images/charts.webp)
10
+
11
+ ::code{file="examples/charts.ts"}
12
+
13
+ ## Series and values
14
+
15
+ A chart takes labels (`x`) and series, each a name and a value per label; a
16
+ null value is a value the series has not: no bar, a break in a line, an empty
17
+ cell. A heatmap takes its rows (`y`), its columns (`x`) and `values[row][column]`;
18
+ a state grid the same rows and columns and `cells[row][column]`, each a state's
19
+ `label`, its `tone` and an optional `tip` (null: no cell); a bar chart takes
20
+ `bars`, each a label, a value and an optional `tone`.
21
+
22
+ ::code{file="../src/charts/types.ts" from="/** One series" to="/** The words of a chart"}
23
+
24
+ `format` writes a value in words (`$1.20`, `42%`, `2m 05s`): on the axis, in the
25
+ tooltip and in the table. It is the host's, since the chart does not know the
26
+ unit.
27
+
28
+ ## Colour
29
+
30
+ The series take the series colours (`--ca-series-1` to `--ca-series-6`) in
31
+ their order, so a series keeps its colour whatever its values and its rank. A
32
+ chart never makes up a seventh colour: past six series, a column chart sums the
33
+ sixth and later into one series, `strings.other`, in the neutral `--ca-meter`;
34
+ a line chart draws them in that colour and names each in the legend and the
35
+ tooltip. A heatmap uses one hue, light to dark in five steps between its lowest
36
+ and highest value. A state grid colours a cell by its tone, so a failure and
37
+ what needs attention stand out and a cell that ended well stays quiet; the
38
+ colour is never alone: a cell wide enough holds its tone's mark (✓ done,
39
+ ✕ failed, ◌ attention; a done cell's mark is quieter), the legend names each
40
+ state once, failures and what needs attention first, and the tooltip and the
41
+ table say the state in words. A bar
42
+ with a `tone` takes that status colour; a status colour is never a series.
43
+
44
+ ## Reading it
45
+
46
+ Two or more series have a legend; one series has none, since the chart's title
47
+ names it. Pointing at a label, or moving to it with the arrow keys once the
48
+ chart has the focus (up and down by a row in a heatmap and a state grid, Home and End to the
49
+ ends, Escape to close), shows its values in a tooltip. Every chart has a switch
50
+ to a table of the same values (`strings.showTable`, `strings.showChart`), which
51
+ is also how a screen reader reads it. A bar chart writes each value beside its
52
+ bar.
53
+
54
+ ## Look
55
+
56
+ `height` sets a column or line chart's height in px (200 by default; the rows of
57
+ a heatmap and of a state grid are 22px each). The parts are `plot`, `table`, `switch`, `legend` and
58
+ `empty`.
@@ -0,0 +1,40 @@
1
+ # Check table
2
+
3
+ `<cae-check-table>` shows named values checked one by one: a row per name,
4
+ with what it must be, what it is and the verdict. Register it with
5
+ `@contraagent/elements/check-table/define`; the types, `verdict` and
6
+ `verdictStyles` are in `@contraagent/elements/check-table`.
7
+
8
+ ![A check table of five fields: what each must be, what the file holds, and the verdict (passed, wrong type, absent, extra field)](images/check-table.webp)
9
+
10
+ <!-- not on the site -->
11
+ Live on this topic's page of the documentation site (`pnpm run docs` in `web/`).
12
+
13
+ ::code{file="examples/check-table.ts"}
14
+
15
+ ## Rows
16
+
17
+ A row is a `CheckRow`. The host judges each value; the table shows the
18
+ verdict: `pass` (✓ and its word), `fail` (✕ and its word, in the failed
19
+ tone), `warn` (its word, in the attention tone) or `none` (its word, muted, or
20
+ an empty cell without one). The marks are hidden from screen readers, which
21
+ read the word.
22
+
23
+ ::code{file="../src/checks/types.ts" from="export interface CheckRow" to="export interface CheckTableStrings"}
24
+
25
+ A value is shown in one line: a string quoted and cut, a list's length and its
26
+ first items, an object's first keys. A row with `extra` names a value that is
27
+ not expected: its `expected` is a phrase, not code. Without `showValues`, the
28
+ table shows only the names and what each must be.
29
+
30
+ ## Verdicts elsewhere
31
+
32
+ `verdict(v, label, tip)` draws a verdict as the table does, for a host that
33
+ shows one outside a table; add `verdictStyles` to the host's styles.
34
+
35
+ ## Look
36
+
37
+ The table is as wide as its content, so each verdict sits next to the value it
38
+ judges; a long value wraps. The parts are `table`, `row` and `verdict`. The
39
+ words are `strings` ([Strings](strings.md)): the headers, `optional`, and the
40
+ summaries of a list (`items`) and an object.
package/docs/code.md ADDED
@@ -0,0 +1,55 @@
1
+ # Code
2
+
3
+ `<cae-code>` shows a text as code: highlighted by its language, each line
4
+ numbered, some lines marked, with a switch between long lines wrapped and
5
+ scrolled sideways and a button that copies the whole text. Register it with
6
+ `@contraagent/elements/code/define`; the element, the tokenizer it is drawn with
7
+ and the languages it reads are in `@contraagent/elements/code`.
8
+
9
+ <!-- not on the site -->
10
+ Live on this topic's page of the documentation site (`pnpm run docs` in `web/`).
11
+
12
+ ::code{file="examples/code.ts"}
13
+
14
+ ## The text
15
+
16
+ `code` is the text and `language` its language: a name of `LANGUAGES`, another
17
+ name of one (`py`, `ts`, `sh`, `yml`) or a file name (`src/main.rs`); any other
18
+ is shown as plain text. `start` is the number of the first line (1), and
19
+ `highlight` marks lines in those numbers: a number for one line, a pair for the
20
+ lines from the first to the last. A marked line has a bar beside its number and
21
+ a tint. `path` names the file in the header; `label` names the lines to a screen
22
+ reader (default: the path).
23
+
24
+ A long text costs time to draw, so the element shows at most `maxLines` lines
25
+ (5,000) and `maxCharacters` characters (500,000), cut at the end of a line, and
26
+ says under them how many lines the text has (`strings.cut`). The copy button
27
+ copies the whole text all the same.
28
+
29
+ ## Highlighting
30
+
31
+ The highlighter is a small tokenizer of the package: each language is a few
32
+ regular expressions and its words, so it needs no library and no request. It
33
+ reads Python, JSON, JavaScript, TypeScript, C, C++, Java, Go, Rust, shell, TOML
34
+ (and INI), YAML, SQL, XML (and HTML and SVG) and diffs. It marks comments,
35
+ strings, numbers, keywords, constants, built-in names, the names a function or a
36
+ type is given where it is defined, and a language's own parts (keys, tags,
37
+ attributes, added and removed lines); it does not parse, so a rare construct may
38
+ take the colour of a simpler one. `tokenize(code, language)` returns the tokens,
39
+ `highlight(code, language)` escaped HTML; markdown's code blocks use the same
40
+ (`@contraagent/elements/markdown`). The colours are the theme's `--ca-code-*`
41
+ tokens ([Theming](theming.md)).
42
+
43
+ ::code{file="../src/code/highlight.ts" from="/** What a token is" to="/** The languages highlighted"}
44
+
45
+ ## Reading it
46
+
47
+ The lines are one tab stop that scrolls with the arrow keys. The numbers are
48
+ drawn beside the lines and are not part of a selection, so selected lines copy
49
+ without them. `wrap` wraps long lines at first; the reader's switch
50
+ (`strings.wrap`) changes it.
51
+
52
+ ## Look
53
+
54
+ `--cae-code-max-height` sets the most the lines grow to before they scroll (70vh).
55
+ The parts are `header`, `code` and `cut`.
@@ -0,0 +1,57 @@
1
+ # Data table
2
+
3
+ `<cae-data-table>` shows rows of data in a real `<table>`: a header cell per
4
+ column, and the first `rowHeader` column as the header of its row, so a screen
5
+ reader names each cell by its column and its row. Register it with
6
+ `@contraagent/elements/data-table/define`; the types and `sortRows` are in
7
+ `@contraagent/elements/data-table`.
8
+
9
+ ![A data table of three jobs with their minutes and their state: done, failed, running](images/data-table.webp)
10
+
11
+ <!-- not on the site -->
12
+ Live on this topic's page of the documentation site (`pnpm run docs` in `web/`).
13
+
14
+ ::code{file="examples/data-table.ts"}
15
+
16
+ ## Columns
17
+
18
+ A column is a `DataColumn`: its header, a CSS grid track as its width, and a
19
+ function that draws its cell for a row (a template, a string or a number).
20
+ Every row is a grid of the columns' tracks, so the rows line up with the header.
21
+
22
+ ::code{file="../src/table/types.ts" from="/** A column:" to="/** The column the rows are ordered by. */"}
23
+
24
+ ## Keyboard and events
25
+
26
+ The rows are one tab stop. The arrow keys move between rows, and Home and End
27
+ move to the first and the last row. Enter or a click on a row sends
28
+ `cae-activate` with the row's id (`rowKey`). With `activatable` off, they choose
29
+ the row as the selection and send `cae-select`; the selected row has the part
30
+ `row-selected`. A click on a button or a link inside a cell is that control's.
31
+
32
+ A column with `compare` (or `sortable`) has a header button that sends
33
+ `cae-sort` with the column and the direction. The table does not reorder the
34
+ rows: the host sets `sort` and the rows, ordered by `sortRows` or its own way.
35
+ `sortRows` orders by the column's `compare`, else its `text`, else its cell when
36
+ the cell is a string or a number: a column of plain values needs only `sortable`.
37
+
38
+ ## Long lists
39
+
40
+ Above `windowAt` rows (200), the table draws only the rows on screen and a
41
+ spacer for the rows above and below them, so the scroll height stays that of
42
+ the whole list. The rows' height is measured; `rowHeight` is the first
43
+ estimate. The table finds the element that scrolls it, across shadow roots, or
44
+ the window.
45
+
46
+ ## Look
47
+
48
+ `--cae-data-table-gap` sets the space between the columns and
49
+ `--cae-data-table-row-padding` a row's padding. The parts are `table`,
50
+ `caption`, `head`, `header-cell`, `row`, `row-selected`, `cell` and `empty`;
51
+ `rowTone` gives a row a tone (`data-tone`) and `rowAttrs` more attributes. What
52
+ the cells draw lives in the table's shadow root: `cellStyles` adds styles there,
53
+ after the table's own (the rows are `tr`, the cells `th` and `td`, each with
54
+ `data-col` set to its column's id).
55
+
56
+ The words are `strings` ([Strings](strings.md)): `empty` with no rows (or the
57
+ `empty` slot), and the sort buttons' tooltips.
@@ -0,0 +1,61 @@
1
+ // Charts: a CI pipeline's minutes by day and stage (stacked columns), its queue
2
+ // time (lines), its builds by weekday and hour (a heatmap), how its nightly builds
3
+ // ended (a state grid) and its test funnel (horizontal bars). The host gives each
4
+ // chart its unit's format.
5
+ import '@contraagent/elements/charts/define';
6
+ import type { ChartSeries } from '@contraagent/elements/charts';
7
+
8
+ const days = ['10-08', '10-09', '10-10', '10-11', '10-12', '10-13', '10-14'];
9
+ const minutes: ChartSeries[] = [
10
+ { name: 'build', values: [42, 38, 51, 12, 9, 47, 44] },
11
+ { name: 'test', values: [65, 70, 58, 20, null, 61, 66] },
12
+ { name: 'deploy', values: [8, 8, 9, 2, 2, 10, 8] },
13
+ ];
14
+
15
+ export function mount(host: HTMLElement): void {
16
+ const columns = document.createElement('cae-column-chart');
17
+ columns.label = 'Minutes by day';
18
+ columns.x = days;
19
+ columns.series = minutes;
20
+ columns.stacked = true;
21
+ columns.format = (v) => `${v} min`;
22
+
23
+ const lines = document.createElement('cae-line-chart');
24
+ lines.label = 'Queue time';
25
+ lines.x = days;
26
+ lines.series = [
27
+ { name: 'median', values: [1.2, 1.4, 0.9, 0.3, 0.2, 1.8, 1.1] },
28
+ { name: 'slowest', values: [6, 9, 4, 1, 1, 12, 7] },
29
+ ];
30
+ lines.format = (v) => `${v} min`;
31
+
32
+ const heat = document.createElement('cae-heatmap');
33
+ heat.label = 'Builds by weekday and hour';
34
+ heat.x = ['9', '10', '11', '12', '13', '14', '15', '16', '17'];
35
+ heat.y = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'];
36
+ // A count per weekday and hour; Wednesday at 13 has no record (null: an empty cell).
37
+ heat.values = heat.y.map((_, r) => heat.x.map((_, c) => (r === 2 && c === 4 ? null : (r * 7 + c * 3) % 9)));
38
+ heat.strings = { scale: (low, high) => `${low} to ${high} builds` };
39
+
40
+ const bars = document.createElement('cae-bar-chart');
41
+ bars.label = 'Tests this week';
42
+ bars.bars = [
43
+ { label: 'written', value: 1240 },
44
+ { label: 'run', value: 1180 },
45
+ { label: 'passed', value: 1162 },
46
+ { label: 'flaky', value: 18, tone: 'attention' },
47
+ ];
48
+
49
+ const nightly = document.createElement('cae-state-grid');
50
+ nightly.label = 'Nightly builds by weekday and hour';
51
+ nightly.x = ['0', '1', '2', '3'];
52
+ nightly.y = ['Mon', 'Tue'];
53
+ const passed = { label: 'passed', tone: 'done' as const };
54
+ // A state per weekday and hour: its word, its tone, and a fact for the tooltip; null: no build.
55
+ nightly.cells = [
56
+ [passed, { label: 'failed', tone: 'failed', tip: 'build 4127' }, passed, null],
57
+ [passed, passed, { label: 'skipped', tone: 'muted' }, passed],
58
+ ];
59
+
60
+ host.replaceChildren(columns, lines, heat, nightly, bars);
61
+ }
@@ -0,0 +1,19 @@
1
+ // A check table: hand-written fields of a settings file, each checked against
2
+ // what it must be. The host judges the values; the table shows the verdicts.
3
+ import '@contraagent/elements/check-table/define';
4
+ import type { CheckRow } from '@contraagent/elements/check-table';
5
+
6
+ const rows: CheckRow[] = [
7
+ { name: 'name', expected: 'string', hasValue: true, value: 'release-build', verdict: 'pass', verdictLabel: 'passed' },
8
+ { name: 'retries', expected: 'integer', hasValue: true, value: '3', verdict: 'fail', verdictLabel: 'wrong type', tip: 'Expected integer' },
9
+ { name: 'targets', expected: 'list[str]', hasValue: true, value: ['linux', 'macos', 'windows', 'wasm'], verdict: 'pass', verdictLabel: 'passed' },
10
+ { name: 'cache', expected: 'object', optional: true, hasValue: false, verdict: 'none', verdictLabel: 'absent (optional)' },
11
+ { name: 'colour', expected: 'not in the schema', extra: true, hasValue: true, value: 'blue', verdict: 'warn', verdictLabel: 'extra field' },
12
+ ];
13
+
14
+ export function mount(host: HTMLElement): void {
15
+ const table = document.createElement('cae-check-table');
16
+ table.rows = rows;
17
+ table.strings = { name: 'Field', actual: 'In the file' };
18
+ host.replaceChildren(table);
19
+ }