@k2b/ui 0.49.0 → 0.51.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 (461) hide show
  1. package/dist/base.css +70 -1
  2. package/dist/browser/actions/Button.js.map +1 -1
  3. package/dist/browser/actions/CommandList.js +861 -0
  4. package/dist/browser/actions/CommandList.js.map +1 -0
  5. package/dist/browser/actions/CommandMenu.js +237 -0
  6. package/dist/browser/actions/CommandMenu.js.map +1 -0
  7. package/dist/browser/actions/ContextMenu.js +3 -0
  8. package/dist/browser/actions/ContextMenu.js.map +1 -1
  9. package/dist/browser/actions/Dropdown.js +43 -10
  10. package/dist/browser/actions/Dropdown.js.map +1 -1
  11. package/dist/browser/actions/command-dock.js +47 -0
  12. package/dist/browser/actions/command-dock.js.map +1 -0
  13. package/dist/browser/actions/command-items.js +84 -0
  14. package/dist/browser/actions/command-items.js.map +1 -0
  15. package/dist/browser/actions/command-messages.js +42 -0
  16. package/dist/browser/actions/command-messages.js.map +1 -0
  17. package/dist/browser/actions/index.js +1 -0
  18. package/dist/browser/actions/index.js.map +1 -1
  19. package/dist/browser/charts/core/area.js +188 -0
  20. package/dist/browser/charts/core/area.js.map +1 -0
  21. package/dist/browser/charts/core/calendar.js +186 -0
  22. package/dist/browser/charts/core/calendar.js.map +1 -0
  23. package/dist/browser/charts/core/chart-map-data.js +9 -0
  24. package/dist/browser/charts/core/chart-map-data.js.map +1 -0
  25. package/dist/browser/charts/core/chart-messages.js +17 -0
  26. package/dist/browser/charts/core/chart-messages.js.map +1 -0
  27. package/dist/browser/charts/core/hbar-layout.js +118 -0
  28. package/dist/browser/charts/core/hbar-layout.js.map +1 -0
  29. package/dist/browser/charts/core/hbar.js +39 -0
  30. package/dist/browser/charts/core/hbar.js.map +1 -0
  31. package/dist/browser/charts/core/index.js +17 -0
  32. package/dist/browser/charts/core/index.js.map +1 -0
  33. package/dist/browser/charts/core/inspection.js +9 -0
  34. package/dist/browser/charts/core/inspection.js.map +1 -0
  35. package/dist/browser/charts/core/map.js +116 -0
  36. package/dist/browser/charts/core/map.js.map +1 -0
  37. package/dist/browser/charts/core/registry.js +35 -0
  38. package/dist/browser/charts/core/registry.js.map +1 -0
  39. package/dist/browser/charts/core/render-size.js +13 -0
  40. package/dist/browser/charts/core/render-size.js.map +1 -0
  41. package/dist/browser/charts/core/render.js +113 -0
  42. package/dist/browser/charts/core/render.js.map +1 -0
  43. package/dist/browser/charts/core/snapshot.js +65 -0
  44. package/dist/browser/charts/core/snapshot.js.map +1 -0
  45. package/dist/browser/charts/core/svg-renderers.js +2406 -0
  46. package/dist/browser/charts/core/svg-renderers.js.map +1 -0
  47. package/dist/browser/charts/core/svg.js +21 -0
  48. package/dist/browser/charts/core/svg.js.map +1 -0
  49. package/dist/browser/charts/core/termination.test-fixture.js +162 -0
  50. package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
  51. package/dist/browser/charts/core/text.js +13 -0
  52. package/dist/browser/charts/core/text.js.map +1 -0
  53. package/dist/browser/charts/core/types.js +6 -0
  54. package/dist/browser/charts/core/types.js.map +1 -0
  55. package/dist/browser/charts/core/waterfall.js +162 -0
  56. package/dist/browser/charts/core/waterfall.js.map +1 -0
  57. package/dist/browser/charts/description.js +2 -0
  58. package/dist/browser/charts/description.js.map +1 -0
  59. package/dist/browser/charts.js +4 -2
  60. package/dist/browser/charts.js.map +1 -1
  61. package/dist/browser/content/BalanceSummary.js +106 -0
  62. package/dist/browser/content/BalanceSummary.js.map +1 -0
  63. package/dist/browser/content/Chart.js +21 -616
  64. package/dist/browser/content/Chart.js.map +1 -1
  65. package/dist/browser/content/ChartExplorer.js +366 -122
  66. package/dist/browser/content/ChartExplorer.js.map +1 -1
  67. package/dist/browser/content/ChartRoot.js +632 -0
  68. package/dist/browser/content/ChartRoot.js.map +1 -0
  69. package/dist/browser/content/ChartSnapshotView.js +16 -9
  70. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  71. package/dist/browser/content/ChartSparkline.js +24 -0
  72. package/dist/browser/content/ChartSparkline.js.map +1 -0
  73. package/dist/browser/content/DataTable.js +676 -293
  74. package/dist/browser/content/DataTable.js.map +1 -1
  75. package/dist/browser/content/DataTableTools.js +119 -0
  76. package/dist/browser/content/DataTableTools.js.map +1 -0
  77. package/dist/browser/content/FileView.js +111 -61
  78. package/dist/browser/content/FileView.js.map +1 -1
  79. package/dist/browser/content/FlowAmount.js +82 -0
  80. package/dist/browser/content/FlowAmount.js.map +1 -0
  81. package/dist/browser/content/Lightbox.js +8 -8
  82. package/dist/browser/content/Lightbox.js.map +1 -1
  83. package/dist/browser/content/MapView.js +30 -28
  84. package/dist/browser/content/MapView.js.map +1 -1
  85. package/dist/browser/content/PdfPreview.js +84 -52
  86. package/dist/browser/content/PdfPreview.js.map +1 -1
  87. package/dist/browser/content/PdfViewer.js +588 -0
  88. package/dist/browser/content/PdfViewer.js.map +1 -0
  89. package/dist/browser/content/balance-summary-messages.js +26 -0
  90. package/dist/browser/content/balance-summary-messages.js.map +1 -0
  91. package/dist/browser/content/chart-bar.js +251 -21
  92. package/dist/browser/content/chart-bar.js.map +1 -1
  93. package/dist/browser/content/chart-calendar.js +43 -0
  94. package/dist/browser/content/chart-calendar.js.map +1 -0
  95. package/dist/browser/content/chart-inspection-core.js +178 -50
  96. package/dist/browser/content/chart-inspection-core.js.map +1 -1
  97. package/dist/browser/content/chart-inspection.js.map +1 -1
  98. package/dist/browser/content/chart-line-gaps.js +2 -2
  99. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  100. package/dist/browser/content/chart-map-viewport.js.map +1 -1
  101. package/dist/browser/content/chart-message-catalog.js +174 -0
  102. package/dist/browser/content/chart-message-catalog.js.map +1 -0
  103. package/dist/browser/content/chart-messages.js +2 -138
  104. package/dist/browser/content/chart-messages.js.map +1 -1
  105. package/dist/browser/content/chart-snapshot.js +1 -62
  106. package/dist/browser/content/chart-snapshot.js.map +1 -1
  107. package/dist/browser/content/chart-state-timeline.js +1 -1
  108. package/dist/browser/content/chart-state-timeline.js.map +1 -1
  109. package/dist/browser/content/chart-svg.js +4 -2
  110. package/dist/browser/content/chart-svg.js.map +1 -1
  111. package/dist/browser/content/chart-time-axis.js +139 -0
  112. package/dist/browser/content/chart-time-axis.js.map +1 -0
  113. package/dist/browser/content/data-table-columns.js +160 -0
  114. package/dist/browser/content/data-table-columns.js.map +1 -0
  115. package/dist/browser/content/data-table-messages.js +38 -2
  116. package/dist/browser/content/data-table-messages.js.map +1 -1
  117. package/dist/browser/content/flow-amount-messages.js +26 -0
  118. package/dist/browser/content/flow-amount-messages.js.map +1 -0
  119. package/dist/browser/content/index.js +5 -0
  120. package/dist/browser/content/index.js.map +1 -1
  121. package/dist/browser/content/pdf-document.js +29 -0
  122. package/dist/browser/content/pdf-document.js.map +1 -0
  123. package/dist/browser/content/pdf-limits.js +31 -0
  124. package/dist/browser/content/pdf-limits.js.map +1 -0
  125. package/dist/browser/content/pdf-messages.js +34 -2
  126. package/dist/browser/content/pdf-messages.js.map +1 -1
  127. package/dist/browser/content/pdf-viewer-engine.js +57 -0
  128. package/dist/browser/content/pdf-viewer-worker.js +28 -0
  129. package/dist/browser/inputs/ChoiceInputs.js +94 -51
  130. package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
  131. package/dist/browser/inputs/ChoiceSlider.js +75 -58
  132. package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
  133. package/dist/browser/inputs/DatePicker.js +118 -102
  134. package/dist/browser/inputs/DatePicker.js.map +1 -1
  135. package/dist/browser/inputs/PeriodPicker.js +874 -0
  136. package/dist/browser/inputs/PeriodPicker.js.map +1 -0
  137. package/dist/browser/inputs/SelectChip.js +50 -17
  138. package/dist/browser/inputs/SelectChip.js.map +1 -1
  139. package/dist/browser/inputs/date-picker.js +13 -0
  140. package/dist/browser/inputs/date-picker.js.map +1 -1
  141. package/dist/browser/inputs/index.js +4 -1
  142. package/dist/browser/inputs/index.js.map +1 -1
  143. package/dist/browser/inputs/input-messages.js +8 -2
  144. package/dist/browser/inputs/input-messages.js.map +1 -1
  145. package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
  146. package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
  147. package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
  148. package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
  149. package/dist/browser/inputs/period-picker-messages.js +71 -0
  150. package/dist/browser/inputs/period-picker-messages.js.map +1 -0
  151. package/dist/browser/inputs/period.js +263 -0
  152. package/dist/browser/inputs/period.js.map +1 -0
  153. package/dist/browser/intl/Format.js +31 -8
  154. package/dist/browser/intl/Format.js.map +1 -1
  155. package/dist/browser/layout/AppWorkspace.js +7 -1
  156. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  157. package/dist/browser/layout/DetailPanel.js +147 -120
  158. package/dist/browser/layout/DetailPanel.js.map +1 -1
  159. package/dist/browser/layout/Discussion.js +101 -108
  160. package/dist/browser/layout/Discussion.js.map +1 -1
  161. package/dist/browser/layout/index.js.map +1 -1
  162. package/dist/browser/surfaces/BudgetList.js +281 -0
  163. package/dist/browser/surfaces/BudgetList.js.map +1 -0
  164. package/dist/browser/surfaces/DescriptionList.js +5 -2
  165. package/dist/browser/surfaces/DescriptionList.js.map +1 -1
  166. package/dist/browser/surfaces/ProgressBar.js +134 -21
  167. package/dist/browser/surfaces/ProgressBar.js.map +1 -1
  168. package/dist/browser/surfaces/StatCell.js +327 -146
  169. package/dist/browser/surfaces/StatCell.js.map +1 -1
  170. package/dist/browser/surfaces/StatGrid.js +75 -57
  171. package/dist/browser/surfaces/StatGrid.js.map +1 -1
  172. package/dist/browser/surfaces/budget-messages.js +64 -0
  173. package/dist/browser/surfaces/budget-messages.js.map +1 -0
  174. package/dist/browser/surfaces/delta-badge.js +79 -0
  175. package/dist/browser/surfaces/delta-badge.js.map +1 -0
  176. package/dist/browser/surfaces/index.js +2 -1
  177. package/dist/browser/surfaces/index.js.map +1 -1
  178. package/dist/browser/surfaces/person-color.js +2 -2
  179. package/dist/browser/surfaces/person-color.js.map +1 -1
  180. package/dist/browser/surfaces/stat-cell-messages.js +41 -0
  181. package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
  182. package/dist/browser/widgets/Dashboard.js +137 -0
  183. package/dist/browser/widgets/Dashboard.js.map +1 -0
  184. package/dist/browser/widgets/DashboardFrame.js +310 -0
  185. package/dist/browser/widgets/DashboardFrame.js.map +1 -0
  186. package/dist/browser/widgets/index.js +2 -0
  187. package/dist/browser/widgets/index.js.map +1 -1
  188. package/dist/licenses/pdfjs-dist.txt +177 -0
  189. package/dist/ssr/actions/Button.js.map +1 -1
  190. package/dist/ssr/actions/CommandList.js +638 -0
  191. package/dist/ssr/actions/CommandList.js.map +1 -0
  192. package/dist/ssr/actions/CommandMenu.js +197 -0
  193. package/dist/ssr/actions/CommandMenu.js.map +1 -0
  194. package/dist/ssr/actions/ContextMenu.js +3 -0
  195. package/dist/ssr/actions/ContextMenu.js.map +1 -1
  196. package/dist/ssr/actions/Dropdown.js +43 -10
  197. package/dist/ssr/actions/Dropdown.js.map +1 -1
  198. package/dist/ssr/actions/command-dock.js +47 -0
  199. package/dist/ssr/actions/command-dock.js.map +1 -0
  200. package/dist/ssr/actions/command-items.js +84 -0
  201. package/dist/ssr/actions/command-items.js.map +1 -0
  202. package/dist/ssr/actions/command-messages.js +42 -0
  203. package/dist/ssr/actions/command-messages.js.map +1 -0
  204. package/dist/ssr/actions/index.js +1 -0
  205. package/dist/ssr/actions/index.js.map +1 -1
  206. package/dist/ssr/charts/core/area.js +188 -0
  207. package/dist/ssr/charts/core/area.js.map +1 -0
  208. package/dist/ssr/charts/core/calendar.js +186 -0
  209. package/dist/ssr/charts/core/calendar.js.map +1 -0
  210. package/dist/ssr/charts/core/chart-map-data.js +9 -0
  211. package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
  212. package/dist/ssr/charts/core/chart-messages.js +17 -0
  213. package/dist/ssr/charts/core/chart-messages.js.map +1 -0
  214. package/dist/ssr/charts/core/hbar-layout.js +118 -0
  215. package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
  216. package/dist/ssr/charts/core/hbar.js +39 -0
  217. package/dist/ssr/charts/core/hbar.js.map +1 -0
  218. package/dist/ssr/charts/core/index.js +17 -0
  219. package/dist/ssr/charts/core/index.js.map +1 -0
  220. package/dist/ssr/charts/core/inspection.js +9 -0
  221. package/dist/ssr/charts/core/inspection.js.map +1 -0
  222. package/dist/ssr/charts/core/map.js +116 -0
  223. package/dist/ssr/charts/core/map.js.map +1 -0
  224. package/dist/ssr/charts/core/registry.js +35 -0
  225. package/dist/ssr/charts/core/registry.js.map +1 -0
  226. package/dist/ssr/charts/core/render-size.js +13 -0
  227. package/dist/ssr/charts/core/render-size.js.map +1 -0
  228. package/dist/ssr/charts/core/render.js +113 -0
  229. package/dist/ssr/charts/core/render.js.map +1 -0
  230. package/dist/ssr/charts/core/snapshot.js +65 -0
  231. package/dist/ssr/charts/core/snapshot.js.map +1 -0
  232. package/dist/ssr/charts/core/svg-renderers.js +2406 -0
  233. package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
  234. package/dist/ssr/charts/core/svg.js +21 -0
  235. package/dist/ssr/charts/core/svg.js.map +1 -0
  236. package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
  237. package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
  238. package/dist/ssr/charts/core/text.js +13 -0
  239. package/dist/ssr/charts/core/text.js.map +1 -0
  240. package/dist/ssr/charts/core/types.js +6 -0
  241. package/dist/ssr/charts/core/types.js.map +1 -0
  242. package/dist/ssr/charts/core/waterfall.js +162 -0
  243. package/dist/ssr/charts/core/waterfall.js.map +1 -0
  244. package/dist/ssr/charts/description.js +2 -0
  245. package/dist/ssr/charts/description.js.map +1 -0
  246. package/dist/ssr/charts.js +4 -2
  247. package/dist/ssr/charts.js.map +1 -1
  248. package/dist/ssr/content/BalanceSummary.js +75 -0
  249. package/dist/ssr/content/BalanceSummary.js.map +1 -0
  250. package/dist/ssr/content/Chart.js +21 -483
  251. package/dist/ssr/content/Chart.js.map +1 -1
  252. package/dist/ssr/content/ChartExplorer.js +190 -46
  253. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  254. package/dist/ssr/content/ChartRoot.js +475 -0
  255. package/dist/ssr/content/ChartRoot.js.map +1 -0
  256. package/dist/ssr/content/ChartSnapshotView.js +5 -1
  257. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  258. package/dist/ssr/content/ChartSparkline.js +24 -0
  259. package/dist/ssr/content/ChartSparkline.js.map +1 -0
  260. package/dist/ssr/content/DataTable.js +287 -78
  261. package/dist/ssr/content/DataTable.js.map +1 -1
  262. package/dist/ssr/content/DataTableTools.js +106 -0
  263. package/dist/ssr/content/DataTableTools.js.map +1 -0
  264. package/dist/ssr/content/FileView.js +56 -7
  265. package/dist/ssr/content/FileView.js.map +1 -1
  266. package/dist/ssr/content/FlowAmount.js +58 -0
  267. package/dist/ssr/content/FlowAmount.js.map +1 -0
  268. package/dist/ssr/content/Lightbox.js +8 -8
  269. package/dist/ssr/content/Lightbox.js.map +1 -1
  270. package/dist/ssr/content/MapView.js +9 -9
  271. package/dist/ssr/content/MapView.js.map +1 -1
  272. package/dist/ssr/content/PdfPreview.js +49 -20
  273. package/dist/ssr/content/PdfPreview.js.map +1 -1
  274. package/dist/ssr/content/PdfViewer.js +484 -0
  275. package/dist/ssr/content/PdfViewer.js.map +1 -0
  276. package/dist/ssr/content/balance-summary-messages.js +26 -0
  277. package/dist/ssr/content/balance-summary-messages.js.map +1 -0
  278. package/dist/ssr/content/chart-bar.js +251 -21
  279. package/dist/ssr/content/chart-bar.js.map +1 -1
  280. package/dist/ssr/content/chart-calendar.js +43 -0
  281. package/dist/ssr/content/chart-calendar.js.map +1 -0
  282. package/dist/ssr/content/chart-inspection-core.js +178 -50
  283. package/dist/ssr/content/chart-inspection-core.js.map +1 -1
  284. package/dist/ssr/content/chart-inspection.js.map +1 -1
  285. package/dist/ssr/content/chart-line-gaps.js +2 -2
  286. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  287. package/dist/ssr/content/chart-map-viewport.js.map +1 -1
  288. package/dist/ssr/content/chart-message-catalog.js +174 -0
  289. package/dist/ssr/content/chart-message-catalog.js.map +1 -0
  290. package/dist/ssr/content/chart-messages.js +2 -138
  291. package/dist/ssr/content/chart-messages.js.map +1 -1
  292. package/dist/ssr/content/chart-snapshot.js +1 -62
  293. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  294. package/dist/ssr/content/chart-state-timeline.js +1 -1
  295. package/dist/ssr/content/chart-state-timeline.js.map +1 -1
  296. package/dist/ssr/content/chart-svg.js +4 -2
  297. package/dist/ssr/content/chart-svg.js.map +1 -1
  298. package/dist/ssr/content/chart-time-axis.js +139 -0
  299. package/dist/ssr/content/chart-time-axis.js.map +1 -0
  300. package/dist/ssr/content/data-table-columns.js +160 -0
  301. package/dist/ssr/content/data-table-columns.js.map +1 -0
  302. package/dist/ssr/content/data-table-messages.js +38 -2
  303. package/dist/ssr/content/data-table-messages.js.map +1 -1
  304. package/dist/ssr/content/flow-amount-messages.js +26 -0
  305. package/dist/ssr/content/flow-amount-messages.js.map +1 -0
  306. package/dist/ssr/content/index.js +5 -0
  307. package/dist/ssr/content/index.js.map +1 -1
  308. package/dist/ssr/content/pdf-document.js +29 -0
  309. package/dist/ssr/content/pdf-document.js.map +1 -0
  310. package/dist/ssr/content/pdf-limits.js +31 -0
  311. package/dist/ssr/content/pdf-limits.js.map +1 -0
  312. package/dist/ssr/content/pdf-messages.js +34 -2
  313. package/dist/ssr/content/pdf-messages.js.map +1 -1
  314. package/dist/ssr/inputs/ChoiceInputs.js +49 -12
  315. package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
  316. package/dist/ssr/inputs/ChoiceSlider.js +17 -12
  317. package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
  318. package/dist/ssr/inputs/DatePicker.js +19 -13
  319. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  320. package/dist/ssr/inputs/PeriodPicker.js +598 -0
  321. package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
  322. package/dist/ssr/inputs/SelectChip.js +26 -9
  323. package/dist/ssr/inputs/SelectChip.js.map +1 -1
  324. package/dist/ssr/inputs/date-picker.js +13 -0
  325. package/dist/ssr/inputs/date-picker.js.map +1 -1
  326. package/dist/ssr/inputs/index.js +4 -1
  327. package/dist/ssr/inputs/index.js.map +1 -1
  328. package/dist/ssr/inputs/input-messages.js +8 -2
  329. package/dist/ssr/inputs/input-messages.js.map +1 -1
  330. package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
  331. package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
  332. package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
  333. package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
  334. package/dist/ssr/inputs/period-picker-messages.js +71 -0
  335. package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
  336. package/dist/ssr/inputs/period.js +263 -0
  337. package/dist/ssr/inputs/period.js.map +1 -0
  338. package/dist/ssr/intl/Format.js +22 -2
  339. package/dist/ssr/intl/Format.js.map +1 -1
  340. package/dist/ssr/layout/AppWorkspace.js +7 -1
  341. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  342. package/dist/ssr/layout/DetailPanel.js +27 -4
  343. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  344. package/dist/ssr/layout/Discussion.js +16 -2
  345. package/dist/ssr/layout/Discussion.js.map +1 -1
  346. package/dist/ssr/layout/index.js.map +1 -1
  347. package/dist/ssr/surfaces/BudgetList.js +170 -0
  348. package/dist/ssr/surfaces/BudgetList.js.map +1 -0
  349. package/dist/ssr/surfaces/DescriptionList.js +1 -1
  350. package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
  351. package/dist/ssr/surfaces/ProgressBar.js +96 -5
  352. package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
  353. package/dist/ssr/surfaces/StatCell.js +157 -52
  354. package/dist/ssr/surfaces/StatCell.js.map +1 -1
  355. package/dist/ssr/surfaces/StatGrid.js +24 -35
  356. package/dist/ssr/surfaces/StatGrid.js.map +1 -1
  357. package/dist/ssr/surfaces/budget-messages.js +64 -0
  358. package/dist/ssr/surfaces/budget-messages.js.map +1 -0
  359. package/dist/ssr/surfaces/delta-badge.js +55 -0
  360. package/dist/ssr/surfaces/delta-badge.js.map +1 -0
  361. package/dist/ssr/surfaces/index.js +2 -1
  362. package/dist/ssr/surfaces/index.js.map +1 -1
  363. package/dist/ssr/surfaces/person-color.js +2 -2
  364. package/dist/ssr/surfaces/person-color.js.map +1 -1
  365. package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
  366. package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
  367. package/dist/ssr/widgets/Dashboard.js +84 -0
  368. package/dist/ssr/widgets/Dashboard.js.map +1 -0
  369. package/dist/ssr/widgets/DashboardFrame.js +200 -0
  370. package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
  371. package/dist/ssr/widgets/index.js +2 -0
  372. package/dist/ssr/widgets/index.js.map +1 -1
  373. package/dist/styles.css +1 -1
  374. package/dist/types/actions/Button.d.ts +1 -1
  375. package/dist/types/actions/CommandList.d.ts +120 -0
  376. package/dist/types/actions/CommandMenu.d.ts +39 -0
  377. package/dist/types/actions/Dropdown.d.ts +17 -0
  378. package/dist/types/actions/command-dock.d.ts +8 -0
  379. package/dist/types/actions/command-items.d.ts +134 -0
  380. package/dist/types/actions/command-messages.d.ts +19 -0
  381. package/dist/types/actions/index.d.ts +3 -0
  382. package/dist/types/charts/core/area.d.ts +62 -0
  383. package/dist/types/charts/core/calendar.d.ts +57 -0
  384. package/dist/types/charts/core/chart-map-data.d.ts +3 -0
  385. package/dist/types/charts/core/chart-messages.d.ts +5 -0
  386. package/dist/types/charts/core/hbar-layout.d.ts +74 -0
  387. package/dist/types/charts/core/hbar.d.ts +13 -0
  388. package/dist/types/charts/core/index.d.ts +16 -0
  389. package/dist/types/charts/core/inspection.d.ts +16 -0
  390. package/dist/types/charts/core/map.d.ts +3 -0
  391. package/dist/types/charts/core/registry.d.ts +33 -0
  392. package/dist/types/charts/core/render-size.d.ts +7 -0
  393. package/dist/types/charts/core/render.d.ts +37 -0
  394. package/dist/types/charts/core/snapshot.d.ts +27 -0
  395. package/dist/types/charts/core/svg-renderers.d.ts +722 -0
  396. package/dist/types/charts/core/svg.d.ts +20 -0
  397. package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
  398. package/dist/types/charts/core/text.d.ts +5 -0
  399. package/dist/types/charts/core/types.d.ts +20 -0
  400. package/dist/types/charts/core/waterfall.d.ts +68 -0
  401. package/dist/types/charts/description.d.ts +226 -0
  402. package/dist/types/charts.d.ts +5 -2
  403. package/dist/types/content/BalanceSummary.d.ts +29 -0
  404. package/dist/types/content/Chart.d.ts +19 -117
  405. package/dist/types/content/ChartExplorer.d.ts +43 -2
  406. package/dist/types/content/ChartRoot.d.ts +92 -0
  407. package/dist/types/content/ChartSnapshotView.d.ts +1 -0
  408. package/dist/types/content/ChartSparkline.d.ts +5 -0
  409. package/dist/types/content/DataTable.d.ts +28 -0
  410. package/dist/types/content/DataTableTools.d.ts +44 -0
  411. package/dist/types/content/FlowAmount.d.ts +28 -0
  412. package/dist/types/content/PdfViewer.d.ts +32 -0
  413. package/dist/types/content/balance-summary-messages.d.ts +11 -0
  414. package/dist/types/content/chart-bar.d.ts +95 -2
  415. package/dist/types/content/chart-calendar.d.ts +4 -0
  416. package/dist/types/content/chart-inspection-core.d.ts +21 -16
  417. package/dist/types/content/chart-inspection.d.ts +5 -1
  418. package/dist/types/content/chart-map-viewport.d.ts +1 -1
  419. package/dist/types/content/chart-message-catalog.d.ts +84 -0
  420. package/dist/types/content/chart-messages.d.ts +2 -33
  421. package/dist/types/content/chart-snapshot.d.ts +1 -26
  422. package/dist/types/content/chart-svg.d.ts +1 -1
  423. package/dist/types/content/chart-time-axis.d.ts +26 -0
  424. package/dist/types/content/data-table-columns.d.ts +72 -0
  425. package/dist/types/content/data-table-messages.d.ts +18 -0
  426. package/dist/types/content/flow-amount-messages.d.ts +11 -0
  427. package/dist/types/content/index.d.ts +12 -2
  428. package/dist/types/content/pdf-document.d.ts +5 -0
  429. package/dist/types/content/pdf-engine.d.ts +9 -0
  430. package/dist/types/content/pdf-limits.d.ts +43 -0
  431. package/dist/types/content/pdf-messages.d.ts +16 -0
  432. package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
  433. package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
  434. package/dist/types/inputs/DatePicker.d.ts +22 -0
  435. package/dist/types/inputs/PeriodPicker.d.ts +24 -0
  436. package/dist/types/inputs/SelectChip.d.ts +2 -0
  437. package/dist/types/inputs/date-picker.d.ts +6 -0
  438. package/dist/types/inputs/index.d.ts +8 -2
  439. package/dist/types/inputs/input-messages.d.ts +3 -0
  440. package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
  441. package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
  442. package/dist/types/inputs/period-picker-messages.d.ts +34 -0
  443. package/dist/types/inputs/period.d.ts +134 -0
  444. package/dist/types/intl/Format.d.ts +5 -0
  445. package/dist/types/layout/AppWorkspace.d.ts +5 -0
  446. package/dist/types/layout/DetailPanel.d.ts +12 -0
  447. package/dist/types/layout/index.d.ts +1 -1
  448. package/dist/types/surfaces/BudgetList.d.ts +42 -0
  449. package/dist/types/surfaces/DescriptionList.d.ts +5 -0
  450. package/dist/types/surfaces/ProgressBar.d.ts +38 -2
  451. package/dist/types/surfaces/StatCell.d.ts +40 -2
  452. package/dist/types/surfaces/StatGrid.d.ts +3 -1
  453. package/dist/types/surfaces/budget-messages.d.ts +30 -0
  454. package/dist/types/surfaces/delta-badge.d.ts +10 -0
  455. package/dist/types/surfaces/index.d.ts +4 -3
  456. package/dist/types/surfaces/person-color.d.ts +2 -2
  457. package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
  458. package/dist/types/widgets/Dashboard.d.ts +42 -0
  459. package/dist/types/widgets/DashboardFrame.d.ts +58 -0
  460. package/dist/types/widgets/index.d.ts +2 -0
  461. package/package.json +8 -1
@@ -1,11 +1,8 @@
1
1
  import { positionTooltipSurface } from "../feedback/tooltip-position";
2
- export const sameChartDatum = (a, b) => a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;
3
- const object = value => typeof value === "object" && value !== null;
4
- const pair = value => Array.isArray(value) && value.length === 2 && value.every(n => typeof n === "number" && Number.isFinite(n));
5
- const roles = new Set(["point", "item", "bin", "box", "outlier", "value", "cell", "interval"]);
6
- export function isChartDatum(value) {
7
- return object(value) && Number.isInteger(value.index) && typeof value.index === "number" && value.index >= 0 && (value.seriesIndex === undefined || typeof value.seriesIndex === "number" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0) && typeof value.role === "string" && roles.has(value.role) && pair(value.anchor) && (value.grid === undefined || pair(value.grid)) && (value.label === undefined || typeof value.label === "string") && Array.isArray(value.values) && value.values.every(field => object(field) && typeof field.key === "string" && (typeof field.value === "string" || typeof field.value === "number" && Number.isFinite(field.value)) && (field.formatted === undefined || typeof field.formatted === "string"));
8
- }
2
+ export { isChartDatum, sameChartDatum } from "../charts/core/inspection";
3
+ import { isChartDatum, sameChartDatum } from "../charts/core/inspection";
4
+
5
+ /** Host policy for inspecting an overflowing drawing. */
9
6
 
10
7
  /** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */
11
8
  const describe = (container, id, on) => {
@@ -14,6 +11,14 @@ const describe = (container, id, on) => {
14
11
  if (ids.length) container.setAttribute("aria-describedby", ids.join(" "));else container.removeAttribute("aria-describedby");
15
12
  };
16
13
 
14
+ /** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */
15
+ const rowLayout = container => Boolean(container?.querySelector('svg[data-bar-layout="rows"]'));
16
+ const categoryRoles = {
17
+ bar: "item",
18
+ waterfall: "item",
19
+ histogram: "bin",
20
+ boxplot: "box"
21
+ };
17
22
  /** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
18
23
  export function createChartInspector(options) {
19
24
  const source = Symbol("chart cursor");
@@ -58,7 +63,7 @@ export function createChartInspector(options) {
58
63
  // Read the actual paint before applying inspection styles, including
59
64
  // custom series and threshold colors. Invisible points use their line.
60
65
  const point = item.element.querySelector(".stdlib-chart-inspection-point");
61
- const source = point ? options.container()?.querySelector(options.kind() === "line" ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}` : ".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline") : item.element.querySelector(".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value") ?? item.element.querySelector("rect, path, circle");
66
+ const source = point ? options.container()?.querySelector(options.kind() === "line" ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}` : ".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline") : item.element.querySelector(".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value") ?? item.element.querySelector(":is(rect, path, circle):not(.k2b-chart-category-band)");
62
67
  const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;
63
68
  const color = (point || item.element.hasAttribute("data-chart-reference") ? paint?.stroke : paint?.fill) || `var(--stdlib-chart-c${(item.datum.seriesIndex ?? 0) % 8 + 1})`;
64
69
  return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;
@@ -107,7 +112,23 @@ export function createChartInspector(options) {
107
112
  });
108
113
  };
109
114
  const rawX = entry => entry.datum.values.find(field => field.key === "x")?.value;
110
- const seriesChart = () => options.kind() === "line" || options.kind() === "sparkline";
115
+ const category = entry => options.kind() === "area" ? entry.datum.index : rawX(entry);
116
+ const groupedSeriesChart = () => options.kind() === "line" || options.kind() === "area";
117
+ const seriesChart = () => groupedSeriesChart() || options.kind() === "sparkline";
118
+ const updateLegend = items => {
119
+ const root = options.legend?.() ?? options.container();
120
+ for (const node of root?.querySelectorAll("[data-chart-legend-value]") ?? []) {
121
+ if (!items) {
122
+ node.textContent = node.getAttribute("data-default") ?? "";
123
+ continue;
124
+ }
125
+ const series = node.dataset.seriesIndex;
126
+ const field = items.find(item => item.datum.seriesIndex?.toString() === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
127
+ node.textContent = field ? field.formatted ?? (typeof field.value === "number" ? new Intl.NumberFormat(options.locale?.() ?? "en", {
128
+ maximumFractionDigits: 6
129
+ }).format(field.value) : field.value) : "—";
130
+ }
131
+ };
111
132
  const clearHighlight = () => {
112
133
  for (const entry of highlighted) {
113
134
  entry.element.removeAttribute("data-inspected");
@@ -123,11 +144,17 @@ export function createChartInspector(options) {
123
144
  options.container()?.removeAttribute("data-cursor-source");
124
145
  pinned = false;
125
146
  active = undefined;
147
+ updateLegend(undefined);
126
148
  clearHighlight();
127
149
  const container = options.container(),
128
150
  id = options.tooltip()?.id;
129
151
  if (container && id) describe(container, id, false);
130
152
  options.container()?.removeAttribute("data-inspecting");
153
+ const inspected = options.container();
154
+ if (inspected) {
155
+ for (const name of ["left", "top", "width", "height"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);
156
+ if (!inspected.getAttribute("style")) inspected.removeAttribute("style");
157
+ }
131
158
  const tooltip = options.tooltip();
132
159
  if (tooltip) {
133
160
  try {
@@ -150,21 +177,25 @@ export function createChartInspector(options) {
150
177
  byElement.clear();
151
178
  receive(options.cursor?.()?.read() ?? null);
152
179
  };
153
- const show = (entry, broadcast = true) => {
180
+ const show = (entry, broadcast = true, hover = false) => {
154
181
  const x = rawX(entry);
155
182
  if (broadcast && options.kind() === "line" && typeof x === "number") options.cursor?.()?.move(source, x);
156
183
  const tooltip = options.tooltip(),
157
184
  anchor = options.anchor(),
158
185
  container = options.container();
159
186
  if (!tooltip || !anchor || !container || !options.enabled()) return;
160
- if (active === entry && tooltip.matches(":popover-open")) return;
187
+ if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) {
188
+ for (const item of highlighted) item.element.setAttribute("data-inspected", hover ? "hover" : "true");
189
+ return;
190
+ }
161
191
  clearHighlight();
162
192
  active = entry;
163
- highlighted = options.kind() === "line" ? records().filter(candidate => rawX(candidate) === rawX(entry)) : [entry];
193
+ highlighted = groupedSeriesChart() ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
164
194
  for (const item of highlighted) {
165
195
  item.element.style.setProperty("--k2b-chart-inspection-color", highlightColor(item));
166
- item.element.setAttribute("data-inspected", "true");
196
+ item.element.setAttribute("data-inspected", hover ? "hover" : "true");
167
197
  }
198
+ updateLegend(highlighted);
168
199
  const document = tooltip.ownerDocument;
169
200
  const contents = highlighted.map(item => ({
170
201
  item,
@@ -190,35 +221,32 @@ export function createChartInspector(options) {
190
221
  }
191
222
  contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));
192
223
  }
224
+ if (options.kind() === "area") contents.reverse();
193
225
  tooltip.replaceChildren();
194
226
  const sharedTitle = typeof x === "number" ? options.cursor?.()?.formatX?.(x) : undefined;
195
227
  const commonTitle = sharedTitle ?? (contents.every(({
196
228
  content
197
229
  }) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);
198
- if (commonTitle) {
230
+ const appendTitle = text => {
199
231
  const title = document.createElement("strong");
200
232
  title.className = "k2b-chart__tooltip-title";
201
- title.textContent = commonTitle;
233
+ title.textContent = text;
202
234
  tooltip.append(title);
203
- }
235
+ };
236
+ if (commonTitle) appendTitle(commonTitle);
204
237
  for (const {
205
238
  item,
206
239
  content,
207
240
  missing
208
241
  } of contents) {
209
- if (content.title && !commonTitle) {
210
- const title = document.createElement("strong");
211
- title.className = "k2b-chart__tooltip-title";
212
- title.textContent = content.title;
213
- tooltip.append(title);
214
- }
242
+ if (content.title && !commonTitle) appendTitle(content.title);
215
243
  for (const row of content.rows) {
216
244
  const line = document.createElement("span");
217
245
  line.className = "k2b-chart__tooltip-row";
218
- if (options.kind() === "line") {
246
+ if (groupedSeriesChart()) {
219
247
  const swatch = document.createElement("i");
220
248
  swatch.setAttribute("aria-hidden", "true");
221
- const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`);
249
+ const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`);
222
250
  swatch.style.background = series ? getComputedStyle(series).stroke : `var(--stdlib-chart-c${(item.datum.seriesIndex ?? 0) % 8 + 1})`;
223
251
  line.append(swatch);
224
252
  }
@@ -230,13 +258,38 @@ export function createChartInspector(options) {
230
258
  tooltip.append(line);
231
259
  }
232
260
  }
261
+ if (options.kind() === "area") {
262
+ const total = entry.datum.values.find(field => field.key === "total");
263
+ const totalLabel = container.querySelector("svg[data-chart-total-label]")?.getAttribute("data-chart-total-label");
264
+ if (total && totalLabel) {
265
+ const line = document.createElement("span");
266
+ line.className = "k2b-chart__tooltip-row";
267
+ const label = document.createElement("span");
268
+ label.textContent = `${totalLabel}: `;
269
+ const value = document.createElement("b");
270
+ value.textContent = total.formatted ?? String(total.value);
271
+ line.append(label, value);
272
+ tooltip.append(line);
273
+ }
274
+ }
233
275
  const rect = container.getBoundingClientRect(),
234
276
  point = screenPoint(entry);
235
- anchor.style.left = `${point.x - rect.left}px`;
236
- anchor.style.top = `${point.y - rect.top}px`;
277
+ const slot = categoryBands().find(candidate => candidate.entry === entry);
278
+ // A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.
279
+ const band = slot && !entry.element.querySelector(".k2b-chart-category-band") ? slot : undefined;
280
+ const rows = rowLayout(container);
281
+ // A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.
282
+ anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;
283
+ anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;
237
284
  updatePlotBounds();
238
- container.style.setProperty("--k2b-chart-inspection-x", `${point.x - rect.left}px`);
239
- container.setAttribute("data-inspecting", seriesChart() ? "series" : "datum");
285
+ container.style.setProperty("--k2b-chart-inspection-x", `${point.x - rect.left + container.scrollLeft}px`);
286
+ if (band) {
287
+ container.style.setProperty("--k2b-chart-band-left", `${band.left - rect.left + container.scrollLeft}px`);
288
+ container.style.setProperty("--k2b-chart-band-top", `${band.top - rect.top + container.scrollTop}px`);
289
+ container.style.setProperty("--k2b-chart-band-width", `${band.right - band.left}px`);
290
+ container.style.setProperty("--k2b-chart-band-height", `${band.bottom - band.top}px`);
291
+ }
292
+ container.setAttribute("data-inspecting", seriesChart() ? "series" : band ? "category" : "datum");
240
293
  describe(container, tooltip.id, true);
241
294
  try {
242
295
  if (!tooltip.matches(":popover-open")) tooltip.showPopover();
@@ -245,6 +298,50 @@ export function createChartInspector(options) {
245
298
  /* SVG titles remain available without the Popover API. */
246
299
  }
247
300
  };
301
+ /**
302
+ * The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of
303
+ * dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.
304
+ */
305
+ const categoryBands = () => {
306
+ const role = categoryRoles[options.kind()];
307
+ const container = options.container();
308
+ if (!role || !container) return [];
309
+ const rows = rowLayout(container);
310
+ const slots = records().filter(entry => entry.datum.role === role).map(entry => ({
311
+ entry,
312
+ rect: entry.element.getBoundingClientRect()
313
+ }));
314
+ if (!slots.length) return [];
315
+ const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => node.getBoundingClientRect());
316
+ // The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose
317
+ // only guide is one vertical baseline, still get a band from the baseline to the longest bar.
318
+ const spans = [...guides, ...slots.map(slot => slot.rect)];
319
+ const start = Math.min(...spans.map(rect => rows ? rect.left : rect.top));
320
+ const end = Math.max(...spans.map(rect => rows ? rect.right : rect.bottom));
321
+ const center = rect => rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2;
322
+ slots.sort((a, b) => center(a.rect) - center(b.rect));
323
+ return slots.map((slot, index) => {
324
+ const middle = center(slot.rect);
325
+ const previous = slots[index - 1],
326
+ next = slots[index + 1];
327
+ const half = previous || next ? Math.abs(center((next ?? previous).rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;
328
+ const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;
329
+ const high = next ? (center(next.rect) + middle) / 2 : middle + half;
330
+ return rows ? {
331
+ entry: slot.entry,
332
+ left: start,
333
+ right: end,
334
+ top: low,
335
+ bottom: high
336
+ } : {
337
+ entry: slot.entry,
338
+ left: low,
339
+ right: high,
340
+ top: start,
341
+ bottom: end
342
+ };
343
+ });
344
+ };
248
345
  const updatePlotBounds = () => {
249
346
  const container = options.container();
250
347
  if (!container) return;
@@ -293,6 +390,27 @@ export function createChartInspector(options) {
293
390
  const direct = target?.closest("[data-chart-datum]");
294
391
  const hit = direct ? byElement.get(direct) : undefined;
295
392
  if (hit && nodes.includes(hit)) return hit;
393
+ const bands = categoryBands();
394
+ if (bands.length) {
395
+ // Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.
396
+ const role = categoryRoles[options.kind()];
397
+ let loose,
398
+ gap = 24;
399
+ for (const entry of nodes) {
400
+ if (entry.datum.role === role) continue;
401
+ const point = screenPoint(entry);
402
+ const distance = Math.hypot(point.x - x, point.y - y);
403
+ if (distance <= gap) {
404
+ gap = distance;
405
+ loose = entry;
406
+ }
407
+ }
408
+ if (loose) return loose;
409
+ const rows = rowLayout(options.container());
410
+ const frame = options.container()?.getBoundingClientRect();
411
+ const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;
412
+ return inside ? bands.find(band => rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right)?.entry : undefined;
413
+ }
296
414
  if (seriesChart()) {
297
415
  const plot = updatePlotBounds();
298
416
  // SVG transforms and DOM rectangles can round the same painted edge
@@ -343,7 +461,7 @@ export function createChartInspector(options) {
343
461
  };
344
462
  const move = event => {
345
463
  if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
346
- if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 6) moved = true;
464
+ if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;
347
465
  if (!options.enabled() || pinned || event.pointerType === "touch" || event.buttons) return;
348
466
  pending = {
349
467
  x: event.clientX,
@@ -358,7 +476,7 @@ export function createChartInspector(options) {
358
476
  if (!sample) return;
359
477
  const entry = nearest(sample.x, sample.y, sample.target);
360
478
  if (entry) {
361
- show(entry);
479
+ show(entry, true, true);
362
480
  if (seriesChart()) {
363
481
  const container = options.container();
364
482
  container?.setAttribute("data-cursor-source", "true");
@@ -367,14 +485,20 @@ export function createChartInspector(options) {
367
485
  } else close();
368
486
  });
369
487
  };
488
+ let pointerFocusing = false;
370
489
  const down = event => {
490
+ pointerFocusing = true;
371
491
  pointerStart = {
372
492
  x: event.clientX,
373
493
  y: event.clientY
374
494
  };
375
495
  moved = false;
376
496
  };
497
+ const up = () => {
498
+ pointerFocusing = false;
499
+ };
377
500
  const click = event => {
501
+ pointerFocusing = false;
378
502
  if (!options.enabled() || moved || event.target instanceof Element && event.target.closest("button,a")) return;
379
503
  const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);
380
504
  if (!entry) {
@@ -390,8 +514,12 @@ export function createChartInspector(options) {
390
514
  };
391
515
  const focus = event => {
392
516
  if (event.target !== options.container() || !options.enabled()) return;
517
+ if (pointerFocusing && options.nav?.()?.pointer === false) {
518
+ pointerFocusing = false;
519
+ return;
520
+ }
393
521
  const nodes = visibleRecords();
394
- const first = options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
522
+ const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
395
523
  if (first) show(first);
396
524
  };
397
525
  const key = event => {
@@ -422,10 +550,10 @@ export function createChartInspector(options) {
422
550
  if (!["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return false;
423
551
  let nodes = visibleRecords();
424
552
  if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);
425
- if (options.kind() === "line") {
553
+ if (groupedSeriesChart()) {
426
554
  const seen = new Set();
427
555
  nodes = nodes.filter(entry => {
428
- const x = rawX(entry);
556
+ const x = category(entry);
429
557
  if (seen.has(x)) return false;
430
558
  seen.add(x);
431
559
  return true;
@@ -434,7 +562,7 @@ export function createChartInspector(options) {
434
562
  if (!nodes.length) return false;
435
563
  event.preventDefault();
436
564
  pinned = false;
437
- let index = active ? options.kind() === "line" ? nodes.findIndex(entry => rawX(entry) === rawX(active)) : nodes.indexOf(active) : -1;
565
+ let index = active ? groupedSeriesChart() ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
438
566
  if (event.key === "Home") index = 0;else if (event.key === "End") index = nodes.length - 1;else if (active?.datum.grid && ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)) {
439
567
  const [x, y] = active.datum.grid;
440
568
  const dx = event.key === "ArrowLeft" ? -1 : event.key === "ArrowRight" ? 1 : 0;
@@ -442,7 +570,9 @@ export function createChartInspector(options) {
442
570
  const next = nodes.filter(entry => entry.datum.grid && (dx ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0 : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0)).sort((a, b) => Math.abs(a.datum.grid[0] - x) + Math.abs(a.datum.grid[1] - y) - Math.abs(b.datum.grid[0] - x) - Math.abs(b.datum.grid[1] - y))[0];
443
571
  if (next) index = nodes.indexOf(next);
444
572
  } else index += event.key === "ArrowLeft" || event.key === "ArrowUp" ? -1 : 1;
445
- show(nodes[Math.max(0, Math.min(nodes.length - 1, index))]);
573
+ const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))];
574
+ options.nav?.()?.reveal?.(next.element);
575
+ show(next);
446
576
  return true;
447
577
  };
448
578
  return {
@@ -452,6 +582,7 @@ export function createChartInspector(options) {
452
582
  destroy: () => close(false),
453
583
  move,
454
584
  down,
585
+ up,
455
586
  click,
456
587
  focus,
457
588
  key,
@@ -469,6 +600,7 @@ export function closeChartInspectionOnOutside(options) {
469
600
  if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();
470
601
  };
471
602
  const scroll = event => {
603
+ if (event.target === options.container() && options.keepScroll?.()) return;
472
604
  if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
473
605
  options.close();
474
606
  };
@@ -502,25 +634,27 @@ export function inspectChart(container, options) {
502
634
  if (addedTabindex) container.setAttribute("tabindex", "0");
503
635
  const inspector = createChartInspector({
504
636
  container: () => container,
637
+ locale: () => options.locale ?? "en",
638
+ legend: () => options.legend,
505
639
  cursor: () => options.cursor,
506
640
  tooltip: () => tooltip,
507
641
  anchor: () => anchor,
508
642
  kind: () => options.kind,
643
+ nav: () => options.nav,
509
644
  enabled: () => true,
510
645
  format: options.format,
511
646
  select: selection => options.select?.(selection)
512
647
  });
513
- container.addEventListener("pointerdown", inspector.down);
514
- container.addEventListener("pointermove", inspector.move);
515
- container.addEventListener("click", inspector.click);
516
- container.addEventListener("pointerleave", inspector.leave);
517
- container.addEventListener("focusin", inspector.focus);
518
- container.addEventListener("focusout", inspector.close);
519
- container.addEventListener("keydown", inspector.key);
648
+ const listen = (name, listener) => {
649
+ container.addEventListener(name, listener);
650
+ return () => container.removeEventListener(name, listener);
651
+ };
652
+ const removeListeners = [listen("pointerdown", inspector.down), listen("pointerup", inspector.up), listen("pointercancel", inspector.up), listen("pointermove", inspector.move), listen("click", inspector.click), listen("pointerleave", inspector.leave), listen("focusin", inspector.focus), listen("focusout", inspector.close), listen("keydown", inspector.key)];
520
653
  const removeOutside = closeChartInspectionOnOutside({
521
654
  container: () => container,
522
655
  tooltip: () => tooltip,
523
- close: inspector.close
656
+ close: inspector.close,
657
+ keepScroll: () => options.nav?.keepScroll
524
658
  });
525
659
  const unlinkCursor = inspector.linkCursor(options.cursor);
526
660
  let destroyed = false;
@@ -534,13 +668,7 @@ export function inspectChart(container, options) {
534
668
  destroy() {
535
669
  if (destroyed) return;
536
670
  destroyed = true;
537
- container.removeEventListener("pointerdown", inspector.down);
538
- container.removeEventListener("pointermove", inspector.move);
539
- container.removeEventListener("click", inspector.click);
540
- container.removeEventListener("pointerleave", inspector.leave);
541
- container.removeEventListener("focusin", inspector.focus);
542
- container.removeEventListener("focusout", inspector.close);
543
- container.removeEventListener("keydown", inspector.key);
671
+ for (const remove of removeListeners) remove();
544
672
  removeOutside();
545
673
  unlinkCursor();
546
674
  inspector.destroy();