@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,28 @@
1
+ // A legend: a swatch and a word per entry.
2
+ import { css, html, nothing } from 'lit';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+ import { toneAttr } from '../core/tone.js';
5
+ /** The swatch of an entry; none for an entry that is only a word (a note at the end). */
6
+ const swatch = (it) => it.icon ??
7
+ (it.swatch || it.tone || it.shape || it.cls
8
+ ? html `<i class=${it.cls || nothing} data-tone=${toneAttr(it.tone)} data-shape=${it.shape ?? nothing}
9
+ style=${it.swatch ? styleMap({ background: it.swatch }) : nothing}></i>`
10
+ : nothing);
11
+ /** A row of entries (`.legend`, part `legend`), each its swatch and its word, as a list. */
12
+ export function legend(items, o = {}) {
13
+ return html `<div class="legend ${o.cls ?? ''}" part="legend" role="list" aria-label=${o.label || nothing}>
14
+ ${items.map((it) => html `<span role="listitem" aria-hidden=${it.decorative ? 'true' : nothing}>${swatch(it)}${it.label}</span>`)}
15
+ </div>`;
16
+ }
17
+ export const legendStyles = css `
18
+ .legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: var(--font-size-sm); color: var(--text-muted); }
19
+ .legend > span { white-space: nowrap; }
20
+ .legend i { display: inline-block; width: 10px; height: 10px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }
21
+ .legend i[data-tone] { background: var(--tone); }
22
+ .legend i[data-shape='round'] { border-radius: 50%; }
23
+ .legend i[data-shape='square'] { border-radius: 2px; }
24
+ .legend i[data-shape='ring'] { background: none; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--tone, var(--line2)); }
25
+ .legend i[data-shape='half'] { border-radius: 50%; background: linear-gradient(0deg, var(--tone, var(--line2)) 50%, transparent 50%); box-shadow: inset 0 0 0 1.5px var(--tone, var(--line2)); }
26
+ .legend i[data-shape='hatched'] { border-radius: 2px; background: repeating-linear-gradient(135deg, transparent 0 2px, var(--tone, var(--line2)) 2px 3px); }
27
+ `;
28
+ //# sourceMappingURL=legend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legend.js","sourceRoot":"","sources":["../../src/primitives/legend.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAa,MAAM,iBAAiB,CAAC;AA2BtD,yFAAyF;AACzF,MAAM,MAAM,GAAG,CAAC,EAAc,EAAW,EAAE,CACzC,EAAE,CAAC,IAAI;IACP,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG;QACzC,CAAC,CAAC,IAAI,CAAA,YAAY,EAAE,CAAC,GAAG,IAAI,OAAO,cAAc,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,IAAI,OAAO;gBACxF,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO;QAC5E,CAAC,CAAC,OAAO,CAAC,CAAC;AAEf,4FAA4F;AAC5F,MAAM,UAAU,MAAM,CAAC,KAA4B,EAAE,IAAmB,EAAE;IACxE,OAAO,IAAI,CAAA,sBAAsB,CAAC,CAAC,GAAG,IAAI,EAAE,0CAA0C,CAAC,CAAC,KAAK,IAAI,OAAO;MACpG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAA,qCAAqC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;SAC3H,CAAC;AACV,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;CAU9B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type TemplateResult } from 'lit';
2
+ import { type Tone } from '../core/tone.js';
3
+ /** The shape before a status word. */
4
+ export type Mark = 'done' | 'failed' | 'pending';
5
+ /** The mark a tone takes by default: ✓ done, ✕ failed, ◌ attention; none for running, muted or neutral. */
6
+ export declare function markOf(tone: Tone): Mark | null;
7
+ export interface PillSpec {
8
+ /** The word (a template may add a count after it). */
9
+ text: unknown;
10
+ tone?: Tone;
11
+ /** The mark: `markOf(tone)` when not given (or true); false or null for none. */
12
+ mark?: Mark | boolean | null;
13
+ title?: string | null;
14
+ /** More classes on the element. */
15
+ cls?: string;
16
+ }
17
+ /** A status as a pill (`.pill`, part `pill tone-<tone>`): tinted by its tone, a done pill quiet with its ✓. */
18
+ export declare function pill(p: PillSpec): TemplateResult;
19
+ /** A status as a word in a row (`.jstop`, part `status tone-<tone>`): coloured for a problem, done quiet with its ✓. */
20
+ export declare function statusWord(p: PillSpec): TemplateResult;
21
+ /** A status as a chip of the class `cls` (an element styles it): the tone and the mark, as on a pill. */
22
+ export declare function statusChip(cls: string, p: PillSpec): TemplateResult;
23
+ //# sourceMappingURL=pill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill.d.ts","sourceRoot":"","sources":["../../src/primitives/pill.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAEtD,sCAAsC;AACtC,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,2GAA2G;AAC3G,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAW9C;AAED,MAAM,WAAW,QAAQ;IACvB,sDAAsD;IACtD,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iFAAiF;IACjF,IAAI,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,mCAAmC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAQD,+GAA+G;AAC/G,wBAAgB,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAGhD;AAED,wHAAwH;AACxH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,cAAc,CAGtD;AAED,yGAAyG;AACzG,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,GAAG,cAAc,CAGnE"}
@@ -0,0 +1,40 @@
1
+ // A status shown as a pill or as a word: the word, its tone (`data-tone`) and,
2
+ // where a mark belongs, its mark (`data-mark`: ✓ done, ✕ failed, ◌ pending).
3
+ // The look of each is in `styles/status.ts`; the mark is drawn by CSS and hidden
4
+ // from screen readers, which read the word.
5
+ import { html, nothing } from 'lit';
6
+ import { toneAttr } from '../core/tone.js';
7
+ /** The mark a tone takes by default: ✓ done, ✕ failed, ◌ attention; none for running, muted or neutral. */
8
+ export function markOf(tone) {
9
+ switch (tone) {
10
+ case 'done':
11
+ return 'done';
12
+ case 'failed':
13
+ return 'failed';
14
+ case 'attention':
15
+ return 'pending';
16
+ default:
17
+ return null;
18
+ }
19
+ }
20
+ /** The `data-mark` of a spec. */
21
+ const markAttr = (p) => {
22
+ const m = p.mark === undefined || p.mark === true ? markOf(p.tone ?? 'neutral') : p.mark || null;
23
+ return m ?? nothing;
24
+ };
25
+ /** A status as a pill (`.pill`, part `pill tone-<tone>`): tinted by its tone, a done pill quiet with its ✓. */
26
+ export function pill(p) {
27
+ const tone = p.tone ?? 'neutral';
28
+ return html `<span class="pill ${p.cls ?? ''}" part="pill tone-${tone}" data-tone=${toneAttr(tone)} data-mark=${markAttr(p)} title=${p.title || nothing}>${p.text}</span>`;
29
+ }
30
+ /** A status as a word in a row (`.jstop`, part `status tone-<tone>`): coloured for a problem, done quiet with its ✓. */
31
+ export function statusWord(p) {
32
+ const tone = p.tone ?? 'neutral';
33
+ return html `<span class="jstop ${p.cls ?? ''}" part="status tone-${tone}" data-tone=${toneAttr(tone)} data-mark=${markAttr(p)} title=${p.title || nothing}>${p.text}</span>`;
34
+ }
35
+ /** A status as a chip of the class `cls` (an element styles it): the tone and the mark, as on a pill. */
36
+ export function statusChip(cls, p) {
37
+ const tone = p.tone ?? 'neutral';
38
+ return html `<span class="${cls} ${p.cls ?? ''}" data-tone=${toneAttr(tone)} data-mark=${markAttr(p)} title=${p.title || nothing}>${p.text}</span>`;
39
+ }
40
+ //# sourceMappingURL=pill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pill.js","sourceRoot":"","sources":["../../src/primitives/pill.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,iFAAiF;AACjF,4CAA4C;AAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAuB,MAAM,KAAK,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAa,MAAM,iBAAiB,CAAC;AAKtD,2GAA2G;AAC3G,MAAM,UAAU,MAAM,CAAC,IAAU;IAC/B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,WAAW;YACd,OAAO,SAAS,CAAC;QACnB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAaD,iCAAiC;AACjC,MAAM,QAAQ,GAAG,CAAC,CAAW,EAAyB,EAAE;IACtD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;IACjG,OAAO,CAAC,IAAI,OAAO,CAAC;AACtB,CAAC,CAAC;AAEF,+GAA+G;AAC/G,MAAM,UAAU,IAAI,CAAC,CAAW;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,OAAO,IAAI,CAAA,qBAAqB,CAAC,CAAC,GAAG,IAAI,EAAE,qBAAqB,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;AAC5K,CAAC;AAED,wHAAwH;AACxH,MAAM,UAAU,UAAU,CAAC,CAAW;IACpC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,OAAO,IAAI,CAAA,sBAAsB,CAAC,CAAC,GAAG,IAAI,EAAE,uBAAuB,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;AAC/K,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,UAAU,CAAC,GAAW,EAAE,CAAW;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACjC,OAAO,IAAI,CAAA,gBAAgB,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,eAAe,QAAQ,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;AACrJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ import type { ReactiveController, ReactiveControllerHost } from 'lit';
2
+ export interface RovingFocusOptions {
3
+ /** The items, in order (row by row in a grid). */
4
+ items: () => readonly HTMLElement[];
5
+ /** Which arrow keys move: Left and Right, Up and Down, or both (a grid). */
6
+ layout: 'horizontal' | 'vertical' | 'grid';
7
+ /** The number of columns of a grid. */
8
+ columns?: () => number;
9
+ /** From the last item to the first and back (not in a grid). */
10
+ wrap?: boolean;
11
+ /** Called after the focus moved to `el`. */
12
+ onMove?: (el: HTMLElement, index: number) => void;
13
+ }
14
+ /**
15
+ * Where a key moves the focus among `n` items from `i`, or null when it does not
16
+ * move. A grid has `cols` columns: Left and Right move in the row, Up and Down in
17
+ * the column, Home and End to the row's ends, with Ctrl to the first and last
18
+ * item.
19
+ */
20
+ export declare function rovingStep(n: number, i: number, key: string, o: {
21
+ layout: RovingFocusOptions['layout'];
22
+ cols?: number;
23
+ wrap?: boolean;
24
+ ctrl?: boolean;
25
+ }): number | null;
26
+ /**
27
+ * A roving tabindex over the host's items: the current item has `tabindex=0`, the
28
+ * others -1, and the keys of `rovingStep` move the focus. `current` follows a
29
+ * click or a focus too.
30
+ */
31
+ export declare class RovingFocusController implements ReactiveController {
32
+ private readonly host;
33
+ private readonly o;
34
+ /** The index of the item that holds the tab stop. */
35
+ current: number;
36
+ constructor(host: ReactiveControllerHost & HTMLElement, o: RovingFocusOptions);
37
+ hostConnected(): void;
38
+ hostDisconnected(): void;
39
+ hostUpdated(): void;
40
+ /** Gives the tab stop to item `i`, without moving the focus. */
41
+ set(i: number): void;
42
+ private sync;
43
+ private indexOf;
44
+ private readonly onFocus;
45
+ private readonly onKey;
46
+ }
47
+ //# sourceMappingURL=roving-focus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roving-focus.d.ts","sourceRoot":"","sources":["../../src/primitives/roving-focus.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,KAAK,CAAC;AAEtE,MAAM,WAAW,kBAAkB;IACjC,kDAAkD;IAClD,KAAK,EAAE,MAAM,SAAS,WAAW,EAAE,CAAC;IACpC,4EAA4E;IAC5E,MAAM,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAC3C,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,gEAAgE;IAChE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,MAAM,EACX,CAAC,EAAE;IAAE,MAAM,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACzF,MAAM,GAAG,IAAI,CAqCf;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAK5D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,CAAC;IALpB,qDAAqD;IACrD,OAAO,SAAK;gBAGO,IAAI,EAAE,sBAAsB,GAAG,WAAW,EAC1C,CAAC,EAAE,kBAAkB;IAKxC,aAAa,IAAI,IAAI;IAKrB,gBAAgB,IAAI,IAAI;IAKxB,WAAW,IAAI,IAAI;IAInB,gEAAgE;IAChE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKpB,OAAO,CAAC,IAAI;IAOZ,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGtB;IAEF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAgBpB;CACH"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Where a key moves the focus among `n` items from `i`, or null when it does not
3
+ * move. A grid has `cols` columns: Left and Right move in the row, Up and Down in
4
+ * the column, Home and End to the row's ends, with Ctrl to the first and last
5
+ * item.
6
+ */
7
+ export function rovingStep(n, i, key, o) {
8
+ if (n <= 0)
9
+ return null;
10
+ const to = (j) => (j === i || j < 0 || j >= n ? null : j);
11
+ if (o.layout === 'grid') {
12
+ const cols = Math.max(1, o.cols ?? 1);
13
+ const row = Math.floor(i / cols) * cols;
14
+ switch (key) {
15
+ case 'ArrowRight':
16
+ return (i + 1) % cols && i + 1 < n ? to(i + 1) : null;
17
+ case 'ArrowLeft':
18
+ return i % cols ? to(i - 1) : null;
19
+ case 'ArrowDown':
20
+ return to(i + cols);
21
+ case 'ArrowUp':
22
+ return to(i - cols);
23
+ case 'Home':
24
+ return to(o.ctrl ? 0 : row);
25
+ case 'End':
26
+ return to(o.ctrl ? n - 1 : Math.min(row + cols, n) - 1);
27
+ default:
28
+ return null;
29
+ }
30
+ }
31
+ const [prev, next] = o.layout === 'horizontal' ? ['ArrowLeft', 'ArrowRight'] : ['ArrowUp', 'ArrowDown'];
32
+ const step = (s) => (o.wrap ? to((i + s + n) % n) : to(i + s));
33
+ switch (key) {
34
+ case next:
35
+ return step(1);
36
+ case prev:
37
+ return step(-1);
38
+ case 'Home':
39
+ return to(0);
40
+ case 'End':
41
+ return to(n - 1);
42
+ default:
43
+ return null;
44
+ }
45
+ }
46
+ /**
47
+ * A roving tabindex over the host's items: the current item has `tabindex=0`, the
48
+ * others -1, and the keys of `rovingStep` move the focus. `current` follows a
49
+ * click or a focus too.
50
+ */
51
+ export class RovingFocusController {
52
+ constructor(host, o) {
53
+ this.host = host;
54
+ this.o = o;
55
+ /** The index of the item that holds the tab stop. */
56
+ this.current = 0;
57
+ this.onFocus = (e) => {
58
+ const i = this.indexOf(e);
59
+ if (i >= 0 && i !== this.current)
60
+ this.set(i);
61
+ };
62
+ this.onKey = (e) => {
63
+ const items = this.o.items();
64
+ const i = this.indexOf(e);
65
+ if (i < 0)
66
+ return;
67
+ const j = rovingStep(items.length, i, e.key, {
68
+ layout: this.o.layout,
69
+ cols: this.o.columns?.(),
70
+ wrap: this.o.wrap,
71
+ ctrl: e.ctrlKey || e.metaKey,
72
+ });
73
+ const el = j === null ? undefined : items[j];
74
+ if (j === null || !el)
75
+ return;
76
+ e.preventDefault();
77
+ this.set(j);
78
+ el.focus();
79
+ this.o.onMove?.(el, j);
80
+ };
81
+ host.addController(this);
82
+ }
83
+ hostConnected() {
84
+ this.host.addEventListener('keydown', this.onKey);
85
+ this.host.addEventListener('focusin', this.onFocus);
86
+ }
87
+ hostDisconnected() {
88
+ this.host.removeEventListener('keydown', this.onKey);
89
+ this.host.removeEventListener('focusin', this.onFocus);
90
+ }
91
+ hostUpdated() {
92
+ this.sync();
93
+ }
94
+ /** Gives the tab stop to item `i`, without moving the focus. */
95
+ set(i) {
96
+ this.current = i;
97
+ this.sync();
98
+ }
99
+ sync() {
100
+ const items = this.o.items();
101
+ if (!items.length)
102
+ return;
103
+ this.current = Math.min(Math.max(0, this.current), items.length - 1);
104
+ items.forEach((el, j) => (el.tabIndex = j === this.current ? 0 : -1));
105
+ }
106
+ indexOf(e) {
107
+ const items = this.o.items();
108
+ return items.findIndex((el) => e.composedPath().includes(el));
109
+ }
110
+ }
111
+ //# sourceMappingURL=roving-focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roving-focus.js","sourceRoot":"","sources":["../../src/primitives/roving-focus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { LitElement } from 'lit';
2
+ export interface SegmentedOption {
3
+ value: string;
4
+ label: string;
5
+ title?: string;
6
+ disabled?: boolean;
7
+ /** The option's language (`lang`), when its label is in another language than the page. */
8
+ lang?: string;
9
+ }
10
+ /**
11
+ * One choice among a few, as a row of buttons (a radio group): a click, or the
12
+ * arrow keys, Home and End, choose. The group is one tab stop.
13
+ *
14
+ * Its look: `--cae-segmented-radius`, `--cae-segmented-height`,
15
+ * `--cae-segmented-padding`, `--cae-segmented-font-size`,
16
+ * `--cae-segmented-divider` (the line between options) and
17
+ * `--cae-segmented-hover` (an option's text under the pointer), or the parts.
18
+ *
19
+ * @tagname cae-segmented
20
+ * @fires cae-change - `{value}`: the option the reader chose
21
+ * @csspart group - the row of options
22
+ * @csspart option - each option
23
+ * @csspart option-selected - the chosen option
24
+ */
25
+ export declare class CaeSegmented extends LitElement {
26
+ static styles: (import("lit").CSSResult | import("lit").CSSResult[])[];
27
+ options: readonly SegmentedOption[];
28
+ value: string;
29
+ /** The group's accessible name. */
30
+ label: string;
31
+ private readonly roving;
32
+ willUpdate(): void;
33
+ private choose;
34
+ render(): import("lit").TemplateResult<1>;
35
+ }
36
+ declare global {
37
+ interface HTMLElementTagNameMap {
38
+ 'cae-segmented': CaeSegmented;
39
+ }
40
+ }
41
+ //# sourceMappingURL=segmented.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented.d.ts","sourceRoot":"","sources":["../../src/primitives/segmented.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAOrD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAgB,MAAM,0DAcpB;IAE8B,OAAO,EAAE,SAAS,eAAe,EAAE,CAAM;IAC7D,KAAK,SAAM;IACvB,mCAAmC;IACvB,KAAK,SAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAKpB;IAEM,UAAU,IAAI,IAAI;IAK3B,OAAO,CAAC,MAAM;IAML,MAAM;CAchB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,YAAY,CAAC;KAC/B;CACF"}
@@ -0,0 +1,88 @@
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 } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { repeat } from 'lit/directives/repeat.js';
10
+ import { emit } from '../core/events.js';
11
+ import { base } from '../styles/index.js';
12
+ import { RovingFocusController } from './roving-focus.js';
13
+ /**
14
+ * One choice among a few, as a row of buttons (a radio group): a click, or the
15
+ * arrow keys, Home and End, choose. The group is one tab stop.
16
+ *
17
+ * Its look: `--cae-segmented-radius`, `--cae-segmented-height`,
18
+ * `--cae-segmented-padding`, `--cae-segmented-font-size`,
19
+ * `--cae-segmented-divider` (the line between options) and
20
+ * `--cae-segmented-hover` (an option's text under the pointer), or the parts.
21
+ *
22
+ * @tagname cae-segmented
23
+ * @fires cae-change - `{value}`: the option the reader chose
24
+ * @csspart group - the row of options
25
+ * @csspart option - each option
26
+ * @csspart option-selected - the chosen option
27
+ */
28
+ export class CaeSegmented extends LitElement {
29
+ constructor() {
30
+ super(...arguments);
31
+ this.options = [];
32
+ this.value = '';
33
+ /** The group's accessible name. */
34
+ this.label = '';
35
+ this.roving = new RovingFocusController(this, {
36
+ items: () => [...(this.renderRoot.querySelectorAll('button:not(:disabled)') ?? [])],
37
+ layout: 'horizontal',
38
+ wrap: true,
39
+ onMove: (el) => this.choose(el.dataset['value'] ?? ''),
40
+ });
41
+ }
42
+ static { this.styles = [
43
+ base,
44
+ css `
45
+ :host { display: inline-flex; vertical-align: middle; }
46
+ .group { display: inline-flex; border: 1px solid var(--line); border-radius: var(--cae-segmented-radius, 6px); overflow: hidden; }
47
+ button { min-width: 22px; height: var(--cae-segmented-height, 20px); line-height: var(--cae-segmented-height, 20px); padding: var(--cae-segmented-padding, 0 10px);
48
+ margin: 0; border: 0; border-radius: 0; background: none; font-size: var(--cae-segmented-font-size, 11.5px); text-align: center;
49
+ color: var(--text-muted); cursor: pointer; }
50
+ button + button { border-left: var(--cae-segmented-divider, 1px solid var(--line)); }
51
+ button:hover { color: var(--cae-segmented-hover, var(--text)); }
52
+ button[aria-checked='true'] { background: var(--raise); color: var(--text); cursor: default; }
53
+ button:disabled { opacity: 0.5; cursor: default; }
54
+ button:focus-visible { outline-offset: -2px; }
55
+ `,
56
+ ]; }
57
+ willUpdate() {
58
+ const i = this.options.filter((o) => !o.disabled).findIndex((o) => o.value === this.value);
59
+ if (i >= 0)
60
+ this.roving.current = i;
61
+ }
62
+ choose(value) {
63
+ if (value === this.value)
64
+ return;
65
+ this.value = value;
66
+ emit(this, 'cae-change', { value });
67
+ }
68
+ render() {
69
+ return html `<div class="group" part="group" role="radiogroup" aria-label=${this.label || nothing}>
70
+ ${repeat(this.options, (o) => o.value, (o) => {
71
+ const on = o.value === this.value;
72
+ return html `<button type="button" role="radio" part=${on ? 'option option-selected' : 'option'} aria-checked=${on ? 'true' : 'false'}
73
+ data-value=${o.value} lang=${o.lang || nothing} title=${o.title || nothing} ?disabled=${!!o.disabled}
74
+ @click=${() => this.choose(o.value)}>${o.label}</button>`;
75
+ })}
76
+ </div>`;
77
+ }
78
+ }
79
+ __decorate([
80
+ property({ attribute: false })
81
+ ], CaeSegmented.prototype, "options", void 0);
82
+ __decorate([
83
+ property()
84
+ ], CaeSegmented.prototype, "value", void 0);
85
+ __decorate([
86
+ property()
87
+ ], CaeSegmented.prototype, "label", void 0);
88
+ //# sourceMappingURL=segmented.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segmented.js","sourceRoot":"","sources":["../../src/primitives/segmented.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAW1D;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,YAAa,SAAQ,UAAU;IAA5C;;QAiBkC,YAAO,GAA+B,EAAE,CAAC;QAC7D,UAAK,GAAG,EAAE,CAAC;QACvB,mCAAmC;QACvB,UAAK,GAAG,EAAE,CAAC;QAEN,WAAM,GAAG,IAAI,qBAAqB,CAAC,IAAI,EAAE;YACxD,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC,IAAI,EAAE,CAAC,CAAC;YACtG,MAAM,EAAE,YAAY;YACpB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACvD,CAAC,CAAC;IA2BL,CAAC;aArDiB,WAAM,GAAG;QACvB,IAAI;QACJ,GAAG,CAAA;;;;;;;;;;;KAWF;KACF,AAdqB,CAcpB;IAcO,UAAU;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3F,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IACtC,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACtC,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA,gEAAgE,IAAI,CAAC,KAAK,IAAI,OAAO;QAC5F,MAAM,CACN,IAAI,CAAC,OAAO,EACZ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EACd,CAAC,CAAC,EAAE,EAAE;YACJ,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC;YAClC,OAAO,IAAI,CAAA,2CAA2C,EAAE,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,iBAAiB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;yBACrH,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,OAAO,UAAU,CAAC,CAAC,KAAK,IAAI,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ;qBAC3F,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,WAAW,CAAC;QAC9D,CAAC,CACF;WACI,CAAC;IACV,CAAC;;AApC+B;IAA/B,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;6CAA0C;AAC7D;IAAX,QAAQ,EAAE;2CAAY;AAEX;IAAX,QAAQ,EAAE;2CAAY"}
@@ -0,0 +1,37 @@
1
+ import { type TemplateResult } from 'lit';
2
+ export interface SharePart {
3
+ /** What tells the part apart (a stable key). */
4
+ id: string;
5
+ /** The part's name, the same as in the legend beside the bar. */
6
+ label: string;
7
+ /** Its amount; a part of 0 draws nothing. */
8
+ value: number;
9
+ /** Its colour: a CSS colour or `var(...)`, the same as its swatch in the legend. */
10
+ color: string;
11
+ /** The amount in words, for the tooltip (`$0.12`, `1.2k`). */
12
+ text?: string;
13
+ }
14
+ export interface ShareBarOptions {
15
+ /** The bar's accessible name. */
16
+ label?: string;
17
+ /** The smallest share (0..1) whose part is named under the bar; default 0.15. */
18
+ labelAt?: number;
19
+ }
20
+ /**
21
+ * Whole percents (0..100) for `values`, summing to exactly 100 when any is above 0
22
+ * (the largest remainders round up); all 0 when none is.
23
+ */
24
+ export declare function wholePercents(values: readonly number[]): number[];
25
+ /** A share in words: `42%`, `<1%` for a part above 0 that rounds to 0. */
26
+ export declare const sharePercent: (pct: number, value: number) => string;
27
+ /**
28
+ * The parts of a whole as one bar (`.share`, part `share`): each part a segment as
29
+ * wide as its share, 2px apart, in the order given (so a part keeps its place when
30
+ * the amounts change), with its name and share under it when it is wide enough.
31
+ * Hovering or focusing a segment shows its name, share and amount; each segment is
32
+ * a tab stop with the same words. Name every part beside the bar too (a legend or a
33
+ * table): a colour alone never says which part is which.
34
+ */
35
+ export declare function shareBar(parts: readonly SharePart[], o?: ShareBarOptions): TemplateResult;
36
+ export declare const shareBarStyles: import("lit").CSSResult;
37
+ //# sourceMappingURL=share-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-bar.d.ts","sourceRoot":"","sources":["../../src/primitives/share-bar.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAG9D,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAQjE;AAED,0EAA0E;AAC1E,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,MAAsD,CAAC;AAEjH;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,CAAC,GAAE,eAAoB,GAAG,cAAc,CAsB7F;AAED,eAAO,MAAM,cAAc,yBAoB1B,CAAC"}
@@ -0,0 +1,69 @@
1
+ // A share bar: one whole, as a single 100% bar of its parts, side by side.
2
+ import { css, html, nothing } from 'lit';
3
+ import { styleMap } from 'lit/directives/style-map.js';
4
+ /**
5
+ * Whole percents (0..100) for `values`, summing to exactly 100 when any is above 0
6
+ * (the largest remainders round up); all 0 when none is.
7
+ */
8
+ export function wholePercents(values) {
9
+ const total = values.reduce((a, v) => a + Math.max(v, 0), 0);
10
+ if (!total)
11
+ return values.map(() => 0);
12
+ const exact = values.map((v) => (100 * Math.max(v, 0)) / total);
13
+ const out = exact.map(Math.floor);
14
+ const order = exact.map((x, i) => [x - Math.floor(x), i]).sort((a, b) => b[0] - a[0] || a[1] - b[1]);
15
+ for (let k = 0, left = 100 - out.reduce((a, v) => a + v, 0); k < left; k++)
16
+ out[order[k][1]] += 1;
17
+ return out;
18
+ }
19
+ /** A share in words: `42%`, `<1%` for a part above 0 that rounds to 0. */
20
+ export const sharePercent = (pct, value) => (pct === 0 && value > 0 ? '<1%' : `${pct}%`);
21
+ /**
22
+ * The parts of a whole as one bar (`.share`, part `share`): each part a segment as
23
+ * wide as its share, 2px apart, in the order given (so a part keeps its place when
24
+ * the amounts change), with its name and share under it when it is wide enough.
25
+ * Hovering or focusing a segment shows its name, share and amount; each segment is
26
+ * a tab stop with the same words. Name every part beside the bar too (a legend or a
27
+ * table): a colour alone never says which part is which.
28
+ */
29
+ export function shareBar(parts, o = {}) {
30
+ const shown = parts.filter((p) => p.value > 0);
31
+ const pcts = wholePercents(shown.map((p) => p.value));
32
+ const total = shown.reduce((a, p) => a + p.value, 0);
33
+ const labelAt = o.labelAt ?? 0.15;
34
+ const words = (p, i) => [p.label, sharePercent(pcts[i], p.value), p.text].filter(Boolean).join(' | ');
35
+ return html `<div class="share" part="share">
36
+ <div class="share-bar" role="list" aria-label=${o.label || nothing}>
37
+ ${shown.map((p, i) => html `<span class="share-seg" role="listitem" tabindex="0" aria-label=${words(p, i)} data-id=${p.id}
38
+ data-edge=${i === 0 ? 'start' : i === shown.length - 1 ? 'end' : nothing}
39
+ style=${styleMap({ flexGrow: String(p.value / total), background: p.color })}
40
+ ><span class="share-tip" aria-hidden="true">${words(p, i)}</span></span>`)}
41
+ </div>
42
+ <div class="share-names" aria-hidden="true">
43
+ ${shown.map((p, i) => html `<span style=${styleMap({ flexGrow: String(p.value / total) })}
44
+ >${p.value / total >= labelAt ? html `<b>${p.label}</b> ${sharePercent(pcts[i], p.value)}` : nothing}</span>`)}
45
+ </div>
46
+ </div>`;
47
+ }
48
+ export const shareBarStyles = css `
49
+ .share { display: grid; gap: 6px; }
50
+ .share-bar, .share-names { display: flex; gap: 2px; min-width: 0; }
51
+ .share-bar { height: 14px; }
52
+ .share-seg { position: relative; flex: 0 1 0; min-width: 3px; height: 100%; border-radius: 1px; cursor: default; outline-offset: 2px; }
53
+ .share-seg[data-edge='start'] { border-radius: 4px 1px 1px 4px; }
54
+ .share-seg[data-edge='end'] { border-radius: 1px 4px 4px 1px; }
55
+ .share-seg:only-child { border-radius: 4px; }
56
+ /* A hit area taller than the bar. */
57
+ .share-seg::before { content: ''; position: absolute; inset: -6px 0; }
58
+ .share-seg:hover, .share-seg:focus-visible { box-shadow: 0 0 0 2px var(--card); }
59
+ .share-tip { display: none; position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); z-index: 2;
60
+ padding: 4px 8px; border-radius: var(--radius-sm); background: var(--raise); border: 1px solid var(--line2); box-shadow: 0 4px 14px var(--shadow);
61
+ color: var(--text); font-size: var(--font-size-sm); white-space: nowrap; pointer-events: none; }
62
+ .share-seg[data-edge='start'] .share-tip, .share-seg:only-child .share-tip { left: 0; transform: none; }
63
+ .share-seg[data-edge='end'] .share-tip { left: auto; right: 0; transform: none; }
64
+ .share-seg:hover .share-tip, .share-seg:focus-visible .share-tip { display: block; }
65
+ .share-names span { flex: 0 1 0; min-width: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
66
+ font-size: var(--font-size-sm); color: var(--text-muted); font-variant-numeric: tabular-nums; }
67
+ .share-names b { font-weight: 600; color: var(--text-2); }
68
+ `;
69
+ //# sourceMappingURL=share-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share-bar.js","sourceRoot":"","sources":["../../src/primitives/share-bar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Tone } from '../core/tone.js';
2
+ import type { MarkShape } from './legend.js';
3
+ export interface StateStyle {
4
+ /** The word beside a mark and in the legend. */
5
+ label: string;
6
+ tone: Tone;
7
+ shape: MarkShape;
8
+ /** Higher is more severe: what a mark standing for several items shows. */
9
+ rank: number;
10
+ /** How many items are in this state, number first ("3 failed"); default: the number and `label`. */
11
+ count?: (n: number) => string;
12
+ }
13
+ /** State id → look. The key order is the legend order. */
14
+ export type StateStyles = Readonly<Record<string, StateStyle>>;
15
+ /** The most severe of `states` by `styles` (an unknown state ranks lowest); '' for none. */
16
+ export declare function worstState(states: Iterable<string>, styles: StateStyles): string;
17
+ /** How many items are in state `s`, in words. */
18
+ export declare const stateCount: (styles: StateStyles, s: string, n: number) => string;
19
+ //# sourceMappingURL=states.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../src/primitives/states.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,oGAAoG;IACpG,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/B;AAED,0DAA0D;AAC1D,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAE/D,4FAA4F;AAC5F,wBAAgB,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAIhF;AAED,iDAAiD;AACjD,eAAO,MAAM,UAAU,GAAI,QAAQ,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAAkE,CAAC"}
@@ -0,0 +1,11 @@
1
+ /** The most severe of `states` by `styles` (an unknown state ranks lowest); '' for none. */
2
+ export function worstState(states, styles) {
3
+ let worst = '';
4
+ for (const s of states)
5
+ if (worst === '' || (styles[s]?.rank ?? -Infinity) > (styles[worst]?.rank ?? -Infinity))
6
+ worst = s;
7
+ return worst;
8
+ }
9
+ /** How many items are in state `s`, in words. */
10
+ export const stateCount = (styles, s, n) => styles[s]?.count?.(n) ?? `${n} ${styles[s]?.label ?? s}`;
11
+ //# sourceMappingURL=states.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"states.js","sourceRoot":"","sources":["../../src/primitives/states.ts"],"names":[],"mappings":"AAmBA,4FAA4F;AAC5F,MAAM,UAAU,UAAU,CAAC,MAAwB,EAAE,MAAmB;IACtE,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;IAC3H,OAAO,KAAK,CAAC;AACf,CAAC;AAED,iDAAiD;AACjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface RowWindow {
2
+ /** The first row drawn. */
3
+ from: number;
4
+ /** The row after the last drawn. */
5
+ to: number;
6
+ /** The height that stands for the rows above `from`. */
7
+ padTop: number;
8
+ /** The height that stands for the rows from `to` on. */
9
+ padBottom: number;
10
+ }
11
+ /**
12
+ * The rows of `total` rows of `rowHeight` px that a viewport of `viewport` px,
13
+ * scrolled to `scrollTop`, shows, with `overscan` more rows on each side.
14
+ */
15
+ export declare function windowRows(total: number, scrollTop: number, viewport: number, rowHeight: number, overscan?: number): RowWindow;
16
+ /**
17
+ * The rows a viewport of `viewport` px, scrolled to `scrollTop`, shows, when rows
18
+ * differ in height: `offsets[i]` is where row `i` starts and `offsets[total]` is
19
+ * the height of all of them (`rowOffsets`), with `overscan` more rows on each side.
20
+ */
21
+ export declare function windowRowsAt(offsets: readonly number[], scrollTop: number, viewport: number, overscan?: number): RowWindow;
22
+ /** Where each of `total` rows starts, and the height of all of them last: `height(i)` is row `i`'s. */
23
+ export declare function rowOffsets(total: number, height: (i: number) => number): number[];
24
+ //# sourceMappingURL=window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"window.d.ts","sourceRoot":"","sources":["../../src/primitives/window.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,SAAS,CAQzH;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,SAAS,CAUrH;AAED,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,CAKjF"}